Generate bytecode for delegated properties
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
class B {
|
||||
private var value: Int by Delegate()
|
||||
|
||||
public fun test() {
|
||||
fun foo() {
|
||||
value = 1
|
||||
}
|
||||
foo()
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
B().test()
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
class Delegate {
|
||||
fun get(t: Any?, p: String): Int = 1
|
||||
}
|
||||
|
||||
class AImpl {
|
||||
val prop: Number by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(AImpl().prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
class Delegate {
|
||||
var inner = Derived()
|
||||
fun get(t: Any?, p: String): Derived {
|
||||
inner = Derived(inner.a + "-get")
|
||||
return inner
|
||||
}
|
||||
fun set(t: Any?, p: String, i: Base) { inner = Derived(inner.a + "-" + i.a + "-set") }
|
||||
}
|
||||
|
||||
class A {
|
||||
var prop: Derived by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop.a != "derived-get") return "fail get ${c.prop.a}"
|
||||
c.prop = Derived()
|
||||
if (c.prop.a != "derived-get-derived-set-get") return "fail set ${c.prop.a}"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
open class Base(open val a: String = "base")
|
||||
|
||||
class Derived(override val a: String = "derived"): Base()
|
||||
@@ -0,0 +1,9 @@
|
||||
class Delegate {
|
||||
fun get(t: Any?, p: String, s: String = ""): Int = 1
|
||||
}
|
||||
|
||||
val prop: Int by Delegate()
|
||||
|
||||
fun box(): String {
|
||||
return if(prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
class A {
|
||||
var prop: Int by Delegate()
|
||||
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
class A {
|
||||
val p = Delegate()
|
||||
var prop: Int by p
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
fun foo() = Delegate()
|
||||
|
||||
class A {
|
||||
var prop: Int by foo()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
val p = Delegate()
|
||||
|
||||
class A {
|
||||
var prop: Int by p
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
class Delegate {
|
||||
fun get(t: A, p: String): Int = 1
|
||||
}
|
||||
|
||||
val A.prop: Int by Delegate()
|
||||
|
||||
class A {
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(A().prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class Delegate {
|
||||
fun get(t: F.A, p: String): Int = 1
|
||||
}
|
||||
|
||||
class F {
|
||||
val A.prop: Int by Delegate()
|
||||
|
||||
class A {
|
||||
}
|
||||
|
||||
fun foo(): Int {
|
||||
return A().prop
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(F().foo() == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class Delegate<T>(var inner: T) {
|
||||
fun get(t: Any?, p: String): T = inner
|
||||
fun set(t: Any?, p: String, i: T) { inner = i }
|
||||
}
|
||||
|
||||
class A {
|
||||
inner class B {
|
||||
var prop: Int by Delegate(1)
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A().B()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
class Delegate {
|
||||
}
|
||||
|
||||
fun Delegate.get(t: Any?, p: String): Int = 1
|
||||
|
||||
class A {
|
||||
val prop: Int by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(A().prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
class Delegate {
|
||||
}
|
||||
|
||||
class A {
|
||||
fun Delegate.get(t: Any?, p: String): Int = 1
|
||||
val prop: Int by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(A().prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
class Delegate {
|
||||
fun get(t: Any?, p: String): Int = 1
|
||||
}
|
||||
|
||||
class A {
|
||||
val prop: Int by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(A().prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
class A {
|
||||
var prop: Int by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
class Delegate {
|
||||
fun get(t: Any?, p: String): Int = 1
|
||||
}
|
||||
|
||||
trait A {
|
||||
val prop: Int
|
||||
}
|
||||
|
||||
class AImpl: A {
|
||||
override val prop: Int by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(AImpl().prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class Delegate<T>(var inner: T) {
|
||||
fun get(t: Any?, p: String): T = inner
|
||||
fun set(t: Any?, p: String, i: T) { inner = i }
|
||||
}
|
||||
|
||||
class A {
|
||||
inner class B {
|
||||
var prop by Delegate(1)
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A().B()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
class A {
|
||||
private var prop: Int by Delegate()
|
||||
|
||||
fun test(): String {
|
||||
if(prop != 1) return "fail get"
|
||||
prop = 2
|
||||
if (prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return A().test()
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
}
|
||||
|
||||
fun Delegate.set(t: Any?, p: String, i: Int) { inner = i }
|
||||
|
||||
class A {
|
||||
var prop: Int by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
}
|
||||
|
||||
class A {
|
||||
fun Delegate.set(t: Any?, p: String, i: Int) { inner = i }
|
||||
|
||||
var prop: Int by Delegate()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
class Delegate {
|
||||
fun get(t: Any?, p: String): Int = 1
|
||||
}
|
||||
|
||||
val prop: Int by Delegate()
|
||||
|
||||
fun box(): String {
|
||||
return if(prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
var prop: Int by Delegate()
|
||||
|
||||
fun box(): String {
|
||||
if(prop != 1) return "fail get"
|
||||
prop = 2
|
||||
if (prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
class Delegate<T>(val f: (T) -> Int) {
|
||||
fun get(t: T, p: String): Int = f(t)
|
||||
}
|
||||
|
||||
val p = Delegate<A> { t -> t.foo() }
|
||||
|
||||
class A(val i: Int) {
|
||||
val prop: Int by p
|
||||
|
||||
fun foo(): Int {
|
||||
return i
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
if(A(1).prop != 1) return "fail get1"
|
||||
if(A(10).prop != 10) return "fail get2"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
class Delegate {
|
||||
fun get(t: Any?, p: String): Int = 1
|
||||
}
|
||||
|
||||
class A {
|
||||
inner class B {
|
||||
val prop: Int by Delegate()
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return if(A().B().prop == 1) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
class Delegate {
|
||||
var inner = 1
|
||||
fun get(t: Any?, p: String): Int = inner
|
||||
fun set(t: Any?, p: String, i: Int) { inner = i }
|
||||
}
|
||||
|
||||
class A {
|
||||
inner class B {
|
||||
var prop: Int by Delegate()
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c = A().B()
|
||||
if(c.prop != 1) return "fail get"
|
||||
c.prop = 2
|
||||
if (c.prop != 2) return "fail set"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
class Delegate {
|
||||
fun get(t: Any?, vararg p: String): Int = 1
|
||||
}
|
||||
|
||||
val prop: Int by Delegate()
|
||||
|
||||
fun box(): String {
|
||||
return if(prop == 1) "OK" else "fail"
|
||||
}
|
||||
Reference in New Issue
Block a user