Don't skip receiver with side effects on static calls
#KT-6278 Fixed
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
var holder = ""
|
||||
|
||||
fun getA(): A {
|
||||
holder += "OK"
|
||||
return A
|
||||
}
|
||||
|
||||
object A {
|
||||
platformStatic fun a(): String {
|
||||
return holder
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return getA().a()
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
object A {
|
||||
|
||||
platformStatic var a: Int = 1
|
||||
|
||||
var b: Int = 1
|
||||
[platformStatic] get
|
||||
|
||||
var c: Int = 1
|
||||
[platformStatic] set
|
||||
|
||||
}
|
||||
|
||||
var holder = ""
|
||||
fun getA(): A {
|
||||
holder += "getA()"
|
||||
return A
|
||||
}
|
||||
|
||||
|
||||
fun box(): String {
|
||||
|
||||
var p = A.a++
|
||||
if (p != 1 || A.a != 2) return "fail 1"
|
||||
|
||||
p = A.b++
|
||||
if (p != 1 || A.b != 2) return "fail 2"
|
||||
|
||||
p = A.c++
|
||||
if (p != 1 || A.c != 2) return "fail 3"
|
||||
|
||||
|
||||
p = getA().a++
|
||||
if (p != 2 || A.a != 3 || holder != "getA()") return "fail 4: $holder"
|
||||
holder = ""
|
||||
|
||||
p = getA().b++
|
||||
if (p != 2 || A.b != 3 || holder != "getA()") return "fail 5: $holder"
|
||||
holder = ""
|
||||
|
||||
p = getA().c++
|
||||
if (p != 2 || A.c != 3 || holder != "getA()") return "fail 6: $holder"
|
||||
holder = ""
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
object A {
|
||||
|
||||
platformStatic var a: Int = 1
|
||||
|
||||
var b: Int = 1
|
||||
[platformStatic] get
|
||||
|
||||
var c: Int = 1
|
||||
[platformStatic] set
|
||||
|
||||
}
|
||||
|
||||
var holder = ""
|
||||
fun getA(): A {
|
||||
holder += "getA()"
|
||||
return A
|
||||
}
|
||||
|
||||
|
||||
fun box(): String {
|
||||
|
||||
var p = ++A.a
|
||||
if (p != 2 || A.a != 2) return "fail 1"
|
||||
|
||||
p = ++A.b
|
||||
if (p != 2 || A.b != 2) return "fail 2"
|
||||
|
||||
p = ++A.c
|
||||
if (p != 2 || A.c != 2) return "fail 3"
|
||||
|
||||
|
||||
p = ++getA().a
|
||||
if (p != 3 || A.a != 3 || holder != "getA()") return "fail 4: $holder"
|
||||
holder = ""
|
||||
|
||||
p = ++getA().b
|
||||
if (p != 3 || A.b != 3 || holder != "getA()") return "fail 5: $holder"
|
||||
holder = ""
|
||||
|
||||
p = ++getA().c
|
||||
if (p != 3 || A.c != 3 || holder != "getA()") return "fail 6: $holder"
|
||||
holder = ""
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
var holder = ""
|
||||
|
||||
fun getA(): A {
|
||||
holder += "getA()"
|
||||
return A
|
||||
}
|
||||
|
||||
object A {
|
||||
|
||||
platformStatic var a: Int = 1
|
||||
|
||||
var b: Int = 1
|
||||
[platformStatic] get
|
||||
|
||||
var c: Int = 1
|
||||
[platformStatic] set
|
||||
|
||||
}
|
||||
|
||||
|
||||
fun box(): String {
|
||||
|
||||
if (getA().a != 1 || holder != "getA()") return "fail 1: $holder"
|
||||
holder = ""
|
||||
|
||||
if (getA().b != 1 || holder != "getA()") return "fail 2: $holder"
|
||||
holder = ""
|
||||
|
||||
if (getA().c != 1 || holder != "getA()") return "fail 3: $holder"
|
||||
holder = ""
|
||||
|
||||
getA().a = 2
|
||||
if (getA().a != 2 || holder != "getA()getA()") return "fail 1: $holder"
|
||||
holder = ""
|
||||
|
||||
getA().b = 2
|
||||
if (getA().b != 2 || holder != "getA()getA()") return "fail 2: $holder"
|
||||
holder = ""
|
||||
|
||||
getA().c = 2
|
||||
if (getA().c != 2 || holder != "getA()getA()") return "fail 3: $holder"
|
||||
holder = ""
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
object A {
|
||||
|
||||
platformStatic var a: Int = 1
|
||||
|
||||
var b: Int = 1
|
||||
[platformStatic] get
|
||||
|
||||
var c: Int = 1
|
||||
[platformStatic] set
|
||||
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
|
||||
A.a++
|
||||
if (A.a != 2) return "fail 1"
|
||||
|
||||
A.b++
|
||||
if (A.b != 2) return "fail 2"
|
||||
|
||||
A.c++
|
||||
if (A.c != 2) return "fail 3"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user