diff --git a/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/intrinsics/IntrinsicsJvm.kt b/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/intrinsics/IntrinsicsJvm.kt index 7809c05ede4..f5006cf8b06 100644 --- a/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/intrinsics/IntrinsicsJvm.kt +++ b/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/intrinsics/IntrinsicsJvm.kt @@ -154,6 +154,7 @@ public actual fun Continuation.intercepted(): Continuation = // INTERNAL DEFINITIONS +@SinceKotlin("1.3") private inline fun createCoroutineFromSuspendFunction( completion: Continuation, crossinline block: () -> Any? diff --git a/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/ContinuationImpl.kt b/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/ContinuationImpl.kt index 1c994caef02..87f961d2db6 100644 --- a/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/ContinuationImpl.kt +++ b/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/jvm/internal/ContinuationImpl.kt @@ -81,18 +81,18 @@ internal abstract class ContinuationImpl protected constructor( try { val outcome = invokeSuspend(result) if (outcome === CoroutineSingletons.COROUTINE_SUSPENDED) return - disposeIntercepted() + releaseIntercepted() completion.resume(outcome) } catch (exception: Throwable) { - disposeIntercepted() + releaseIntercepted() completion.resumeWithException(exception) } } - private fun disposeIntercepted() { + private fun releaseIntercepted() { val intercepted = intercepted if (intercepted != null && intercepted != this) { - context[ContinuationInterceptor]!!.disposeContinuation(intercepted) + context[ContinuationInterceptor]!!.releaseInterceptedContinuation(intercepted) } this.intercepted = CompletedContinuation // just in case } @@ -113,6 +113,8 @@ internal object CompletedContinuation : Continuation { } } +@SinceKotlin("1.3") +// Restricted suspension lambdas inherit from this class internal abstract class RestrictedSuspendLambda protected constructor( private val arity: Int, completion: Continuation? @@ -128,6 +130,8 @@ internal abstract class RestrictedSuspendLambda protected constructor( super.toString() // this is continuation } +@SinceKotlin("1.3") +// Suspension lambdas inherit from this class internal abstract class SuspendLambda protected constructor( private val arity: Int, completion: Continuation? diff --git a/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt b/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt index 6091c9b55b5..d8bccfac68f 100644 --- a/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt +++ b/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt @@ -3,6 +3,7 @@ * that can be found in the license/LICENSE.txt file. */ +// todo: Figure out how to avoid supressing error, move suppressions where they are needed. @file:Suppress( "UNCHECKED_CAST", "RedundantVisibilityModifier", diff --git a/libraries/stdlib/coroutines/src/kotlin/coroutines/ContinuationInterceptor.kt b/libraries/stdlib/coroutines/src/kotlin/coroutines/ContinuationInterceptor.kt index 8b3b8b2f309..6ec14f684df 100644 --- a/libraries/stdlib/coroutines/src/kotlin/coroutines/ContinuationInterceptor.kt +++ b/libraries/stdlib/coroutines/src/kotlin/coroutines/ContinuationInterceptor.kt @@ -22,9 +22,9 @@ public interface ContinuationInterceptor : CoroutineContext.Element { * This function is invoked by coroutines framework when needed and the resulting continuations are * cached internally per each instance of the original [continuation]. * - * This function may simply return `this` if it does not want to intercept this particular continuation. + * This function may simply return original [continuation] if it does not want to intercept this particular continuation. * - * When the original [continuation] completes coroutine framework invokes [disposeContinuation] + * When the original [continuation] completes coroutine framework invokes [releaseInterceptedContinuation] * with the resulting continuation if it was intercepted. */ public fun interceptContinuation(continuation: Continuation): Continuation @@ -37,7 +37,7 @@ public interface ContinuationInterceptor : CoroutineContext.Element { * * @param continuation Continuation instance returned by this interceptor's [interceptContinuation] invocation. */ - public fun disposeContinuation(continuation: Continuation<*>) { + public fun releaseInterceptedContinuation(continuation: Continuation<*>) { /* do nothing by default */ } }