nativeMain.com.dokar.quickjs.bridge.promiseRejectionHandler.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of quickjs-kt Show documentation
Show all versions of quickjs-kt Show documentation
A QuickJS binding for idiomatic Kotlin, with Async/DSL/ES Modules support.
The newest version!
package com.dokar.quickjs.bridge
import com.dokar.quickjs.QuickJs
import kotlinx.cinterop.COpaquePointer
import kotlinx.cinterop.CPointer
import kotlinx.cinterop.CValue
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.cinterop.StableRef
import kotlinx.cinterop.asStableRef
import kotlinx.cinterop.staticCFunction
import quickjs.JSContext
import quickjs.JSRuntime
import quickjs.JSValue
import quickjs.JS_SetHostPromiseRejectionTracker
@Suppress("UNUSED_PARAMETER")
@OptIn(ExperimentalForeignApi::class)
private fun promiseRejectionHandler(
context: CPointer?,
promise: CValue,
reason: CValue,
isHandled: Int,
opaque: COpaquePointer?,
) {
if (isHandled != 1) {
val quickJs = opaque!!.asStableRef()
quickJs.get().setUnhandledPromiseRejection(reason.toKtValue(context!!))
}
}
@OptIn(ExperimentalForeignApi::class)
internal fun setPromiseRejectionHandler(
quickJs: StableRef,
runtime: CPointer,
) {
JS_SetHostPromiseRejectionTracker(
rt = runtime,
cb = staticCFunction(::promiseRejectionHandler),
opaque = quickJs.asCPointer(),
)
}