Add ContinuationAdapter to coroutine tests helpers
It allows having the same Continuation implementations for different API versions
This commit is contained in:
@@ -28,7 +28,7 @@ fun <T> asyncGenerate(block: suspend AsyncGenerator<T>.() -> Unit): AsyncSequenc
|
||||
}
|
||||
}
|
||||
|
||||
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, Continuation<Unit> {
|
||||
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, ContinuationAdapter<Unit>() {
|
||||
var computedNext = false
|
||||
var nextValue: T? = null
|
||||
var nextStep: Continuation<Unit>? = null
|
||||
|
||||
@@ -28,7 +28,7 @@ fun <T> asyncGenerate(block: suspend AsyncGenerator<T>.() -> Unit): AsyncSequenc
|
||||
}
|
||||
}
|
||||
|
||||
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, Continuation<Unit> {
|
||||
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, ContinuationAdapter<Unit>() {
|
||||
var computedNext = false
|
||||
var nextValue: T? = null
|
||||
var nextStep: Continuation<Unit>? = null
|
||||
|
||||
@@ -28,7 +28,7 @@ fun <T> asyncGenerate(block: suspend AsyncGenerator<T>.() -> Unit): AsyncSequenc
|
||||
}
|
||||
}
|
||||
|
||||
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, Continuation<Unit> {
|
||||
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, ContinuationAdapter<Unit>() {
|
||||
var computedNext = false
|
||||
var nextValue: T? = null
|
||||
var nextStep: Continuation<Unit>? = null
|
||||
|
||||
@@ -12,7 +12,7 @@ suspend fun suspendHere(): Any = suspendCoroutineOrReturn { x -> }
|
||||
fun builder(c: suspend () -> Unit) {
|
||||
var exception: Throwable? = null
|
||||
|
||||
c.createCoroutine(object : Continuation<Unit> {
|
||||
c.createCoroutine(object : ContinuationAdapter<Unit>() {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resume(data: Unit) {
|
||||
|
||||
@@ -27,7 +27,7 @@ class Controller {
|
||||
|
||||
fun builder(c: suspend Controller.() -> Unit): String {
|
||||
val controller = Controller()
|
||||
c.startCoroutine(controller, object : Continuation<Unit> {
|
||||
c.startCoroutine(controller, object : ContinuationAdapter<Unit>() {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resume(data: Unit) {
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ class Controller {
|
||||
|
||||
fun builder(c: suspend Controller.() -> Unit): String {
|
||||
val controller = Controller()
|
||||
c.startCoroutine(controller, object : Continuation<Unit> {
|
||||
c.startCoroutine(controller, object : ContinuationAdapter<Unit>() {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resume(data: Unit) {}
|
||||
|
||||
+3
-2
@@ -1,6 +1,7 @@
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
// WITH_RUNTIME
|
||||
// WITH_COROUTINES
|
||||
// IGNORE_BACKEND: JS
|
||||
// COMMON_COROUTINES_TEST
|
||||
import COROUTINES_PACKAGE.*
|
||||
@@ -9,7 +10,7 @@ import COROUTINES_PACKAGE.intrinsics.COROUTINE_SUSPENDED
|
||||
fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation<String>) -> Any?): String {
|
||||
var result = "fail"
|
||||
var wasIntercepted = false
|
||||
val c = (x as suspend () -> String).createCoroutine(object: Continuation<String> {
|
||||
val c = (x as suspend () -> String).createCoroutine(object: ContinuationAdapter() {
|
||||
override fun resumeWithException(exception: Throwable) {
|
||||
throw exception
|
||||
}
|
||||
@@ -27,7 +28,7 @@ fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation<String>) -
|
||||
return null
|
||||
}
|
||||
|
||||
override fun <T> interceptContinuation(continuation: Continuation<T>) = object : Continuation<T> {
|
||||
override fun <T> interceptContinuation(continuation: Continuation<T>) = object : helpers.ContinuationAdapter<T>() {
|
||||
override val context: CoroutineContext
|
||||
get() = continuation.context
|
||||
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ fun builder(c: suspend () -> Unit) {
|
||||
|
||||
fun builderConsumer(c: suspend () -> Consumer): Consumer {
|
||||
var res: Consumer? = null
|
||||
c.startCoroutine(object : Continuation<Consumer> {
|
||||
c.startCoroutine(object : ContinuationAdapter<Consumer>() {
|
||||
override fun resume(value: Consumer) {
|
||||
res = value
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ abstract class ContinuationDispatcher : AbstractCoroutineContextElement(Continua
|
||||
private class DispatchedContinuation<T>(
|
||||
val dispatcher: ContinuationDispatcher,
|
||||
val continuation: Continuation<T>
|
||||
): Continuation<T> {
|
||||
): ContinuationAdapter<T>() {
|
||||
override val context: CoroutineContext = continuation.context
|
||||
|
||||
override fun resume(value: T) {
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ class GeneratedSequence<out T>(private val block: suspend Generator<T>.() -> Uni
|
||||
}
|
||||
|
||||
class GeneratedIterator<T>(block: suspend Generator<T>.() -> Unit) : AbstractIterator<T>(), Generator<T> {
|
||||
private var nextStep: Continuation<Unit> = block.createCoroutine(this, object : Continuation<Unit> {
|
||||
private var nextStep: Continuation<Unit> = block.createCoroutine(this, object : ContinuationAdapter<Unit>() {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resume(data: Unit) {
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ suspend fun multipleArgs(a: Any, b: Any, c: Any) =
|
||||
fun builder(c: suspend () -> String): String {
|
||||
var fromSuspension: String? = null
|
||||
|
||||
val continuation = object : Continuation<String> {
|
||||
val continuation = object : ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = EmptyCoroutineContext
|
||||
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ class Controller {
|
||||
fun builder(c: suspend Controller.() -> String): String {
|
||||
var fromSuspension: String? = null
|
||||
|
||||
c.startCoroutine(this, object : Continuation<String> {
|
||||
c.startCoroutine(this, object : ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = EmptyCoroutineContext
|
||||
|
||||
@@ -61,4 +61,4 @@ fun box(): String {
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -27,7 +27,7 @@ class Controller {
|
||||
fun builder(c: suspend Controller.() -> String): String {
|
||||
var fromSuspension: String? = null
|
||||
|
||||
c.startCoroutine(this, object : Continuation<String> {
|
||||
c.startCoroutine(this, object : ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = EmptyCoroutineContext
|
||||
|
||||
@@ -60,4 +60,4 @@ fun box(): String {
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ fun builder(expectedCount: Int, c: suspend () -> String): String {
|
||||
var counter = 0
|
||||
|
||||
val result = try {
|
||||
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
|
||||
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = ContinuationDispatcher { counter++ }
|
||||
|
||||
@@ -60,7 +60,7 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont
|
||||
private class DispatchedContinuation<T>(
|
||||
val dispatcher: () -> Unit,
|
||||
val continuation: Continuation<T>
|
||||
): Continuation<T> {
|
||||
): ContinuationAdapter<T>() {
|
||||
override val context: CoroutineContext = continuation.context
|
||||
|
||||
override fun resume(value: T) {
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ suspend fun suspendWithException(): String = suspendCoroutineOrReturn { x ->
|
||||
fun builder(c: suspend () -> String): String {
|
||||
var fromSuspension: String? = null
|
||||
|
||||
c.startCoroutine(object: Continuation<String> {
|
||||
c.startCoroutine(object: ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = EmptyCoroutineContext
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -22,7 +22,7 @@ fun builder(shouldSuspend: Boolean, c: suspend () -> String): String {
|
||||
var fromSuspension: String? = null
|
||||
|
||||
val result = try {
|
||||
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
|
||||
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = EmptyCoroutineContext
|
||||
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ fun builder(shouldSuspend: Boolean, expectedCount: Int, c: suspend () -> String)
|
||||
var counter = 0
|
||||
|
||||
val result = try {
|
||||
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
|
||||
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = ContinuationDispatcher { counter++ }
|
||||
|
||||
@@ -58,7 +58,7 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont
|
||||
private class DispatchedContinuation<T>(
|
||||
val dispatcher: () -> Unit,
|
||||
val continuation: Continuation<T>
|
||||
): Continuation<T> {
|
||||
): ContinuationAdapter<T>() {
|
||||
override val context: CoroutineContext = continuation.context
|
||||
|
||||
override fun resume(value: T) {
|
||||
|
||||
compiler/testData/codegen/box/coroutines/intrinsicSemantics/suspendCoroutineUninterceptedOrReturn.kt
Vendored
+2
-2
@@ -23,7 +23,7 @@ fun builder(shouldSuspend: Boolean, c: suspend () -> String): String {
|
||||
var counter = 0
|
||||
|
||||
val result = try {
|
||||
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
|
||||
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
|
||||
override val context: CoroutineContext
|
||||
get() = ContinuationDispatcher { counter++ }
|
||||
|
||||
@@ -58,7 +58,7 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont
|
||||
private class DispatchedContinuation<T>(
|
||||
val dispatcher: () -> Unit,
|
||||
val continuation: Continuation<T>
|
||||
): Continuation<T> {
|
||||
): ContinuationAdapter<T>() {
|
||||
override val context: CoroutineContext = continuation.context
|
||||
|
||||
override fun resume(value: T) {
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ suspend fun callLocal() {
|
||||
}
|
||||
|
||||
fun builder(c: suspend () -> Unit) {
|
||||
val continuation = object: Continuation<Unit> {
|
||||
val continuation = object: ContinuationAdapter<Unit>() {
|
||||
override val context: CoroutineContext
|
||||
get() = EmptyCoroutineContext
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ suspend fun sleep(): Unit = suspendCoroutine { c ->
|
||||
}
|
||||
|
||||
fun async(f: suspend () -> Unit) {
|
||||
f.startCoroutine(object : Continuation<Unit> {
|
||||
f.startCoroutine(object : ContinuationAdapter<Unit>() {
|
||||
override fun resume(x: Unit) {
|
||||
proceed = {
|
||||
result += "done;"
|
||||
@@ -63,7 +63,7 @@ fun async(f: suspend () -> Unit) {
|
||||
}
|
||||
|
||||
fun asyncSuspend(f: suspend () -> Unit) {
|
||||
val coroutine = f.createCoroutine(object : Continuation<Unit> {
|
||||
val coroutine = f.createCoroutine(object : ContinuationAdapter<Unit>() {
|
||||
override fun resume(x: Unit) {
|
||||
proceed = {
|
||||
result += "done;"
|
||||
|
||||
@@ -15,7 +15,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x ->
|
||||
fun builder(c: suspend () -> Int): Int {
|
||||
var res = 0
|
||||
|
||||
c.createCoroutine(object : Continuation<Int> {
|
||||
c.createCoroutine(object : ContinuationAdapter<Int>() {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resume(data: Int) {
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ abstract class ContinuationDispatcher : AbstractCoroutineContextElement(Continua
|
||||
private class DispatchedContinuation<T>(
|
||||
val dispatcher: ContinuationDispatcher,
|
||||
val continuation: Continuation<T>
|
||||
): Continuation<T> {
|
||||
): ContinuationAdapter<T>() {
|
||||
override val context: CoroutineContext = continuation.context
|
||||
|
||||
override fun resume(value: T) {
|
||||
|
||||
@@ -40,7 +40,7 @@ suspend fun bar(x: Int): Int = suspendCoroutine { c ->
|
||||
inline suspend fun foo(x: Int) = bar(x)
|
||||
|
||||
fun async(a: suspend () -> Unit) {
|
||||
a.startCoroutine(object : Continuation<Unit> {
|
||||
a.startCoroutine(object : ContinuationAdapter<Unit>() {
|
||||
override fun resume(value: Unit) {
|
||||
proceed = {
|
||||
log("done")
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x ->
|
||||
|
||||
fun builder(c: suspend () -> Unit) {
|
||||
var wasResumeCalled = false
|
||||
c.startCoroutine(object : Continuation<Unit> {
|
||||
c.startCoroutine(object : ContinuationAdapter<Unit>() {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resume(value: Unit) {
|
||||
|
||||
@@ -14,7 +14,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x ->
|
||||
|
||||
fun builder(c: suspend () -> Unit) {
|
||||
var wasResumeCalled = false
|
||||
c.startCoroutine(object : Continuation<Unit> {
|
||||
c.startCoroutine(object : ContinuationAdapter<Unit>() {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resume(value: Unit) {
|
||||
|
||||
Reference in New Issue
Block a user