[FIR] Extract LHS receiver of assignment operator statements

#KT-53490 Fixed
This commit is contained in:
Brian Norman
2023-06-30 17:13:05 +03:00
committed by Space Team
parent 14276642d4
commit 10ed26991d
45 changed files with 1894 additions and 124 deletions
@@ -3303,12 +3303,6 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToArrayElementWithSideEffect.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("booleanAndOr.kt")
public void testBooleanAndOr() throws Exception {
@@ -3465,12 +3459,6 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/orOrWithSideEffect.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("secondaryConstructorTemporaryVars.kt")
public void testSecondaryConstructorTemporaryVars() throws Exception {
@@ -24645,6 +24645,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24771,6 +24777,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -2252,6 +2252,12 @@ public class FirLightTreeJsIrTextTestGenerated extends AbstractFirLightTreeJsIrT
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -2252,6 +2252,12 @@ public class FirPsiJsIrTextTestGenerated extends AbstractFirPsiJsIrTextTest {
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -2252,6 +2252,12 @@ public class ClassicJsIrTextTestGenerated extends AbstractClassicJsIrTextTest {
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -3409,12 +3409,6 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToArrayElementWithSideEffect.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("booleanAndOr.kt")
public void testBooleanAndOr() throws Exception {
@@ -3571,12 +3565,6 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/expression/evaluationOrder/orOrWithSideEffect.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("secondaryConstructorTemporaryVars.kt")
public void testSecondaryConstructorTemporaryVars() throws Exception {
@@ -3303,12 +3303,6 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToArrayElementWithSideEffect.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("booleanAndOr.kt")
public void testBooleanAndOr() throws Exception {
@@ -3465,12 +3459,6 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/orOrWithSideEffect.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("secondaryConstructorTemporaryVars.kt")
public void testSecondaryConstructorTemporaryVars() throws Exception {
@@ -24645,6 +24645,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24771,6 +24777,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -24645,6 +24645,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24771,6 +24777,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -1,62 +0,0 @@
// IGNORE_BACKEND_K2: JS_IR
// FIR_STATUS: KT-53490
// EXPECTED_REACHABLE_NODES: 1286
package foo
var global: String = ""
class A {
var prop: Int = 0
}
fun bar(s: String, a: A): A {
global += s
return a
}
fun box(): String {
val a = A()
global = ""
bar("A", a).prop = try { global += "B"; 10 } finally {}
assertEquals("AB", global)
assertEquals(10, a.prop)
global = ""
bar("A", a).prop += try { global += "B"; 20 } finally {}
assertEquals("AB", global)
assertEquals(30, a.prop)
global = ""
bar("A", a).prop -= try { global += "B"; 20 } finally {}
assertEquals("AB", global)
assertEquals(10, a.prop)
global = ""
bar("A", a).prop *= try { global += "B"; 2 } finally {}
assertEquals("AB", global)
assertEquals(20, a.prop)
global = ""
bar("A", a).prop /= try { global += "B"; 5 } finally {}
assertEquals("AB", global)
assertEquals(4, a.prop)
global = ""
bar("A", a).prop %= try { global += "B"; 3 } finally {}
assertEquals("AB", global)
assertEquals(1, a.prop)
global = ""
(try { bar("A", a) } finally {}).prop++
assertEquals("A", global)
assertEquals(2, a.prop)
global = ""
++(try { bar("A", a) } finally {}).prop
assertEquals("A", global)
assertEquals(3, a.prop)
return "OK"
}
@@ -1,58 +0,0 @@
// IGNORE_BACKEND_K2: JS_IR
// FIR_STATUS: KT-53490
// EXPECTED_REACHABLE_NODES: 1298
package foo
var log = ""
class A(val value: Int) {
operator fun plus(other: A): A {
log += "A.plus(${other.value});"
return A(value + other.value)
}
}
val _array = arrayOf(A(2))
fun getArray(): Array<A> {
log += "getArray();"
return _array
}
fun getArrayIndex(): Int {
log += "getArrayIndex();"
return 0
}
class B(value: Int) {
var a = A(value)
}
val _property = B(10)
val _functionResult = B(100)
val foo: B
get() {
log += "foo;"
return _property
}
fun bar(): B {
log += "bar();"
return _functionResult
}
fun box(): String {
getArray()[getArrayIndex()] += A(3)
assertEquals(5, _array[0].value)
foo.a += A(20)
assertEquals(30, _property.a.value)
bar().a += A(200)
assertEquals(300, _functionResult.a.value)
assertEquals("getArray();getArrayIndex();A.plus(3);foo;A.plus(20);bar();A.plus(200);", log)
return "OK"
}