| fun test1(str: String): String { | |
| data class A(val x: Int) { | |
| fun foo() = str | |
| } | |
| return A(0).copy().foo() | |
| } | |
| class TestClass(val x: String) { | |
| fun foo(): String { | |
| data class A(val x: Int) { | |
| fun foo() = this@TestClass.x | |
| } | |
| return A(0).copy().foo() | |
| } | |
| } | |
| fun test2(str: String): String = TestClass(str).foo() | |
| fun test3(str: String): String { | |
| var xx = "" | |
| data class A(val x: Int) { | |
| fun foo(): String { xx = str; return xx } | |
| } | |
| return A(0).copy().foo() | |
| } | |
| fun test4(str: String): String { | |
| var xx = "" | |
| fun bar(s: String): String { xx = s; return xx } | |
| data class A(val x: Int) { | |
| fun foo(): String = bar(str) | |
| } | |
| return A(0).copy().foo() | |
| } | |
| fun box(): String { | |
| return when { | |
| test1("test1") != "test1" -> "Failed #1 (parameter capture)" | |
| test2("test2") != "test2" -> "Failed #2 ('this' capture)" | |
| test3("test3") != "test3" -> "Failed #3 ('var' capture)" | |
| test4("test4") != "test4" -> "Failed #4 (local function capture)" | |
| else -> "OK" | |
| } | |
| } |