diff --git a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/coroutinesBinary.kt b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/coroutinesBinary.kt index f6b0c98748f..cf93c009cf7 100644 --- a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/coroutinesBinary.kt +++ b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/coroutinesBinary.kt @@ -18,11 +18,9 @@ class Controller { fun builder(c: suspend Controller.() -> Unit) { val controller = Controller() - c.startCoroutine(controller, object : helpers.ContinuationAdapter() { + c.startCoroutine(controller, object : Continuation { override val context: CoroutineContext = EmptyCoroutineContext - override fun resume(value: Unit) {} - - override fun resumeWithException(exception: Throwable) {} + override fun resumeWith(value: Result) {} }) controller.callback() diff --git a/compiler/testData/codegen/box/coroutines/async.kt b/compiler/testData/codegen/box/coroutines/async.kt index 3d70199dbde..036bc3d4a4b 100644 --- a/compiler/testData/codegen/box/coroutines/async.kt +++ b/compiler/testData/codegen/box/coroutines/async.kt @@ -50,15 +50,15 @@ fun box(): String { fun async(c: suspend () -> T): CompletableFuture { val future = CompletableFuture() - c.startCoroutine(object : helpers.ContinuationAdapter() { + c.startCoroutine(object : Continuation { override val context = EmptyCoroutineContext - override fun resume(data: T) { - future.complete(data) - } - - override fun resumeWithException(exception: Throwable) { - future.completeExceptionally(exception) + override fun resumeWith(data: Result) { + if (data.isSuccess) { + future.complete(data.getOrThrow()) + } else { + future.completeExceptionally(data.exceptionOrNull()!!) + } } }) return future diff --git a/compiler/testData/codegen/box/coroutines/asyncException.kt b/compiler/testData/codegen/box/coroutines/asyncException.kt index ce36dfc0f8e..0ce767355c2 100644 --- a/compiler/testData/codegen/box/coroutines/asyncException.kt +++ b/compiler/testData/codegen/box/coroutines/asyncException.kt @@ -47,15 +47,15 @@ fun box(): String { fun async(c: suspend () -> T): CompletableFuture { val future = CompletableFuture() - c.startCoroutine(object : helpers.ContinuationAdapter() { + c.startCoroutine(object : Continuation { override val context = EmptyCoroutineContext - override fun resume(data: T) { - future.complete(data) - } - - override fun resumeWithException(exception: Throwable) { - future.completeExceptionally(exception) + override fun resumeWith(data: Result) { + try { + future.complete(data.getOrThrow()) + } catch (t: Throwable) { + future.completeExceptionally(t) + } } }) return future diff --git a/compiler/testData/codegen/box/coroutines/asyncIteratorNullMerge_1_3.kt b/compiler/testData/codegen/box/coroutines/asyncIteratorNullMerge_1_3.kt index f8ec24639ef..667df1ae927 100644 --- a/compiler/testData/codegen/box/coroutines/asyncIteratorNullMerge_1_3.kt +++ b/compiler/testData/codegen/box/coroutines/asyncIteratorNullMerge_1_3.kt @@ -28,7 +28,7 @@ fun asyncGenerate(block: suspend AsyncGenerator.() -> Unit): AsyncSequenc } } -class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, ContinuationAdapter() { +class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, Continuation { var computedNext = false var nextValue: T? = null var nextStep: Continuation? = null @@ -86,14 +86,9 @@ class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, Continuati } // Completion continuation implementation - override fun resume(value: Unit) { + override fun resumeWith(value: Result) { done() - resumeIterator(null) - } - - override fun resumeWithException(exception: Throwable) { - done() - resumeIterator(exception) + resumeIterator(value.exceptionOrNull()) } // Generator implementation diff --git a/compiler/testData/codegen/box/coroutines/asyncIteratorToList_1_3.kt b/compiler/testData/codegen/box/coroutines/asyncIteratorToList_1_3.kt index 11eb467845e..60774fdd57c 100644 --- a/compiler/testData/codegen/box/coroutines/asyncIteratorToList_1_3.kt +++ b/compiler/testData/codegen/box/coroutines/asyncIteratorToList_1_3.kt @@ -28,7 +28,7 @@ fun asyncGenerate(block: suspend AsyncGenerator.() -> Unit): AsyncSequenc } } -class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, ContinuationAdapter() { +class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, Continuation { var computedNext = false var nextValue: T? = null var nextStep: Continuation? = null @@ -86,14 +86,9 @@ class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, Continuati } // Completion continuation implementation - override fun resume(value: Unit) { + override fun resumeWith(value: Result) { done() - resumeIterator(null) - } - - override fun resumeWithException(exception: Throwable) { - done() - resumeIterator(exception) + resumeIterator(value.exceptionOrNull()) } // Generator implementation diff --git a/compiler/testData/codegen/box/coroutines/asyncIterator_1_3.kt b/compiler/testData/codegen/box/coroutines/asyncIterator_1_3.kt index ac1319b20ae..75aad6365f2 100644 --- a/compiler/testData/codegen/box/coroutines/asyncIterator_1_3.kt +++ b/compiler/testData/codegen/box/coroutines/asyncIterator_1_3.kt @@ -28,7 +28,7 @@ fun asyncGenerate(block: suspend AsyncGenerator.() -> Unit): AsyncSequenc } } -class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, ContinuationAdapter() { +class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, Continuation { var computedNext = false var nextValue: T? = null var nextStep: Continuation? = null @@ -86,14 +86,9 @@ class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, Continuati } // Completion continuation implementation - override fun resume(value: Unit) { + override fun resumeWith(value: Result) { done() - resumeIterator(null) - } - - override fun resumeWithException(exception: Throwable) { - done() - resumeIterator(exception) + resumeIterator(value.exceptionOrNull()) } // Generator implementation diff --git a/compiler/testData/codegen/box/coroutines/beginWithException.kt b/compiler/testData/codegen/box/coroutines/beginWithException.kt index 73b40141677..acd0aa2368c 100644 --- a/compiler/testData/codegen/box/coroutines/beginWithException.kt +++ b/compiler/testData/codegen/box/coroutines/beginWithException.kt @@ -9,14 +9,11 @@ suspend fun suspendHere(): Any = suspendCoroutineUninterceptedOrReturn { x -> } fun builder(c: suspend () -> Unit) { var exception: Throwable? = null - c.createCoroutine(object : ContinuationAdapter() { + c.createCoroutine(object : Continuation { override val context = EmptyCoroutineContext - override fun resume(data: Unit) { - } - - override fun resumeWithException(e: Throwable) { - exception = e + override fun resumeWith(data: Result) { + exception = data.exceptionOrNull() } }).resumeWithException(RuntimeException("OK")) diff --git a/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt b/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt index 2bff3d0657a..e9b1caa47db 100644 --- a/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt +++ b/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt @@ -24,14 +24,11 @@ class Controller { fun builder(c: suspend Controller.() -> Unit): String { val controller = Controller() - c.startCoroutine(controller, object : ContinuationAdapter() { + c.startCoroutine(controller, object : Continuation { override val context = EmptyCoroutineContext - override fun resume(data: Unit) { - - } - - override fun resumeWithException(exception: Throwable) { + override fun resumeWith(data: Result) { + val exception = data.exceptionOrNull() ?: return controller.result += "caught(${exception.message});" } }) diff --git a/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt b/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt index ed6b7b70af4..ec54e204850 100644 --- a/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt +++ b/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt @@ -17,12 +17,11 @@ class Controller { fun builder(c: suspend Controller.() -> Unit): String { val controller = Controller() - c.startCoroutine(controller, object : ContinuationAdapter() { + c.startCoroutine(controller, object : Continuation { override val context = EmptyCoroutineContext - override fun resume(data: Unit) {} - - override fun resumeWithException(exception: Throwable) { + override fun resumeWith(data: Result) { + val exception = data.exceptionOrNull() ?: return controller.result += "ignoreCaught(${exception.message});" } }) diff --git a/compiler/testData/codegen/box/coroutines/controlFlow/whenWithSuspensions.kt b/compiler/testData/codegen/box/coroutines/controlFlow/whenWithSuspensions.kt index 0d7fde26b9c..87ce51a9467 100644 --- a/compiler/testData/codegen/box/coroutines/controlFlow/whenWithSuspensions.kt +++ b/compiler/testData/codegen/box/coroutines/controlFlow/whenWithSuspensions.kt @@ -24,10 +24,10 @@ suspend fun foo(a: Int) { } fun builder(callback: suspend () -> Unit) { - callback.startCoroutine(object : ContinuationAdapter() { + callback.startCoroutine(object : Continuation { override val context: CoroutineContext = EmptyCoroutineContext - override fun resume(value: Unit) = Unit - override fun resumeWithException(exception: Throwable) { + override fun resumeWith(value: Result) { + val exception = value.exceptionOrNull() ?: return id("FAIL WITH EXCEPTION: ${exception.message}") } }) diff --git a/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt b/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt index 3a01b813995..4e5e222a795 100644 --- a/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt +++ b/compiler/testData/codegen/box/coroutines/createCoroutinesOnManualInstances.kt @@ -7,14 +7,13 @@ import helpers.* import kotlin.coroutines.* import kotlin.coroutines.intrinsics.* -import helpers.ContinuationAdapter fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation) -> Any?): String { var result = "fail" var wasIntercepted = false - val c = (x as suspend () -> String).createCoroutine(object: ContinuationAdapter() { - override fun resumeWithException(exception: Throwable) { - throw exception + val c = (x as suspend () -> String).createCoroutine(object: Continuation { + override fun resumeWith(value: Result) { + result = value.getOrThrow() } override val context: CoroutineContext @@ -30,18 +29,13 @@ fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation) - return null } - override fun interceptContinuation(continuation: Continuation) = object : ContinuationAdapter() { + override fun interceptContinuation(continuation: Continuation) = object : Continuation { override val context: CoroutineContext get() = continuation.context - override fun resume(value: T) { + override fun resumeWith(value: Result) { wasIntercepted = true - continuation.resume(value) - } - - override fun resumeWithException(exception: Throwable) { - wasIntercepted = true - continuation.resumeWithException(exception) + continuation.resumeWith(value) } } @@ -56,10 +50,6 @@ fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation) - override val key: CoroutineContext.Key<*> get() = ContinuationInterceptor.Key } - - override fun resume(value: String) { - result = value - } }) if (e != null) diff --git a/compiler/testData/codegen/box/coroutines/crossInlineWithCapturedOuterReceiver.kt b/compiler/testData/codegen/box/coroutines/crossInlineWithCapturedOuterReceiver.kt index d1f34df3ffd..068af68909e 100644 --- a/compiler/testData/codegen/box/coroutines/crossInlineWithCapturedOuterReceiver.kt +++ b/compiler/testData/codegen/box/coroutines/crossInlineWithCapturedOuterReceiver.kt @@ -20,13 +20,9 @@ fun builder(c: suspend () -> Unit) { fun builderConsumer(c: suspend () -> Consumer): Consumer { var res: Consumer? = null - c.startCoroutine(object : ContinuationAdapter() { - override fun resume(value: Consumer) { - res = value - } - - override fun resumeWithException(e: Throwable) { - throw e + c.startCoroutine(object : Continuation { + override fun resumeWith(value: Result) { + res = value.getOrThrow() } override val context = EmptyCoroutineContext diff --git a/compiler/testData/codegen/box/coroutines/dispatchResume.kt b/compiler/testData/codegen/box/coroutines/dispatchResume.kt index 22c0cb17822..2fb368586d6 100644 --- a/compiler/testData/codegen/box/coroutines/dispatchResume.kt +++ b/compiler/testData/codegen/box/coroutines/dispatchResume.kt @@ -27,25 +27,19 @@ class Controller { } abstract class ContinuationDispatcher : AbstractCoroutineContextElement(ContinuationInterceptor), ContinuationInterceptor { - abstract fun dispatchResume(value: T, continuation: Continuation): Boolean - abstract fun dispatchResumeWithException(exception: Throwable, continuation: Continuation<*>): Boolean + abstract fun dispatchResumeWith(value: Result, continuation: Continuation): Boolean override fun interceptContinuation(continuation: Continuation): Continuation = DispatchedContinuation(this, continuation) } private class DispatchedContinuation( val dispatcher: ContinuationDispatcher, val continuation: Continuation -): ContinuationAdapter() { +): Continuation { override val context: CoroutineContext = continuation.context - override fun resume(value: T) { - if (!dispatcher.dispatchResume(value, continuation)) - continuation.resume(value) - } - - override fun resumeWithException(exception: Throwable) { - if (!dispatcher.dispatchResumeWithException(exception, continuation)) - continuation.resumeWithException(exception) + override fun resumeWith(value: Result) { + if (!dispatcher.dispatchResumeWith(value, continuation)) + continuation.resumeWith(value) } } @@ -59,16 +53,9 @@ fun test(c: suspend Controller.() -> Unit): String { controller.log += "after $id;" } - override fun

dispatchResume(data: P, continuation: Continuation

): Boolean { + override fun

dispatchResumeWith(data: Result

, continuation: Continuation

): Boolean { dispatchResume { - continuation.resume(data) - } - return true - } - - override fun dispatchResumeWithException(exception: Throwable, continuation: Continuation<*>): Boolean { - dispatchResume { - continuation.resumeWithException(exception) + continuation.resumeWith(data) } return true } diff --git a/compiler/testData/codegen/box/coroutines/generate.kt b/compiler/testData/codegen/box/coroutines/generate.kt index faa322bccec..8962f020462 100644 --- a/compiler/testData/codegen/box/coroutines/generate.kt +++ b/compiler/testData/codegen/box/coroutines/generate.kt @@ -39,16 +39,13 @@ class GeneratedSequence(private val block: suspend Generator.() -> Uni } class GeneratedIterator(block: suspend Generator.() -> Unit) : AbstractIterator(), Generator { - private var nextStep: Continuation = block.createCoroutine(this, object : ContinuationAdapter() { + private var nextStep: Continuation = block.createCoroutine(this, object : Continuation { override val context = EmptyCoroutineContext - override fun resume(data: Unit) { + override fun resumeWith(data: Result) { + data.getOrThrow() done() } - - override fun resumeWithException(exception: Throwable) { - throw exception - } }) override fun computeNext() { diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContext.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContext.kt index f389c2f04c8..a58cc5f6c23 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContext.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContext.kt @@ -19,16 +19,12 @@ suspend fun multipleArgs(a: Any, b: Any, c: Any) = fun builder(c: suspend () -> String): String { var fromSuspension: String? = null - val continuation = object : ContinuationAdapter() { + val continuation = object : Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: ${exception}" - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { value.getOrThrow() } catch (exception: Throwable) { "Exception: ${exception}" } } } diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiver.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiver.kt index ff4c8603c66..a00ad3e7ae5 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiver.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiver.kt @@ -20,16 +20,16 @@ class Controller { fun builder(c: suspend Controller.() -> String): String { var fromSuspension: String? = null - c.startCoroutine(this, object : ContinuationAdapter() { + c.startCoroutine(this, object : Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: " + exception.message!! - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { + value.getOrThrow() + } catch (exception: Throwable) { + "Exception: " + exception.message!! + } } }) diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiverNotIntrinsic.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiverNotIntrinsic.kt index 95d3b0a99ab..1ed5510bf5f 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiverNotIntrinsic.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/coroutineContextReceiverNotIntrinsic.kt @@ -24,16 +24,16 @@ class Controller { fun builder(c: suspend Controller.() -> String): String { var fromSuspension: String? = null - c.startCoroutine(this, object : ContinuationAdapter() { + c.startCoroutine(this, object : Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: " + exception.message!! - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { + value.getOrThrow() + } catch (exception: Throwable) { + "Exception: " + exception.message!! + } } }) diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt index 544c15a3b5a..d9d34f04146 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/intercepted.kt @@ -30,16 +30,16 @@ fun builder(testNum: Int, expectedCount: Int, c: suspend () -> String): String { var fromSuspension: String? = null var counter = 0 - c.startCoroutineUninterceptedOrReturn(object : ContinuationAdapter() { + c.startCoroutineUninterceptedOrReturn(object : Continuation { override val context: CoroutineContext get() = ContinuationDispatcher { counter++ } - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: " + exception.message!! - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { + value.getOrThrow() + } catch (exception: Throwable) { + "Exception: " + exception.message!! + } } }) @@ -54,17 +54,12 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont private class DispatchedContinuation( val dispatcher: () -> Unit, val continuation: Continuation -): ContinuationAdapter() { +): Continuation { override val context: CoroutineContext = continuation.context - override fun resume(value: T) { + override fun resumeWith(value: Result) { dispatcher() - continuation.resume(value) - } - - override fun resumeWithException(exception: Throwable) { - dispatcher() - continuation.resumeWithException(exception) + continuation.resumeWith(value) } } diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt index 4e06eeec4e6..a3660558c9c 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutine.kt @@ -18,16 +18,16 @@ suspend fun suspendWithException(): String = suspendCoroutineUninterceptedOrRetu fun builder(c: suspend () -> String): String { var fromSuspension: String? = null - c.startCoroutine(object: ContinuationAdapter() { + c.startCoroutine(object: Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: " + exception.message!! - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { + value.getOrThrow() + } catch (exception: Throwable) { + "Exception: " + exception.message!! + } } }) diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturn.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturn.kt index 7028166b383..819592b8316 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturn.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturn.kt @@ -19,16 +19,16 @@ fun builder(shouldSuspend: Boolean, c: suspend () -> String): String { var fromSuspension: String? = null val result = try { - c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter() { + c.startCoroutineUninterceptedOrReturn(object: Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: " + exception.message!! - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { + value.getOrThrow() + } catch (exception: Throwable) { + "Exception: " + exception.message!! + } } }) } catch (e: Exception) { diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturnInterception.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturnInterception.kt index 08ff9455767..178b9267ed1 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturnInterception.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/startCoroutineUninterceptedOrReturnInterception.kt @@ -25,16 +25,16 @@ fun builder(testNum: Int, shouldSuspend: Boolean, expectedCount: Int, c: suspend var counter = 0 val result = try { - c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter() { + c.startCoroutineUninterceptedOrReturn(object: Continuation { override val context: CoroutineContext get() = ContinuationDispatcher { counter++ } - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: " + exception.message!! - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { + value.getOrThrow() + } catch (exception: Throwable) { + "Exception: " + exception.message!! + } } }) } catch (e: Exception) { @@ -62,17 +62,12 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont private class DispatchedContinuation( val dispatcher: () -> Unit, val continuation: Continuation -): ContinuationAdapter() { +): Continuation { override val context: CoroutineContext = continuation.context - override fun resume(value: T) { + override fun resumeWith(value: Result) { dispatcher() - continuation.resume(value) - } - - override fun resumeWithException(exception: Throwable) { - dispatcher() - continuation.resumeWithException(exception) + continuation.resumeWith(value) } } diff --git a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/suspendCoroutineUninterceptedOrReturn.kt b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/suspendCoroutineUninterceptedOrReturn.kt index 68a6a0bc6db..c4e624b2586 100644 --- a/compiler/testData/codegen/box/coroutines/intrinsicSemantics/suspendCoroutineUninterceptedOrReturn.kt +++ b/compiler/testData/codegen/box/coroutines/intrinsicSemantics/suspendCoroutineUninterceptedOrReturn.kt @@ -20,16 +20,16 @@ fun builder(shouldSuspend: Boolean, c: suspend () -> String): String { var counter = 0 val result = try { - c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter() { + c.startCoroutineUninterceptedOrReturn(object: Continuation { override val context: CoroutineContext get() = ContinuationDispatcher { counter++ } - override fun resumeWithException(exception: Throwable) { - fromSuspension = "Exception: " + exception.message!! - } - - override fun resume(value: String) { - fromSuspension = value + override fun resumeWith(value: Result) { + fromSuspension = try { + value.getOrThrow() + } catch (exception: Throwable) { + "Exception: " + exception.message!! + } } }) } catch (e: Exception) { @@ -55,17 +55,12 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont private class DispatchedContinuation( val dispatcher: () -> Unit, val continuation: Continuation -): ContinuationAdapter() { +): Continuation { override val context: CoroutineContext = continuation.context - override fun resume(value: T) { + override fun resumeWith(value: Result) { dispatcher() - continuation.resume(value) - } - - override fun resumeWithException(exception: Throwable) { - dispatcher() - continuation.resumeWithException(exception) + continuation.resumeWith(value) } } diff --git a/compiler/testData/codegen/box/coroutines/localFunctions/named/stateMachine.kt b/compiler/testData/codegen/box/coroutines/localFunctions/named/stateMachine.kt index 9824d9218ee..605fab1fc88 100644 --- a/compiler/testData/codegen/box/coroutines/localFunctions/named/stateMachine.kt +++ b/compiler/testData/codegen/box/coroutines/localFunctions/named/stateMachine.kt @@ -28,20 +28,17 @@ suspend fun callLocal() { } fun builder(c: suspend () -> Unit) { - val continuation = object: ContinuationAdapter() { + val continuation = object: Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resume(value: Unit) { + override fun resumeWith(value: Result) { + value.getOrThrow() proceed = { result = "OK" finished = true } } - - override fun resumeWithException(exception: Throwable) { - throw exception - } } c.startCoroutine(continuation) } diff --git a/compiler/testData/codegen/box/coroutines/overrideDefaultArgument.kt b/compiler/testData/codegen/box/coroutines/overrideDefaultArgument.kt index 82433a14245..1cb798a2e4b 100644 --- a/compiler/testData/codegen/box/coroutines/overrideDefaultArgument.kt +++ b/compiler/testData/codegen/box/coroutines/overrideDefaultArgument.kt @@ -47,27 +47,25 @@ suspend fun sleep(): Unit = suspendCoroutine { c -> } fun async(f: suspend () -> Unit) { - f.startCoroutine(object : ContinuationAdapter() { - override fun resume(x: Unit) { + f.startCoroutine(object : Continuation { + override fun resumeWith(x: Result) { proceed = { result += "done;" finished = true } } - override fun resumeWithException(x: Throwable) {} override val context = EmptyCoroutineContext }) } fun asyncSuspend(f: suspend () -> Unit) { - val coroutine = f.createCoroutine(object : ContinuationAdapter() { - override fun resume(x: Unit) { + val coroutine = f.createCoroutine(object : Continuation { + override fun resumeWith(x: Result) { proceed = { result += "done;" finished = true } } - override fun resumeWithException(x: Throwable) {} override val context = EmptyCoroutineContext }) coroutine.resume(Unit) diff --git a/compiler/testData/codegen/box/coroutines/simpleSuspendCallableReference.kt b/compiler/testData/codegen/box/coroutines/simpleSuspendCallableReference.kt index 8916a343c14..3ff036a0a68 100644 --- a/compiler/testData/codegen/box/coroutines/simpleSuspendCallableReference.kt +++ b/compiler/testData/codegen/box/coroutines/simpleSuspendCallableReference.kt @@ -1,4 +1,3 @@ -// !LANGUAGE: +ReleaseCoroutines // WITH_STDLIB // WITH_COROUTINES import helpers.* diff --git a/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt b/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt index 449cd0aaf6c..7c611670848 100644 --- a/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt +++ b/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt @@ -12,15 +12,11 @@ suspend fun suspendHere(): String = suspendCoroutineUninterceptedOrReturn { x -> fun builder(c: suspend () -> Int): Int { var res = 0 - c.createCoroutine(object : ContinuationAdapter() { + c.createCoroutine(object : Continuation { override val context = EmptyCoroutineContext - override fun resume(data: Int) { - res = data - } - - override fun resumeWithException(exception: Throwable) { - throw exception + override fun resumeWith(data: Result) { + res = data.getOrThrow() } }).resume(Unit) diff --git a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt index cfa5ad63dc5..772dca04d76 100644 --- a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt +++ b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt @@ -27,25 +27,19 @@ class Controller { } abstract class ContinuationDispatcher : AbstractCoroutineContextElement(ContinuationInterceptor), ContinuationInterceptor { - abstract fun dispatchResume(value: T, continuation: Continuation): Boolean - abstract fun dispatchResumeWithException(exception: Throwable, continuation: Continuation<*>): Boolean + abstract fun dispatchResumeWith(value: Result, continuation: Continuation): Boolean override fun interceptContinuation(continuation: Continuation): Continuation = DispatchedContinuation(this, continuation) } private class DispatchedContinuation( val dispatcher: ContinuationDispatcher, val continuation: Continuation -): ContinuationAdapter() { +): Continuation { override val context: CoroutineContext = continuation.context - override fun resume(value: T) { - if (!dispatcher.dispatchResume(value, continuation)) - continuation.resume(value) - } - - override fun resumeWithException(exception: Throwable) { - if (!dispatcher.dispatchResumeWithException(exception, continuation)) - continuation.resumeWithException(exception) + override fun resumeWith(value: Result) { + if (!dispatcher.dispatchResumeWith(value, continuation)) + continuation.resumeWith(value) } } @@ -59,16 +53,9 @@ fun test(c: suspend Controller.() -> Unit): String { controller.log += "after $id;" } - override fun

dispatchResume(data: P, continuation: Continuation

): Boolean { + override fun

dispatchResumeWith(data: Result

, continuation: Continuation

): Boolean { dispatchResume { - continuation.resume(data) - } - return true - } - - override fun dispatchResumeWithException(exception: Throwable, continuation: Continuation<*>): Boolean { - dispatchResume { - continuation.resumeWithException(exception) + continuation.resumeWith(data) } return true } diff --git a/compiler/testData/codegen/box/coroutines/tailOperations/tailInlining.kt b/compiler/testData/codegen/box/coroutines/tailOperations/tailInlining.kt index 99581332343..e63155946ea 100644 --- a/compiler/testData/codegen/box/coroutines/tailOperations/tailInlining.kt +++ b/compiler/testData/codegen/box/coroutines/tailOperations/tailInlining.kt @@ -37,17 +37,14 @@ suspend fun bar(x: Int): Int = suspendCoroutine { c -> inline suspend fun foo(x: Int) = bar(x) fun async(a: suspend () -> Unit) { - a.startCoroutine(object : ContinuationAdapter() { - override fun resume(value: Unit) { + a.startCoroutine(object : Continuation { + override fun resumeWith(value: Result) { proceed = { log("done") finished = true } } - override fun resumeWithException(e: Throwable) { - } - override val context = EmptyCoroutineContext }) } diff --git a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt index 83c6165f64e..cc198beb139 100644 --- a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt +++ b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt @@ -11,15 +11,13 @@ suspend fun suspendHere(): String = suspendCoroutineUninterceptedOrReturn { x -> fun builder(c: suspend () -> Unit) { var wasResumeCalled = false - c.startCoroutine(object : ContinuationAdapter() { + c.startCoroutine(object : Continuation { override val context = EmptyCoroutineContext - override fun resume(value: Unit) { - wasResumeCalled = true - } - - override fun resumeWithException(exception: Throwable) { - + override fun resumeWith(value: Result) { + if (value.isSuccess) { + wasResumeCalled = true + } } }) diff --git a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt index 81065d43487..b9afbc21a71 100644 --- a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt +++ b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt @@ -11,15 +11,13 @@ suspend fun suspendHere(): String = suspendCoroutineUninterceptedOrReturn { x -> fun builder(c: suspend () -> Unit) { var wasResumeCalled = false - c.startCoroutine(object : ContinuationAdapter() { + c.startCoroutine(object : Continuation { override val context = EmptyCoroutineContext - override fun resume(value: Unit) { - wasResumeCalled = true - } - - override fun resumeWithException(exception: Throwable) { - + override fun resumeWith(value: Result) { + if (value.isSuccess) { + wasResumeCalled = true + } } }) diff --git a/compiler/testData/codegen/box/reflection/modifiers/functions.kt b/compiler/testData/codegen/box/reflection/modifiers/functions.kt index 7b235e60f7b..09f0948d0f3 100644 --- a/compiler/testData/codegen/box/reflection/modifiers/functions.kt +++ b/compiler/testData/codegen/box/reflection/modifiers/functions.kt @@ -1,4 +1,3 @@ -// !LANGUAGE: +ReleaseCoroutines // IGNORE_BACKEND: JS_IR // IGNORE_BACKEND: JS_IR_ES6 // TODO: muted automatically, investigate should it be ran for JS or not diff --git a/compiler/testData/codegen/boxInline/suspend/callableReference/simple.kt b/compiler/testData/codegen/boxInline/suspend/callableReference/simple.kt index e7199babbdb..fbe926e5f22 100644 --- a/compiler/testData/codegen/boxInline/suspend/callableReference/simple.kt +++ b/compiler/testData/codegen/boxInline/suspend/callableReference/simple.kt @@ -1,6 +1,5 @@ // WITH_COROUTINES // WITH_STDLIB -// !LANGUAGE: +ReleaseCoroutines // NO_CHECK_LAMBDA_INLINING // FILE: test.kt @@ -8,17 +7,14 @@ inline suspend fun foo(x: suspend () -> String) = x() // FILE: box.kt -import helpers.ContinuationAdapter import kotlin.coroutines.* import kotlin.coroutines.intrinsics.* fun builder(c: suspend () -> Unit) { - c.startCoroutine(object: ContinuationAdapter() { - override fun resume(value: Unit) { - } - - override fun resumeWithException(exception: Throwable) { - throw exception + c.startCoroutine(object: Continuation { + override val context: CoroutineContext get() = EmptyCoroutineContext + override fun resumeWith(value: Result) { + value.getOrThrow() } }) } diff --git a/compiler/testData/codegen/bytecodeText/boxing/crossinlineSuspend.kt b/compiler/testData/codegen/bytecodeText/boxing/crossinlineSuspend.kt index 1651b5a1581..91ab94d9a35 100644 --- a/compiler/testData/codegen/bytecodeText/boxing/crossinlineSuspend.kt +++ b/compiler/testData/codegen/bytecodeText/boxing/crossinlineSuspend.kt @@ -1,5 +1,3 @@ -// !LANGUAGE: +ReleaseCoroutines - inline fun inlineMe(crossinline c: suspend () -> Int): suspend () -> Int { val i: suspend () -> Int = { c() + c() } return i diff --git a/compiler/testData/codegen/bytecodeText/boxing/inlineSuspend.kt b/compiler/testData/codegen/bytecodeText/boxing/inlineSuspend.kt index 67750bc9323..b035b31837a 100644 --- a/compiler/testData/codegen/bytecodeText/boxing/inlineSuspend.kt +++ b/compiler/testData/codegen/bytecodeText/boxing/inlineSuspend.kt @@ -1,5 +1,3 @@ -// !LANGUAGE: +ReleaseCoroutines - inline suspend fun inlineMe() = 1000 // inlineMe$$forInline : valueOf diff --git a/compiler/testData/codegen/bytecodeText/boxing/suspend.kt b/compiler/testData/codegen/bytecodeText/boxing/suspend.kt index 6868f7da3da..df64638b5a4 100644 --- a/compiler/testData/codegen/bytecodeText/boxing/suspend.kt +++ b/compiler/testData/codegen/bytecodeText/boxing/suspend.kt @@ -1,5 +1,3 @@ -// !LANGUAGE: +ReleaseCoroutines - suspend fun produce(): Int = 1000 // 0 valueOf diff --git a/compiler/testData/diagnostics/helpers/coroutines/CoroutineHelpers.kt b/compiler/testData/diagnostics/helpers/coroutines/CoroutineHelpers.kt index a47f74926dc..2275f382316 100644 --- a/compiler/testData/diagnostics/helpers/coroutines/CoroutineHelpers.kt +++ b/compiler/testData/diagnostics/helpers/coroutines/CoroutineHelpers.kt @@ -32,17 +32,3 @@ class ResultContinuation : Continuation { var result: Any? = null } - -abstract class ContinuationAdapter : Continuation { - override val context: CoroutineContext = EmptyCoroutineContext - override fun resumeWith(result: Result) { - if (result.isSuccess) { - resume(result.getOrThrow()) - } else { - resumeWithException(result.exceptionOrNull()!!) - } - } - - abstract fun resumeWithException(exception: Throwable) - abstract fun resume(value: T) -} diff --git a/compiler/testData/diagnostics/helpers/coroutines/CoroutineUtil.kt b/compiler/testData/diagnostics/helpers/coroutines/CoroutineUtil.kt index e9f88bde7f3..e5eb59b1e1d 100644 --- a/compiler/testData/diagnostics/helpers/coroutines/CoroutineUtil.kt +++ b/compiler/testData/diagnostics/helpers/coroutines/CoroutineUtil.kt @@ -3,19 +3,17 @@ package helpers import kotlin.coroutines.* import kotlin.coroutines.intrinsics.* + val StateMachineChecker = StateMachineCheckerClass() -object CheckStateMachineContinuation: ContinuationAdapter() { +object CheckStateMachineContinuation: Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resume(value: Unit) { + override fun resumeWith(value: Result) { + value.getOrThrow() StateMachineChecker.proceed = { StateMachineChecker.finished = true } } - - override fun resumeWithException(exception: Throwable) { - throw exception - } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/coroutines/callableReference/outsideSuspend.kt b/compiler/testData/diagnostics/tests/coroutines/callableReference/outsideSuspend.kt index b65f283465e..b2fa7d3b6df 100644 --- a/compiler/testData/diagnostics/tests/coroutines/callableReference/outsideSuspend.kt +++ b/compiler/testData/diagnostics/tests/coroutines/callableReference/outsideSuspend.kt @@ -1,6 +1,5 @@ // FIR_IDENTICAL // !CHECK_TYPE -// !LANGUAGE: +ReleaseCoroutines // SKIP_TXT import kotlin.reflect.KSuspendFunction0 diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReferences.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReferences.kt index 7c7efa2938b..e489bd565c3 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReferences.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/callableReferences.kt @@ -1,5 +1,4 @@ // FIR_IDENTICAL -// !LANGUAGE: +ReleaseCoroutines // !DIAGNOSTICS: -UNUSED_VARIABLE suspend fun foo() {} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspend.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspend.kt index 0c55c931daa..ccd9f1347a8 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspend.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspend.kt @@ -1,5 +1,4 @@ // FIR_IDENTICAL -// !LANGUAGE: +ReleaseCoroutines // SKIP_TXT fun suspend(block: suspend () -> R): suspend () -> R = block diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspendWithAnyParameter.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspendWithAnyParameter.kt index 48af226a46c..e5742e3913d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspendWithAnyParameter.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/modifierFormForNonBuiltInSuspendWithAnyParameter.kt @@ -1,5 +1,4 @@ // FIR_IDENTICAL -// !LANGUAGE: +ReleaseCoroutines // SKIP_TXT fun suspend(block: R) = block diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltIn.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltIn.kt index 0a85315de74..d0495ffa562 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltIn.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltIn.kt @@ -1,5 +1,4 @@ // FIR_IDENTICAL -// !LANGUAGE: +ReleaseCoroutines // SKIP_TXT fun bar() { diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt index 59daa4c56be..5ee1d225f23 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.fir.kt @@ -1,4 +1,3 @@ -// !LANGUAGE: +ReleaseCoroutines // SKIP_TXT import kotlin.suspend as suspendLambda diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt index c6406a01509..3e421f7a054 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInRenameOnImport.kt @@ -1,4 +1,3 @@ -// !LANGUAGE: +ReleaseCoroutines // SKIP_TXT import kotlin.suspend as suspendLambda diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/release/suspend.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/release/suspend.kt index b61afde9a46..8d1ecefd544 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/release/suspend.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/release/suspend.kt @@ -1,5 +1,4 @@ // FIR_IDENTICAL -// !LANGUAGE: +ReleaseCoroutines // SKIP_TXT suspend fun test() { diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/restrictSuspension/outerYield_1_3.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/restrictSuspension/outerYield_1_3.kt index fa08071a136..457ee8d2ed3 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/restrictSuspension/outerYield_1_3.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/restrictSuspension/outerYield_1_3.kt @@ -1,5 +1,5 @@ // FIR_IDENTICAL -// !LANGUAGE: +ReleaseCoroutines +ExperimentalBuilderInference +// !LANGUAGE: +ExperimentalBuilderInference // !OPT_IN: kotlin.RequiresOptIn // SKIP_TXT diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/TestHelperGenerator.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/TestHelperGenerator.kt index dece03d206f..9fe0d296ed5 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/TestHelperGenerator.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/TestHelperGenerator.kt @@ -23,20 +23,6 @@ fun createTextForCoroutineHelpers(checkStateMachine: Boolean, checkTailCallOptim |} """.trimMargin() - val continuationAdapterBody = - """ - |override fun resumeWith(result: Result) { - | if (result.isSuccess) { - | resume(result.getOrThrow()) - | } else { - | resumeWithException(result.exceptionOrNull()!!) - | } - |} - | - |abstract fun resumeWithException(exception: Throwable) - |abstract fun resume(value: T) - """.trimMargin() - val checkStateMachineString = """ class StateMachineCheckerClass { private var counter = 0 @@ -68,19 +54,16 @@ fun createTextForCoroutineHelpers(checkStateMachine: Boolean, checkTailCallOptim } } val StateMachineChecker = StateMachineCheckerClass() - object CheckStateMachineContinuation: ContinuationAdapter() { + object CheckStateMachineContinuation: Continuation { override val context: CoroutineContext get() = EmptyCoroutineContext - override fun resume(value: Unit) { + override fun resumeWith(value: Result) { + value.getOrThrow() StateMachineChecker.proceed = { StateMachineChecker.finished = true } } - - override fun resumeWithException(exception: Throwable) { - throw exception - } } """.trimIndent() @@ -146,11 +129,6 @@ fun createTextForCoroutineHelpers(checkStateMachine: Boolean, checkTailCallOptim | var result: Any? = null |} | - |abstract class ContinuationAdapter : Continuation { - | override val context: CoroutineContext = EmptyCoroutineContext - | $continuationAdapterBody - |} - | |${if (checkStateMachine) checkStateMachineString else ""} |${if (checkTailCallOptimization) checkTailCallOptimizationString else ""} """.trimMargin()