Minor. Get rid of code duplications for resume call wrapping in stdlib

Use processBareContinuationResume instead
This commit is contained in:
Denis Zharkov
2017-02-01 10:54:13 +03:00
parent 6dde567be4
commit 230564fb4a
4 changed files with 9 additions and 31 deletions
@@ -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)
}
}