From d3982472a49a7a54034482e298f04b9daa911e40 Mon Sep 17 00:00:00 2001 From: Roman Elizarov Date: Fri, 13 Jul 2018 14:41:16 +0300 Subject: [PATCH] Explanatory comment to createCoroutineFromSuspendFunction --- .../src/kotlin/coroutines/intrinsics/IntrinsicsJvm.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 9e9a220d6dc..9a8bc9515f7 100644 --- a/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/intrinsics/IntrinsicsJvm.kt +++ b/libraries/stdlib/coroutines/jvm/src/kotlin/coroutines/intrinsics/IntrinsicsJvm.kt @@ -134,6 +134,17 @@ public actual fun Continuation.intercepted(): Continuation = // INTERNAL DEFINITIONS +/** + * This function is used when [createCoroutineUnintercepted] encounters suspending lambda that does not extend BaseContinuationImpl. + * + * It happens in two cases: + * 1. Callable reference to suspending function, + * 2. Suspending function reference implemented by Java code. + * + * We must wrap it into an instance that extends [BaseContinuationImpl], because that is an expectation of all coroutines machinery. + * As an optimization we use lighter-weight [RestrictedContinuationImpl] base class (it has less fields) if the context is + * [EmptyCoroutineContext], and a full-blown [ContinuationImpl] class otherwise. + */ @SinceKotlin("1.3") private inline fun createCoroutineFromSuspendFunction( completion: Continuation,