| // WITH_COROUTINES | |
| // WITH_STDLIB | |
| import helpers.* | |
| import kotlin.coroutines.* | |
| fun interface SuspendRunnable { | |
| @Suppress("FUN_INTERFACE_WITH_SUSPEND_FUNCTION") | |
| suspend fun invoke() | |
| } | |
| fun run(r: SuspendRunnable) { | |
| r::invoke.startCoroutine(EmptyContinuation) | |
| } | |
| var result = "initial" | |
| var resumingCallback: () -> Unit = {} | |
| suspend fun bar() { | |
| // Generate proper state machine | |
| suspendCoroutine<Unit> { cont -> | |
| resumingCallback = { | |
| cont.resume(Unit) | |
| } | |
| } | |
| result = "OK" | |
| } | |
| fun box(): String { | |
| run(::bar) | |
| if (result != "initial") return "fail" | |
| resumingCallback() | |
| return result | |
| } |