KT-4118 Closures mix makes code fail on runtime

#KT-4118 Fixed
This commit is contained in:
Mikhael Bogdanov
2013-11-11 11:57:43 +04:00
parent 5e2e6e557d
commit 1795b2a0bc
9 changed files with 124 additions and 20 deletions
@@ -0,0 +1,94 @@
fun Array<String>.test1(): Array<String> {
val func = {(i:Int) -> this}
return func(1)
}
fun Array<String>.test1Nested(): Array<String> {
val func = {(i:Int) -> { this }()}
return func(1)
}
fun Array<String>.test2() : Array<String> {
class Z2() {
fun run(): Array<String> {
this@test2
}
}
return Z2().run()
}
fun Array<String>.test2Nested() : Array<String> {
class Z2() {
fun run(): Array<String> {
class Z3 {
fun run(): Array<String> {
return this@test2Nested;
}
}
return Z3().run()
}
}
return Z2().run()
}
fun Array<String>.test3(): Array<String> {
fun local(): Array<String> {
this@test3
}
return local()
}
fun Array<String>.test3Nested(): Array<String> {
fun local(): Array<String> {
fun local2(): Array<String> {
this@test3Nested
}
return local2()
}
return local()
}
fun Array<String>.test4() : Array<String> {
return object {
fun run() : Array<String> {
return this@test4
}
}.run()
}
fun Array<String>.test4Nested() : Array<String> {
return object {
fun run() : Array<String> {
return object {
fun run() : Array<String> {
return this@test4Nested
}
}.run()
}
}.run()
}
fun Array<DoubleArray>.test1(): Array<DoubleArray> {
val func = {(i:Int) -> this}
return func(1)
}
fun box() : String {
val array = Array<String>(2, { i -> "${i}" })
if (array != array.test1()) return "fail 1"
if (array != array.test2()) return "fail 2"
if (array != array.test3()) return "fail 3"
if (array != array.test4()) return "fail 4"
if (array != array.test1Nested()) return "fail 1Nested"
if (array != array.test2Nested()) return "fail 2Nested"
if (array != array.test3Nested()) return "fail 3Nested"
if (array != array.test4Nested()) return "fail 4Nested"
val array2 = Array<DoubleArray>(2, { i -> DoubleArray(i) })
if (array2 != array2.test1()) return "fail on array of double []"
return "OK"
}