From 293ddb538941ab41fcf1382f582a0ba420519e77 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Wed, 26 Feb 2020 12:17:13 +0300 Subject: [PATCH] [JS IR] Fix inline classes for new callable reference scheme --- .../ir/backend/js/lower/InteropCallableReferenceLowering.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt index f79cb257c61..783165575fb 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt @@ -162,19 +162,21 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo val constructor = expression.symbol.owner val lambdaClass = constructor.parentAsClass val invokeFun = lambdaClass.declarations.filterIsInstance().single { it.name.asString() == "invoke" } + val superInvokeFun = invokeFun.overriddenSymbols.single { it.owner.isSuspend == invokeFun.isSuspend }.owner val lambdaName = Name.identifier("${lambdaClass.name.asString()}\$lambda") val lambdaDeclaration = buildFun { startOffset = invokeFun.startOffset endOffset = invokeFun.endOffset - returnType = invokeFun.returnType + // Since box/unbox is done on declaration side in case of suspend function use the specified type + returnType = if (invokeFun.isSuspend) invokeFun.returnType else superInvokeFun.returnType name = lambdaName isSuspend = invokeFun.isSuspend } lambdaDeclaration.parent = factoryFunction - lambdaDeclaration.valueParameters = invokeFun.valueParameters.map { it.copyTo(lambdaDeclaration) } + lambdaDeclaration.valueParameters = superInvokeFun.valueParameters.map { it.copyTo(lambdaDeclaration) } val statements = ArrayList(4)