| // WITH_COROUTINES | |
| // WITH_STDLIB | |
| // FILE: test.kt | |
| import kotlin.coroutines.* | |
| import helpers.* | |
| suspend inline fun test1(c: suspend () -> Unit) { | |
| c() | |
| } | |
| suspend inline fun test2(crossinline c: suspend () -> Unit) { | |
| val l: suspend () -> Unit = { c() } | |
| l() | |
| } | |
| // FILE: box.kt | |
| import kotlin.coroutines.* | |
| import kotlin.coroutines.intrinsics.* | |
| import helpers.* | |
| fun builder(c: suspend () -> Unit) { | |
| c.startCoroutine(EmptyContinuation) | |
| } | |
| suspend fun calculate() = suspendCoroutineUninterceptedOrReturn<String> { | |
| it.resume("OK") | |
| COROUTINE_SUSPENDED | |
| } | |
| fun box() : String { | |
| var res = "FAIL 1" | |
| builder { | |
| val a = 1 | |
| test2 { | |
| val b = 2 | |
| test1 { | |
| val c = a + b // 3 | |
| run { | |
| val a = c + 1 // 4 | |
| test1 { | |
| val b = c + c // 6 | |
| test2 { | |
| val c = b - a // 2 | |
| res = "${calculate()} $a$b$c" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| if (res != "OK 462") return res | |
| return "OK" | |
| } |