Local declarations and initializers fixes (#222)

* captured values are stored in corresponding fields before call to super constructor

* preserving the order of initializers

* tests

* refactoring

* - test fix
- workaround of IR bug

* refactoring

* review fix
This commit is contained in:
Igor Chevdar
2017-02-08 14:52:26 +05:00
committed by GitHub
parent 7b0c0f5bfb
commit a856e16d2f
8 changed files with 111 additions and 24 deletions
@@ -0,0 +1,13 @@
class Test {
val x: Int
init {
x = 42
}
val y = x
}
fun main(args: Array<String>) {
println(Test().y)
}
@@ -0,0 +1,13 @@
class Test {
val x: Int
val y = 42
init {
x = y
}
}
fun main(args: Array<String>) {
println(Test().x)
}
@@ -0,0 +1,25 @@
abstract class WaitFor {
init {
condition()
}
abstract fun condition(): Boolean;
}
fun box(): String {
val local = ""
var result = "fail"
val s = object : WaitFor() {
override fun condition(): Boolean {
result = "OK"
return result.length == 2
}
}
return result;
}
fun main(args: Array<String>) {
println(box())
}