Extension properties in class: don't put receiver on stack for GETFIELD/PUTFIELD instruction

#KT-3031 Fixed
This commit is contained in:
Natalia.Ukhorskaya
2012-11-13 18:36:02 +04:00
parent f868d965e1
commit ba2eab526a
17 changed files with 318 additions and 5 deletions
@@ -0,0 +1,11 @@
class Test {
val Int.foo: String = "OK"
fun test(): String {
return 1.foo
}
}
fun box(): String {
return Test().test()
}
@@ -0,0 +1,16 @@
class Test {
var Double.fooDouble: String = "fail"
var Long.fooLong: String = "fail"
fun test(): String {
val d = 1.0
d.fooDouble = "O"
val l = 1.toLong()
l.fooLong = "K"
return d.fooDouble + l.fooLong
}
}
fun box(): String {
return Test().test()
}
@@ -0,0 +1,13 @@
class Test {
var Int.foo: String = "fail"
fun test(): String {
val i = 1
i.foo = "OK"
return i.foo
}
}
fun box(): String {
return Test().test()
}
@@ -0,0 +1,15 @@
class Test {
val Int.foo: String = "OK"
get() {
val a = $foo
return "OK"
}
fun test(): String {
return 1.foo
}
}
fun box(): String {
return Test().test()
}
@@ -0,0 +1,15 @@
class Test {
private val Int.foo: String = "OK"
get() {
val a = $foo
return "OK"
}
fun test(): String {
return 1.foo
}
}
fun box(): String {
return Test().test()
}
@@ -0,0 +1,16 @@
class Test {
var Int.foo: String = "OK"
private set(str: String) {
$foo = str
}
fun test(): String {
val i = 1
i.foo = "OK"
return i.foo
}
}
fun box(): String {
return Test().test()
}
@@ -0,0 +1,16 @@
class Test {
var Int.foo: String = "fail"
set(str: String) {
$foo = str
}
fun test(): String {
val i = 1
i.foo = "OK"
return i.foo
}
}
fun box(): String {
return Test().test()
}
@@ -0,0 +1,5 @@
val Int.foo: String = "OK"
fun box(): String {
return 1.foo
}
@@ -0,0 +1,10 @@
var Double.fooDouble: String = "fail"
var Long.fooLong: String = "fail"
fun box(): String {
val d = 1.0
d.fooDouble = "O"
val l = 1.toLong()
l.fooLong = "K"
return d.fooDouble + l.fooLong
}
@@ -0,0 +1,17 @@
var Double.fooDouble: String = "fail"
set(str: String) {
$fooDouble = str
}
var Long.fooLong: String = "fail"
set(str: String) {
$fooLong = str
}
fun box(): String {
val d = 1.0
d.fooDouble = "O"
val l = 1.toLong()
l.fooLong = "K"
return d.fooDouble + l.fooLong
}
@@ -0,0 +1,8 @@
val Int.foo: String = "OK"
get() {
return $foo
}
fun box(): String {
return 1.foo
}
@@ -0,0 +1,10 @@
var Int.foo: String = "fail"
set(str: String) {
$foo = str
}
fun box(): String {
val i = 1
i.foo = "OK"
return i.foo
}