From b81139ad36a55ccb9fe86c966665efbf36f4f611 Mon Sep 17 00:00:00 2001 From: Kristoffer Andersen Date: Tue, 1 Mar 2022 12:37:14 +0100 Subject: [PATCH] [IR] More extensive LVT tests around destructuring All tests in this commit _pass_ to document existing behavior, but this will change in a separate commit as we reflect desired behavior in the test expectations. --- .../FirLocalVariableTestGenerated.java | 112 ++++++++++++++++-- .../debug/localVariables/assignment.kt | 32 +++++ .../destructuring/assignment.kt | 18 +++ .../assignmentCustomComponentNs.kt | 36 ++++++ .../assignmentCustomComponentNsMultiline.kt | 49 ++++++++ .../destructuring/assignmentMultiline.kt | 34 ++++++ .../assignmentUnderscoreNames.kt | 22 ++++ .../assignmentUnderscoreNamesMultiline.kt | 41 +++++++ .../forLoop.kt} | 2 +- .../destructuring/forLoopMultiline.kt | 50 ++++++++ .../localVariables/destructuring/lambda.kt | 31 +++++ .../destructuring/lambdaCustomComponentNs.kt | 48 ++++++++ .../lambdaCustomComponentNsMultiline.kt | 62 ++++++++++ .../destructuring/lambdaMultiline.kt | 48 ++++++++ .../destructuring/lambdaMultipleDestructs.kt | 36 ++++++ .../localVariables/destructuringInLambdas.kt | 25 ---- .../debug/localVariables/forLoopMultiline.kt | 35 ++++++ .../codegen/IrLocalVariableTestGenerated.java | 112 ++++++++++++++++-- .../codegen/LocalVariableTestGenerated.java | 112 ++++++++++++++++-- 19 files changed, 843 insertions(+), 62 deletions(-) create mode 100644 compiler/testData/debug/localVariables/assignment.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/assignment.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNs.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNsMultiline.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/assignmentMultiline.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNames.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNamesMultiline.kt rename compiler/testData/debug/localVariables/{destructuringInFor.kt => destructuring/forLoop.kt} (96%) create mode 100644 compiler/testData/debug/localVariables/destructuring/forLoopMultiline.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/lambda.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNs.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNsMultiline.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/lambdaMultiline.kt create mode 100644 compiler/testData/debug/localVariables/destructuring/lambdaMultipleDestructs.kt delete mode 100644 compiler/testData/debug/localVariables/destructuringInLambdas.kt create mode 100644 compiler/testData/debug/localVariables/forLoopMultiline.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLocalVariableTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLocalVariableTestGenerated.java index 3607f26dba2..19652e4657b 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLocalVariableTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLocalVariableTestGenerated.java @@ -25,6 +25,12 @@ public class FirLocalVariableTestGenerated extends AbstractFirLocalVariableTest KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/localVariables"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("compiler/testData/debug/localVariables/assignment.kt"); + } + @Test @TestMetadata("catchClause.kt") public void testCatchClause() throws Exception { @@ -37,18 +43,6 @@ public class FirLocalVariableTestGenerated extends AbstractFirLocalVariableTest runTest("compiler/testData/debug/localVariables/copyFunction.kt"); } - @Test - @TestMetadata("destructuringInFor.kt") - public void testDestructuringInFor() throws Exception { - runTest("compiler/testData/debug/localVariables/destructuringInFor.kt"); - } - - @Test - @TestMetadata("destructuringInLambdas.kt") - public void testDestructuringInLambdas() throws Exception { - runTest("compiler/testData/debug/localVariables/destructuringInLambdas.kt"); - } - @Test @TestMetadata("doWhile.kt") public void testDoWhile() throws Exception { @@ -61,6 +55,12 @@ public class FirLocalVariableTestGenerated extends AbstractFirLocalVariableTest runTest("compiler/testData/debug/localVariables/emptyFun.kt"); } + @Test + @TestMetadata("forLoopMultiline.kt") + public void testForLoopMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/forLoopMultiline.kt"); + } + @Test @TestMetadata("inlineProperty.kt") public void testInlineProperty() throws Exception { @@ -215,6 +215,94 @@ public class FirLocalVariableTestGenerated extends AbstractFirLocalVariableTest } } + @Nested + @TestMetadata("compiler/testData/debug/localVariables/destructuring") + @TestDataPath("$PROJECT_ROOT") + public class Destructuring { + @Test + public void testAllFilesPresentInDestructuring() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/localVariables/destructuring"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignment.kt"); + } + + @Test + @TestMetadata("assignmentCustomComponentNs.kt") + public void testAssignmentCustomComponentNs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNs.kt"); + } + + @Test + @TestMetadata("assignmentCustomComponentNsMultiline.kt") + public void testAssignmentCustomComponentNsMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNsMultiline.kt"); + } + + @Test + @TestMetadata("assignmentMultiline.kt") + public void testAssignmentMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentMultiline.kt"); + } + + @Test + @TestMetadata("assignmentUnderscoreNames.kt") + public void testAssignmentUnderscoreNames() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNames.kt"); + } + + @Test + @TestMetadata("assignmentUnderscoreNamesMultiline.kt") + public void testAssignmentUnderscoreNamesMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNamesMultiline.kt"); + } + + @Test + @TestMetadata("forLoop.kt") + public void testForLoop() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/forLoop.kt"); + } + + @Test + @TestMetadata("forLoopMultiline.kt") + public void testForLoopMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/forLoopMultiline.kt"); + } + + @Test + @TestMetadata("lambda.kt") + public void testLambda() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambda.kt"); + } + + @Test + @TestMetadata("lambdaCustomComponentNs.kt") + public void testLambdaCustomComponentNs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNs.kt"); + } + + @Test + @TestMetadata("lambdaCustomComponentNsMultiline.kt") + public void testLambdaCustomComponentNsMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNsMultiline.kt"); + } + + @Test + @TestMetadata("lambdaMultiline.kt") + public void testLambdaMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaMultiline.kt"); + } + + @Test + @TestMetadata("lambdaMultipleDestructs.kt") + public void testLambdaMultipleDestructs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaMultipleDestructs.kt"); + } + } + @Nested @TestMetadata("compiler/testData/debug/localVariables/receiverMangling") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/testData/debug/localVariables/assignment.kt b/compiler/testData/debug/localVariables/assignment.kt new file mode 100644 index 00000000000..1d5b10adc7f --- /dev/null +++ b/compiler/testData/debug/localVariables/assignment.kt @@ -0,0 +1,32 @@ + + +// FILE: test.kt +fun box(): String { + val + o + = + "O" + + + val k = "K" + + return o + k +} + +// A location for the expression being evaluated, and one for the store to the LV, but: +// JVM: location for evaluating expression, location for the assigned variable +// JVM_IR: location for evaluating expression, location for the val keyword + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:8 box: +// test.kt:6 box: +// test.kt:11 box: o:java.lang.String="O":java.lang.String +// test.kt:13 box: o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String + +// EXPECTATIONS JVM_IR +// test.kt:8 box: +// test.kt:5 box: +// test.kt:11 box: o:java.lang.String="O":java.lang.String +// test.kt:13 box: o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/assignment.kt b/compiler/testData/debug/localVariables/destructuring/assignment.kt new file mode 100644 index 00000000000..0c653846245 --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/assignment.kt @@ -0,0 +1,18 @@ +// WITH_STDLIB + +// FILE: test.kt +fun box(): String { + val p = "O" to "K" + + val ( o , k ) = p + + return o + k +} + +// EXPECTATIONS + +// test.kt:5 box: +// test.kt:7 box: p:kotlin.Pair=kotlin.Pair +// test.kt:9 box: p:kotlin.Pair=kotlin.Pair, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String + + diff --git a/compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNs.kt b/compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNs.kt new file mode 100644 index 00000000000..638248aae83 --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNs.kt @@ -0,0 +1,36 @@ + + +// FILE: test.kt +class MyPair(val x: String, val y: String) { + operator fun component1(): String { + return "O" + } + + operator fun component2(): String { + return "K" + } +} + +fun box(): String { + val p = MyPair("X", "Y") + val (o, k) = p + return o + k +} + +// EXPECTATIONS +// test.kt:15 box: +// test.kt:4 : x:java.lang.String="X":java.lang.String, y:java.lang.String="Y":java.lang.String +// test.kt:15 box: + +// test.kt:16 box: p:MyPair=MyPair +// test.kt:6 component1: +// test.kt:16 box: p:MyPair=MyPair +// test.kt:10 component2: + +// EXPECTATIONS JVM +// test.kt:16 box: p:MyPair=MyPair +// test.kt:17 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String + +// EXPECTATIONS JVM_IR +// test.kt:16 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String +// test.kt:17 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNsMultiline.kt b/compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNsMultiline.kt new file mode 100644 index 00000000000..30615485d1d --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNsMultiline.kt @@ -0,0 +1,49 @@ + +// IGNORE_BACKEND_FIR: JVM_IR +// FILE: test.kt +class MyPair(val x: String, val y: String) { + operator fun component1(): String { + return "O" + } + + operator fun component2(): String { + return "K" + } +} + +fun box(): String { + val p = MyPair("X", "Y") + val + ( + o + , + k + ) + = + p + return o + k +} + +// EXPECTATIONS +// test.kt:15 box: +// test.kt:4 : x:java.lang.String="X":java.lang.String, y:java.lang.String="Y":java.lang.String +// test.kt:15 box: + +// EXPECTATIONS JVM +// test.kt:23 box: p:MyPair=MyPair +// test.kt:6 component1: +// test.kt:18 box: p:MyPair=MyPair +// test.kt:10 component2: +// test.kt:20 box: p:MyPair=MyPair +// test.kt:24 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String + +// EXPECTATIONS JVM_IR +// test.kt:23 box: p:MyPair=MyPair +// test.kt:18 box: p:MyPair=MyPair +// test.kt:6 component1: +// test.kt:18 box: p:MyPair=MyPair +// test.kt:23 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String +// test.kt:20 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String +// test.kt:10 component2: +// test.kt:20 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String +// test.kt:24 box: p:MyPair=MyPair, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/assignmentMultiline.kt b/compiler/testData/debug/localVariables/destructuring/assignmentMultiline.kt new file mode 100644 index 00000000000..afa46ac512c --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/assignmentMultiline.kt @@ -0,0 +1,34 @@ +// WITH_STDLIB + +// IGNORE_BACKEND_FIR: JVM_IR +// FILE: test.kt +fun box(): String { + val p = "O" to "K" + + val + ( + o + , + k + ) + = + p + + return o + k +} + +// EXPECTATIONS +// test.kt:6 box: + +// EXPECTATIONS JVM +// test.kt:15 box: p:kotlin.Pair=kotlin.Pair +// test.kt:10 box: p:kotlin.Pair=kotlin.Pair +// test.kt:12 box: p:kotlin.Pair=kotlin.Pair +// test.kt:17 box: p:kotlin.Pair=kotlin.Pair, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String + +// EXPECTATIONS JVM_IR +// test.kt:15 box: p:kotlin.Pair=kotlin.Pair +// test.kt:10 box: p:kotlin.Pair=kotlin.Pair +// test.kt:15 box: p:kotlin.Pair=kotlin.Pair, o:java.lang.String="O":java.lang.String +// test.kt:12 box: p:kotlin.Pair=kotlin.Pair, o:java.lang.String="O":java.lang.String +// test.kt:17 box: p:kotlin.Pair=kotlin.Pair, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNames.kt b/compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNames.kt new file mode 100644 index 00000000000..4eec9542135 --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNames.kt @@ -0,0 +1,22 @@ +// WITH_STDLIB + +// FILE: test.kt +fun box(): String { + val p = Triple("X","O","K") + + val ( _ , o, k ) = p + + return o + k +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:5 box: +// test.kt:7 box: p:kotlin.Triple=kotlin.Triple +// test.kt:9 box: p:kotlin.Triple=kotlin.Triple, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String + +// EXPECTATIONS JVM_IR +// test.kt:5 box: +// test.kt:7 box: p:kotlin.Triple=kotlin.Triple +// test.kt:9 box: p:kotlin.Triple=kotlin.Triple, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNamesMultiline.kt b/compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNamesMultiline.kt new file mode 100644 index 00000000000..fec99127fb7 --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNamesMultiline.kt @@ -0,0 +1,41 @@ +// WITH_STDLIB + +// IGNORE_BACKEND_FIR: JVM_IR +// FILE: test.kt +fun box(): String { + val p = Triple("X","O","K") + + val + ( + _ + , + o + , + k + ) + = + p + + return o + k +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:6 box: + +// test.kt:17 box: p:kotlin.Triple=kotlin.Triple +// test.kt:12 box: p:kotlin.Triple=kotlin.Triple +// test.kt:14 box: p:kotlin.Triple=kotlin.Triple + +// test.kt:19 box: p:kotlin.Triple=kotlin.Triple, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String + +// EXPECTATIONS JVM_IR +// test.kt:6 box: + +// test.kt:17 box: p:kotlin.Triple=kotlin.Triple +// test.kt:12 box: p:kotlin.Triple=kotlin.Triple +// test.kt:17 box: p:kotlin.Triple=kotlin.Triple, o:java.lang.String="O":java.lang.String +// test.kt:14 box: p:kotlin.Triple=kotlin.Triple, o:java.lang.String="O":java.lang.String + +// test.kt:19 box: p:kotlin.Triple=kotlin.Triple, o:java.lang.String="O":java.lang.String, k:java.lang.String="K":java.lang.String \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuringInFor.kt b/compiler/testData/debug/localVariables/destructuring/forLoop.kt similarity index 96% rename from compiler/testData/debug/localVariables/destructuringInFor.kt rename to compiler/testData/debug/localVariables/destructuring/forLoop.kt index f112ee9e6c5..1611eeea974 100644 --- a/compiler/testData/debug/localVariables/destructuringInFor.kt +++ b/compiler/testData/debug/localVariables/destructuring/forLoop.kt @@ -1,6 +1,6 @@ // WITH_STDLIB -//FILE: test.kt +// FILE: test.kt fun box() { val map: Map = mapOf("1" to "23") for ((a, b) in map) { diff --git a/compiler/testData/debug/localVariables/destructuring/forLoopMultiline.kt b/compiler/testData/debug/localVariables/destructuring/forLoopMultiline.kt new file mode 100644 index 00000000000..f8edf917884 --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/forLoopMultiline.kt @@ -0,0 +1,50 @@ +// WITH_STDLIB + +// IGNORE_BACKEND_FIR: JVM_IR +// FILE: test.kt +fun box() { + val map: Map = mapOf("1" to "23") + + for + ( + ( + a + , + b + ) + in + map + ) + { + a + b + } +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:6 box: +// test.kt:16 box: map:java.util.Map=java.util.Collections$SingletonMap + +// test.kt:8 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:11 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:13 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:19 box: map:java.util.Map=java.util.Collections$SingletonMap, a:java.lang.String="1":java.lang.String, b:java.lang.String="23":java.lang.String + +// test.kt:8 box: map:java.util.Map=java.util.Collections$SingletonMap + +// test.kt:21 box: map:java.util.Map=java.util.Collections$SingletonMap + +// EXPECTATIONS JVM_IR +// test.kt:6 box: +// test.kt:16 box: map:java.util.Map=java.util.Collections$SingletonMap + +// test.kt:11 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:13 box: map:java.util.Map=java.util.Collections$SingletonMap, a:java.lang.String="1":java.lang.String +// test.kt:16 box: map:java.util.Map=java.util.Collections$SingletonMap, a:java.lang.String="1":java.lang.String +// test.kt:13 box: map:java.util.Map=java.util.Collections$SingletonMap, a:java.lang.String="1":java.lang.String + +// test.kt:19 box: map:java.util.Map=java.util.Collections$SingletonMap, a:java.lang.String="1":java.lang.String, b:java.lang.String="23":java.lang.String + +// test.kt:16 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:21 box: map:java.util.Map=java.util.Collections$SingletonMap \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/lambda.kt b/compiler/testData/debug/localVariables/destructuring/lambda.kt new file mode 100644 index 00000000000..135bd528f0b --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/lambda.kt @@ -0,0 +1,31 @@ + + +// FILE: test.kt +data class A(val x: String, val y: Int) + +fun foo(a: A, block: (A) -> String): String = block(a) + +fun box() { + foo(A("O", 123)) { (x, y) -> x + y } +} + +// EXPECTATIONS +// EXPECTATIONS JVM +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="O":java.lang.String, y:int=123:int +// test.kt:9 box: +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:9 invoke: $dstr$x$y:A=A +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:9 box: +// test.kt:10 box: + +// EXPECTATIONS JVM_IR +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="O":java.lang.String, y:int=123:int +// test.kt:9 box: +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:9 invoke: +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:9 box: +// test.kt:10 box: \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNs.kt b/compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNs.kt new file mode 100644 index 00000000000..8fc792eeecd --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNs.kt @@ -0,0 +1,48 @@ + + +// FILE: test.kt +class MyPair(val x: String, val y: String) { + operator fun component1(): String { + return "O" + } + + operator fun component2(): String { + return "K" + } +} + +fun foo(a: MyPair, block: (MyPair) -> String): String = block(a) + +fun box() { + foo(MyPair("X", "Y")) { (x, y) -> x + y } +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:17 box: +// test.kt:4 : x:java.lang.String="X":java.lang.String, y:java.lang.String="Y":java.lang.String +// test.kt:17 box: +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:17 invoke: $dstr$x$y:MyPair=MyPair +// test.kt:6 component1: +// test.kt:17 invoke: $dstr$x$y:MyPair=MyPair +// test.kt:10 component2: +// test.kt:17 invoke: $dstr$x$y:MyPair=MyPair +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:17 box: +// test.kt:18 box: + +// EXPECTATIONS JVM_IR +// test.kt:17 box: +// test.kt:4 : x:java.lang.String="X":java.lang.String, y:java.lang.String="Y":java.lang.String +// test.kt:17 box: +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:17 invoke: +// test.kt:6 component1: +// test.kt:17 invoke: +// test.kt:10 component2: +// test.kt:17 invoke: x:java.lang.String="O":java.lang.String +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:17 box: +// test.kt:18 box: \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNsMultiline.kt b/compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNsMultiline.kt new file mode 100644 index 00000000000..80dc6eb8640 --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNsMultiline.kt @@ -0,0 +1,62 @@ +// IGNORE_BACKEND_FIR: JVM_IR + +// FILE: test.kt +class MyPair(val x: String, val y: String) { + operator fun component1(): String { + return "O" + } + + operator fun component2(): String { + return "K" + } +} + +fun foo(a: MyPair, block: (MyPair) -> String): String = block(a) + +fun box() { + foo(MyPair("X", "Y")) + { + ( + x + , + y + ) + -> + x + y + } +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:17 box: +// test.kt:4 : x:java.lang.String="X":java.lang.String, y:java.lang.String="Y":java.lang.String +// test.kt:18 box: +// test.kt:17 box: +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:25 invoke: $dstr$x$y:MyPair=MyPair +// test.kt:6 component1: +// test.kt:25 invoke: $dstr$x$y:MyPair=MyPair +// test.kt:10 component2: +// test.kt:25 invoke: $dstr$x$y:MyPair=MyPair +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:17 box: +// test.kt:27 box: + +// EXPECTATIONS JVM_IR +// test.kt:17 box: +// test.kt:4 : x:java.lang.String="X":java.lang.String, y:java.lang.String="Y":java.lang.String +// test.kt:17 box: +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:19 invoke: +// test.kt:20 invoke: +// test.kt:6 component1: +// test.kt:20 invoke: +// test.kt:19 invoke: x:java.lang.String="O":java.lang.String +// test.kt:22 invoke: x:java.lang.String="O":java.lang.String +// test.kt:10 component2: +// test.kt:22 invoke: x:java.lang.String="O":java.lang.String +// test.kt:25 invoke: x:java.lang.String="O":java.lang.String, y:java.lang.String="K":java.lang.String +// test.kt:14 foo: a:MyPair=MyPair, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:17 box: +// test.kt:27 box: \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/lambdaMultiline.kt b/compiler/testData/debug/localVariables/destructuring/lambdaMultiline.kt new file mode 100644 index 00000000000..38936f13218 --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/lambdaMultiline.kt @@ -0,0 +1,48 @@ +// IGNORE_BACKEND_FIR: JVM_IR + +// FILE: test.kt +data class A(val x: String, val y: Int) + +fun foo(a: A, block: (A) -> String): String = block(a) + +fun box() { + foo(A("O", 123)) + { + ( + x + , + y + ) + -> + x + y + } + + return +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="O":java.lang.String, y:int=123:int +// test.kt:10 box: +// test.kt:9 box: +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:17 invoke: $dstr$x$y:A=A +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:9 box: +// test.kt:20 box: + +// EXPECTATIONS JVM_IR +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="O":java.lang.String, y:int=123:int +// test.kt:9 box: +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:11 invoke: +// test.kt:12 invoke: +// test.kt:11 invoke: x:java.lang.String="O":java.lang.String +// test.kt:14 invoke: x:java.lang.String="O":java.lang.String +// test.kt:17 invoke: x:java.lang.String="O":java.lang.String, y:int=123:int +// test.kt:6 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 +// test.kt:9 box: +// test.kt:20 box: \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuring/lambdaMultipleDestructs.kt b/compiler/testData/debug/localVariables/destructuring/lambdaMultipleDestructs.kt new file mode 100644 index 00000000000..a36b4d90d6d --- /dev/null +++ b/compiler/testData/debug/localVariables/destructuring/lambdaMultipleDestructs.kt @@ -0,0 +1,36 @@ + + +// FILE: test.kt +data class A(val x: String, val y: Int) + +fun foo(a: A, b: A, block: (A, A) -> String): String = block(a, b) + +fun box() { + foo(A("O", 123), A("K", 877)) { (x, y), (z, w) -> (x + z) + (y + w) } +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="O":java.lang.String, y:int=123:int +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="K":java.lang.String, y:int=877:int +// test.kt:9 box: +// test.kt:6 foo: a:A=A, b:A=A, block:kotlin.jvm.functions.Function2=TestKt$box$1 +// test.kt:9 invoke: $dstr$x$y:A=A, $dstr$z$w:A=A +// test.kt:6 foo: a:A=A, b:A=A, block:kotlin.jvm.functions.Function2=TestKt$box$1 +// test.kt:9 box: +// test.kt:10 box: + +// EXPECTATIONS JVM_IR +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="O":java.lang.String, y:int=123:int +// test.kt:9 box: +// test.kt:4 : x:java.lang.String="K":java.lang.String, y:int=877:int +// test.kt:9 box: +// test.kt:6 foo: a:A=A, b:A=A, block:kotlin.jvm.functions.Function2=TestKt$box$1 +// test.kt:9 invoke: +// test.kt:6 foo: a:A=A, b:A=A, block:kotlin.jvm.functions.Function2=TestKt$box$1 +// test.kt:9 box: +// test.kt:10 box: \ No newline at end of file diff --git a/compiler/testData/debug/localVariables/destructuringInLambdas.kt b/compiler/testData/debug/localVariables/destructuringInLambdas.kt deleted file mode 100644 index b7eb2eb474e..00000000000 --- a/compiler/testData/debug/localVariables/destructuringInLambdas.kt +++ /dev/null @@ -1,25 +0,0 @@ -//FILE: test.kt - -data class A(val x: String, val y: Int) - -fun foo(a: A, block: (A) -> String): String = block(a) - -fun box() { - foo(A("O", 123)) { (x, y) -> x + y } -} - -// EXPECTATIONS -// test.kt:8 box: -// test.kt:3 : x:java.lang.String="O":java.lang.String, y:int=123:int -// test.kt:8 box: -// test.kt:5 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 - -// EXPECTATIONS JVM -// test.kt:8 invoke: $dstr$x$y:A=A -// EXPECTATIONS JVM_IR -// test.kt:8 invoke: - -// EXPECTATIONS -// test.kt:5 foo: a:A=A, block:kotlin.jvm.functions.Function1=TestKt$box$1 -// test.kt:8 box: -// test.kt:9 box: diff --git a/compiler/testData/debug/localVariables/forLoopMultiline.kt b/compiler/testData/debug/localVariables/forLoopMultiline.kt new file mode 100644 index 00000000000..aad8bae298a --- /dev/null +++ b/compiler/testData/debug/localVariables/forLoopMultiline.kt @@ -0,0 +1,35 @@ +// WITH_STDLIB + +// IGNORE_BACKEND_FIR: JVM_IR +// FILE: test.kt +fun box() { + val map: Map = mapOf("1" to "23") + + for + ( + e + in + map + ) + { + e.key + e.value + } +} + +// EXPECTATIONS + +// EXPECTATIONS JVM +// test.kt:6 box: +// test.kt:12 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:8 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:15 box: map:java.util.Map=java.util.Collections$SingletonMap, e:java.util.Map$Entry=java.util.AbstractMap$SimpleImmutableEntry +// test.kt:8 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:17 box: map:java.util.Map=java.util.Collections$SingletonMap + +// EXPECTATIONS JVM_IR +// test.kt:6 box: +// test.kt:12 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:10 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:15 box: map:java.util.Map=java.util.Collections$SingletonMap, e:java.util.Map$Entry=java.util.AbstractMap$SimpleImmutableEntry +// test.kt:12 box: map:java.util.Map=java.util.Collections$SingletonMap +// test.kt:17 box: map:java.util.Map=java.util.Collections$SingletonMap \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrLocalVariableTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrLocalVariableTestGenerated.java index 349a8f9714c..7f31942b90d 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrLocalVariableTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrLocalVariableTestGenerated.java @@ -25,6 +25,12 @@ public class IrLocalVariableTestGenerated extends AbstractIrLocalVariableTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/localVariables"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("compiler/testData/debug/localVariables/assignment.kt"); + } + @Test @TestMetadata("catchClause.kt") public void testCatchClause() throws Exception { @@ -37,18 +43,6 @@ public class IrLocalVariableTestGenerated extends AbstractIrLocalVariableTest { runTest("compiler/testData/debug/localVariables/copyFunction.kt"); } - @Test - @TestMetadata("destructuringInFor.kt") - public void testDestructuringInFor() throws Exception { - runTest("compiler/testData/debug/localVariables/destructuringInFor.kt"); - } - - @Test - @TestMetadata("destructuringInLambdas.kt") - public void testDestructuringInLambdas() throws Exception { - runTest("compiler/testData/debug/localVariables/destructuringInLambdas.kt"); - } - @Test @TestMetadata("doWhile.kt") public void testDoWhile() throws Exception { @@ -61,6 +55,12 @@ public class IrLocalVariableTestGenerated extends AbstractIrLocalVariableTest { runTest("compiler/testData/debug/localVariables/emptyFun.kt"); } + @Test + @TestMetadata("forLoopMultiline.kt") + public void testForLoopMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/forLoopMultiline.kt"); + } + @Test @TestMetadata("inlineProperty.kt") public void testInlineProperty() throws Exception { @@ -215,6 +215,94 @@ public class IrLocalVariableTestGenerated extends AbstractIrLocalVariableTest { } } + @Nested + @TestMetadata("compiler/testData/debug/localVariables/destructuring") + @TestDataPath("$PROJECT_ROOT") + public class Destructuring { + @Test + public void testAllFilesPresentInDestructuring() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/localVariables/destructuring"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @Test + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignment.kt"); + } + + @Test + @TestMetadata("assignmentCustomComponentNs.kt") + public void testAssignmentCustomComponentNs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNs.kt"); + } + + @Test + @TestMetadata("assignmentCustomComponentNsMultiline.kt") + public void testAssignmentCustomComponentNsMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNsMultiline.kt"); + } + + @Test + @TestMetadata("assignmentMultiline.kt") + public void testAssignmentMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentMultiline.kt"); + } + + @Test + @TestMetadata("assignmentUnderscoreNames.kt") + public void testAssignmentUnderscoreNames() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNames.kt"); + } + + @Test + @TestMetadata("assignmentUnderscoreNamesMultiline.kt") + public void testAssignmentUnderscoreNamesMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNamesMultiline.kt"); + } + + @Test + @TestMetadata("forLoop.kt") + public void testForLoop() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/forLoop.kt"); + } + + @Test + @TestMetadata("forLoopMultiline.kt") + public void testForLoopMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/forLoopMultiline.kt"); + } + + @Test + @TestMetadata("lambda.kt") + public void testLambda() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambda.kt"); + } + + @Test + @TestMetadata("lambdaCustomComponentNs.kt") + public void testLambdaCustomComponentNs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNs.kt"); + } + + @Test + @TestMetadata("lambdaCustomComponentNsMultiline.kt") + public void testLambdaCustomComponentNsMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNsMultiline.kt"); + } + + @Test + @TestMetadata("lambdaMultiline.kt") + public void testLambdaMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaMultiline.kt"); + } + + @Test + @TestMetadata("lambdaMultipleDestructs.kt") + public void testLambdaMultipleDestructs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaMultipleDestructs.kt"); + } + } + @Nested @TestMetadata("compiler/testData/debug/localVariables/receiverMangling") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/LocalVariableTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/LocalVariableTestGenerated.java index 870b7e820a9..67e60d05607 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/LocalVariableTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/LocalVariableTestGenerated.java @@ -25,6 +25,12 @@ public class LocalVariableTestGenerated extends AbstractLocalVariableTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/localVariables"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @Test + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("compiler/testData/debug/localVariables/assignment.kt"); + } + @Test @TestMetadata("catchClause.kt") public void testCatchClause() throws Exception { @@ -37,18 +43,6 @@ public class LocalVariableTestGenerated extends AbstractLocalVariableTest { runTest("compiler/testData/debug/localVariables/copyFunction.kt"); } - @Test - @TestMetadata("destructuringInFor.kt") - public void testDestructuringInFor() throws Exception { - runTest("compiler/testData/debug/localVariables/destructuringInFor.kt"); - } - - @Test - @TestMetadata("destructuringInLambdas.kt") - public void testDestructuringInLambdas() throws Exception { - runTest("compiler/testData/debug/localVariables/destructuringInLambdas.kt"); - } - @Test @TestMetadata("doWhile.kt") public void testDoWhile() throws Exception { @@ -61,6 +55,12 @@ public class LocalVariableTestGenerated extends AbstractLocalVariableTest { runTest("compiler/testData/debug/localVariables/emptyFun.kt"); } + @Test + @TestMetadata("forLoopMultiline.kt") + public void testForLoopMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/forLoopMultiline.kt"); + } + @Test @TestMetadata("inlineProperty.kt") public void testInlineProperty() throws Exception { @@ -215,6 +215,94 @@ public class LocalVariableTestGenerated extends AbstractLocalVariableTest { } } + @Nested + @TestMetadata("compiler/testData/debug/localVariables/destructuring") + @TestDataPath("$PROJECT_ROOT") + public class Destructuring { + @Test + public void testAllFilesPresentInDestructuring() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/debug/localVariables/destructuring"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); + } + + @Test + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignment.kt"); + } + + @Test + @TestMetadata("assignmentCustomComponentNs.kt") + public void testAssignmentCustomComponentNs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNs.kt"); + } + + @Test + @TestMetadata("assignmentCustomComponentNsMultiline.kt") + public void testAssignmentCustomComponentNsMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentCustomComponentNsMultiline.kt"); + } + + @Test + @TestMetadata("assignmentMultiline.kt") + public void testAssignmentMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentMultiline.kt"); + } + + @Test + @TestMetadata("assignmentUnderscoreNames.kt") + public void testAssignmentUnderscoreNames() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNames.kt"); + } + + @Test + @TestMetadata("assignmentUnderscoreNamesMultiline.kt") + public void testAssignmentUnderscoreNamesMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/assignmentUnderscoreNamesMultiline.kt"); + } + + @Test + @TestMetadata("forLoop.kt") + public void testForLoop() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/forLoop.kt"); + } + + @Test + @TestMetadata("forLoopMultiline.kt") + public void testForLoopMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/forLoopMultiline.kt"); + } + + @Test + @TestMetadata("lambda.kt") + public void testLambda() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambda.kt"); + } + + @Test + @TestMetadata("lambdaCustomComponentNs.kt") + public void testLambdaCustomComponentNs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNs.kt"); + } + + @Test + @TestMetadata("lambdaCustomComponentNsMultiline.kt") + public void testLambdaCustomComponentNsMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaCustomComponentNsMultiline.kt"); + } + + @Test + @TestMetadata("lambdaMultiline.kt") + public void testLambdaMultiline() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaMultiline.kt"); + } + + @Test + @TestMetadata("lambdaMultipleDestructs.kt") + public void testLambdaMultipleDestructs() throws Exception { + runTest("compiler/testData/debug/localVariables/destructuring/lambdaMultipleDestructs.kt"); + } + } + @Nested @TestMetadata("compiler/testData/debug/localVariables/receiverMangling") @TestDataPath("$PROJECT_ROOT")