Files
2024-01-09 14:17:47 +00:00

36 lines
893 B
Kotlin
Vendored

// FIR_IDENTICAL
import kotlinx.cinterop.*
import kotlin.coroutines.*
open class EmptyContinuation(override val context: CoroutineContext = EmptyCoroutineContext) : Continuation<Any?> {
companion object : EmptyContinuation()
override fun resumeWith(result: Result<Any?>) { result.getOrThrow() }
}
lateinit var continuation: Continuation<Unit>
suspend fun suspendHere(): Unit = suspendCoroutine { cont ->
continuation = cont
}
fun startCoroutine(block: suspend () -> Unit) {
block.startCoroutine(EmptyContinuation)
}
@OptIn(kotlinx.cinterop.BetaInteropApi::class)
inline fun <T> myAutoreleasepool(block: () -> T) = autoreleasepool(block)
@OptIn(kotlinx.cinterop.BetaInteropApi::class)
fun main() {
autoreleasepool {
startCoroutine {
myAutoreleasepool {
suspendHere()
}
}
}
continuation.resume(Unit)
}