diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt index 6a5bc4c20c8..a1db9b40b11 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt @@ -91,20 +91,24 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod } private fun buildFunctionReference(expression: IrFunctionReference): Pair { - return CallableReferenceBuilder(expression.symbol.owner, expression, false).build() + val target = expression.symbol.owner + val reflectionTarget = expression.reflectionTarget?.owner ?: target + return CallableReferenceBuilder(target, expression, reflectionTarget).build() } private fun buildLambdaReference(function: IrSimpleFunction, expression: IrFunctionExpression): Pair { - return CallableReferenceBuilder(function, expression, true).build() + return CallableReferenceBuilder(function, expression, null).build() } } private inner class CallableReferenceBuilder( private val function: IrFunction, private val reference: IrExpression, - private val isLambda: Boolean + private val reflectionTarget: IrFunction? ) { + private val isLambda: Boolean get() = reflectionTarget == null + private val isSuspendLambda = isLambda && function.isSuspend private val superClass = if (isSuspendLambda) context.ir.symbols.coroutineImpl.owner.defaultType else context.irBuiltIns.anyType @@ -362,11 +366,12 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod type = clazz.defaultType } + // TODO: What name should be in case of constructor? or class name? getter.body = context.irFactory.createBlockBody( UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf( IrReturnImpl( UNDEFINED_OFFSET, UNDEFINED_OFFSET, nothingType, getter.symbol, IrConstImpl.string( - UNDEFINED_OFFSET, UNDEFINED_OFFSET, stringType, function.name.asString() + UNDEFINED_OFFSET, UNDEFINED_OFFSET, stringType, reflectionTarget!!.name.asString() ) ) )