nativeMain.com.dokar.quickjs.bridge.BindingFunctionData.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.CPointer
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.cinterop.alloc
import kotlinx.cinterop.asStableRef
import kotlinx.cinterop.get
import kotlinx.cinterop.memScoped
import kotlinx.cinterop.ptr
import kotlinx.cinterop.readValue
import kotlinx.cinterop.toCPointer
import kotlinx.cinterop.value
import platform.posix.int64_tVar
import quickjs.JSContext
import quickjs.JSValue
import quickjs.JS_ToInt64
internal data class BindingFunctionData(
val name: String,
val quickJs: QuickJs,
val objectHandle: Long,
) {
companion object {
@OptIn(ExperimentalForeignApi::class)
fun fromJsValues(
ctx: CPointer?,
data: CPointer,
): BindingFunctionData = memScoped {
// Read property name
val name = data[0].readValue().toKtString(ctx!!)!!
// Read the QuickJs instance
val qjsAddress = alloc()
JS_ToInt64(ctx, qjsAddress.ptr, data[1].readValue())
val qjsVoidPtr = qjsAddress.value.toCPointer()
val qjsStableRef = qjsVoidPtr!!.asStableRef()
val quickJs = qjsStableRef.get()
// Read object handle
val objectHandle = alloc()
JS_ToInt64(ctx, objectHandle.ptr, data[2].readValue())
BindingFunctionData(
name = name,
quickJs = quickJs,
objectHandle = objectHandle.value,
)
}
}
}