diff --git a/compiler/testData/codegen/box/coroutines/suspendFunctionAsSupertype.kt b/compiler/testData/codegen/box/coroutines/suspendFunctionAsSupertype.kt index f72ccf1a96c..2874e8a82a2 100644 --- a/compiler/testData/codegen/box/coroutines/suspendFunctionAsSupertype.kt +++ b/compiler/testData/codegen/box/coroutines/suspendFunctionAsSupertype.kt @@ -1,5 +1,5 @@ // WITH_RUNTIME -// IGNORE_BACKEND: JS, JS_IR, JVM +// IGNORE_BACKEND: JVM // !LANGUAGE: +SuspendFunctionAsSupertype import kotlin.coroutines.* diff --git a/libraries/stdlib/js-ir/src/kotlin/coroutines_13/IntrinsicsJs.kt b/libraries/stdlib/js-ir/src/kotlin/coroutines_13/IntrinsicsJs.kt index cd12dfe09ed..0650122671f 100644 --- a/libraries/stdlib/js-ir/src/kotlin/coroutines_13/IntrinsicsJs.kt +++ b/libraries/stdlib/js-ir/src/kotlin/coroutines_13/IntrinsicsJs.kt @@ -27,7 +27,9 @@ import kotlin.internal.InlineOnly public actual inline fun (suspend () -> T).startCoroutineUninterceptedOrReturn( completion: Continuation ): Any? { - return this.asDynamic()(completion) + val a = this.asDynamic() + return if (jsTypeOf(a) == "function") a(completion) + else ::invoke.asDynamic()(completion) } /** @@ -47,8 +49,10 @@ public actual inline fun (suspend () -> T).startCoroutineUninterceptedOrRetu public actual inline fun (suspend R.() -> T).startCoroutineUninterceptedOrReturn( receiver: R, completion: Continuation -): Any? { - return this.asDynamic()(receiver, completion) +): Any? { + val a = this.asDynamic() + return if (jsTypeOf(a) == "function") a(receiver, completion) + else ::invoke.asDynamic()(receiver, completion) } @InlineOnly @@ -56,7 +60,11 @@ internal actual inline fun (suspend R.(P) -> T).startCoroutineUninterc receiver: R, param: P, completion: Continuation -): Any? = this.asDynamic()(receiver, param, completion) +): Any? { + val a = this.asDynamic() + return if (jsTypeOf(a) == "function") a(receiver, param, completion) + else ::invoke.asDynamic()(receiver, param, completion) +} /** * Creates unintercepted coroutine without receiver and with result type [T]. @@ -79,7 +87,9 @@ public actual fun (suspend () -> T).createCoroutineUnintercepted( completion: Continuation ): Continuation = createCoroutineFromSuspendFunction(completion) { - this.asDynamic()(completion) + val a = this.asDynamic() + if (jsTypeOf(a) == "function") a(completion) + else ::invoke.asDynamic()(completion) } /** @@ -104,7 +114,9 @@ public actual fun (suspend R.() -> T).createCoroutineUnintercepted( completion: Continuation ): Continuation = createCoroutineFromSuspendFunction(completion) { - this.asDynamic()(receiver, completion) + val a = this.asDynamic() + if (jsTypeOf(a) == "function") a(receiver, completion) + else ::invoke.asDynamic()(receiver, completion) } /**