| // FILE: lib.kt | |
| package foo | |
| var state = false | |
| inline fun blockImpl(p: () -> Unit) { | |
| if (state) return | |
| p() | |
| } | |
| inline fun block(p: () -> Unit) { | |
| if (state) return | |
| blockImpl(p) | |
| } | |
| // FILE: main.kt | |
| package foo | |
| import kotlin.test.* | |
| fun test(x: Int): Int { | |
| block outer@ { | |
| block inner@ { | |
| if (x < 10) return@inner | |
| if (x == 10) return@outer | |
| block innermost@ { | |
| if (x > 500) { | |
| return 500500 | |
| } | |
| } | |
| return x | |
| } | |
| if (x < 5) return@outer | |
| return x + 10 | |
| } | |
| return x + 100 | |
| } | |
| fun box(): String { | |
| assertEquals(16, test(6)) | |
| assertEquals(104, test(4)) | |
| assertEquals(110, test(110)) | |
| assertEquals(11, test(11)) | |
| assertEquals(500500, test(502)) | |
| return "OK" | |
| } |