Skip to content

Instantly share code, notes, and snippets.

@genotrance
Last active July 15, 2020 16:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save genotrance/4869d1feb53c7ec7be806a2f225d07ab to your computer and use it in GitHub Desktop.
Save genotrance/4869d1feb53c7ec7be806a2f225d07ab to your computer and use it in GitHub Desktop.
Nim wrapper for quickjs using nimterop
# nim c -d:FLAGS quickjs.nim
#
# FLAGS
# -d:quickjsGit
# -d:quickjsSetVer=
# -d:quickjsStatic
import os
import nimterop/[build, cimport]
const
baseDir = getProjectCacheDir("nimquickjs")
setDefines(@["quickjsStatic"])
getHeader(
header = "quickjs.h",
giturl = "https://github.com/ldarren/quickjs",
outdir = baseDir,
makeFlags = "libquickjs.a"
)
static:
cDisableCaching()
cImport(quickjsPath, flags = "-E__")
# Generated @ 2020-07-03T00:54:21-05:00
# Command line:
# /home/gt/nimterop/nimterop/toast --preprocess -m:c -E__ --pnim --nim:/home/gt/programming/nimdevel/bin/nim /home/gt/.cache/nim/nimterop/nimquickjs/quickjs.h -o /home/gt/programming/wrappers/QuickJS/quickjswrapper.nim
# const 'js_force_inline' has unsupported value 'inline __attribute__((always_inline))'
# const 'JS_BOOL' has unsupported value 'int'
# const 'JS_FLOAT64_NAN' has unsupported value 'NAN'
# const 'JSValueConst' has unsupported value 'JSValue'
# const 'JS_NAN' has unsupported value '(JSValue){ .u.float64 = JS_FLOAT64_NAN, JS_TAG_FLOAT64 }'
# const 'JS_NULL' has unsupported value 'JS_MKVAL(JS_TAG_NULL, 0)'
# const 'JS_UNDEFINED' has unsupported value 'JS_MKVAL(JS_TAG_UNDEFINED, 0)'
# const 'JS_FALSE' has unsupported value 'JS_MKVAL(JS_TAG_BOOL, 0)'
# const 'JS_TRUE' has unsupported value 'JS_MKVAL(JS_TAG_BOOL, 1)'
# const 'JS_EXCEPTION' has unsupported value 'JS_MKVAL(JS_TAG_EXCEPTION, 0)'
# const 'JS_UNINITIALIZED' has unsupported value 'JS_MKVAL(JS_TAG_UNINITIALIZED, 0)'
{.push hint[ConvFromXtoItselfNotNeeded]: off.}
import macros
macro defineEnum(typ: untyped): untyped =
result = newNimNode(nnkStmtList)
# Enum mapped to distinct cint
result.add quote do:
type `typ`* = distinct cint
for i in ["+", "-", "*", "div", "mod", "shl", "shr", "or", "and", "xor", "<", "<=", "==", ">", ">="]:
let
ni = newIdentNode(i)
typout = if i[0] in "<=>": newIdentNode("bool") else: typ # comparisons return bool
if i[0] == '>': # cannot borrow `>` and `>=` from templates
let
nopp = if i.len == 2: newIdentNode("<=") else: newIdentNode("<")
result.add quote do:
proc `ni`*(x: `typ`, y: cint): `typout` = `nopp`(y, x)
proc `ni`*(x: cint, y: `typ`): `typout` = `nopp`(y, x)
proc `ni`*(x, y: `typ`): `typout` = `nopp`(y, x)
else:
result.add quote do:
proc `ni`*(x: `typ`, y: cint): `typout` {.borrow.}
proc `ni`*(x: cint, y: `typ`): `typout` {.borrow.}
proc `ni`*(x, y: `typ`): `typout` {.borrow.}
result.add quote do:
proc `ni`*(x: `typ`, y: int): `typout` = `ni`(x, y.cint)
proc `ni`*(x: int, y: `typ`): `typout` = `ni`(x.cint, y)
let
divop = newIdentNode("/") # `/`()
dlrop = newIdentNode("$") # `$`()
notop = newIdentNode("not") # `not`()
result.add quote do:
proc `divop`*(x, y: `typ`): `typ` = `typ`((x.float / y.float).cint)
proc `divop`*(x: `typ`, y: cint): `typ` = `divop`(x, `typ`(y))
proc `divop`*(x: cint, y: `typ`): `typ` = `divop`(`typ`(x), y)
proc `divop`*(x: `typ`, y: int): `typ` = `divop`(x, y.cint)
proc `divop`*(x: int, y: `typ`): `typ` = `divop`(x.cint, y)
proc `dlrop`*(x: `typ`): string {.borrow.}
proc `notop`*(x: `typ`): `typ` {.borrow.}
{.pragma: impquickjsHdr,
header: "/home/gt/.cache/nim/nimterop/nimquickjs/quickjs.h".}
{.experimental: "codeReordering".}
defineEnum(Enum_quickjsh1)
defineEnum(JSCFunctionEnum) ## ```
## C function definition
## ```
const
JS_TAG_FIRST* = (-11).cint ## ```
## first negative tag
## ```
JS_TAG_BIG_DECIMAL* = (-11).cint ## ```
## first negative tag
## ```
JS_TAG_BIG_INT* = (-10).cint
JS_TAG_BIG_FLOAT* = (-9).cint
JS_TAG_SYMBOL* = (-8).cint
JS_TAG_STRING* = (-7).cint
JS_TAG_MODULE* = (-3).cint ## ```
## used internally
## ```
JS_TAG_FUNCTION_BYTECODE* = (-2).cint ## ```
## used internally
## ```
JS_TAG_OBJECT* = (-1).cint ## ```
## used internally
## ```
JS_TAG_INT* = (0).cint
JS_TAG_BOOL* = (1).cint
JS_TAG_NULL* = (2).cint
JS_TAG_UNDEFINED* = (3).cint
JS_TAG_UNINITIALIZED* = (4).cint
JS_TAG_CATCH_OFFSET* = (5).cint
JS_TAG_EXCEPTION* = (6).cint
JS_TAG_FLOAT64* = (7).cint ## ```
## any larger tag is FLOAT64 if JS_NAN_BOXING
## ```
JS_PROP_CONFIGURABLE* = (1 shl typeof(1)(0))
JS_PROP_WRITABLE* = (1 shl typeof(1)(1))
JS_PROP_ENUMERABLE* = (1 shl typeof(1)(2))
JS_PROP_C_W_E* = (JS_PROP_CONFIGURABLE or
typeof(JS_PROP_CONFIGURABLE)(JS_PROP_WRITABLE) or
typeof(JS_PROP_CONFIGURABLE)(JS_PROP_ENUMERABLE))
JS_PROP_LENGTH* = (1 shl typeof(1)(3))
JS_PROP_TMASK* = (3 shl typeof(3)(4))
JS_PROP_NORMAL* = (0 shl typeof(0)(4))
JS_PROP_GETSET* = (1 shl typeof(1)(4))
JS_PROP_VARREF* = (2 shl typeof(2)(4))
JS_PROP_AUTOINIT* = (3 shl typeof(3)(4))
JS_PROP_HAS_SHIFT* = 8
JS_PROP_HAS_CONFIGURABLE* = (1 shl typeof(1)(8))
JS_PROP_HAS_WRITABLE* = (1 shl typeof(1)(9))
JS_PROP_HAS_ENUMERABLE* = (1 shl typeof(1)(10))
JS_PROP_HAS_GET* = (1 shl typeof(1)(11))
JS_PROP_HAS_SET* = (1 shl typeof(1)(12))
JS_PROP_HAS_VALUE* = (1 shl typeof(1)(13))
JS_PROP_THROW* = (1 shl typeof(1)(14))
JS_PROP_THROW_STRICT* = (1 shl typeof(1)(15))
JS_PROP_NO_ADD* = (1 shl typeof(1)(16))
JS_PROP_NO_EXOTIC* = (1 shl typeof(1)(17))
JS_DEFAULT_STACK_SIZE* = (256 * typeof(256)(1024))
JS_EVAL_TYPE_GLOBAL* = (0 shl typeof(0)(0))
JS_EVAL_TYPE_MODULE* = (1 shl typeof(1)(0))
JS_EVAL_TYPE_DIRECT* = (2 shl typeof(2)(0))
JS_EVAL_TYPE_INDIRECT* = (3 shl typeof(3)(0))
JS_EVAL_TYPE_MASK* = (3 shl typeof(3)(0))
JS_EVAL_FLAG_STRICT* = (1 shl typeof(1)(3))
JS_EVAL_FLAG_STRIP* = (1 shl typeof(1)(4))
JS_EVAL_FLAG_COMPILE_ONLY* = (1 shl typeof(1)(5))
JS_EVAL_FLAG_BACKTRACE_BARRIER* = (1 shl typeof(1)(6))
JS_CALL_FLAG_CONSTRUCTOR* = (1 shl typeof(1)(0))
JS_GPN_STRING_MASK* = (1 shl typeof(1)(0))
JS_GPN_SYMBOL_MASK* = (1 shl typeof(1)(1))
JS_GPN_PRIVATE_MASK* = (1 shl typeof(1)(2))
JS_GPN_ENUM_ONLY* = (1 shl typeof(1)(4))
JS_GPN_SET_ENUM* = (1 shl typeof(1)(5))
JS_WRITE_OBJ_BYTECODE* = (1 shl typeof(1)(0))
JS_WRITE_OBJ_BSWAP* = (1 shl typeof(1)(1))
JS_READ_OBJ_BYTECODE* = (1 shl typeof(1)(0))
JS_READ_OBJ_ROM_DATA* = (1 shl typeof(1)(1))
JS_CFUNC_generic* = (0).JSCFunctionEnum ## ```
## XXX: should rename for namespace isolation
## ```
JS_CFUNC_generic_magic* = (JS_CFUNC_generic + 1).JSCFunctionEnum
JS_CFUNC_constructor* = (JS_CFUNC_generic_magic + 1).JSCFunctionEnum
JS_CFUNC_constructor_magic* = (JS_CFUNC_constructor + 1).JSCFunctionEnum
JS_CFUNC_constructor_or_func* = (JS_CFUNC_constructor_magic + 1).JSCFunctionEnum
JS_CFUNC_constructor_or_func_magic* = (JS_CFUNC_constructor_or_func + 1).JSCFunctionEnum
JS_CFUNC_f_f* = (JS_CFUNC_constructor_or_func_magic + 1).JSCFunctionEnum
JS_CFUNC_f_f_f* = (JS_CFUNC_f_f + 1).JSCFunctionEnum
JS_CFUNC_getter* = (JS_CFUNC_f_f_f + 1).JSCFunctionEnum
JS_CFUNC_setter* = (JS_CFUNC_getter + 1).JSCFunctionEnum
JS_CFUNC_getter_magic* = (JS_CFUNC_setter + 1).JSCFunctionEnum
JS_CFUNC_setter_magic* = (JS_CFUNC_getter_magic + 1).JSCFunctionEnum
JS_CFUNC_iterator_next* = (JS_CFUNC_setter_magic + 1).JSCFunctionEnum
JS_DEF_CFUNC* = 0
JS_DEF_CGETSET* = 1
JS_DEF_CGETSET_MAGIC* = 2
JS_DEF_PROP_STRING* = 3
JS_DEF_PROP_INT32* = 4
JS_DEF_PROP_INT64* = 5
JS_DEF_PROP_DOUBLE* = 6
JS_DEF_PROP_UNDEFINED* = 7
JS_DEF_OBJECT* = 8
JS_DEF_ALIAS* = 9
type
JSRuntime* {.importc, impquickjsHdr, incompleteStruct.} = object
JSContext* {.importc, impquickjsHdr, incompleteStruct.} = object
JSObject* {.importc, impquickjsHdr, incompleteStruct.} = object
JSClass* {.importc, impquickjsHdr, incompleteStruct.} = object
JSClassID* {.importc, impquickjsHdr.} = uint32
JSAtom* {.importc, impquickjsHdr.} = uint32
JSRefCountHeader* {.bycopy, impquickjsHdr, importc: "struct JSRefCountHeader".} = object
ref_count*: cint
JSValueUnion* {.union, bycopy, impquickjsHdr, importc: "union JSValueUnion".} = object
int32*: int32
float64*: cdouble
`ptr`*: pointer
JSValue* {.bycopy, impquickjsHdr, importc: "struct JSValue".} = object
u*: JSValueUnion
tag*: int64
JSCFunction* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext; this_val: JSValue;
argc: cint; argv: ptr JSValue): JSValue {.cdecl.}
JSCFunctionMagic* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext;
this_val: JSValue; argc: cint; argv: ptr JSValue; magic: cint): JSValue {.cdecl.}
JSCFunctionData* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext;
this_val: JSValue; argc: cint; argv: ptr JSValue; magic: cint;
func_data: ptr JSValue): JSValue {.cdecl.}
JSMallocState* {.bycopy, impquickjsHdr, importc: "struct JSMallocState".} = object
malloc_count*: uint
malloc_size*: uint
malloc_limit*: uint
opaque*: pointer ## ```
## user opaque
## ```
JSMallocFunctions* {.bycopy, impquickjsHdr, importc: "struct JSMallocFunctions".} = object
js_malloc*: proc (s: ptr JSMallocState; size: uint): pointer {.cdecl.}
js_free*: proc (s: ptr JSMallocState; `ptr`: pointer) {.cdecl.}
js_realloc*: proc (s: ptr JSMallocState; `ptr`: pointer; size: uint): pointer {.cdecl.}
js_malloc_usable_size*: proc (`ptr`: pointer): uint {.cdecl.}
JSGCObjectHeader* {.importc, impquickjsHdr, incompleteStruct.} = object
JS_MarkFunc* {.importc, impquickjsHdr.} = proc (rt: ptr JSRuntime;
gp: ptr JSGCObjectHeader) {.cdecl.}
JSMemoryUsage* {.bycopy, impquickjsHdr, importc: "struct JSMemoryUsage".} = object
malloc_size*: int64
malloc_limit*: int64
memory_used_size*: int64
malloc_count*: int64
memory_used_count*: int64
atom_count*: int64
atom_size*: int64
str_count*: int64
str_size*: int64
obj_count*: int64
obj_size*: int64
prop_count*: int64
prop_size*: int64
shape_count*: int64
shape_size*: int64
js_func_count*: int64
js_func_size*: int64
js_func_code_size*: int64
js_func_pc2line_count*: int64
js_func_pc2line_size*: int64
c_func_count*: int64
array_count*: int64
fast_array_count*: int64
fast_array_elements*: int64
binary_object_count*: int64
binary_object_size*: int64
JSPropertyEnum* {.bycopy, impquickjsHdr, importc: "struct JSPropertyEnum".} = object
is_enumerable*: cint
atom*: JSAtom
JSPropertyDescriptor* {.bycopy, impquickjsHdr,
importc: "struct JSPropertyDescriptor".} = object
flags*: cint
value*: JSValue
getter*: JSValue
setter*: JSValue
JSClassExoticMethods* {.bycopy, impquickjsHdr,
importc: "struct JSClassExoticMethods".} = object
get_own_property*: proc (ctx: ptr JSContext; desc: ptr JSPropertyDescriptor;
obj: JSValue; prop: JSAtom): cint {.cdecl.} ## ```
## Return -1 if exception (can only happen in case of Proxy object),
## FALSE if the property does not exists, TRUE if it exists. If 1 is
## returned, the property descriptor 'desc' is filled if != NULL.
## ```
get_own_property_names*: proc (ctx: ptr JSContext; ptab: ptr ptr JSPropertyEnum;
plen: ptr uint32; obj: JSValue): cint {.cdecl.} ## ```
## '*ptab' should hold the '*plen' property keys. Return 0 if OK,
## -1 if exception. The 'is_enumerable' field is ignored.
## ```
delete_property*: proc (ctx: ptr JSContext; obj: JSValue; prop: JSAtom): cint {.cdecl.} ## ```
## return < 0 if exception, or TRUE/FALSE
## ```
define_own_property*: proc (ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom;
val: JSValue; getter: JSValue; setter: JSValue;
flags: cint): cint {.cdecl.} ## ```
## return < 0 if exception or TRUE/FALSE
## ```
has_property*: proc (ctx: ptr JSContext; obj: JSValue; atom: JSAtom): cint {.cdecl.} ## ```
## The following methods can be emulated with the previous ones,
## so they are usually not needed
## return < 0 if exception or TRUE/FALSE
## ```
get_property*: proc (ctx: ptr JSContext; obj: JSValue; atom: JSAtom;
receiver: JSValue): JSValue {.cdecl.}
set_property*: proc (ctx: ptr JSContext; obj: JSValue; atom: JSAtom; value: JSValue;
receiver: JSValue; flags: cint): cint {.cdecl.} ## ```
## return < 0 if exception or TRUE/FALSE
## ```
JSClassFinalizer* {.importc, impquickjsHdr.} = proc (rt: ptr JSRuntime; val: JSValue) {.
cdecl.}
JSClassGCMark* {.importc, impquickjsHdr.} = proc (rt: ptr JSRuntime; val: JSValue;
mark_func: ptr JS_MarkFunc) {.cdecl.}
JSClassCall* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext; func_obj: JSValue;
this_val: JSValue; argc: cint; argv: ptr JSValue; flags: cint): JSValue {.cdecl.}
JSClassDef* {.bycopy, impquickjsHdr, importc: "struct JSClassDef".} = object
class_name*: cstring
finalizer*: ptr JSClassFinalizer
gc_mark*: ptr JSClassGCMark ## ```
## if call != NULL, the object is a function. If (flags &
## JS_CALL_FLAG_CONSTRUCTOR) != 0, the function is called as a
## constructor. In this case, 'this_val' is new.target. A
## constructor call only happens if the object constructor bit is
## set (see JS_SetConstructorBit()).
## ```
call*: ptr JSClassCall ## ```
## if call != NULL, the object is a function. If (flags &
## JS_CALL_FLAG_CONSTRUCTOR) != 0, the function is called as a
## constructor. In this case, 'this_val' is new.target. A
## constructor call only happens if the object constructor bit is
## set (see JS_SetConstructorBit()).
## ```
exotic*: ptr JSClassExoticMethods ## ```
## XXX: suppress this indirection ? It is here only to save memory
## because only a few classes need these methods
## ```
JSFreeArrayBufferDataFunc* {.importc, impquickjsHdr.} = proc (rt: ptr JSRuntime;
opaque: pointer; `ptr`: pointer) {.cdecl.}
JSHostPromiseRejectionTracker* {.importc, impquickjsHdr.} = proc (
ctx: ptr JSContext; promise: JSValue; reason: JSValue; is_handled: cint;
opaque: pointer) {.cdecl.}
JSInterruptHandler* {.importc, impquickjsHdr.} = proc (rt: ptr JSRuntime;
opaque: pointer): cint {.cdecl.}
JSModuleDef* {.importc, impquickjsHdr, incompleteStruct.} = object
JSModuleNormalizeFunc* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext;
module_base_name: cstring; module_name: cstring; opaque: pointer): cstring {.
cdecl.}
JSModuleLoaderFunc* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext;
module_name: cstring; opaque: pointer): ptr JSModuleDef {.cdecl.}
JSJobFunc* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext; argc: cint;
argv: ptr JSValue): JSValue {.cdecl.}
JSCFunctionType* {.union, bycopy, impquickjsHdr, importc: "union JSCFunctionType".} = object
generic*: ptr JSCFunction
generic_magic*: proc (ctx: ptr JSContext; this_val: JSValue; argc: cint;
argv: ptr JSValue; magic: cint): JSValue {.cdecl.}
constructor*: ptr JSCFunction
constructor_magic*: proc (ctx: ptr JSContext; new_target: JSValue; argc: cint;
argv: ptr JSValue; magic: cint): JSValue {.cdecl.}
constructor_or_func*: ptr JSCFunction
f_f*: proc (a1: cdouble): cdouble {.cdecl.}
f_f_f*: proc (a1: cdouble; a2: cdouble): cdouble {.cdecl.}
getter*: proc (ctx: ptr JSContext; this_val: JSValue): JSValue {.cdecl.}
setter*: proc (ctx: ptr JSContext; this_val: JSValue; val: JSValue): JSValue {.cdecl.}
getter_magic*: proc (ctx: ptr JSContext; this_val: JSValue; magic: cint): JSValue {.
cdecl.}
setter_magic*: proc (ctx: ptr JSContext; this_val: JSValue; val: JSValue; magic: cint): JSValue {.
cdecl.}
iterator_next*: proc (ctx: ptr JSContext; this_val: JSValue; argc: cint;
argv: ptr JSValue; pdone: ptr cint; magic: cint): JSValue {.cdecl.}
Type_quickjsh1* {.bycopy, impquickjsHdr, importc: "struct Type_quickjsh1".} = object
length*: uint8 ## ```
## XXX: should move outside union
## ```
cproto*: uint8 ## ```
## XXX: should move outside union
## ```
cfunc*: JSCFunctionType ## ```
## XXX: should move outside union
## ```
Type_quickjsh2* {.bycopy, impquickjsHdr, importc: "struct Type_quickjsh2".} = object
get*: JSCFunctionType
set*: JSCFunctionType
Type_quickjsh3* {.bycopy, impquickjsHdr, importc: "struct Type_quickjsh3".} = object
name*: cstring
base*: cint
Type_quickjsh4* {.bycopy, impquickjsHdr, importc: "struct Type_quickjsh4".} = object
tab*: ptr JSCFunctionListEntry
len*: cint
Union_quickjsh1* {.union, bycopy, impquickjsHdr, importc: "union Union_quickjsh1".} = object
`func`*: Type_quickjsh1
getset*: Type_quickjsh2
alias*: Type_quickjsh3
prop_list*: Type_quickjsh4
str*: cstring
i32*: int32
i64*: int64
f64*: cdouble
JSCFunctionListEntry* {.bycopy, impquickjsHdr,
importc: "struct JSCFunctionListEntry".} = object
name*: cstring
prop_flags*: uint8
def_type*: uint8
magic*: int16
u*: Union_quickjsh1
JSModuleInitFunc* {.importc, impquickjsHdr.} = proc (ctx: ptr JSContext;
m: ptr JSModuleDef): cint {.cdecl.}
proc JS_NewFloat64*(ctx: ptr JSContext; d: cdouble): JSValue {.
importc: "__JS_NewFloat64", cdecl, impquickjsHdr.}
proc JS_VALUE_IS_NAN*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_NewRuntime*(): ptr JSRuntime {.importc, cdecl, impquickjsHdr.}
## ```
## info lifetime must exceed that of rt
## ```
proc JS_SetRuntimeInfo*(rt: ptr JSRuntime; info: cstring) {.importc, cdecl,
impquickjsHdr.}
## ```
## info lifetime must exceed that of rt
## ```
proc JS_SetMemoryLimit*(rt: ptr JSRuntime; limit: uint) {.importc, cdecl, impquickjsHdr.}
proc JS_SetGCThreshold*(rt: ptr JSRuntime; gc_threshold: uint) {.importc, cdecl,
impquickjsHdr.}
proc JS_SetMaxStackSize*(rt: ptr JSRuntime; stack_size: uint) {.importc, cdecl,
impquickjsHdr.}
proc JS_NewRuntime2*(mf: ptr JSMallocFunctions; opaque: pointer): ptr JSRuntime {.
importc, cdecl, impquickjsHdr.}
proc JS_FreeRuntime*(rt: ptr JSRuntime) {.importc, cdecl, impquickjsHdr.}
proc JS_GetRuntimeOpaque*(rt: ptr JSRuntime): pointer {.importc, cdecl, impquickjsHdr.}
proc JS_SetRuntimeOpaque*(rt: ptr JSRuntime; opaque: pointer) {.importc, cdecl,
impquickjsHdr.}
proc JS_MarkValue*(rt: ptr JSRuntime; val: JSValue; mark_func: ptr JS_MarkFunc) {.
importc, cdecl, impquickjsHdr.}
proc JS_RunGC*(rt: ptr JSRuntime) {.importc, cdecl, impquickjsHdr.}
proc JS_IsLiveObject*(rt: ptr JSRuntime; obj: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_NewContext*(rt: ptr JSRuntime): ptr JSContext {.importc, cdecl, impquickjsHdr.}
proc JS_FreeContext*(s: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_DupContext*(ctx: ptr JSContext): ptr JSContext {.importc, cdecl, impquickjsHdr.}
proc JS_GetContextOpaque*(ctx: ptr JSContext): pointer {.importc, cdecl, impquickjsHdr.}
proc JS_SetContextOpaque*(ctx: ptr JSContext; opaque: pointer) {.importc, cdecl,
impquickjsHdr.}
proc JS_GetRuntime*(ctx: ptr JSContext): ptr JSRuntime {.importc, cdecl, impquickjsHdr.}
proc JS_SetClassProto*(ctx: ptr JSContext; class_id: JSClassID; obj: JSValue) {.importc,
cdecl, impquickjsHdr.}
proc JS_GetClassProto*(ctx: ptr JSContext; class_id: JSClassID): JSValue {.importc,
cdecl, impquickjsHdr.}
proc JS_NewContextRaw*(rt: ptr JSRuntime): ptr JSContext {.importc, cdecl, impquickjsHdr.}
## ```
## the following functions are used to select the intrinsic object to
## save memory
## ```
proc JS_AddIntrinsicBaseObjects*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicDate*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicEval*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicStringNormalize*(ctx: ptr JSContext) {.importc, cdecl,
impquickjsHdr.}
proc JS_AddIntrinsicRegExpCompiler*(ctx: ptr JSContext) {.importc, cdecl,
impquickjsHdr.}
proc JS_AddIntrinsicRegExp*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicJSON*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicProxy*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicMapSet*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicTypedArrays*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicPromise*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicBigInt*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicBigFloat*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_AddIntrinsicBigDecimal*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
## ```
## enable operator overloading
## ```
proc JS_AddIntrinsicOperators*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
## ```
## enable operator overloading
## ```
proc JS_EnableBignumExt*(ctx: ptr JSContext; enable: cint) {.importc, cdecl,
impquickjsHdr.}
## ```
## enable "use math"
## ```
proc js_string_codePointRange*(ctx: ptr JSContext; this_val: JSValue; argc: cint;
argv: ptr JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc js_malloc_rt*(rt: ptr JSRuntime; size: uint): pointer {.importc, cdecl,
impquickjsHdr.}
proc js_free_rt*(rt: ptr JSRuntime; `ptr`: pointer) {.importc, cdecl, impquickjsHdr.}
proc js_realloc_rt*(rt: ptr JSRuntime; `ptr`: pointer; size: uint): pointer {.importc,
cdecl, impquickjsHdr.}
proc js_malloc_usable_size_rt*(rt: ptr JSRuntime; `ptr`: pointer): uint {.importc,
cdecl, impquickjsHdr.}
proc js_mallocz_rt*(rt: ptr JSRuntime; size: uint): pointer {.importc, cdecl,
impquickjsHdr.}
proc js_malloc*(ctx: ptr JSContext; size: uint): pointer {.importc, cdecl, impquickjsHdr.}
proc js_free*(ctx: ptr JSContext; `ptr`: pointer) {.importc, cdecl, impquickjsHdr.}
proc js_realloc*(ctx: ptr JSContext; `ptr`: pointer; size: uint): pointer {.importc,
cdecl, impquickjsHdr.}
proc js_malloc_usable_size*(ctx: ptr JSContext; `ptr`: pointer): uint {.importc, cdecl,
impquickjsHdr.}
proc js_realloc2*(ctx: ptr JSContext; `ptr`: pointer; size: uint; pslack: ptr uint): pointer {.
importc, cdecl, impquickjsHdr.}
proc js_mallocz*(ctx: ptr JSContext; size: uint): pointer {.importc, cdecl, impquickjsHdr.}
proc js_strdup*(ctx: ptr JSContext; str: cstring): cstring {.importc, cdecl,
impquickjsHdr.}
proc js_strndup*(ctx: ptr JSContext; s: cstring; n: uint): cstring {.importc, cdecl,
impquickjsHdr.}
proc JS_ComputeMemoryUsage*(rt: ptr JSRuntime; s: ptr JSMemoryUsage) {.importc, cdecl,
impquickjsHdr.}
proc JS_DumpMemoryUsage*(fp: File; s: ptr JSMemoryUsage; rt: ptr JSRuntime) {.importc,
cdecl, impquickjsHdr.}
proc JS_NewAtomLen*(ctx: ptr JSContext; str: cstring; len: uint): JSAtom {.importc, cdecl,
impquickjsHdr.}
## ```
## atom support
## ```
proc JS_NewAtom*(ctx: ptr JSContext; str: cstring): JSAtom {.importc, cdecl,
impquickjsHdr.}
proc JS_NewAtomUInt32*(ctx: ptr JSContext; n: uint32): JSAtom {.importc, cdecl,
impquickjsHdr.}
proc JS_DupAtom*(ctx: ptr JSContext; v: JSAtom): JSAtom {.importc, cdecl, impquickjsHdr.}
proc JS_FreeAtom*(ctx: ptr JSContext; v: JSAtom) {.importc, cdecl, impquickjsHdr.}
proc JS_FreeAtomRT*(rt: ptr JSRuntime; v: JSAtom) {.importc, cdecl, impquickjsHdr.}
proc JS_AtomToValue*(ctx: ptr JSContext; atom: JSAtom): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_AtomToString*(ctx: ptr JSContext; atom: JSAtom): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_AtomToCString*(ctx: ptr JSContext; atom: JSAtom): cstring {.importc, cdecl,
impquickjsHdr.}
proc JS_ValueToAtom*(ctx: ptr JSContext; val: JSValue): JSAtom {.importc, cdecl,
impquickjsHdr.}
proc JS_NewClassID*(pclass_id: ptr JSClassID): JSClassID {.importc, cdecl,
impquickjsHdr.}
proc JS_NewClass*(rt: ptr JSRuntime; class_id: JSClassID; class_def: ptr JSClassDef): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_IsRegisteredClass*(rt: ptr JSRuntime; class_id: JSClassID): cint {.importc,
cdecl, impquickjsHdr.}
proc JS_NewBool*(ctx: ptr JSContext; val: cint): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_NewInt32*(ctx: ptr JSContext; val: int32): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewCatchOffset*(ctx: ptr JSContext; val: int32): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewInt64*(ctx: ptr JSContext; val: int64): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewUint32*(ctx: ptr JSContext; val: uint32): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewBigInt64*(ctx: ptr JSContext; v: int64): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewBigUint64*(ctx: ptr JSContext; v: uint64): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_IsNumber*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsBigInt*(ctx: ptr JSContext; v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsBigFloat*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsBigDecimal*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsBool*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsNull*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsUndefined*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsException*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsUninitialized*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsString*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsSymbol*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsObject*(v: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_Throw*(ctx: ptr JSContext; obj: JSValue): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_GetException*(ctx: ptr JSContext): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_IsError*(ctx: ptr JSContext; val: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_ResetUncatchableError*(ctx: ptr JSContext) {.importc, cdecl, impquickjsHdr.}
proc JS_NewError*(ctx: ptr JSContext): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_ThrowSyntaxError*(ctx: ptr JSContext; fmt: cstring): JSValue {.importc, cdecl,
impquickjsHdr, varargs.}
proc JS_ThrowTypeError*(ctx: ptr JSContext; fmt: cstring): JSValue {.importc, cdecl,
impquickjsHdr, varargs.}
proc JS_ThrowReferenceError*(ctx: ptr JSContext; fmt: cstring): JSValue {.importc,
cdecl, impquickjsHdr, varargs.}
proc JS_ThrowRangeError*(ctx: ptr JSContext; fmt: cstring): JSValue {.importc, cdecl,
impquickjsHdr, varargs.}
proc JS_ThrowInternalError*(ctx: ptr JSContext; fmt: cstring): JSValue {.importc, cdecl,
impquickjsHdr, varargs.}
proc JS_ThrowOutOfMemory*(ctx: ptr JSContext): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_FreeValue*(ctx: ptr JSContext; v: JSValue) {.importc: "__JS_FreeValue", cdecl,
impquickjsHdr.}
proc JS_FreeValueRT*(rt: ptr JSRuntime; v: JSValue) {.importc: "__JS_FreeValueRT",
cdecl, impquickjsHdr.}
proc JS_DupValue*(ctx: ptr JSContext; v: JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_DupValueRT*(rt: ptr JSRuntime; v: JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_ToBool*(ctx: ptr JSContext; val: JSValue): cint {.importc, cdecl, impquickjsHdr.}
## ```
## return -1 for JS_EXCEPTION
## ```
proc JS_ToInt32*(ctx: ptr JSContext; pres: ptr int32; val: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
## ```
## return -1 for JS_EXCEPTION
## ```
proc JS_ToUint32*(ctx: ptr JSContext; pres: ptr uint32; val: JSValue): cint {.importc,
cdecl, impquickjsHdr.}
proc JS_ToInt64*(ctx: ptr JSContext; pres: ptr int64; val: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_ToIndex*(ctx: ptr JSContext; plen: ptr uint64; val: JSValue): cint {.importc,
cdecl, impquickjsHdr.}
proc JS_ToFloat64*(ctx: ptr JSContext; pres: ptr cdouble; val: JSValue): cint {.importc,
cdecl, impquickjsHdr.}
## ```
## return an exception if 'val' is a Number
## ```
proc JS_ToBigInt64*(ctx: ptr JSContext; pres: ptr int64; val: JSValue): cint {.importc,
cdecl, impquickjsHdr.}
## ```
## return an exception if 'val' is a Number
## ```
proc JS_ToInt64Ext*(ctx: ptr JSContext; pres: ptr int64; val: JSValue): cint {.importc,
cdecl, impquickjsHdr.}
## ```
## same as JS_ToInt64() but allow BigInt
## ```
proc JS_NewStringLen*(ctx: ptr JSContext; str1: cstring; len1: uint): JSValue {.importc,
cdecl, impquickjsHdr.}
proc JS_NewString*(ctx: ptr JSContext; str: cstring): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewAtomString*(ctx: ptr JSContext; str: cstring): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_ToString*(ctx: ptr JSContext; val: JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_ToPropertyKey*(ctx: ptr JSContext; val: JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_ToCStringLen2*(ctx: ptr JSContext; plen: ptr uint; val1: JSValue; cesu8: cint): cstring {.
importc, cdecl, impquickjsHdr.}
proc JS_ToCStringLen*(ctx: ptr JSContext; plen: ptr uint; val1: JSValue): cstring {.
importc, cdecl, impquickjsHdr.}
proc JS_ToCString*(ctx: ptr JSContext; val1: JSValue): cstring {.importc, cdecl,
impquickjsHdr.}
proc JS_FreeCString*(ctx: ptr JSContext; `ptr`: cstring) {.importc, cdecl, impquickjsHdr.}
proc JS_NewObjectProtoClass*(ctx: ptr JSContext; proto: JSValue; class_id: JSClassID): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_NewObjectClass*(ctx: ptr JSContext; class_id: cint): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewObjectProto*(ctx: ptr JSContext; proto: JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_NewObject*(ctx: ptr JSContext): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_IsFunction*(ctx: ptr JSContext; val: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_IsConstructor*(ctx: ptr JSContext; val: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_SetConstructorBit*(ctx: ptr JSContext; func_obj: JSValue; val: cint): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_NewArray*(ctx: ptr JSContext): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_IsArray*(ctx: ptr JSContext; val: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_GetPropertyInternal*(ctx: ptr JSContext; obj: JSValue; prop: JSAtom;
receiver: JSValue; throw_ref_error: cint): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_GetProperty*(ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_GetPropertyStr*(ctx: ptr JSContext; this_obj: JSValue; prop: cstring): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_GetPropertyUint32*(ctx: ptr JSContext; this_obj: JSValue; idx: uint32): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_SetPropertyInternal*(ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom;
val: JSValue; flags: cint): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_SetProperty*(ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom; val: JSValue): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_SetPropertyUint32*(ctx: ptr JSContext; this_obj: JSValue; idx: uint32;
val: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_SetPropertyInt64*(ctx: ptr JSContext; this_obj: JSValue; idx: int64;
val: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_SetPropertyStr*(ctx: ptr JSContext; this_obj: JSValue; prop: cstring;
val: JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_HasProperty*(ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_IsExtensible*(ctx: ptr JSContext; obj: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_PreventExtensions*(ctx: ptr JSContext; obj: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_DeleteProperty*(ctx: ptr JSContext; obj: JSValue; prop: JSAtom; flags: cint): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_SetPrototype*(ctx: ptr JSContext; obj: JSValue; proto_val: JSValue): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_GetPrototype*(ctx: ptr JSContext; val: JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_GetOwnPropertyNames*(ctx: ptr JSContext; ptab: ptr ptr JSPropertyEnum;
plen: ptr uint32; obj: JSValue; flags: cint): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_GetOwnProperty*(ctx: ptr JSContext; desc: ptr JSPropertyDescriptor;
obj: JSValue; prop: JSAtom): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_Call*(ctx: ptr JSContext; func_obj: JSValue; this_obj: JSValue; argc: cint;
argv: ptr JSValue): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_Invoke*(ctx: ptr JSContext; this_val: JSValue; atom: JSAtom; argc: cint;
argv: ptr JSValue): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_CallConstructor*(ctx: ptr JSContext; func_obj: JSValue; argc: cint;
argv: ptr JSValue): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_CallConstructor2*(ctx: ptr JSContext; func_obj: JSValue; new_target: JSValue;
argc: cint; argv: ptr JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_DetectModule*(input: cstring; input_len: uint): cint {.importc, cdecl,
impquickjsHdr.}
## ```
## 'input' must be zero terminated i.e. input[input_len] = '\0'.
## ```
proc JS_Eval*(ctx: ptr JSContext; input: cstring; input_len: uint; filename: cstring;
eval_flags: cint): JSValue {.importc, cdecl, impquickjsHdr.}
## ```
## 'input' must be zero terminated i.e. input[input_len] = '\0'.
## ```
proc JS_EvalFunction*(ctx: ptr JSContext; fun_obj: JSValue): JSValue {.importc, cdecl,
impquickjsHdr.}
proc JS_GetGlobalObject*(ctx: ptr JSContext): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_IsInstanceOf*(ctx: ptr JSContext; val: JSValue; obj: JSValue): cint {.importc,
cdecl, impquickjsHdr.}
proc JS_DefineProperty*(ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom;
val: JSValue; getter: JSValue; setter: JSValue; flags: cint): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_DefinePropertyValue*(ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom;
val: JSValue; flags: cint): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_DefinePropertyValueUint32*(ctx: ptr JSContext; this_obj: JSValue; idx: uint32;
val: JSValue; flags: cint): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_DefinePropertyValueStr*(ctx: ptr JSContext; this_obj: JSValue; prop: cstring;
val: JSValue; flags: cint): cint {.importc, cdecl,
impquickjsHdr.}
proc JS_DefinePropertyGetSet*(ctx: ptr JSContext; this_obj: JSValue; prop: JSAtom;
getter: JSValue; setter: JSValue; flags: cint): cint {.
importc, cdecl, impquickjsHdr.}
proc JS_SetOpaque*(obj: JSValue; opaque: pointer) {.importc, cdecl, impquickjsHdr.}
proc JS_GetOpaque*(obj: JSValue; class_id: JSClassID): pointer {.importc, cdecl,
impquickjsHdr.}
proc JS_GetOpaque2*(ctx: ptr JSContext; obj: JSValue; class_id: JSClassID): pointer {.
importc, cdecl, impquickjsHdr.}
proc JS_ParseJSON*(ctx: ptr JSContext; buf: cstring; buf_len: uint; filename: cstring): JSValue {.
importc, cdecl, impquickjsHdr.}
## ```
## 'buf' must be zero terminated i.e. buf[buf_len] = '\0'.
## ```
proc JS_JSONStringify*(ctx: ptr JSContext; obj: JSValue; replacer: JSValue;
space0: JSValue): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_NewArrayBuffer*(ctx: ptr JSContext; buf: ptr uint8; len: uint;
free_func: ptr JSFreeArrayBufferDataFunc; opaque: pointer;
is_shared: cint): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_NewArrayBufferCopy*(ctx: ptr JSContext; buf: ptr uint8; len: uint): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_DetachArrayBuffer*(ctx: ptr JSContext; obj: JSValue) {.importc, cdecl,
impquickjsHdr.}
proc JS_GetArrayBuffer*(ctx: ptr JSContext; psize: ptr uint; obj: JSValue): ptr uint8 {.
importc, cdecl, impquickjsHdr.}
proc JS_GetTypedArrayBuffer*(ctx: ptr JSContext; obj: JSValue; pbyte_offset: ptr uint;
pbyte_length: ptr uint; pbytes_per_element: ptr uint): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_NewPromiseCapability*(ctx: ptr JSContext; resolving_funcs: ptr JSValue): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_SetHostPromiseRejectionTracker*(rt: ptr JSRuntime;
cb: ptr JSHostPromiseRejectionTracker;
opaque: pointer) {.importc, cdecl,
impquickjsHdr.}
proc JS_SetInterruptHandler*(rt: ptr JSRuntime; cb: ptr JSInterruptHandler;
opaque: pointer) {.importc, cdecl, impquickjsHdr.}
## ```
## if can_block is TRUE, Atomics.wait() can be used
## ```
proc JS_SetCanBlock*(rt: ptr JSRuntime; can_block: cint) {.importc, cdecl, impquickjsHdr.}
## ```
## if can_block is TRUE, Atomics.wait() can be used
## ```
proc JS_SetModuleLoaderFunc*(rt: ptr JSRuntime;
module_normalize: ptr JSModuleNormalizeFunc;
module_loader: ptr JSModuleLoaderFunc; opaque: pointer) {.
importc, cdecl, impquickjsHdr.}
## ```
## module_normalize = NULL is allowed and invokes the default module
## filename normalizer
## ```
proc JS_GetImportMeta*(ctx: ptr JSContext; m: ptr JSModuleDef): JSValue {.importc, cdecl,
impquickjsHdr.}
## ```
## return the import.meta object of a module
## ```
proc JS_GetModuleName*(ctx: ptr JSContext; m: ptr JSModuleDef): JSAtom {.importc, cdecl,
impquickjsHdr.}
proc JS_EnqueueJob*(ctx: ptr JSContext; job_func: ptr JSJobFunc; argc: cint;
argv: ptr JSValue): cint {.importc, cdecl, impquickjsHdr.}
proc JS_IsJobPending*(rt: ptr JSRuntime): cint {.importc, cdecl, impquickjsHdr.}
proc JS_ExecutePendingJob*(rt: ptr JSRuntime; pctx: ptr ptr JSContext): cint {.importc,
cdecl, impquickjsHdr.}
proc JS_WriteObject*(ctx: ptr JSContext; psize: ptr uint; obj: JSValue; flags: cint): ptr uint8 {.
importc, cdecl, impquickjsHdr.}
proc JS_ReadObject*(ctx: ptr JSContext; buf: ptr uint8; buf_len: uint; flags: cint): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_ResolveModule*(ctx: ptr JSContext; obj: JSValue): cint {.importc, cdecl,
impquickjsHdr.}
## ```
## load the dependencies of the module 'obj'. Useful when JS_ReadObject()
## returns a module.
## ```
proc JS_NewCFunction2*(ctx: ptr JSContext; `func`: ptr JSCFunction; name: cstring;
length: cint; cproto: JSCFunctionEnum; magic: cint): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_NewCFunctionData*(ctx: ptr JSContext; `func`: ptr JSCFunctionData;
length: cint; magic: cint; data_len: cint; data: ptr JSValue): JSValue {.
importc, cdecl, impquickjsHdr.}
proc JS_NewCFunction*(ctx: ptr JSContext; `func`: ptr JSCFunction; name: cstring;
length: cint): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_NewCFunctionMagic*(ctx: ptr JSContext; `func`: ptr JSCFunctionMagic;
name: cstring; length: cint; cproto: JSCFunctionEnum;
magic: cint): JSValue {.importc, cdecl, impquickjsHdr.}
proc JS_SetConstructor*(ctx: ptr JSContext; func_obj: JSValue; proto: JSValue) {.
importc, cdecl, impquickjsHdr.}
proc JS_SetPropertyFunctionList*(ctx: ptr JSContext; obj: JSValue;
tab: ptr JSCFunctionListEntry; len: cint) {.importc,
cdecl, impquickjsHdr.}
proc JS_NewCModule*(ctx: ptr JSContext; name_str: cstring;
`func`: ptr JSModuleInitFunc): ptr JSModuleDef {.importc, cdecl,
impquickjsHdr.}
proc JS_AddModuleExport*(ctx: ptr JSContext; m: ptr JSModuleDef; name_str: cstring): cint {.
importc, cdecl, impquickjsHdr.}
## ```
## can only be called before the module is instantiated
## ```
proc JS_AddModuleExportList*(ctx: ptr JSContext; m: ptr JSModuleDef;
tab: ptr JSCFunctionListEntry; len: cint): cint {.importc,
cdecl, impquickjsHdr.}
proc JS_SetModuleExport*(ctx: ptr JSContext; m: ptr JSModuleDef; export_name: cstring;
val: JSValue): cint {.importc, cdecl, impquickjsHdr.}
## ```
## can only be called after the module is instantiated
## ```
proc JS_SetModuleExportList*(ctx: ptr JSContext; m: ptr JSModuleDef;
tab: ptr JSCFunctionListEntry; len: cint): cint {.importc,
cdecl, impquickjsHdr.}
{.pop.}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment