From 19ce0553222fcc9813237f2b9c2de7489b2702a6 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Mon, 18 Nov 2019 13:34:41 +0100 Subject: [PATCH] JVM_IR. Pass stub function reference in 'getSignature' --- .../jvm/lower/CallableReferenceLowering.kt | 15 ++++++++++++++- .../callableReferences/boundFunctionReference.kt | 1 - .../innerClassConstuctorReference.kt | 1 - 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt index 2acdfa9b843..fc35c051829 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt @@ -21,11 +21,13 @@ import org.jetbrains.kotlin.backend.jvm.ir.isLambda import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* @@ -347,7 +349,18 @@ internal class CallableReferenceLowering(private val context: JvmBackendContext) private fun createGetSignatureMethod(superFunction: IrSimpleFunction): IrSimpleFunction = buildOverride(superFunction).apply { body = context.createJvmIrBuilder(symbol, startOffset, endOffset).run { irExprBody(irCall(backendContext.ir.symbols.signatureStringIntrinsic).apply { - putValueArgument(0, irFunctionReference.deepCopyWithSymbols(symbol.owner)) + putValueArgument( + 0, + //don't pass receivers otherwise LocalDeclarationLowering will create additional captured parameters + IrFunctionReferenceImpl( + UNDEFINED_OFFSET, + UNDEFINED_OFFSET, + irFunctionReference.type, + irFunctionReference.symbol, + 0, + null + ) + ) }) } } diff --git a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/boundFunctionReference.kt b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/boundFunctionReference.kt index a7847d279d8..703220a40c2 100644 --- a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/boundFunctionReference.kt +++ b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/boundFunctionReference.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR // FILE: 1.kt // SKIP_INLINE_CHECK_IN: inlineFun$default package test diff --git a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/innerClassConstuctorReference.kt b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/innerClassConstuctorReference.kt index 3a38d08a89c..4402e747e1b 100644 --- a/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/innerClassConstuctorReference.kt +++ b/compiler/testData/codegen/boxInline/defaultValues/lambdaInlining/callableReferences/innerClassConstuctorReference.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_MULTI_MODULE: JVM_IR // FILE: 1.kt // SKIP_INLINE_CHECK_IN: inlineFun$default package test