Minor. Get rid of code duplications for resume call wrapping in stdlib
Use processBareContinuationResume instead
This commit is contained in:
@@ -90,11 +90,11 @@ public inline suspend fun <T> suspendCoroutine(crossinline block: (Continuation<
|
||||
|
||||
// INTERNAL DECLARATIONS
|
||||
|
||||
internal inline fun processInvokeCallOnCoroutine(completion: Continuation<*>, block: () -> Any?) {
|
||||
@kotlin.internal.InlineOnly
|
||||
internal inline fun processBareContinuationResume(completion: Continuation<*>, block: () -> Any?) {
|
||||
try {
|
||||
val result = block()
|
||||
if (result !== COROUTINE_SUSPENDED) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(completion as Continuation<Any?>).resume(result)
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
|
||||
@@ -55,7 +55,7 @@ private inline fun <T> buildContinuationByInvokeCall(
|
||||
get() = completion.context
|
||||
|
||||
override fun resume(value: Unit) {
|
||||
processInvokeCallOnCoroutine(completion, block)
|
||||
processBareContinuationResume(completion, block)
|
||||
}
|
||||
|
||||
override fun resumeWithException(exception: Throwable) {
|
||||
|
||||
@@ -18,10 +18,7 @@
|
||||
package kotlin.coroutines.experimental.jvm.internal
|
||||
|
||||
import java.lang.IllegalStateException
|
||||
import kotlin.coroutines.experimental.Continuation
|
||||
import kotlin.coroutines.experimental.ContinuationInterceptor
|
||||
import kotlin.coroutines.experimental.CoroutineContext
|
||||
import kotlin.coroutines.experimental.intrinsics.COROUTINE_SUSPENDED
|
||||
import kotlin.coroutines.experimental.*
|
||||
import kotlin.coroutines.experimental.jvm.internal.interceptContinuationIfNeeded
|
||||
import kotlin.jvm.internal.Lambda
|
||||
|
||||
@@ -49,22 +46,14 @@ abstract class CoroutineImpl(
|
||||
}
|
||||
|
||||
override fun resume(value: Any?) {
|
||||
try {
|
||||
val result = doResume(value, null)
|
||||
if (result !== COROUTINE_SUSPENDED)
|
||||
completion!!.resume(result)
|
||||
} catch (e: Throwable) {
|
||||
completion!!.resumeWithException(e)
|
||||
processBareContinuationResume(completion!!) {
|
||||
doResume(value, null)
|
||||
}
|
||||
}
|
||||
|
||||
override fun resumeWithException(exception: Throwable) {
|
||||
try {
|
||||
val result = doResume(null, exception)
|
||||
if (result !== COROUTINE_SUSPENDED)
|
||||
completion!!.resume(result)
|
||||
} catch (e: Throwable) {
|
||||
completion!!.resumeWithException(e)
|
||||
processBareContinuationResume(completion!!) {
|
||||
doResume(null, exception)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user