diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt index 0c878f3e877..85c9edf975c 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt @@ -489,18 +489,22 @@ private class ScriptToClassTransformer( transformAnnotations(data) typeRemapper.withinScope(this) { val newDispatchReceiverParameter = dispatchReceiverParameter?.transform(data) + val isInScriptConstructor = this@transformFunctionChildren is IrConstructor && parent == irScript val dataForChildren = when { newDispatchReceiverParameter == null -> data + newDispatchReceiverParameter.type == scriptClassReceiver.type -> - ScriptToClassTransformerContext(newDispatchReceiverParameter.symbol, null, null, this is IrConstructor) + ScriptToClassTransformerContext(newDispatchReceiverParameter.symbol, null, null, isInScriptConstructor) + newDispatchReceiverParameter.type == data.valueParameterForFieldReceiver?.owner?.type -> ScriptToClassTransformerContext( null, data.fieldForScriptThis, newDispatchReceiverParameter.symbol, - this is IrConstructor + isInScriptConstructor ) + else -> data } dispatchReceiverParameter = newDispatchReceiverParameter diff --git a/compiler/testData/codegen/customScript/captureImplicitReceiverInDefaultValue.kts b/compiler/testData/codegen/customScript/captureImplicitReceiverInDefaultValue.kts new file mode 100644 index 00000000000..0bdcd0fae77 --- /dev/null +++ b/compiler/testData/codegen/customScript/captureImplicitReceiverInDefaultValue.kts @@ -0,0 +1,11 @@ +// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6, NATIVE, WASM, JVM_OLD +// KOTLIN_SCRIPT_DEFINITION: org.jetbrains.kotlin.codegen.TestScriptWithReceivers + +// receiver: abracadabra +// expected: rv=cadabra + +// KT-55068 + +class User(var property: String = drop(4)) + +val rv = User().property diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/CustomScriptCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/CustomScriptCodegenTestGenerated.java index 2ad25f98f27..5e4d66bde09 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/CustomScriptCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/CustomScriptCodegenTestGenerated.java @@ -29,6 +29,11 @@ public class CustomScriptCodegenTestGenerated extends AbstractCustomScriptCodege KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/customScript"), Pattern.compile("^(.*)$"), null, true); } + @TestMetadata("captureImplicitReceiverInDefaultValue.kts") + public void testCaptureImplicitReceiverInDefaultValue_kts() throws Exception { + runTest("compiler/testData/codegen/customScript/captureImplicitReceiverInDefaultValue.kts"); + } + @TestMetadata("pathPattern5.kts") public void testPathPattern5_kts() throws Exception { runTest("compiler/testData/codegen/customScript/pathPattern5.kts"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/IrCustomScriptCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/IrCustomScriptCodegenTestGenerated.java index 557263046c9..79ecd23b69c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/IrCustomScriptCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/IrCustomScriptCodegenTestGenerated.java @@ -29,6 +29,11 @@ public class IrCustomScriptCodegenTestGenerated extends AbstractIrCustomScriptCo KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/customScript"), Pattern.compile("^(.*)$"), null, true); } + @TestMetadata("captureImplicitReceiverInDefaultValue.kts") + public void testCaptureImplicitReceiverInDefaultValue_kts() throws Exception { + runTest("compiler/testData/codegen/customScript/captureImplicitReceiverInDefaultValue.kts"); + } + @TestMetadata("pathPattern5.kts") public void testPathPattern5_kts() throws Exception { runTest("compiler/testData/codegen/customScript/pathPattern5.kts");