fun Array.test1(): Array { val func = {(i:Int) -> this} return func(1) } fun Array.test1Nested(): Array { val func = {(i:Int) -> { this }()} return func(1) } fun Array.test2() : Array { class Z2() { fun run(): Array { return this@test2 } } return Z2().run() } fun Array.test2Nested() : Array { class Z2() { fun run(): Array { class Z3 { fun run(): Array { return this@test2Nested; } } return Z3().run() } } return Z2().run() } fun Array.test3(): Array { fun local(): Array { return this@test3 } return local() } fun Array.test3Nested(): Array { fun local(): Array { fun local2(): Array { return this@test3Nested } return local2() } return local() } fun Array.test4() : Array { return object { fun run() : Array { return this@test4 } }.run() } fun Array.test4Nested() : Array { return object { fun run() : Array { return object { fun run() : Array { return this@test4Nested } }.run() } }.run() } fun Array.test1(): Array { val func = {(i:Int) -> this} return func(1) } fun box() : String { val array = Array(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(2, { i -> DoubleArray(i) }) if (array2 != array2.test1()) return "fail on array of double []" return "OK" }