Generate meaningful bytecode names for extension receivers in INDY lambdas
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
index c4bd88a..d04eae3 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
@@ -4268,6 +4268,12 @@
}
@Test
+ @TestMetadata("extensionReceiversNames.kt")
+ public void testExtensionReceiversNames() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/invokedynamic/extensionReceiversNames.kt");
+ }
+
+ @Test
@TestMetadata("functionRefToJavaInterface.kt")
public void testFunctionRefToJavaInterface() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/invokedynamic/functionRefToJavaInterface.kt");
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt
index 864fbe4..f38aaeb 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt
@@ -446,7 +446,7 @@
var newParameterIndex = 0
newValueParameters.add(
- oldExtensionReceiver.copy(lambda, newParameterIndex++, Name.identifier("\$receiver")).also {
+ oldExtensionReceiver.copy(lambda, newParameterIndex++, oldExtensionReceiver.name).also {
oldToNew[oldExtensionReceiver] = it
}
)
diff --git a/compiler/testData/codegen/bytecodeText/invokedynamic/extensionReceiversNames.kt b/compiler/testData/codegen/bytecodeText/invokedynamic/extensionReceiversNames.kt
new file mode 100644
index 0000000..312405b
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/invokedynamic/extensionReceiversNames.kt
@@ -0,0 +1,28 @@
+// LANGUAGE: +LightweightLambdas
+// TARGET_BACKEND: JVM_IR
+
+fun <T> block(t: T, f: T.() -> Unit) {
+ f.invoke(t)
+}
+
+fun test() {
+ block("first") place1@ {
+ block("second") place2@ {
+ // Breakpoint here
+ this@place1
+ this@place2
+ }
+ }
+}
+
+// JVM_IR_TEMPLATES
+// 2 INVOKEDYNAMIC
+// 0 receiver
+// 5 LOCALVARIABLE
+// 1 LOCALVARIABLE \$this\$place1
+// 1 LOCALVARIABLE \$this\$place2
+// 1 LOCALVARIABLE t
+// 1 LOCALVARIABLE f
+// 1 LOCALVARIABLE \$this_place1
+// 1 LDC "\$this\$place1"
+// 1 LDC "\$this\$place2"
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
index 8050b90..baa71aa 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
@@ -4268,6 +4268,12 @@
}
@Test
+ @TestMetadata("extensionReceiversNames.kt")
+ public void testExtensionReceiversNames() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/invokedynamic/extensionReceiversNames.kt");
+ }
+
+ @Test
@TestMetadata("functionRefToJavaInterface.kt")
public void testFunctionRefToJavaInterface() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/invokedynamic/functionRefToJavaInterface.kt");