diff --git a/js/js.libraries/src/core/coroutines.kt b/js/js.libraries/src/core/coroutines.kt index 24b044be17b..42e129f6cd3 100644 --- a/js/js.libraries/src/core/coroutines.kt +++ b/js/js.libraries/src/core/coroutines.kt @@ -15,7 +15,6 @@ */ package kotlin.coroutines.experimental - import kotlin.coroutines.experimental.intrinsics.* internal fun (suspend R.() -> T).createCoroutineInternal( @@ -51,17 +50,7 @@ internal abstract class CoroutineImpl(private val resultContinuation: Continuati } protected fun doResumeWrapper() { - try { - result = doResume() - if (result !== COROUTINE_SUSPENDED) { - val data = result - result = COROUTINE_SUSPENDED - resultContinuation.resume(data) - } - } - catch (e: Throwable) { - resultContinuation.resumeWithException(e) - } + processBareContinuationResume(resultContinuation) { doResume() } } protected abstract fun doResume(): Any? diff --git a/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibrary.kt b/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibrary.kt index 85ae99515fb..4e9df99d9a5 100644 --- a/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibrary.kt +++ b/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibrary.kt @@ -90,11 +90,11 @@ public inline suspend fun 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).resume(result) } } catch (t: Throwable) { diff --git a/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibraryJvm.kt b/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibraryJvm.kt index 239abd5b645..9856022c112 100644 --- a/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibraryJvm.kt +++ b/libraries/stdlib/src/kotlin/coroutines/experimental/CoroutinesLibraryJvm.kt @@ -55,7 +55,7 @@ private inline fun buildContinuationByInvokeCall( get() = completion.context override fun resume(value: Unit) { - processInvokeCallOnCoroutine(completion, block) + processBareContinuationResume(completion, block) } override fun resumeWithException(exception: Throwable) { diff --git a/libraries/stdlib/src/kotlin/coroutines/experimental/jvm/internal/CoroutineImpl.kt b/libraries/stdlib/src/kotlin/coroutines/experimental/jvm/internal/CoroutineImpl.kt index 1075a953c49..1d9207177bf 100644 --- a/libraries/stdlib/src/kotlin/coroutines/experimental/jvm/internal/CoroutineImpl.kt +++ b/libraries/stdlib/src/kotlin/coroutines/experimental/jvm/internal/CoroutineImpl.kt @@ -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) } }