[FIR] Extract LHS receiver of assignment operator statements
#KT-53490 Fixed
This commit is contained in:
Vendored
-62
@@ -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"
|
||||
}
|
||||
-58
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user