All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nativeMain.com.dokar.quickjs.bridge.promiseRejectionHandler.kt Maven / Gradle / Ivy

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(),
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy