XenevaOS
Loading...
Searching...
No Matches
quickjs.h
Go to the documentation of this file.
1/*
2 * QuickJS Javascript Engine
3 *
4 * Copyright (c) 2017-2021 Fabrice Bellard
5 * Copyright (c) 2017-2021 Charlie Gordon
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 * THE SOFTWARE.
24 */
25#ifndef QUICKJS_H
26#define QUICKJS_H
27
28#include <stdio.h>
29#include <stdint.h>
30#include <string.h>
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36#if defined(__GNUC__) || defined(__clang__)
37#define js_likely(x) __builtin_expect(!!(x), 1)
38#define js_unlikely(x) __builtin_expect(!!(x), 0)
39#define js_force_inline inline __attribute__((always_inline))
40#define __js_printf_like(f, a) __attribute__((format(printf, f, a)))
41#else
42#define js_likely(x) (x)
43#define js_unlikely(x) (x)
44#define js_force_inline inline
45#define __js_printf_like(a, b)
46#endif
47
48#define JS_BOOL int
49
50typedef struct JSRuntime JSRuntime;
51typedef struct JSContext JSContext;
52typedef struct JSClass JSClass;
55
56#if INTPTR_MAX >= INT64_MAX
57#define JS_PTR64
58#define JS_PTR64_DEF(a) a
59#else
60#define JS_PTR64_DEF(a)
61#endif
62
63#ifndef JS_PTR64
64#define JS_NAN_BOXING
65#endif
66
67#if defined(__SIZEOF_INT128__) && (INTPTR_MAX >= INT64_MAX)
68#define JS_LIMB_BITS 64
69#else
70#define JS_LIMB_BITS 32
71#endif
72
73#define JS_SHORT_BIG_INT_BITS JS_LIMB_BITS
74
75enum {
76 /* all tags with a reference count are negative */
77 JS_TAG_FIRST = -9, /* first negative tag */
82 JS_TAG_MODULE = -3, /* used internally */
83 JS_TAG_FUNCTION_BYTECODE = -2, /* used internally */
85
95 /* any larger tag is FLOAT64 if JS_NAN_BOXING */
96};
97
98/* must match the layout of 'JSMallocBlockHeader' */
102
103#define JS_FLOAT64_NAN NAN
104
105#ifdef CONFIG_CHECK_JSVALUE
106/* JSValue consistency : it is not possible to run the code in this
107 mode, but it is useful to detect simple reference counting
108 errors. It would be interesting to modify a static C analyzer to
109 handle specific annotations (clang has such annotations but only
110 for objective C) */
111typedef struct __JSValue *JSValue;
112typedef const struct __JSValue *JSValueConst;
113
114#define JS_VALUE_GET_TAG(v) (int)((uintptr_t)(v) & 0xf)
115/* same as JS_VALUE_GET_TAG, but return JS_TAG_FLOAT64 with NaN boxing */
116#define JS_VALUE_GET_NORM_TAG(v) JS_VALUE_GET_TAG(v)
117#define JS_VALUE_GET_INT(v) (int)((intptr_t)(v) >> 4)
118#define JS_VALUE_GET_BOOL(v) JS_VALUE_GET_INT(v)
119#define JS_VALUE_GET_FLOAT64(v) (double)JS_VALUE_GET_INT(v)
120#define JS_VALUE_GET_SHORT_BIG_INT(v) JS_VALUE_GET_INT(v)
121#define JS_VALUE_GET_PTR(v) (void *)((intptr_t)(v) & ~0xf)
122
123#define JS_MKVAL(tag, val) (JSValue)(intptr_t)(((val) << 4) | (tag))
124#define JS_MKPTR(tag, p) (JSValue)((intptr_t)(p) | (tag))
125
126#define JS_TAG_IS_FLOAT64(tag) ((unsigned)(tag) == JS_TAG_FLOAT64)
127
128#define JS_NAN JS_MKVAL(JS_TAG_FLOAT64, 1)
129
130static inline JSValue __JS_NewFloat64(JSContext *ctx, double d)
131{
132 return JS_MKVAL(JS_TAG_FLOAT64, (int)d);
133}
134
135static inline JS_BOOL JS_VALUE_IS_NAN(JSValue v)
136{
137 return 0;
138}
139
140static inline JSValue __JS_NewShortBigInt(JSContext *ctx, int32_t d)
141{
143}
144
145#elif defined(JS_NAN_BOXING)
146
147typedef uint64_t JSValue;
148
149#define JSValueConst JSValue
150
151#define JS_VALUE_GET_TAG(v) (int)((v) >> 32)
152#define JS_VALUE_GET_INT(v) (int)(v)
153#define JS_VALUE_GET_BOOL(v) (int)(v)
154#define JS_VALUE_GET_SHORT_BIG_INT(v) (int)(v)
155#define JS_VALUE_GET_PTR(v) (void *)(intptr_t)(v)
156
157#define JS_MKVAL(tag, val) (((uint64_t)(tag) << 32) | (uint32_t)(val))
158#define JS_MKPTR(tag, ptr) (((uint64_t)(tag) << 32) | (uintptr_t)(ptr))
159
160#define JS_FLOAT64_TAG_ADDEND (0x7ff80000 - JS_TAG_FIRST + 1) /* quiet NaN encoding */
161
162static inline double JS_VALUE_GET_FLOAT64(JSValue v)
163{
164 union {
165 JSValue v;
166 double d;
167 } u;
168 u.v = v;
169 u.v += (uint64_t)JS_FLOAT64_TAG_ADDEND << 32;
170 return u.d;
171}
172
173#define JS_NAN (0x7ff8000000000000 - ((uint64_t)JS_FLOAT64_TAG_ADDEND << 32))
174
175static inline JSValue __JS_NewFloat64(JSContext *ctx, double d)
176{
177 union {
178 double d;
180 } u;
181 JSValue v;
182 u.d = d;
183 /* normalize NaN */
184 if (js_unlikely((u.u64 & 0x7fffffffffffffff) > 0x7ff0000000000000))
185 v = JS_NAN;
186 else
187 v = u.u64 - ((uint64_t)JS_FLOAT64_TAG_ADDEND << 32);
188 return v;
189}
190
191#define JS_TAG_IS_FLOAT64(tag) ((unsigned)((tag) - JS_TAG_FIRST) >= (JS_TAG_FLOAT64 - JS_TAG_FIRST))
192
193/* same as JS_VALUE_GET_TAG, but return JS_TAG_FLOAT64 with NaN boxing */
194static inline int JS_VALUE_GET_NORM_TAG(JSValue v)
195{
196 uint32_t tag;
197 tag = JS_VALUE_GET_TAG(v);
198 if (JS_TAG_IS_FLOAT64(tag))
199 return JS_TAG_FLOAT64;
200 else
201 return tag;
202}
203
204static inline JS_BOOL JS_VALUE_IS_NAN(JSValue v)
205{
206 uint32_t tag;
207 tag = JS_VALUE_GET_TAG(v);
208 return tag == (JS_NAN >> 32);
209}
210
211static inline JSValue __JS_NewShortBigInt(JSContext *ctx, int32_t d)
212{
214}
215
216#else /* !JS_NAN_BOXING */
217
218typedef union JSValueUnion {
220 double float64;
221 void *ptr;
222#if JS_SHORT_BIG_INT_BITS == 32
224#else
226#endif
228
233
234#define JSValueConst JSValue
235
236#define JS_VALUE_GET_TAG(v) ((int32_t)(v).tag)
237/* same as JS_VALUE_GET_TAG, but return JS_TAG_FLOAT64 with NaN boxing */
238#define JS_VALUE_GET_NORM_TAG(v) JS_VALUE_GET_TAG(v)
239#define JS_VALUE_GET_INT(v) ((int)(v).u.uint64)
240#define JS_VALUE_GET_BOOL(v) ((int)(v).u.uint64)
241#define JS_VALUE_GET_FLOAT64(v) ((v).u.float64)
242#define JS_VALUE_GET_SHORT_BIG_INT(v) ((v).u.short_big_int)
243#define JS_VALUE_GET_PTR(v) ((v).u.ptr)
244
245/* avoid uninitialized data by using a 64 bit field even if only 32
246 bits are needed because some compilers generate slower code */
247#define JS_MKVAL(tag, val) (JSValue){ (JSValueUnion){ .uint64 = (uint32_t)(val) }, tag }
248#define JS_MKPTR(tag, p) (JSValue){ (JSValueUnion){ .ptr = p }, tag }
249
250#define JS_TAG_IS_FLOAT64(tag) ((unsigned)(tag) == JS_TAG_FLOAT64)
251
252#define JS_NAN (JSValue){ .u.float64 = JS_FLOAT64_NAN, JS_TAG_FLOAT64 }
253
254static inline JSValue __JS_NewFloat64(JSContext *ctx, double d)
255{
256 JSValue v;
258 v.u.float64 = d;
259 return v;
260}
261
262static inline JS_BOOL JS_VALUE_IS_NAN(JSValue v)
263{
264 union {
265 double d;
267 } u;
268 if (v.tag != JS_TAG_FLOAT64)
269 return 0;
270 u.d = v.u.float64;
271 return (u.u64 & 0x7fffffffffffffff) > 0x7ff0000000000000;
272}
273
274static inline JSValue __JS_NewShortBigInt(JSContext *ctx, int64_t d)
275{
276 JSValue v;
278 v.u.short_big_int = d;
279 return v;
280}
281
282#endif /* !JS_NAN_BOXING */
283
284#define JS_VALUE_IS_BOTH_INT(v1, v2) ((JS_VALUE_GET_TAG(v1) | JS_VALUE_GET_TAG(v2)) == 0)
285#define JS_VALUE_IS_BOTH_FLOAT(v1, v2) (JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(v1)) && JS_TAG_IS_FLOAT64(JS_VALUE_GET_TAG(v2)))
286
287#define JS_VALUE_HAS_REF_COUNT(v) ((unsigned)JS_VALUE_GET_TAG(v) >= (unsigned)JS_TAG_FIRST)
288
289/* special values */
290#define JS_NULL JS_MKVAL(JS_TAG_NULL, 0)
291#define JS_UNDEFINED JS_MKVAL(JS_TAG_UNDEFINED, 0)
292#define JS_FALSE JS_MKVAL(JS_TAG_BOOL, 0)
293#define JS_TRUE JS_MKVAL(JS_TAG_BOOL, 1)
294#define JS_EXCEPTION JS_MKVAL(JS_TAG_EXCEPTION, 0)
295#define JS_UNINITIALIZED JS_MKVAL(JS_TAG_UNINITIALIZED, 0)
296
297/* flags for object properties */
298#define JS_PROP_CONFIGURABLE (1 << 0)
299#define JS_PROP_WRITABLE (1 << 1)
300#define JS_PROP_ENUMERABLE (1 << 2)
301#define JS_PROP_C_W_E (JS_PROP_CONFIGURABLE | JS_PROP_WRITABLE | JS_PROP_ENUMERABLE)
302#define JS_PROP_LENGTH (1 << 3) /* used internally in Arrays */
303#define JS_PROP_TMASK (3 << 4) /* mask for NORMAL, GETSET, VARREF, AUTOINIT */
304#define JS_PROP_NORMAL (0 << 4)
305#define JS_PROP_GETSET (1 << 4)
306#define JS_PROP_VARREF (2 << 4) /* used internally */
307#define JS_PROP_AUTOINIT (3 << 4) /* used internally */
308
309/* flags for JS_DefineProperty */
310#define JS_PROP_HAS_SHIFT 8
311#define JS_PROP_HAS_CONFIGURABLE (1 << 8)
312#define JS_PROP_HAS_WRITABLE (1 << 9)
313#define JS_PROP_HAS_ENUMERABLE (1 << 10)
314#define JS_PROP_HAS_GET (1 << 11)
315#define JS_PROP_HAS_SET (1 << 12)
316#define JS_PROP_HAS_VALUE (1 << 13)
317
318/* throw an exception if false would be returned
319 (JS_DefineProperty/JS_SetProperty) */
320#define JS_PROP_THROW (1 << 14)
321/* throw an exception if false would be returned in strict mode
322 (JS_SetProperty) */
323#define JS_PROP_THROW_STRICT (1 << 15)
324
325#define JS_PROP_NO_EXOTIC (1 << 16) /* internal use */
326
327#ifndef JS_DEFAULT_STACK_SIZE
328#define JS_DEFAULT_STACK_SIZE (1024 * 1024)
329#endif
330
331/* JS_Eval() flags */
332#define JS_EVAL_TYPE_GLOBAL (0 << 0) /* global code (default) */
333#define JS_EVAL_TYPE_MODULE (1 << 0) /* module code */
334#define JS_EVAL_TYPE_DIRECT (2 << 0) /* direct call (internal use) */
335#define JS_EVAL_TYPE_INDIRECT (3 << 0) /* indirect call (internal use) */
336#define JS_EVAL_TYPE_MASK (3 << 0)
337
338#define JS_EVAL_FLAG_STRICT (1 << 3) /* force 'strict' mode */
339/* compile but do not run. The result is an object with a
340 JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed
341 with JS_EvalFunction(). */
342#define JS_EVAL_FLAG_COMPILE_ONLY (1 << 5)
343/* don't include the stack frames before this eval in the Error() backtraces */
344#define JS_EVAL_FLAG_BACKTRACE_BARRIER (1 << 6)
345/* allow top-level await in normal script. JS_Eval() returns a
346 promise. Only allowed with JS_EVAL_TYPE_GLOBAL */
347#define JS_EVAL_FLAG_ASYNC (1 << 7)
348
349typedef JSValue JSCFunction(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv);
350typedef JSValue JSCFunctionMagic(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic);
351typedef JSValue JSCFunctionData(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic, JSValue *func_data);
352
353typedef struct JSMallocState {
357 void *opaque; /* user opaque */
359
360typedef struct JSMallocFunctions {
361 void *(*js_malloc)(JSMallocState *s, size_t size);
362 void (*js_free)(JSMallocState *s, void *ptr);
363 void *(*js_realloc)(JSMallocState *s, void *ptr, size_t size);
364 size_t (*js_malloc_usable_size)(const void *ptr);
366
368
370/* info lifetime must exceed that of rt */
371void JS_SetRuntimeInfo(JSRuntime *rt, const char *info);
372void JS_SetMemoryLimit(JSRuntime *rt, size_t limit);
373void JS_SetGCThreshold(JSRuntime *rt, size_t gc_threshold);
374/* use 0 to disable maximum stack size check */
375void JS_SetMaxStackSize(JSRuntime *rt, size_t stack_size);
376/* should be called when changing thread to update the stack top value
377 used to check stack overflow. */
379JSRuntime *JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque);
380void JS_FreeRuntime(JSRuntime *rt);
382void JS_SetRuntimeOpaque(JSRuntime *rt, void *opaque);
384void JS_MarkValue(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_func);
385void JS_RunGC(JSRuntime *rt);
387
392void JS_SetContextOpaque(JSContext *ctx, void *opaque);
394void JS_SetClassProto(JSContext *ctx, JSClassID class_id, JSValue obj);
396
397/* the following functions are used to select the intrinsic object to
398 save memory */
412
414 int argc, JSValueConst *argv);
415
416void *js_malloc_rt(JSRuntime *rt, size_t size);
417void js_free_rt(JSRuntime *rt, void *ptr);
418void *js_realloc_rt(JSRuntime *rt, void *ptr, size_t size);
419size_t js_malloc_usable_size_rt(JSRuntime *rt, const void *ptr);
420void *js_mallocz_rt(JSRuntime *rt, size_t size);
421
422void *js_malloc(JSContext *ctx, size_t size);
423void js_free(JSContext *ctx, void *ptr);
424void *js_realloc(JSContext *ctx, void *ptr, size_t size);
425size_t js_malloc_usable_size(JSContext *ctx, const void *ptr);
426void *js_realloc2(JSContext *ctx, void *ptr, size_t size, size_t *pslack);
427void *js_mallocz(JSContext *ctx, size_t size);
428char *js_strdup(JSContext *ctx, const char *str);
429char *js_strndup(JSContext *ctx, const char *s, size_t n);
430
446
448void JS_DumpMemoryUsage(FILE *fp, const JSMemoryUsage *s, JSRuntime *rt);
449
450/* atom support */
451#define JS_ATOM_NULL 0
452
453JSAtom JS_NewAtomLen(JSContext *ctx, const char *str, size_t len);
454JSAtom JS_NewAtom(JSContext *ctx, const char *str);
457void JS_FreeAtom(JSContext *ctx, JSAtom v);
458void JS_FreeAtomRT(JSRuntime *rt, JSAtom v);
461const char *JS_AtomToCStringLen(JSContext *ctx, size_t *plen, JSAtom atom);
462static inline const char *JS_AtomToCString(JSContext *ctx, JSAtom atom)
463{
464 return JS_AtomToCStringLen(ctx, NULL, atom);
465}
467
468/* object class support */
469
474
481
482typedef struct JSClassExoticMethods {
483 /* Return -1 if exception (can only happen in case of Proxy object),
484 FALSE if the property does not exists, TRUE if it exists. If 1 is
485 returned, the property descriptor 'desc' is filled if != NULL. */
487 JSValueConst obj, JSAtom prop);
488 /* '*ptab' should hold the '*plen' property keys. Return 0 if OK,
489 -1 if exception. The 'is_enumerable' field is ignored.
490 */
492 uint32_t *plen,
493 JSValueConst obj);
494 /* return < 0 if exception, or TRUE/FALSE */
496 /* return < 0 if exception or TRUE/FALSE */
498 JSAtom prop, JSValueConst val,
499 JSValueConst getter, JSValueConst setter,
500 int flags);
501 /* The following methods can be emulated with the previous ones,
502 so they are usually not needed */
503 /* return < 0 if exception or TRUE/FALSE */
504 int (*has_property)(JSContext *ctx, JSValueConst obj, JSAtom atom);
506 JSValueConst receiver);
507 /* return < 0 if exception or TRUE/FALSE */
509 JSValueConst value, JSValueConst receiver, int flags);
510
511 /* To get a consistent object behavior when get_prototype != NULL,
512 get_property, set_property and set_prototype must be != NULL
513 and the object must be created with a JS_NULL prototype. */
515 /* return < 0 if exception or TRUE/FALSE */
516 int (*set_prototype)(JSContext *ctx, JSValueConst obj, JSValueConst proto_val);
517 /* return < 0 if exception or TRUE/FALSE */
519 /* return < 0 if exception or TRUE/FALSE */
522
523typedef void JSClassFinalizer(JSRuntime *rt, JSValue val);
525 JS_MarkFunc *mark_func);
526#define JS_CALL_FLAG_CONSTRUCTOR (1 << 0)
528 JSValueConst this_val, int argc, JSValueConst *argv,
529 int flags);
530
531typedef struct JSClassDef {
532 const char *class_name;
535 /* if call != NULL, the object is a function. If (flags &
536 JS_CALL_FLAG_CONSTRUCTOR) != 0, the function is called as a
537 constructor. In this case, 'this_val' is new.target. A
538 constructor call only happens if the object constructor bit is
539 set (see JS_SetConstructorBit()). */
541 /* XXX: suppress this indirection ? It is here only to save memory
542 because only a few classes need these methods */
545
546#define JS_INVALID_CLASS_ID 0
548/* Returns the class ID if `v` is an object, otherwise returns JS_INVALID_CLASS_ID. */
550int JS_NewClass(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def);
551int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id);
552
553/* value handling */
554
555static js_force_inline JSValue JS_NewBool(JSContext *ctx, JS_BOOL val)
556{
557 return JS_MKVAL(JS_TAG_BOOL, (val != 0));
558}
559
560static js_force_inline JSValue JS_NewInt32(JSContext *ctx, int32_t val)
561{
562 return JS_MKVAL(JS_TAG_INT, val);
563}
564
565static js_force_inline JSValue JS_NewCatchOffset(JSContext *ctx, int32_t val)
566{
567 return JS_MKVAL(JS_TAG_CATCH_OFFSET, val);
568}
569
570static js_force_inline JSValue JS_NewInt64(JSContext *ctx, int64_t val)
571{
572 JSValue v;
573 if (val == (int32_t)val) {
574 v = JS_NewInt32(ctx, val);
575 } else {
576 v = __JS_NewFloat64(ctx, val);
577 }
578 return v;
579}
580
581static js_force_inline JSValue JS_NewUint32(JSContext *ctx, uint32_t val)
582{
583 JSValue v;
584 if (val <= 0x7fffffff) {
585 v = JS_NewInt32(ctx, val);
586 } else {
587 v = __JS_NewFloat64(ctx, val);
588 }
589 return v;
590}
591
594
595static js_force_inline JSValue JS_NewFloat64(JSContext *ctx, double d)
596{
597 int32_t val;
598 union {
599 double d;
600 uint64_t u;
601 } u, t;
602 if (d >= INT32_MIN && d <= INT32_MAX) {
603 u.d = d;
604 val = (int32_t)d;
605 t.d = val;
606 /* -0 cannot be represented as integer, so we compare the bit
607 representation */
608 if (u.u == t.u)
609 return JS_MKVAL(JS_TAG_INT, val);
610 }
611 return __JS_NewFloat64(ctx, d);
612}
613
614static inline JS_BOOL JS_IsNumber(JSValueConst v)
615{
616 int tag = JS_VALUE_GET_TAG(v);
617 return tag == JS_TAG_INT || JS_TAG_IS_FLOAT64(tag);
618}
619
620static inline JS_BOOL JS_IsBigInt(JSContext *ctx, JSValueConst v)
621{
622 int tag = JS_VALUE_GET_TAG(v);
623 return tag == JS_TAG_BIG_INT || tag == JS_TAG_SHORT_BIG_INT;
624}
625
626static inline JS_BOOL JS_IsBool(JSValueConst v)
627{
628 return JS_VALUE_GET_TAG(v) == JS_TAG_BOOL;
629}
630
631static inline JS_BOOL JS_IsNull(JSValueConst v)
632{
633 return JS_VALUE_GET_TAG(v) == JS_TAG_NULL;
634}
635
636static inline JS_BOOL JS_IsUndefined(JSValueConst v)
637{
639}
640
641static inline JS_BOOL JS_IsException(JSValueConst v)
642{
644}
645
646static inline JS_BOOL JS_IsUninitialized(JSValueConst v)
647{
649}
650
651static inline JS_BOOL JS_IsString(JSValueConst v)
652{
653 return JS_VALUE_GET_TAG(v) == JS_TAG_STRING ||
655}
656
657static inline JS_BOOL JS_IsSymbol(JSValueConst v)
658{
659 return JS_VALUE_GET_TAG(v) == JS_TAG_SYMBOL;
660}
661
662static inline JS_BOOL JS_IsObject(JSValueConst v)
663{
664 return JS_VALUE_GET_TAG(v) == JS_TAG_OBJECT;
665}
666
673JSValue __js_printf_like(2, 3) JS_ThrowSyntaxError(JSContext *ctx, const char *fmt, ...);
674JSValue __js_printf_like(2, 3) JS_ThrowTypeError(JSContext *ctx, const char *fmt, ...);
675JSValue __js_printf_like(2, 3) JS_ThrowReferenceError(JSContext *ctx, const char *fmt, ...);
676JSValue __js_printf_like(2, 3) JS_ThrowRangeError(JSContext *ctx, const char *fmt, ...);
677JSValue __js_printf_like(2, 3) JS_ThrowInternalError(JSContext *ctx, const char *fmt, ...);
679
680void __JS_FreeValue(JSContext *ctx, JSValue v);
681
682static inline JSRefCountHeader *__js_rc(void *ptr)
683{
684 return (JSRefCountHeader *)((uint32_t *)ptr - 1);
685}
686
687static inline void JS_FreeValue(JSContext *ctx, JSValue v)
688{
689 if (JS_VALUE_HAS_REF_COUNT(v)) {
690 JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v));
691 if (--p->ref_count <= 0) {
692 __JS_FreeValue(ctx, v);
693 }
694 }
695}
697static inline void JS_FreeValueRT(JSRuntime *rt, JSValue v)
698{
699 if (JS_VALUE_HAS_REF_COUNT(v)) {
700 JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v));
701 if (--p->ref_count <= 0) {
702 __JS_FreeValueRT(rt, v);
703 }
704 }
705}
706
707static inline JSValue JS_DupValue(JSContext *ctx, JSValueConst v)
708{
709 if (JS_VALUE_HAS_REF_COUNT(v)) {
710 JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v));
711 p->ref_count++;
712 }
713 return (JSValue)v;
714}
715
716static inline JSValue JS_DupValueRT(JSRuntime *rt, JSValueConst v)
717{
718 if (JS_VALUE_HAS_REF_COUNT(v)) {
719 JSRefCountHeader *p = __js_rc(JS_VALUE_GET_PTR(v));
720 p->ref_count++;
721 }
722 return (JSValue)v;
723}
724
728
729int JS_ToBool(JSContext *ctx, JSValueConst val); /* return -1 for JS_EXCEPTION */
730int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValueConst val);
731static inline int JS_ToUint32(JSContext *ctx, uint32_t *pres, JSValueConst val)
732{
733 return JS_ToInt32(ctx, (int32_t*)pres, val);
734}
735int JS_ToInt64(JSContext *ctx, int64_t *pres, JSValueConst val);
736int JS_ToIndex(JSContext *ctx, uint64_t *plen, JSValueConst val);
737int JS_ToFloat64(JSContext *ctx, double *pres, JSValueConst val);
738/* return an exception if 'val' is a Number */
739int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValueConst val);
740/* same as JS_ToInt64() but allow BigInt */
741int JS_ToInt64Ext(JSContext *ctx, int64_t *pres, JSValueConst val);
742
743JSValue JS_NewStringLen(JSContext *ctx, const char *str1, size_t len1);
744static inline JSValue JS_NewString(JSContext *ctx, const char *str)
745{
746 return JS_NewStringLen(ctx, str, strlen(str));
747}
748JSValue JS_NewAtomString(JSContext *ctx, const char *str);
751const char *JS_ToCStringLen2(JSContext *ctx, size_t *plen, JSValueConst val1, JS_BOOL cesu8);
752static inline const char *JS_ToCStringLen(JSContext *ctx, size_t *plen, JSValueConst val1)
753{
754 return JS_ToCStringLen2(ctx, plen, val1, 0);
755}
756static inline const char *JS_ToCString(JSContext *ctx, JSValueConst val1)
757{
758 return JS_ToCStringLen2(ctx, NULL, val1, 0);
759}
760void JS_FreeCString(JSContext *ctx, const char *ptr);
761
763JSValue JS_NewObjectClass(JSContext *ctx, int class_id);
766
770
772int JS_IsArray(JSContext *ctx, JSValueConst val);
773
774JSValue JS_NewDate(JSContext *ctx, double epoch_ms);
775
777 JSAtom prop, JSValueConst receiver,
778 JS_BOOL throw_ref_error);
779static js_force_inline JSValue JS_GetProperty(JSContext *ctx, JSValueConst this_obj,
780 JSAtom prop)
781{
782 return JS_GetPropertyInternal(ctx, this_obj, prop, this_obj, 0);
783}
785 const char *prop);
787 uint32_t idx);
788
790 JSAtom prop, JSValue val, JSValueConst this_obj,
791 int flags);
792static inline int JS_SetProperty(JSContext *ctx, JSValueConst this_obj,
793 JSAtom prop, JSValue val)
794{
795 return JS_SetPropertyInternal(ctx, this_obj, prop, val, this_obj, JS_PROP_THROW);
796}
798 uint32_t idx, JSValue val);
800 int64_t idx, JSValue val);
801int JS_SetPropertyStr(JSContext *ctx, JSValueConst this_obj,
802 const char *prop, JSValue val);
803int JS_HasProperty(JSContext *ctx, JSValueConst this_obj, JSAtom prop);
806int JS_DeleteProperty(JSContext *ctx, JSValueConst obj, JSAtom prop, int flags);
807int JS_SetPrototype(JSContext *ctx, JSValueConst obj, JSValueConst proto_val);
809
810#define JS_GPN_STRING_MASK (1 << 0)
811#define JS_GPN_SYMBOL_MASK (1 << 1)
812#define JS_GPN_PRIVATE_MASK (1 << 2)
813/* only include the enumerable properties */
814#define JS_GPN_ENUM_ONLY (1 << 4)
815/* set theJSPropertyEnum.is_enumerable field */
816#define JS_GPN_SET_ENUM (1 << 5)
817
819 uint32_t *plen, JSValueConst obj, int flags);
821 uint32_t len);
823 JSValueConst obj, JSAtom prop);
824
825JSValue JS_Call(JSContext *ctx, JSValueConst func_obj, JSValueConst this_obj,
826 int argc, JSValueConst *argv);
827JSValue JS_Invoke(JSContext *ctx, JSValueConst this_val, JSAtom atom,
828 int argc, JSValueConst *argv);
830 int argc, JSValueConst *argv);
832 JSValueConst new_target,
833 int argc, JSValueConst *argv);
834JS_BOOL JS_DetectModule(const char *input, size_t input_len);
835/* 'input' must be zero terminated i.e. input[input_len] = '\0'. */
836JSValue JS_Eval(JSContext *ctx, const char *input, size_t input_len,
837 const char *filename, int eval_flags);
838/* same as JS_Eval() but with an explicit 'this_obj' parameter */
840 const char *input, size_t input_len,
841 const char *filename, int eval_flags);
844int JS_DefineProperty(JSContext *ctx, JSValueConst this_obj,
845 JSAtom prop, JSValueConst val,
846 JSValueConst getter, JSValueConst setter, int flags);
848 JSAtom prop, JSValue val, int flags);
850 uint32_t idx, JSValue val, int flags);
852 const char *prop, JSValue val, int flags);
854 JSAtom prop, JSValue getter, JSValue setter,
855 int flags);
856void JS_SetOpaque(JSValue obj, void *opaque);
857void *JS_GetOpaque(JSValueConst obj, JSClassID class_id);
858void *JS_GetOpaque2(JSContext *ctx, JSValueConst obj, JSClassID class_id);
859void *JS_GetAnyOpaque(JSValueConst obj, JSClassID *class_id);
860
861/* 'buf' must be zero terminated i.e. buf[buf_len] = '\0'. */
862JSValue JS_ParseJSON(JSContext *ctx, const char *buf, size_t buf_len,
863 const char *filename);
864#define JS_PARSE_JSON_EXT (1 << 0) /* allow extended JSON */
865JSValue JS_ParseJSON2(JSContext *ctx, const char *buf, size_t buf_len,
866 const char *filename, int flags);
868 JSValueConst replacer, JSValueConst space0);
869
870typedef void JSFreeArrayBufferDataFunc(JSRuntime *rt, void *opaque, void *ptr);
873 JS_BOOL is_shared);
874JSValue JS_NewArrayBufferCopy(JSContext *ctx, const uint8_t *buf, size_t len);
876uint8_t *JS_GetArrayBuffer(JSContext *ctx, size_t *psize, JSValueConst obj);
877
892
893JSValue JS_NewTypedArray(JSContext *ctx, int argc, JSValueConst *argv,
894 JSTypedArrayEnum array_type);
896 size_t *pbyte_offset,
897 size_t *pbyte_length,
898 size_t *pbytes_per_element);
899typedef struct {
900 void *(*sab_alloc)(void *opaque, size_t size);
901 void (*sab_free)(void *opaque, void *ptr);
902 void (*sab_dup)(void *opaque, void *ptr);
907
913
914JSValue JS_NewPromiseCapability(JSContext *ctx, JSValue *resolving_funcs);
917
918/* is_handled = TRUE means that the rejection is handled */
920 JSValueConst reason,
921 JS_BOOL is_handled, void *opaque);
923
924/* return != 0 if the JS code needs to be interrupted */
925typedef int JSInterruptHandler(JSRuntime *rt, void *opaque);
926void JS_SetInterruptHandler(JSRuntime *rt, JSInterruptHandler *cb, void *opaque);
927/* if can_block is TRUE, Atomics.wait() can be used */
928void JS_SetCanBlock(JSRuntime *rt, JS_BOOL can_block);
929/* select which debug info is stripped from the compiled code */
930#define JS_STRIP_SOURCE (1 << 0) /* strip source code */
931#define JS_STRIP_DEBUG (1 << 1) /* strip all debug info including source code */
932void JS_SetStripInfo(JSRuntime *rt, int flags);
934
935/* set the [IsHTMLDDA] internal slot */
937
939
940/* return the module specifier (allocated with js_malloc()) or NULL if
941 exception */
943 const char *module_base_name,
944 const char *module_name, void *opaque);
946 const char *module_name, void *opaque);
948 const char *module_name, void *opaque,
949 JSValueConst attributes);
950/* return -1 if exception, 0 if OK */
952 JSValueConst attributes);
953
954/* module_normalize = NULL is allowed and invokes the default module
955 filename normalizer */
957 JSModuleNormalizeFunc *module_normalize,
958 JSModuleLoaderFunc *module_loader, void *opaque);
959/* same as JS_SetModuleLoaderFunc but with attributes. if
960 module_check_attrs = NULL, no attribute checking is done. */
962 JSModuleNormalizeFunc *module_normalize,
963 JSModuleLoaderFunc2 *module_loader,
964 JSModuleCheckSupportedImportAttributes *module_check_attrs,
965 void *opaque);
966/* return the import.meta object of a module */
970
971/* JS Job support */
972
973typedef JSValue JSJobFunc(JSContext *ctx, int argc, JSValueConst *argv);
974int JS_EnqueueJob(JSContext *ctx, JSJobFunc *job_func, int argc, JSValueConst *argv);
975
978
979/* Object Writer/Reader (currently only used to handle precompiled code) */
980#define JS_WRITE_OBJ_BYTECODE (1 << 0) /* allow function/module */
981#define JS_WRITE_OBJ_BSWAP (1 << 1) /* byte swapped output */
982#define JS_WRITE_OBJ_SAB (1 << 2) /* allow SharedArrayBuffer */
983#define JS_WRITE_OBJ_REFERENCE (1 << 3) /* allow object references to
984 encode arbitrary object
985 graph */
986uint8_t *JS_WriteObject(JSContext *ctx, size_t *psize, JSValueConst obj,
987 int flags);
988uint8_t *JS_WriteObject2(JSContext *ctx, size_t *psize, JSValueConst obj,
989 int flags, uint8_t ***psab_tab, size_t *psab_tab_len);
991#define JS_READ_OBJ_BYTECODE (1 << 0) /* allow function/module */
992#define JS_READ_OBJ_ROM_DATA (1 << 1) /* avoid duplicating 'buf' data */
993#define JS_READ_OBJ_SAB (1 << 2) /* allow SharedArrayBuffer */
994#define JS_READ_OBJ_REFERENCE (1 << 3) /* allow object references */
995JSValue JS_ReadObject(JSContext *ctx, const uint8_t *buf, size_t buf_len,
996 int flags);
997/* instantiate and evaluate a bytecode function. Only used when
998 reading a script or module with JS_ReadObject() */
1000/* load the dependencies of the module 'obj'. Useful when JS_ReadObject()
1001 returns a module. */
1003
1004/* only exported for os.Worker() */
1005JSAtom JS_GetScriptOrModuleName(JSContext *ctx, int n_stack_levels);
1006/* only exported for os.Worker() */
1007JSValue JS_LoadModule(JSContext *ctx, const char *basename,
1008 const char *filename);
1027typedef union JSCFunctionType {
1028 JSCFunction *generic;
1029 JSValue (*generic_magic)(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic);
1031 JSValue (*constructor_magic)(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv, int magic);
1033 double (*f_f)(double);
1034 double (*f_f_f)(double, double);
1037 JSValue (*getter_magic)(JSContext *ctx, JSValueConst this_val, int magic);
1038 JSValue (*setter_magic)(JSContext *ctx, JSValueConst this_val, JSValueConst val, int magic);
1040 int argc, JSValueConst *argv, int *pdone, int magic);
1042
1044 const char *name,
1045 int length, JSCFunctionEnum cproto, int magic);
1047 int length, int magic, int data_len,
1049
1050static inline JSValue JS_NewCFunction(JSContext *ctx, JSCFunction *func, const char *name,
1051 int length)
1052{
1053 return JS_NewCFunction2(ctx, func, name, length, JS_CFUNC_generic, 0);
1054}
1055
1056static inline JSValue JS_NewCFunctionMagic(JSContext *ctx, JSCFunctionMagic *func,
1057 const char *name,
1058 int length, JSCFunctionEnum cproto, int magic)
1059{
1060 /* Used to squelch a -Wcast-function-type warning. */
1061 JSCFunctionType ft = { .generic_magic = func };
1062 return JS_NewCFunction2(ctx, ft.generic, name, length, cproto, magic);
1063}
1064int JS_SetConstructor(JSContext *ctx, JSValueConst func_obj,
1065 JSValueConst proto);
1066
1067/* C property definition */
1069typedef struct JSCFunctionListEntry {
1070 const char *name;
1071 uint8_t prop_flags;
1072 uint8_t def_type;
1073 int16_t magic;
1074 union {
1075 struct {
1076 uint8_t length; /* XXX: should move outside union */
1077 uint8_t cproto; /* XXX: should move outside union */
1078 JSCFunctionType cfunc;
1079 } func;
1080 struct {
1082 JSCFunctionType set;
1083 } getset;
1084 struct {
1085 const char *name;
1086 int base;
1088 struct {
1089 const struct JSCFunctionListEntry *tab;
1090 int len;
1091 } prop_list;
1092 const char *str;
1095 double f64;
1096 } u;
1099#define JS_DEF_CFUNC 0
1100#define JS_DEF_CGETSET 1
1101#define JS_DEF_CGETSET_MAGIC 2
1102#define JS_DEF_PROP_STRING 3
1103#define JS_DEF_PROP_INT32 4
1104#define JS_DEF_PROP_INT64 5
1105#define JS_DEF_PROP_DOUBLE 6
1106#define JS_DEF_PROP_UNDEFINED 7
1107#define JS_DEF_OBJECT 8
1108#define JS_DEF_ALIAS 9
1109#define JS_DEF_PROP_ATOM 10
1110#define JS_DEF_PROP_BOOL 11
1112/* Note: c++ does not like nested designators */
1113#define JS_CFUNC_DEF(name, length, func1) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0, .u = { .func = { length, JS_CFUNC_generic, { .generic = func1 } } } }
1114#define JS_CFUNC_MAGIC_DEF(name, length, func1, magic) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, magic, .u = { .func = { length, JS_CFUNC_generic_magic, { .generic_magic = func1 } } } }
1115#define JS_CFUNC_SPECIAL_DEF(name, length, cproto, func1) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0, .u = { .func = { length, JS_CFUNC_ ## cproto, { .cproto = func1 } } } }
1116#define JS_ITERATOR_NEXT_DEF(name, length, func1, magic) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, magic, .u = { .func = { length, JS_CFUNC_iterator_next, { .iterator_next = func1 } } } }
1117#define JS_CGETSET_DEF(name, fgetter, fsetter) { name, JS_PROP_CONFIGURABLE, JS_DEF_CGETSET, 0, .u = { .getset = { .get = { .getter = fgetter }, .set = { .setter = fsetter } } } }
1118#define JS_CGETSET_MAGIC_DEF(name, fgetter, fsetter, magic) { name, JS_PROP_CONFIGURABLE, JS_DEF_CGETSET_MAGIC, magic, .u = { .getset = { .get = { .getter_magic = fgetter }, .set = { .setter_magic = fsetter } } } }
1119#define JS_PROP_STRING_DEF(name, cstr, prop_flags) { name, prop_flags, JS_DEF_PROP_STRING, 0, .u = { .str = cstr } }
1120#define JS_PROP_INT32_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_INT32, 0, .u = { .i32 = val } }
1121#define JS_PROP_INT64_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_INT64, 0, .u = { .i64 = val } }
1122#define JS_PROP_DOUBLE_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_DOUBLE, 0, .u = { .f64 = val } }
1123#define JS_PROP_UNDEFINED_DEF(name, prop_flags) { name, prop_flags, JS_DEF_PROP_UNDEFINED, 0, .u = { .i32 = 0 } }
1124#define JS_PROP_ATOM_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_ATOM, 0, .u = { .i32 = val } }
1125#define JS_PROP_BOOL_DEF(name, val, prop_flags) { name, prop_flags, JS_DEF_PROP_BOOL, 0, .u = { .i32 = val } }
1126#define JS_OBJECT_DEF(name, tab, len, prop_flags) { name, prop_flags, JS_DEF_OBJECT, 0, .u = { .prop_list = { tab, len } } }
1127#define JS_ALIAS_DEF(name, from) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_ALIAS, 0, .u = { .alias = { from, -1 } } }
1128#define JS_ALIAS_BASE_DEF(name, from, base) { name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_ALIAS, 0, .u = { .alias = { from, base } } }
1129
1131 const JSCFunctionListEntry *tab,
1132 int len);
1133
1134/* C module definition */
1135
1136typedef int JSModuleInitFunc(JSContext *ctx, JSModuleDef *m);
1137
1138JSModuleDef *JS_NewCModule(JSContext *ctx, const char *name_str,
1139 JSModuleInitFunc *func);
1140/* can only be called before the module is instantiated */
1141int JS_AddModuleExport(JSContext *ctx, JSModuleDef *m, const char *name_str);
1143 const JSCFunctionListEntry *tab, int len);
1144/* can only be called after the module is instantiated */
1145int JS_SetModuleExport(JSContext *ctx, JSModuleDef *m, const char *export_name,
1146 JSValue val);
1148 const JSCFunctionListEntry *tab, int len);
1149/* associate a JSValue to a C module */
1152
1153/* debug value output */
1155typedef struct {
1156 JS_BOOL show_hidden : 8; /* only show enumerable properties */
1157 JS_BOOL raw_dump : 8; /* avoid doing autoinit and avoid any malloc() call (for internal use) */
1158 uint32_t max_depth; /* recurse up to this depth, 0 = no limit */
1159 uint32_t max_string_length; /* print no more than this length for
1160 strings, 0 = no limit */
1161 uint32_t max_item_count; /* print no more than this count for
1162 arrays or objects, 0 = no limit */
1164
1165typedef void JSPrintValueWrite(void *opaque, const char *buf, size_t len);
1166
1168void JS_PrintValueRT(JSRuntime *rt, JSPrintValueWrite *write_func, void *write_opaque,
1170void JS_PrintValue(JSContext *ctx, JSPrintValueWrite *write_func, void *write_opaque,
1172
1173#undef js_unlikely
1174#undef js_force_inline
1175
1176#ifdef __cplusplus
1177} /* extern "C" { */
1178#endif
1179
1180#endif /* QUICKJS_H */
uint64_t size_t
Definition stdint.h:104
uint8_t flags
Definition virtio.h:0
XETime t
Definition main.cpp:53
int int32_t
Definition acefiex.h:160
unsigned int uint32_t
Definition acefiex.h:163
COMPILER_DEPENDENT_INT64 int64_t
Definition acefiex.h:164
short int int16_t
Definition acefiex.h:159
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
#define NULL
Definition actypes.h:561
signed int i32
Definition basetype.h:34
flag
Definition bytecode.h:29
size_t size
Definition drm_bridge.h:1299
struct drm_crtc struct drm_plane struct drm_plane const struct drm_crtc_funcs const char * name
Definition drm_crtc.h:1242
struct i915_user_extension base
Definition i915_drm.h:0
size_t len
Definition initial.c:23
void strlen(void)
void * data
Definition kthread.h:30
#define d
Definition libunicode.c:1833
uint64_t u64
Definition kernel.h:17
@ options
Definition m_menu.c:234
#define free_func
Definition miniz.h:482
AuVFSNode * alias
Definition netproxy.c:43
JSValue JS_CallConstructor2(JSContext *ctx, JSValueConst func_obj, JSValueConst new_target, int argc, JSValueConst *argv)
Definition quickjs.c:20827
const char * JS_ToCStringLen2(JSContext *ctx, size_t *plen, JSValueConst val1, JS_BOOL cesu8)
void JS_SetStripInfo(JSRuntime *rt, int flags)
Definition quickjs.c:2311
int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m, const JSCFunctionListEntry *tab, int len)
Definition quickjs.c:39710
JSValue JS_GetPropertyStr(JSContext *ctx, JSValueConst this_obj, const char *prop)
Definition quickjs.c:9253
void JS_SetModuleLoaderFunc2(JSRuntime *rt, JSModuleNormalizeFunc *module_normalize, JSModuleLoaderFunc2 *module_loader, JSModuleCheckSupportedImportAttributes *module_check_attrs, void *opaque)
Definition quickjs.c:29896
JSValue JS_NewError(JSContext *ctx)
Definition quickjs.c:7722
JS_BOOL JS_IsLiveObject(JSRuntime *rt, JSValueConst obj)
Definition quickjs.c:6932
char * js_strndup(JSContext *ctx, const char *s, size_t n)
Definition quickjs.c:1920
#define JS_TAG_IS_FLOAT64(tag)
Definition quickjs.h:250
#define JS_VALUE_HAS_REF_COUNT(v)
Definition quickjs.h:287
int JS_DefinePropertyValue(JSContext *ctx, JSValueConst this_obj, JSAtom prop, JSValue val, int flags)
Definition quickjs.c:10768
int JS_ExecutePendingJob(JSRuntime *rt, JSContext **pctx)
Definition quickjs.c:2361
void JS_SetOpaque(JSValue obj, void *opaque)
Definition quickjs.c:11110
JSValue JS_NewTypedArray(JSContext *ctx, int argc, JSValueConst *argv, JSTypedArrayEnum array_type)
Definition quickjs.c:57353
JSModuleDef * JSModuleLoaderFunc(JSContext *ctx, const char *module_name, void *opaque)
Definition quickjs.h:945
void * js_realloc2(JSContext *ctx, void *ptr, size_t size, size_t *pslack)
Definition quickjs.c:1899
int JS_PreventExtensions(JSContext *ctx, JSValueConst obj)
Definition quickjs.c:9012
int JS_DefinePropertyValueUint32(JSContext *ctx, JSValueConst this_obj, uint32_t idx, JSValue val, int flags)
Definition quickjs.c:10794
JSValue JS_ReadObject(JSContext *ctx, const uint8_t *buf, size_t buf_len, int flags)
Definition quickjs.c:39449
JSValue js_string_codePointRange(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv)
Definition quickjs.c:45270
int JS_GetOwnPropertyNames(JSContext *ctx, JSPropertyEnum **ptab, uint32_t *plen, JSValueConst obj, int flags)
Definition quickjs.c:8892
const char * JS_AtomToCStringLen(JSContext *ctx, size_t *plen, JSAtom atom)
Definition quickjs.c:3842
int JS_IsExtensible(JSContext *ctx, JSValueConst obj)
Definition quickjs.c:8995
JSCFunctionEnum
Definition quickjs.h:1009
@ JS_CFUNC_getter_magic
Definition quickjs.h:1020
@ JS_CFUNC_f_f
Definition quickjs.h:1016
@ JS_CFUNC_f_f_f
Definition quickjs.h:1017
@ JS_CFUNC_setter_magic
Definition quickjs.h:1021
@ JS_CFUNC_iterator_next
Definition quickjs.h:1022
@ JS_CFUNC_setter
Definition quickjs.h:1019
@ JS_CFUNC_getter
Definition quickjs.h:1018
@ JS_CFUNC_constructor_magic
Definition quickjs.h:1013
@ JS_CFUNC_generic
Definition quickjs.h:1010
@ JS_CFUNC_constructor_or_func_magic
Definition quickjs.h:1015
@ JS_CFUNC_generic_magic
Definition quickjs.h:1011
@ JS_CFUNC_constructor
Definition quickjs.h:1012
@ JS_CFUNC_constructor_or_func
Definition quickjs.h:1014
JSValue JS_Call(JSContext *ctx, JSValueConst func_obj, JSValueConst this_obj, int argc, JSValueConst *argv)
Definition quickjs.c:20687
int JS_IsArray(JSContext *ctx, JSValueConst val)
Definition quickjs.c:14645
JSValue JS_NewBigInt64(JSContext *ctx, int64_t v)
Definition quickjs.c:14667
JSValue JS_NewPromiseCapability(JSContext *ctx, JSValue *resolving_funcs)
Definition quickjs.c:53643
uint8_t * JS_GetArrayBuffer(JSContext *ctx, size_t *psize, JSValueConst obj)
Definition quickjs.c:56958
void JS_DumpMemoryUsage(FILE *fp, const JSMemoryUsage *s, JSRuntime *rt)
Definition quickjs.c:7313
JS_BOOL JS_IsConstructor(JSContext *ctx, JSValueConst val)
Definition quickjs.c:11076
JS_BOOL JS_SameValue(JSContext *ctx, JSValueConst op1, JSValueConst op2)
Definition quickjs.c:16001
JSValue JS_AtomToString(JSContext *ctx, JSAtom atom)
Definition quickjs.c:3716
JSValue JS_NewAtomString(JSContext *ctx, const char *str)
Definition quickjs.c:4534
JSValue JS_CallConstructor(JSContext *ctx, JSValueConst func_obj, int argc, JSValueConst *argv)
Definition quickjs.c:20836
void JS_MarkFunc(JSRuntime *rt, JSGCObjectHeader *gp)
Definition quickjs.h:383
int JS_DeleteProperty(JSContext *ctx, JSValueConst obj, JSAtom prop, int flags)
Definition quickjs.c:11009
JSValue JS_ParseJSON2(JSContext *ctx, const char *buf, size_t buf_len, const char *filename, int flags)
Definition quickjs.c:49558
void JS_SetInterruptHandler(JSRuntime *rt, JSInterruptHandler *cb, void *opaque)
Definition quickjs.c:2294
JSValue JS_PromiseResult(JSContext *ctx, JSValue promise)
Definition quickjs.c:53228
JSClassID JS_GetClassID(JSValue v)
Definition quickjs.c:3929
void JS_SetRuntimeOpaque(JSRuntime *rt, void *opaque)
Definition quickjs.c:2159
int JS_ResolveModule(JSContext *ctx, JSValueConst obj)
Definition quickjs.c:37336
#define JS_VALUE_GET_NORM_TAG(v)
Definition quickjs.h:238
uint8_t * JS_WriteObject2(JSContext *ctx, size_t *psize, JSValueConst obj, int flags, uint8_t ***psab_tab, size_t *psab_tab_len)
Definition quickjs.c:38282
uint32_t JSAtom
Definition quickjs.h:54
JSValue JS_JSONStringify(JSContext *ctx, JSValueConst obj, JSValueConst replacer, JSValueConst space0)
Definition quickjs.c:50113
JSValue const char JSValue const char JSValue const char JSValue const char JSValue const char JSValue JS_ThrowOutOfMemory(JSContext *ctx)
Definition quickjs.c:7867
int JS_AddIntrinsicWeakRef(JSContext *ctx)
Definition quickjs.c:61248
void * js_mallocz(JSContext *ctx, size_t size)
Definition quickjs.c:1870
JSValue JS_ToPropertyKey(JSContext *ctx, JSValueConst val)
Definition quickjs.c:13754
int JSInterruptHandler(JSRuntime *rt, void *opaque)
Definition quickjs.h:925
JSRuntime * JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque)
Definition quickjs.c:2095
JSValue JSCFunctionData(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic, JSValue *func_data)
Definition quickjs.h:351
#define JS_MKVAL(tag, val)
Definition quickjs.h:247
JSContext * JS_DupContext(JSContext *ctx)
Definition quickjs.c:2768
JSValue JS_GetClassProto(JSContext *ctx, JSClassID class_id)
Definition quickjs.c:2737
JSValue JSCFunction(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv)
Definition quickjs.h:349
int JS_EnqueueJob(JSContext *ctx, JSJobFunc *job_func, int argc, JSValueConst *argv)
Definition quickjs.c:2345
void * JS_GetRuntimeOpaque(JSRuntime *rt)
Definition quickjs.c:2154
JSValue JS_Throw(JSContext *ctx, JSValue obj)
Definition quickjs.c:7444
int JS_AddIntrinsicPromise(JSContext *ctx)
Definition quickjs.c:54498
JSAtom JS_GetScriptOrModuleName(JSContext *ctx, int n_stack_levels)
Definition quickjs.c:30826
JSValue JS_GetPropertyInternal(JSContext *ctx, JSValueConst obj, JSAtom prop, JSValueConst receiver, JS_BOOL throw_ref_error)
void * js_realloc(JSContext *ctx, void *ptr, size_t size)
Definition quickjs.c:1887
int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValueConst val)
Definition quickjs.c:13460
JSValue JS_GetImportMeta(JSContext *ctx, JSModuleDef *m)
Definition quickjs.c:30866
uint32_t JSClassID
Definition quickjs.h:53
JSPromiseStateEnum JS_PromiseState(JSContext *ctx, JSValue promise)
Definition quickjs.c:53220
#define JS_PROP_THROW
Definition quickjs.h:320
int JS_AddIntrinsicProxy(JSContext *ctx)
Definition quickjs.c:51396
void * js_realloc_rt(JSRuntime *rt, void *ptr, size_t size)
Definition quickjs.c:1830
JSClassID JS_NewClassID(JSClassID *pclass_id)
Definition quickjs.c:3912
JSRuntime * JS_GetRuntime(JSContext *ctx)
Definition quickjs.c:2894
int JS_SetPropertyInt64(JSContext *ctx, JSValueConst this_obj, int64_t idx, JSValue val)
Definition quickjs.c:10168
JSAtom JS_NewAtomLen(JSContext *ctx, const char *str, size_t len)
Definition quickjs.c:3549
int JS_ToBool(JSContext *ctx, JSValueConst val)
Definition quickjs.c:11314
void JS_ComputeMemoryUsage(JSRuntime *rt, JSMemoryUsage *s)
Definition quickjs.c:7017
JSAtom JS_GetModuleName(JSContext *ctx, JSModuleDef *m)
Definition quickjs.c:30861
void JS_FreeAtomRT(JSRuntime *rt, JSAtom v)
Definition quickjs.c:3819
int JS_GetStripInfo(JSRuntime *rt)
Definition quickjs.c:2316
void JS_DetachArrayBuffer(JSContext *ctx, JSValueConst obj)
Definition quickjs.c:56926
JSValue JS_NewBigUint64(JSContext *ctx, uint64_t v)
Definition quickjs.c:14684
JSValue JS_GetTypedArrayBuffer(JSContext *ctx, JSValueConst obj, size_t *pbyte_offset, size_t *pbyte_length, size_t *pbytes_per_element)
Definition quickjs.c:57366
int JS_SetPropertyStr(JSContext *ctx, JSValueConst this_obj, const char *prop, JSValue val)
Definition quickjs.c:10189
uint8_t * JS_WriteObject(JSContext *ctx, size_t *psize, JSValueConst obj, int flags)
Definition quickjs.c:38326
JSValue JS_NewObjectClass(JSContext *ctx, int class_id)
Definition quickjs.c:5920
int JS_HasProperty(JSContext *ctx, JSValueConst this_obj, JSAtom prop)
Definition quickjs.c:9042
void JSPrintValueWrite(void *opaque, const char *buf, size_t len)
Definition quickjs.h:1163
JS_BOOL JS_SetConstructorBit(JSContext *ctx, JSValueConst func_obj, JS_BOOL val)
void js_free_rt(JSRuntime *rt, void *ptr)
Definition quickjs.c:1825
JSModuleDef * JS_NewCModule(JSContext *ctx, const char *name_str, JSModuleInitFunc *func)
Definition quickjs.c:29824
#define JS_BOOL
Definition quickjs.h:48
int JS_AddModuleExport(JSContext *ctx, JSModuleDef *m, const char *name_str)
Definition quickjs.c:29839
JSValue JS_NewArrayBuffer(JSContext *ctx, uint8_t *buf, size_t len, JSFreeArrayBufferDataFunc *free_func, void *opaque, JS_BOOL is_shared)
JSValue JS_NewStringLen(JSContext *ctx, const char *str1, size_t len1)
Definition quickjs.c:4446
JSValue JS_GetModuleNamespace(JSContext *ctx, JSModuleDef *m)
Definition quickjs.c:30484
void JS_SetClassProto(JSContext *ctx, JSClassID class_id, JSValue obj)
Definition quickjs.c:2730
JSAtom JS_NewAtomUInt32(JSContext *ctx, uint32_t n)
Definition quickjs.c:3571
JSValue JS_NewCFunction2(JSContext *ctx, JSCFunction *func, const char *name, int length, JSCFunctionEnum cproto, int magic)
Definition quickjs.c:6072
void JS_SetSharedArrayBufferFunctions(JSRuntime *rt, const JSSharedArrayBufferFunctions *sf)
Definition quickjs.c:2305
JSValue JS_ToString(JSContext *ctx, JSValueConst val)
Definition quickjs.c:13734
JSRuntime * JS_NewRuntime(void)
Definition quickjs.c:2274
int JS_AddIntrinsicStringNormalize(JSContext *ctx)
Definition quickjs.c:46778
int JS_AddIntrinsicDate(JSContext *ctx)
Definition quickjs.c:56017
void js_free(JSContext *ctx, void *ptr)
Definition quickjs.c:1881
int JS_DefinePropertyValueStr(JSContext *ctx, JSValueConst this_obj, const char *prop, JSValue val, int flags)
Definition quickjs.c:10808
void JS_SetUncatchableException(JSContext *ctx, JS_BOOL flag)
JSValue JS_GetException(JSContext *ctx)
Definition quickjs.c:7454
JSAtom JS_ValueToAtom(JSContext *ctx, JSValueConst val)
Definition quickjs.c:9092
void * JS_GetOpaque2(JSContext *ctx, JSValueConst obj, JSClassID class_id)
Definition quickjs.c:11131
JSValue JS_ParseJSON(JSContext *ctx, const char *buf, size_t buf_len, const char *filename)
Definition quickjs.c:49564
void JS_SetMaxStackSize(JSRuntime *rt, size_t stack_size)
Definition quickjs.c:2908
JSValue JS_NewObjectProto(JSContext *ctx, JSValueConst proto)
Definition quickjs.c:5925
JSPromiseStateEnum
Definition quickjs.h:908
@ JS_PROMISE_REJECTED
Definition quickjs.h:911
@ JS_PROMISE_PENDING
Definition quickjs.h:909
@ JS_PROMISE_FULFILLED
Definition quickjs.h:910
int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValueConst val)
Definition quickjs.c:14804
int JS_ToFloat64(JSContext *ctx, double *pres, JSValueConst val)
Definition quickjs.c:13167
void JS_SetHostPromiseRejectionTracker(JSRuntime *rt, JSHostPromiseRejectionTracker *cb, void *opaque)
Definition quickjs.c:53290
void * js_malloc(JSContext *ctx, size_t size)
Definition quickjs.c:1858
JSValue JS_Eval(JSContext *ctx, const char *input, size_t input_len, const char *filename, int eval_flags)
Definition quickjs.c:37329
JSTypedArrayEnum
Definition quickjs.h:878
@ JS_TYPED_ARRAY_INT16
Definition quickjs.h:882
@ JS_TYPED_ARRAY_UINT32
Definition quickjs.h:885
@ JS_TYPED_ARRAY_UINT8C
Definition quickjs.h:879
@ JS_TYPED_ARRAY_FLOAT16
Definition quickjs.h:888
@ JS_TYPED_ARRAY_FLOAT64
Definition quickjs.h:890
@ JS_TYPED_ARRAY_UINT8
Definition quickjs.h:881
@ JS_TYPED_ARRAY_INT32
Definition quickjs.h:884
@ JS_TYPED_ARRAY_BIG_UINT64
Definition quickjs.h:887
@ JS_TYPED_ARRAY_FLOAT32
Definition quickjs.h:889
@ JS_TYPED_ARRAY_INT8
Definition quickjs.h:880
@ JS_TYPED_ARRAY_UINT16
Definition quickjs.h:883
@ JS_TYPED_ARRAY_BIG_INT64
Definition quickjs.h:886
void JS_PrintValueRT(JSRuntime *rt, JSPrintValueWrite *write_func, void *write_opaque, JSValueConst val, const JSPrintValueOptions *options)
Definition quickjs.c:14523
int JS_SetPropertyInternal(JSContext *ctx, JSValueConst obj, JSAtom prop, JSValue val, JSValueConst this_obj, int flags)
Definition quickjs.c:9752
#define __js_printf_like(a, b)
Definition quickjs.h:45
int JS_AddIntrinsicBaseObjects(JSContext *ctx)
Definition quickjs.c:56373
JSValue JS_EvalThis(JSContext *ctx, JSValueConst this_obj, const char *input, size_t input_len, const char *filename, int eval_flags)
Definition quickjs.c:37315
size_t js_malloc_usable_size_rt(JSRuntime *rt, const void *ptr)
Definition quickjs.c:1835
int JS_AddIntrinsicTypedArrays(JSContext *ctx)
Definition quickjs.c:60893
int JS_SetConstructor(JSContext *ctx, JSValueConst func_obj, JSValueConst proto)
Definition quickjs.c:39767
int JS_NewClass(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def)
Definition quickjs.c:3995
void __JS_FreeValue(JSContext *ctx, JSValue v)
Definition quickjs.c:6592
@ JS_TAG_FUNCTION_BYTECODE
Definition quickjs.h:83
@ JS_TAG_SHORT_BIG_INT
Definition quickjs.h:93
@ JS_TAG_BIG_INT
Definition quickjs.h:78
@ JS_TAG_EXCEPTION
Definition quickjs.h:92
@ JS_TAG_MODULE
Definition quickjs.h:82
@ JS_TAG_INT
Definition quickjs.h:86
@ JS_TAG_UNINITIALIZED
Definition quickjs.h:90
@ JS_TAG_CATCH_OFFSET
Definition quickjs.h:91
@ JS_TAG_NULL
Definition quickjs.h:88
@ JS_TAG_BOOL
Definition quickjs.h:87
@ JS_TAG_STRING_ROPE
Definition quickjs.h:81
@ JS_TAG_FLOAT64
Definition quickjs.h:94
@ JS_TAG_FIRST
Definition quickjs.h:77
@ JS_TAG_OBJECT
Definition quickjs.h:84
@ JS_TAG_UNDEFINED
Definition quickjs.h:89
@ JS_TAG_STRING
Definition quickjs.h:80
@ JS_TAG_SYMBOL
Definition quickjs.h:79
void JS_AddIntrinsicRegExpCompiler(JSContext *ctx)
Definition quickjs.c:49123
int JS_SetModulePrivateValue(JSContext *ctx, JSModuleDef *m, JSValue val)
Definition quickjs.c:29874
void JS_SetContextOpaque(JSContext *ctx, void *opaque)
Definition quickjs.c:2715
int JSModuleInitFunc(JSContext *ctx, JSModuleDef *m)
Definition quickjs.h:1134
int JS_AddIntrinsicMapSet(JSContext *ctx)
Definition quickjs.c:53149
JSAtom JS_NewAtom(JSContext *ctx, const char *str)
Definition quickjs.c:3566
void JS_SetGCThreshold(JSRuntime *rt, size_t gc_threshold)
Definition quickjs.c:2285
#define JS_NAN
Definition quickjs.h:252
void JS_FreeContext(JSContext *s)
Definition quickjs.c:2823
JS_BOOL JS_IsFunction(JSContext *ctx, JSValueConst val)
Definition quickjs.c:11048
char * JSModuleNormalizeFunc(JSContext *ctx, const char *module_base_name, const char *module_name, void *opaque)
Definition quickjs.h:942
int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id)
Definition quickjs.c:3938
int JS_SetPropertyUint32(JSContext *ctx, JSValueConst this_obj, uint32_t idx, JSValue val)
Definition quickjs.c:10161
void * JS_GetContextOpaque(JSContext *ctx)
Definition quickjs.c:2710
void JS_MarkValue(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_func)
Definition quickjs.c:6642
void __JS_FreeValueRT(JSRuntime *rt, JSValue v)
Definition quickjs.c:6521
JSValue JSClassCall(JSContext *ctx, JSValueConst func_obj, JSValueConst this_val, int argc, JSValueConst *argv, int flags)
Definition quickjs.h:527
#define js_force_inline
Definition quickjs.h:44
int JS_DefineProperty(JSContext *ctx, JSValueConst this_obj, JSAtom prop, JSValueConst val, JSValueConst getter, JSValueConst setter, int flags)
Definition quickjs.c:10439
void JS_PrintValue(JSContext *ctx, JSPrintValueWrite *write_func, void *write_opaque, JSValueConst val, const JSPrintValueOptions *options)
Definition quickjs.c:14529
#define JSValueConst
Definition quickjs.h:234
void JS_FreeAtom(JSContext *ctx, JSAtom v)
Definition quickjs.c:3813
void JS_PrintValueSetDefaultOptions(JSPrintValueOptions *options)
Definition quickjs.c:14490
#define js_unlikely(x)
Definition quickjs.h:43
JSAtom JS_DupAtom(JSContext *ctx, JSAtom v)
Definition quickjs.c:3195
JS_BOOL JS_StrictEq(JSContext *ctx, JSValueConst op1, JSValueConst op2)
Definition quickjs.c:15989
int JS_SetPropertyFunctionList(JSContext *ctx, JSValueConst obj, const JSCFunctionListEntry *tab, int len)
Definition quickjs.c:39681
void JS_SetMemoryLimit(JSRuntime *rt, size_t limit)
Definition quickjs.c:2279
int JS_DefinePropertyGetSet(JSContext *ctx, JSValueConst this_obj, JSAtom prop, JSValue getter, JSValue setter, int flags)
Definition quickjs.c:10824
JSValue JS_NewCFunctionData(JSContext *ctx, JSCFunctionData *func, int length, int magic, int data_len, JSValueConst *data)
Definition quickjs.c:6136
JS_BOOL JS_DetectModule(const char *input, size_t input_len)
Definition quickjs.c:23764
void JSClassGCMark(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_func)
Definition quickjs.h:524
void JS_SetRuntimeInfo(JSRuntime *rt, const char *info)
Definition quickjs.c:2457
void JSClassFinalizer(JSRuntime *rt, JSValue val)
Definition quickjs.h:523
int JS_AddIntrinsicEval(JSContext *ctx)
Definition quickjs.c:56036
int JS_GetOwnProperty(JSContext *ctx, JSPropertyDescriptor *desc, JSValueConst obj, JSAtom prop)
Definition quickjs.c:8984
int JS_AddModuleExportList(JSContext *ctx, JSModuleDef *m, const JSCFunctionListEntry *tab, int len)
Definition quickjs.c:39699
#define JS_VALUE_GET_PTR(v)
Definition quickjs.h:243
JS_BOOL JS_HasException(JSContext *ctx)
Definition quickjs.c:7463
int JS_ToInt64Ext(JSContext *ctx, int64_t *pres, JSValueConst val)
Definition quickjs.c:13399
int JS_SetModuleExport(JSContext *ctx, JSModuleDef *m, const char *export_name, JSValue val)
Definition quickjs.c:29855
void JS_UpdateStackTop(JSRuntime *rt)
Definition quickjs.c:2914
#define JS_VALUE_GET_TAG(v)
Definition quickjs.h:236
JSModuleDef * JSModuleLoaderFunc2(JSContext *ctx, const char *module_name, void *opaque, JSValueConst attributes)
Definition quickjs.h:947
JSValue JS_Invoke(JSContext *ctx, JSValueConst this_val, JSAtom atom, int argc, JSValueConst *argv)
Definition quickjs.c:20844
JSValue JSCFunctionMagic(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic)
Definition quickjs.h:350
JSValue JS_GetGlobalObject(JSContext *ctx)
Definition quickjs.c:7438
void * js_malloc_rt(JSRuntime *rt, size_t size)
Definition quickjs.c:1820
JS_BOOL JS_IsJobPending(JSRuntime *rt)
Definition quickjs.c:2351
JSValue JS_NewArray(JSContext *ctx)
Definition quickjs.c:5930
int JS_ToIndex(JSContext *ctx, uint64_t *plen, JSValueConst val)
Definition quickjs.c:13582
void * JS_GetAnyOpaque(JSValueConst obj, JSClassID *class_id)
Definition quickjs.c:11140
void JS_SetCanBlock(JSRuntime *rt, JS_BOOL can_block)
void JS_FreeRuntime(JSRuntime *rt)
Definition quickjs.c:2463
void * js_mallocz_rt(JSRuntime *rt, size_t size)
Definition quickjs.c:1840
void JS_SetIsHTMLDDA(JSContext *ctx, JSValueConst obj)
Definition quickjs.c:11231
JSValue JS_NewDate(JSContext *ctx, double epoch_ms)
Definition quickjs.c:56008
JS_BOOL JS_SameValueZero(JSContext *ctx, JSValueConst op1, JSValueConst op2)
Definition quickjs.c:16013
void JSFreeArrayBufferDataFunc(JSRuntime *rt, void *opaque, void *ptr)
Definition quickjs.h:870
size_t js_malloc_usable_size(JSContext *ctx, const void *ptr)
Definition quickjs.c:1914
int JSModuleCheckSupportedImportAttributes(JSContext *ctx, void *opaque, JSValueConst attributes)
Definition quickjs.h:951
void JS_FreeCString(JSContext *ctx, const char *ptr)
Definition quickjs.c:4643
void JS_FreePropertyEnum(JSContext *ctx, JSPropertyEnum *tab, uint32_t len)
Definition quickjs.c:8675
int JS_ToInt64(JSContext *ctx, int64_t *pres, JSValueConst val)
Definition quickjs.c:13394
int JS_AddIntrinsicJSON(JSContext *ctx)
Definition quickjs.c:50266
void JS_SetModuleLoaderFunc(JSRuntime *rt, JSModuleNormalizeFunc *module_normalize, JSModuleLoaderFunc *module_loader, void *opaque)
Definition quickjs.c:29885
JSValue JSJobFunc(JSContext *ctx, int argc, JSValueConst *argv)
Definition quickjs.h:973
JSValue JS_NewObjectProtoClass(JSContext *ctx, JSValueConst proto, JSClassID class_id)
Definition quickjs.c:5832
JSValue JS_GetPropertyUint32(JSContext *ctx, JSValueConst this_obj, uint32_t idx)
Definition quickjs.c:9193
JS_BOOL JS_IsError(JSContext *ctx, JSValueConst val)
Definition quickjs.c:11095
char * js_strdup(JSContext *ctx, const char *str)
Definition quickjs.c:1931
void JS_RunGC(JSRuntime *rt)
Definition quickjs.c:6924
JSValue JS_LoadModule(JSContext *ctx, const char *basename, const char *filename)
Definition quickjs.c:30993
int JS_AddIntrinsicRegExp(JSContext *ctx)
Definition quickjs.c:49128
JSValue JS_EvalFunction(JSContext *ctx, JSValue fun_obj)
Definition quickjs.c:37154
#define JS_VALUE_GET_FLOAT64(v)
Definition quickjs.h:241
int JS_IsInstanceOf(JSContext *ctx, JSValueConst val, JSValueConst obj)
Definition quickjs.c:8222
int JS_SetPrototype(JSContext *ctx, JSValueConst obj, JSValueConst proto_val)
Definition quickjs.c:8078
JSContext * JS_NewContextRaw(JSRuntime *rt)
Definition quickjs.c:2651
void JSHostPromiseRejectionTracker(JSContext *ctx, JSValueConst promise, JSValueConst reason, JS_BOOL is_handled, void *opaque)
Definition quickjs.h:919
JSValue JS_GetPrototype(JSContext *ctx, JSValueConst val)
Definition quickjs.c:8116
JSValue JS_AtomToValue(JSContext *ctx, JSAtom atom)
Definition quickjs.c:3711
JSValue JS_GetModulePrivateValue(JSContext *ctx, JSModuleDef *m)
Definition quickjs.c:29880
JSContext * JS_NewContext(JSRuntime *rt)
Definition quickjs.c:2685
JSValue JS_NewObject(JSContext *ctx)
Definition quickjs.c:5936
void * JS_GetOpaque(JSValueConst obj, JSClassID class_id)
Definition quickjs.c:11120
JSValue JS_NewArrayBufferCopy(JSContext *ctx, const uint8_t *buf, size_t len)
Definition quickjs.c:56711
JSValue const char * fmt
Definition quickjs.h:673
Definition quickjs.h:1067
Definition quickjs.h:531
JSClassGCMark * gc_mark
Definition quickjs.h:534
JSClassFinalizer * finalizer
Definition quickjs.h:533
const char * class_name
Definition quickjs.h:532
JSClassExoticMethods * exotic
Definition quickjs.h:543
JSClassCall * call
Definition quickjs.h:540
Definition quickjs.h:482
JSValue(* get_property)(JSContext *ctx, JSValueConst obj, JSAtom atom, JSValueConst receiver)
Definition quickjs.h:505
int(* set_property)(JSContext *ctx, JSValueConst obj, JSAtom atom, JSValueConst value, JSValueConst receiver, int flags)
Definition quickjs.h:508
int(* has_property)(JSContext *ctx, JSValueConst obj, JSAtom atom)
Definition quickjs.h:504
int(* set_prototype)(JSContext *ctx, JSValueConst obj, JSValueConst proto_val)
Definition quickjs.h:516
int(* is_extensible)(JSContext *ctx, JSValueConst obj)
Definition quickjs.h:518
int(* define_own_property)(JSContext *ctx, JSValueConst this_obj, JSAtom prop, JSValueConst val, JSValueConst getter, JSValueConst setter, int flags)
Definition quickjs.h:497
int(* delete_property)(JSContext *ctx, JSValueConst obj, JSAtom prop)
Definition quickjs.h:495
int(* prevent_extensions)(JSContext *ctx, JSValueConst obj)
Definition quickjs.h:520
int(* get_own_property_names)(JSContext *ctx, JSPropertyEnum **ptab, uint32_t *plen, JSValueConst obj)
Definition quickjs.h:491
int(* get_own_property)(JSContext *ctx, JSPropertyDescriptor *desc, JSValueConst obj, JSAtom prop)
Definition quickjs.h:486
JSValue(* get_prototype)(JSContext *ctx, JSValueConst obj)
Definition quickjs.h:514
Definition quickjs.c:404
Definition quickjs.c:525
Definition quickjs.c:446
Definition quickjs.h:360
void(* js_free)(JSMallocState *s, void *ptr)
Definition quickjs.h:362
size_t(* js_malloc_usable_size)(const void *ptr)
Definition quickjs.h:364
Definition quickjs.h:353
size_t malloc_count
Definition quickjs.h:354
size_t malloc_limit
Definition quickjs.h:356
void * opaque
Definition quickjs.h:357
size_t malloc_size
Definition quickjs.h:355
Definition quickjs.h:431
int64_t prop_size
Definition quickjs.h:438
int64_t atom_size
Definition quickjs.h:435
int64_t c_func_count
Definition quickjs.h:442
int64_t fast_array_elements
Definition quickjs.h:443
int64_t malloc_size
Definition quickjs.h:432
int64_t binary_object_size
Definition quickjs.h:444
int64_t malloc_count
Definition quickjs.h:433
int64_t js_func_count
Definition quickjs.h:440
int64_t js_func_code_size
Definition quickjs.h:440
int64_t memory_used_count
Definition quickjs.h:434
int64_t js_func_size
Definition quickjs.h:440
int64_t js_func_pc2line_size
Definition quickjs.h:441
int64_t binary_object_count
Definition quickjs.h:444
int64_t fast_array_count
Definition quickjs.h:443
int64_t prop_count
Definition quickjs.h:438
int64_t str_count
Definition quickjs.h:436
int64_t shape_size
Definition quickjs.h:439
int64_t shape_count
Definition quickjs.h:439
int64_t js_func_pc2line_count
Definition quickjs.h:441
int64_t obj_count
Definition quickjs.h:437
int64_t memory_used_size
Definition quickjs.h:432
int64_t array_count
Definition quickjs.h:442
int64_t obj_size
Definition quickjs.h:437
int64_t atom_count
Definition quickjs.h:435
int64_t str_size
Definition quickjs.h:436
int64_t malloc_limit
Definition quickjs.h:432
Definition quickjs.c:904
JSAtom module_name
Definition quickjs.c:906
Definition quickjs.h:1153
Definition quickjs.h:475
JSValue setter
Definition quickjs.h:479
JSValue value
Definition quickjs.h:477
int flags
Definition quickjs.h:476
JSValue getter
Definition quickjs.h:478
Definition quickjs.h:470
JS_BOOL is_enumerable
Definition quickjs.h:471
JSAtom atom
Definition quickjs.h:472
Definition quickjs.h:99
int ref_count
Definition quickjs.h:100
Definition quickjs.c:330
Definition quickjs.h:899
void * sab_opaque
Definition quickjs.h:903
Definition quickjs.h:229
JSValueUnion u
Definition quickjs.h:230
int64_t tag
Definition quickjs.h:231
Definition stdio.h:41
Definition quickjs.h:1025
JSValue(* setter)(JSContext *ctx, JSValueConst this_val, JSValueConst val)
Definition quickjs.h:1034
JSCFunction * generic
Definition quickjs.h:1026
JSCFunction * constructor_or_func
Definition quickjs.h:1030
JSCFunction * constructor
Definition quickjs.h:1028
JSValue(* getter)(JSContext *ctx, JSValueConst this_val)
Definition quickjs.h:1033
JSValue(* setter_magic)(JSContext *ctx, JSValueConst this_val, JSValueConst val, int magic)
Definition quickjs.h:1036
JSValue(* iterator_next)(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int *pdone, int magic)
Definition quickjs.h:1037
JSValue(* getter_magic)(JSContext *ctx, JSValueConst this_val, int magic)
Definition quickjs.h:1035
JSValue(* generic_magic)(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic)
Definition quickjs.h:1027
double(* f_f)(double)
Definition quickjs.h:1031
JSValue(* constructor_magic)(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv, int magic)
Definition quickjs.h:1029
double(* f_f_f)(double, double)
Definition quickjs.h:1032
Definition quickjs.h:218
void * ptr
Definition quickjs.h:221
double float64
Definition quickjs.h:220
uint64_t uint64
Definition quickjs.h:219
int32_t short_big_int
Definition quickjs.h:223
struct VirtioInputEvent * input
Definition virtiokbd.c:46