This commit is contained in:
Horis
2025-01-15 15:25:17 +08:00
parent 54d495859b
commit 20ff2598bf

View File

@@ -1,30 +0,0 @@
package io.legado.app.utils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.supervisorScope
import org.mozilla.javascript.Context
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
@OptIn(ExperimentalContracts::class)
inline fun <T> suspendContinuation(crossinline block: suspend CoroutineScope.() -> T): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
val cx = Context.enter()
try {
val pending = cx.captureContinuation()
pending.applicationState = suspend {
supervisorScope {
block()
}
}
throw pending
} catch (e: IllegalStateException) {
return runBlocking { block() }
} finally {
Context.exit()
}
}