jseption 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -6
- package/dist/atoms.d.ts +1 -0
- package/dist/atoms.js +2 -1
- package/dist/atoms.js.map +1 -1
- package/dist/builtins/base64.d.ts +14 -0
- package/dist/builtins/base64.js +219 -0
- package/dist/builtins/base64.js.map +1 -0
- package/dist/builtins/bigint.js +3 -3
- package/dist/builtins/bigint.js.map +1 -1
- package/dist/builtins/date.d.ts +1 -0
- package/dist/builtins/date.js +26 -12
- package/dist/builtins/date.js.map +1 -1
- package/dist/builtins/error.js +9 -0
- package/dist/builtins/error.js.map +1 -1
- package/dist/builtins/float16.d.ts +3 -0
- package/dist/builtins/float16.js +69 -0
- package/dist/builtins/float16.js.map +1 -0
- package/dist/builtins/function.js +2 -2
- package/dist/builtins/index.js +9 -6
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/iterator.d.ts +2 -0
- package/dist/builtins/iterator.js +624 -0
- package/dist/builtins/iterator.js.map +1 -0
- package/dist/builtins/json.d.ts +13 -1
- package/dist/builtins/json.js +283 -211
- package/dist/builtins/json.js.map +1 -1
- package/dist/builtins/mapset.js +365 -6
- package/dist/builtins/mapset.js.map +1 -1
- package/dist/builtins/math.js +203 -3
- package/dist/builtins/math.js.map +1 -1
- package/dist/builtins/native.js +6 -6
- package/dist/builtins/object.js +9 -2
- package/dist/builtins/object.js.map +1 -1
- package/dist/builtins/promise.js +31 -11
- package/dist/builtins/promise.js.map +1 -1
- package/dist/builtins/proxy.js +2 -2
- package/dist/builtins/reflect.js +6 -2
- package/dist/builtins/reflect.js.map +1 -1
- package/dist/builtins/regexp.js +74 -3
- package/dist/builtins/regexp.js.map +1 -1
- package/dist/builtins/string.js +1 -1
- package/dist/builtins/symbol.js +1 -1
- package/dist/builtins/symbol.js.map +1 -1
- package/dist/builtins/typedarray.d.ts +4 -1
- package/dist/builtins/typedarray.js +325 -37
- package/dist/builtins/typedarray.js.map +1 -1
- package/dist/builtins/weakref.js +7 -7
- package/dist/embed.d.ts +5 -0
- package/dist/embed.js +36 -11
- package/dist/embed.js.map +1 -1
- package/dist/interpreter.js +15 -14
- package/dist/interpreter.js.map +1 -1
- package/dist/jit.d.ts +1 -0
- package/dist/jit.js +51 -13
- package/dist/jit.js.map +1 -1
- package/dist/jit_hook.d.ts +1 -0
- package/dist/jit_hook.js.map +1 -1
- package/dist/jit_runtime.d.ts +1 -1
- package/dist/jit_runtime.js +6 -6
- package/dist/jit_runtime.js.map +1 -1
- package/dist/jit_stack.d.ts +1 -0
- package/dist/jit_stack.js +2 -1
- package/dist/jit_stack.js.map +1 -1
- package/dist/jseption.d.ts +2 -0
- package/dist/jseption.js +1 -0
- package/dist/jseption.js.map +1 -1
- package/dist/membrane.d.ts +6 -0
- package/dist/membrane.js +7 -3
- package/dist/membrane.js.map +1 -1
- package/dist/module.js +5 -3
- package/dist/module.js.map +1 -1
- package/dist/parser.js +26 -9
- package/dist/parser.js.map +1 -1
- package/dist/print.d.ts +12 -0
- package/dist/print.js +494 -0
- package/dist/print.js.map +1 -0
- package/dist/qjs.js +13 -10
- package/dist/qjs.js.map +1 -1
- package/dist/quickjs.d.ts +8 -0
- package/dist/quickjs.js +132 -53
- package/dist/quickjs.js.map +1 -1
- package/dist/std.d.ts +4 -2
- package/dist/std.js +42 -8
- package/dist/std.js.map +1 -1
- package/dist/values.d.ts +31 -27
- package/dist/values.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/dist/builtins/promise.js
CHANGED
|
@@ -9,13 +9,13 @@ import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JSPromiseDat
|
|
|
9
9
|
Promise state
|
|
10
10
|
--------------------------------------------------------------------- */
|
|
11
11
|
export function JS_PromiseState(ctx, promise) {
|
|
12
|
-
const s = JS_GetOpaque(promise,
|
|
12
|
+
const s = JS_GetOpaque(promise, 46 /* JSClassID.PROMISE */);
|
|
13
13
|
if (!s)
|
|
14
14
|
return -1;
|
|
15
15
|
return s.promise_state;
|
|
16
16
|
}
|
|
17
17
|
export function JS_PromiseResult(ctx, promise) {
|
|
18
|
-
const s = JS_GetOpaque(promise,
|
|
18
|
+
const s = JS_GetOpaque(promise, 46 /* JSClassID.PROMISE */);
|
|
19
19
|
if (!s)
|
|
20
20
|
return undefined;
|
|
21
21
|
return s.promise_result;
|
|
@@ -52,7 +52,7 @@ function promise_reaction_job(ctx, argv) {
|
|
|
52
52
|
return undefined;
|
|
53
53
|
}
|
|
54
54
|
function fulfill_or_reject_promise(ctx, promise, value, is_reject) {
|
|
55
|
-
const s = JS_GetOpaque(promise,
|
|
55
|
+
const s = JS_GetOpaque(promise, 46 /* JSClassID.PROMISE */);
|
|
56
56
|
if (!s || s.promise_state !== 0 /* JSPromiseState.PENDING */)
|
|
57
57
|
return; /* should never happen */
|
|
58
58
|
s.promise_result = value;
|
|
@@ -94,7 +94,7 @@ export function js_create_resolving_functions(ctx, resolving_funcs, promise) {
|
|
|
94
94
|
js_promise_resolve_function_call(ctx, fobj, args.length > 0 ? args[0] : undefined);
|
|
95
95
|
return undefined;
|
|
96
96
|
};
|
|
97
|
-
fobj = Q.js_new_host_function(ctx, impl, false, '', 1, ctx.function_proto, (
|
|
97
|
+
fobj = Q.js_new_host_function(ctx, impl, false, '', 1, ctx.function_proto, (47 /* JSClassID.PROMISE_RESOLVE_FUNCTION */ + i));
|
|
98
98
|
Q.js_meta.get(fobj).u = new JSPromiseFunctionData(promise, sr);
|
|
99
99
|
resolving_funcs[i] = fobj;
|
|
100
100
|
}
|
|
@@ -106,7 +106,7 @@ export function js_promise_resolve_function_call(ctx, func_obj, resolution) {
|
|
|
106
106
|
if (!s || s.presolved.already_resolved)
|
|
107
107
|
return undefined;
|
|
108
108
|
s.presolved.already_resolved = true;
|
|
109
|
-
const is_reject = m.class_id ===
|
|
109
|
+
const is_reject = m.class_id === 48 /* JSClassID.PROMISE_REJECT_FUNCTION */;
|
|
110
110
|
if (is_reject || !JS_IsObject(resolution)) {
|
|
111
111
|
fulfill_or_reject_promise(ctx, s.promise, resolution, is_reject);
|
|
112
112
|
return undefined;
|
|
@@ -137,7 +137,7 @@ function js_promise_constructor(ctx, new_target, argv) {
|
|
|
137
137
|
const executor = argv[0];
|
|
138
138
|
if (check_function(ctx, executor))
|
|
139
139
|
return JS_EXCEPTION;
|
|
140
|
-
const obj = js_create_from_ctor(ctx, new_target,
|
|
140
|
+
const obj = js_create_from_ctor(ctx, new_target, 46 /* JSClassID.PROMISE */);
|
|
141
141
|
if (JS_IsException(obj))
|
|
142
142
|
return JS_EXCEPTION;
|
|
143
143
|
const s = new JSPromiseData();
|
|
@@ -196,7 +196,7 @@ export function js_promise_resolve(ctx, this_val, argv, magic) {
|
|
|
196
196
|
const is_reject = magic !== 0;
|
|
197
197
|
if (!JS_IsObject(this_val))
|
|
198
198
|
return JS_ThrowTypeErrorNotAnObject(ctx);
|
|
199
|
-
if (!is_reject && JS_GetOpaque(argv[0],
|
|
199
|
+
if (!is_reject && JS_GetOpaque(argv[0], 46 /* JSClassID.PROMISE */)) {
|
|
200
200
|
const ctor = JS_GetProperty(ctx, argv[0], JS_ATOM_constructor);
|
|
201
201
|
if (JS_IsException(ctor))
|
|
202
202
|
return ctor;
|
|
@@ -231,6 +231,25 @@ function js_promise_withResolvers(ctx, this_val, argv) {
|
|
|
231
231
|
JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1], JS_PROP_C_W_E);
|
|
232
232
|
return obj;
|
|
233
233
|
}
|
|
234
|
+
/* Promise.try(callbackfn, ...args) */
|
|
235
|
+
function js_promise_try(ctx, this_val, argv) {
|
|
236
|
+
if (!JS_IsObject(this_val))
|
|
237
|
+
return JS_ThrowTypeErrorNotAnObject(ctx);
|
|
238
|
+
const resolving_funcs = [undefined, undefined];
|
|
239
|
+
const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);
|
|
240
|
+
if (JS_IsException(result_promise))
|
|
241
|
+
return result_promise;
|
|
242
|
+
let is_reject = 0;
|
|
243
|
+
let ret = JS_Call(ctx, argv[0], undefined, argv.slice(1));
|
|
244
|
+
if (JS_IsException(ret)) {
|
|
245
|
+
is_reject = 1;
|
|
246
|
+
ret = JS_GetException(ctx);
|
|
247
|
+
}
|
|
248
|
+
const ret2 = JS_Call(ctx, resolving_funcs[is_reject], undefined, [ret]);
|
|
249
|
+
if (JS_IsException(ret2))
|
|
250
|
+
return ret2;
|
|
251
|
+
return result_promise;
|
|
252
|
+
}
|
|
234
253
|
/* return -1 on exception, else 1 if the counter reached zero, 0 otherwise */
|
|
235
254
|
function remainingElementsCount_add(ctx, resolve_element_env, addend) {
|
|
236
255
|
const val = JS_GetPropertyUint32(ctx, resolve_element_env, 0);
|
|
@@ -445,7 +464,7 @@ function js_promise_race(ctx, this_val, argv) {
|
|
|
445
464
|
/* PerformPromiseThen: resolve_reject = [onFulfilled, onRejected],
|
|
446
465
|
cap_resolving_funcs = [resolve, reject] of the derived promise (may be undefined) */
|
|
447
466
|
export function perform_promise_then(ctx, promise, resolve_reject, cap_resolving_funcs) {
|
|
448
|
-
const s = JS_GetOpaque(promise,
|
|
467
|
+
const s = JS_GetOpaque(promise, 46 /* JSClassID.PROMISE */);
|
|
449
468
|
const rd_array = [];
|
|
450
469
|
for (let i = 0; i < 2; i++) {
|
|
451
470
|
let handler = resolve_reject[i];
|
|
@@ -487,11 +506,11 @@ export function JS_SpeciesConstructor(ctx, obj, defaultConstructor) {
|
|
|
487
506
|
if (species === undefined || species === null)
|
|
488
507
|
return defaultConstructor;
|
|
489
508
|
if (!JS_IsConstructor(ctx, species))
|
|
490
|
-
return
|
|
509
|
+
return Q.JS_ThrowTypeErrorNotAConstructor(ctx, species);
|
|
491
510
|
return species;
|
|
492
511
|
}
|
|
493
512
|
export function js_promise_then(ctx, this_val, argv) {
|
|
494
|
-
const s = JS_GetOpaque2(ctx, this_val,
|
|
513
|
+
const s = JS_GetOpaque2(ctx, this_val, 46 /* JSClassID.PROMISE */);
|
|
495
514
|
if (!s)
|
|
496
515
|
return JS_EXCEPTION;
|
|
497
516
|
const ctor = JS_SpeciesConstructor(ctx, this_val, ctx.promise_ctor ?? undefined);
|
|
@@ -559,6 +578,7 @@ const js_promise_funcs = [
|
|
|
559
578
|
JS_CFUNC_MAGIC_DEF('allSettled', 1, js_promise_all, PROMISE_MAGIC_allSettled),
|
|
560
579
|
JS_CFUNC_MAGIC_DEF('any', 1, js_promise_all, PROMISE_MAGIC_any),
|
|
561
580
|
JS_CFUNC_DEF('race', 1, js_promise_race),
|
|
581
|
+
JS_CFUNC_DEF('try', 1, js_promise_try),
|
|
562
582
|
JS_CFUNC_DEF('withResolvers', 0, js_promise_withResolvers),
|
|
563
583
|
JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),
|
|
564
584
|
];
|
|
@@ -572,7 +592,7 @@ const js_promise_proto_funcs = [
|
|
|
572
592
|
prototypes are installed by the interpreter module) */
|
|
573
593
|
export function JS_AddIntrinsicPromise(ctx) {
|
|
574
594
|
const proto = JS_NewObject(ctx);
|
|
575
|
-
ctx.class_proto[
|
|
595
|
+
ctx.class_proto[46 /* JSClassID.PROMISE */] = proto;
|
|
576
596
|
JS_SetPropertyFunctionList(ctx, proto, js_promise_proto_funcs);
|
|
577
597
|
const obj1 = JS_NewCFunction2(ctx, js_promise_constructor, 'Promise', 1, 2 /* JSCFunctionEnum.constructor */, 0);
|
|
578
598
|
ctx.promise_ctor = obj1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/builtins/promise.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * jseption: TypeScript port of QuickJS\n *\n * Promise implementation (port of the Promise section of quickjs.c).\n */\nimport * as Q from '../quickjs.ts';\nimport {\n JSContext, JSRuntime, JSValue, JSObject, JSClassID, JS_EXCEPTION, JS_IsException, JS_IsUndefined,\n JS_IsObject, JSPromiseData, JSPromiseState, JSPromiseReactionData, JSPromiseFunctionData,\n JSCFunctionDataRecord, JSCFunctionEnum, JSErrorEnum,\n JS_PROP_C_W_E, JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE,\n JS_ATOM_then, JS_ATOM_constructor, JS_ATOM_resolve, JS_ATOM_reject, JS_ATOM_promise, JS_ATOM_next,\n JS_ATOM_status, JS_ATOM_reason, JS_ATOM_value, JS_ATOM_errors, JS_ATOM_Symbol_species,\n JS_ATOM_empty_string, JS_ATOM_Symbol_toStringTag,\n hooks, JS_Throw, JS_GetException, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject,\n JS_NewObject, JS_NewObjectProtoClass, JS_NewArray, JS_NewCFunctionData, JS_NewCFunction2,\n JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyUint32, JS_DefinePropertyValue,\n JS_DefinePropertyValueUint32, JS_Call, JS_CallConstructor, JS_Invoke, JS_IsFunction, JS_IsConstructor,\n JS_GetOpaque, JS_GetOpaque2, JS_SetOpaque, js_create_from_ctor, js_same_value, JS_ToBoolFree,\n JS_ToInt32Free, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_EnqueueJob,\n JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF,\n JS_CGETSET_DEF, JS_PROP_STRING_DEF, JSCFunctionListEntry, JS_AtomToString,\n} from '../quickjs.ts';\n\n/* ---------------------------------------------------------------------\n Promise state\n --------------------------------------------------------------------- */\n\nexport function JS_PromiseState(ctx: JSContext, promise: JSValue): JSPromiseState | -1 {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return -1;\n return s.promise_state;\n}\n\nexport function JS_PromiseResult(ctx: JSContext, promise: JSValue): JSValue {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return undefined;\n return s.promise_result;\n}\n\nexport function check_function(ctx: JSContext, obj: JSValue): number {\n if (JS_IsFunction(ctx, obj)) return 0;\n JS_ThrowTypeError(ctx, 'not a function');\n return -1;\n}\n\n/* argv: [resolve, reject, handler, is_reject, arg] */\nfunction promise_reaction_job(ctx: JSContext, argv: JSValue[]): JSValue {\n const handler = argv[2];\n let is_reject = JS_ToBoolFree(ctx, argv[3]);\n const arg = argv[4];\n let res: JSValue;\n if (JS_IsUndefined(handler)) {\n if (is_reject) res = JS_Throw(ctx, arg);\n else res = arg;\n } else {\n res = JS_Call(ctx, handler, undefined, [arg]);\n }\n is_reject = JS_IsException(res);\n if (is_reject) res = JS_GetException(ctx);\n const func = argv[is_reject ? 1 : 0];\n /* as an extension, we support undefined as value to avoid creating a\n dummy promise in the 'await' implementation of async functions */\n if (!JS_IsUndefined(func)) return JS_Call(ctx, func, undefined, [res]);\n return undefined;\n}\n\nfunction fulfill_or_reject_promise(ctx: JSContext, promise: JSValue, value: JSValue, is_reject: boolean): void {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s || s.promise_state !== JSPromiseState.PENDING) return; /* should never happen */\n s.promise_result = value;\n s.promise_state = is_reject ? JSPromiseState.REJECTED : JSPromiseState.FULFILLED;\n if (s.promise_state === JSPromiseState.REJECTED && !s.is_handled) {\n const rt = ctx.rt;\n if (rt.host_promise_rejection_tracker) {\n rt.host_promise_rejection_tracker(ctx, promise, value, false, rt.host_promise_rejection_tracker_opaque);\n }\n }\n const idx = is_reject ? 1 : 0;\n for (const rd of s.promise_reactions[idx]) {\n JS_EnqueueJob(ctx, promise_reaction_job, [rd.resolving_funcs[0], rd.resolving_funcs[1], rd.handler, is_reject, value]);\n }\n s.promise_reactions[0] = [];\n s.promise_reactions[1] = [];\n}\n\nfunction reject_promise(ctx: JSContext, promise: JSValue, value: JSValue): void {\n fulfill_or_reject_promise(ctx, promise, value, true);\n}\n\n/* argv: [promise, thenable, then] */\nfunction js_promise_resolve_thenable_job(ctx: JSContext, argv: JSValue[]): JSValue {\n const promise = argv[0], thenable = argv[1], then = argv[2];\n const args: [JSValue, JSValue] = [undefined, undefined];\n if (js_create_resolving_functions(ctx, args, promise) < 0) return JS_EXCEPTION;\n let res = JS_Call(ctx, then, thenable, [args[0], args[1]]);\n if (JS_IsException(res)) {\n const error = JS_GetException(ctx);\n res = JS_Call(ctx, args[1], undefined, [error]);\n }\n return res;\n}\n\nexport function js_create_resolving_functions(ctx: JSContext, resolving_funcs: [JSValue, JSValue], promise: JSValue): number {\n const sr = { already_resolved: false }; /* must be shared between the two functions */\n for (let i = 0; i < 2; i++) {\n let fobj: object;\n const impl: Q.JSHostImpl = (_this_val, _new_target, args) => {\n js_promise_resolve_function_call(ctx, fobj, args.length > 0 ? args[0] : undefined);\n return undefined;\n };\n fobj = Q.js_new_host_function(ctx, impl, false, '', 1, ctx.function_proto,\n (JSClassID.PROMISE_RESOLVE_FUNCTION + i) as JSClassID);\n Q.js_meta.get(fobj)!.u = new JSPromiseFunctionData(promise, sr);\n resolving_funcs[i] = fobj;\n }\n return 0;\n}\n\nexport function js_promise_resolve_function_call(ctx: JSContext, func_obj: JSValue, resolution: JSValue): JSValue {\n const m = Q.js_get_meta(func_obj)!;\n const s = m.u as JSPromiseFunctionData | null;\n if (!s || s.presolved.already_resolved) return undefined;\n s.presolved.already_resolved = true;\n const is_reject = m.class_id === JSClassID.PROMISE_REJECT_FUNCTION;\n if (is_reject || !JS_IsObject(resolution)) {\n fulfill_or_reject_promise(ctx, s.promise, resolution, is_reject);\n return undefined;\n }\n if (js_same_value(ctx, resolution, s.promise)) {\n JS_ThrowTypeError(ctx, 'promise self resolution');\n const error = JS_GetException(ctx);\n reject_promise(ctx, s.promise, error);\n return undefined;\n }\n const then = JS_GetProperty(ctx, resolution, JS_ATOM_then);\n if (JS_IsException(then)) {\n const error = JS_GetException(ctx);\n reject_promise(ctx, s.promise, error);\n } else if (!JS_IsFunction(ctx, then)) {\n fulfill_or_reject_promise(ctx, s.promise, resolution, is_reject);\n } else {\n JS_EnqueueJob(ctx, js_promise_resolve_thenable_job, [s.promise, resolution, then]);\n }\n return undefined;\n}\n\n/* ---------------------------------------------------------------------\n Promise constructor and capabilities\n --------------------------------------------------------------------- */\n\nfunction js_promise_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[]): JSValue {\n const executor = argv[0];\n if (check_function(ctx, executor)) return JS_EXCEPTION;\n const obj = js_create_from_ctor(ctx, new_target, JSClassID.PROMISE);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n const s = new JSPromiseData();\n JS_SetOpaque(obj, s);\n const args: [JSValue, JSValue] = [undefined, undefined];\n if (js_create_resolving_functions(ctx, args, obj)) return JS_EXCEPTION;\n const ret = JS_Call(ctx, executor, undefined, [args[0], args[1]]);\n if (JS_IsException(ret)) {\n const error = JS_GetException(ctx);\n const ret2 = JS_Call(ctx, args[1], undefined, [error]);\n if (JS_IsException(ret2)) return JS_EXCEPTION;\n }\n return obj;\n}\n\nfunction js_promise_executor(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n for (let i = 0; i < 2; i++) {\n if (!JS_IsUndefined(func_data[i])) return JS_ThrowTypeError(ctx, 'resolving function already set');\n func_data[i] = argv[i];\n }\n return undefined;\n}\n\nfunction js_promise_executor_new(ctx: JSContext): JSValue {\n return JS_NewCFunctionData(ctx, js_promise_executor, 2, 0, [undefined, undefined]);\n}\n\nfunction js_new_promise_capability(ctx: JSContext, resolving_funcs: [JSValue, JSValue], ctor: JSValue): JSValue {\n const executor = js_promise_executor_new(ctx);\n if (JS_IsException(executor)) return executor;\n let result_promise: JSValue;\n if (JS_IsUndefined(ctor)) {\n result_promise = js_promise_constructor(ctx, ctor, [executor]);\n } else {\n result_promise = JS_CallConstructor(ctx, ctor, [executor]);\n }\n if (JS_IsException(result_promise)) return JS_EXCEPTION;\n const s = JS_GetOpaque(executor, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord;\n for (let i = 0; i < 2; i++) {\n if (check_function(ctx, s.data[i])) return JS_EXCEPTION;\n }\n resolving_funcs[0] = s.data[0];\n resolving_funcs[1] = s.data[1];\n return result_promise;\n}\n\n/* resolving_funcs receives [resolve, reject]; returns the promise */\nexport function JS_NewPromiseCapability(ctx: JSContext, resolving_funcs: [JSValue, JSValue]): JSValue {\n return js_new_promise_capability(ctx, resolving_funcs, undefined);\n}\n\n/* Promise.resolve / Promise.reject (magic = is_reject) with 'this_val' as constructor */\nexport function js_promise_resolve(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_reject = magic !== 0;\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n if (!is_reject && JS_GetOpaque(argv[0], JSClassID.PROMISE)) {\n const ctor = JS_GetProperty(ctx, argv[0], JS_ATOM_constructor);\n if (JS_IsException(ctor)) return ctor;\n if (js_same_value(ctx, ctor, this_val)) return argv[0];\n }\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const ret = JS_Call(ctx, resolving_funcs[is_reject ? 1 : 0], undefined, [argv[0]]);\n if (JS_IsException(ret)) return ret;\n return result_promise;\n}\n\n/* PromiseResolve(C, x) */\nexport function JS_PromiseResolve(ctx: JSContext, ctor: JSValue, value: JSValue): JSValue {\n return js_promise_resolve(ctx, ctor, [value], 0);\n}\n\nfunction js_promise_withResolvers(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_promise, result_promise, JS_PROP_C_W_E);\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_resolve, resolving_funcs[0], JS_PROP_C_W_E);\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1], JS_PROP_C_W_E);\n return obj;\n}\n\n/* return -1 on exception, else 1 if the counter reached zero, 0 otherwise */\nfunction remainingElementsCount_add(ctx: JSContext, resolve_element_env: JSValue, addend: number): number {\n const val = JS_GetPropertyUint32(ctx, resolve_element_env, 0);\n if (JS_IsException(val)) return -1;\n const n = JS_ToInt32Free(ctx, val);\n if (JS_IsException(n)) return -1;\n const remainingElementsCount = (n as number) + addend;\n if (JS_SetPropertyUint32(ctx, resolve_element_env, 0, remainingElementsCount) < 0) return -1;\n return remainingElementsCount === 0 ? 1 : 0;\n}\n\nconst PROMISE_MAGIC_all = 0;\nconst PROMISE_MAGIC_allSettled = 1;\nconst PROMISE_MAGIC_any = 2;\n\nfunction js_aggregate_error_constructor(ctx: JSContext, errors: JSValue): JSValue {\n const obj = JS_NewObjectProtoClass(ctx, ctx.native_error_proto[JSErrorEnum.AGGREGATE_ERROR], JSClassID.ERROR);\n if (JS_IsException(obj)) return obj;\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_errors, errors, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);\n return obj;\n}\n\n/* func_data: [alreadyCalled, index, values, resolve, resolve_element_env] */\nfunction js_promise_all_resolve_element(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number,\n func_data: JSValue[]): JSValue {\n const resolve_type = magic & 3;\n const is_reject = (magic & 4) !== 0;\n const alreadyCalled = JS_ToBoolFree(ctx, func_data[0]);\n const values = func_data[2];\n const resolve = func_data[3];\n const resolve_element_env = func_data[4];\n const idx = JS_ToInt32Free(ctx, func_data[1]);\n if (JS_IsException(idx)) return JS_EXCEPTION;\n if (alreadyCalled) return undefined;\n func_data[0] = true;\n let obj: JSValue;\n if (resolve_type === PROMISE_MAGIC_allSettled) {\n obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_status, is_reject ? 'rejected' : 'fulfilled', JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n if (JS_DefinePropertyValue(ctx, obj, is_reject ? JS_ATOM_reason : JS_ATOM_value, argv[0], JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n } else {\n obj = argv[0];\n }\n if (JS_DefinePropertyValueUint32(ctx, values, idx as number, obj, JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n const is_zero = remainingElementsCount_add(ctx, resolve_element_env, -1);\n if (is_zero < 0) return JS_EXCEPTION;\n if (is_zero) {\n let ret: JSValue;\n if (resolve_type === PROMISE_MAGIC_any) {\n const error = js_aggregate_error_constructor(ctx, values);\n if (JS_IsException(error)) return JS_EXCEPTION;\n ret = JS_Call(ctx, resolve, undefined, [error]);\n } else {\n ret = JS_Call(ctx, resolve, undefined, [values]);\n }\n if (JS_IsException(ret)) return ret;\n }\n return undefined;\n}\n\n/* magic = 0: Promise.all 1: Promise.allSettled 2: Promise.any */\nfunction js_promise_all(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_promise_any = (magic === PROMISE_MAGIC_any);\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n\n const fail_reject = (): JSValue => {\n const error = JS_GetException(ctx);\n const ret = JS_Call(ctx, resolving_funcs[1], undefined, [error]);\n if (JS_IsException(ret)) return JS_EXCEPTION;\n return result_promise;\n };\n\n const promise_resolve = JS_GetProperty(ctx, this_val, JS_ATOM_resolve);\n if (JS_IsException(promise_resolve) || check_function(ctx, promise_resolve)) return fail_reject();\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return fail_reject();\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return fail_reject();\n const values = JS_NewArray(ctx);\n if (JS_IsException(values)) return fail_reject();\n const resolve_element_env = JS_NewArray(ctx);\n if (JS_IsException(resolve_element_env)) return fail_reject();\n /* remainingElementsCount field */\n if (JS_DefinePropertyValueUint32(ctx, resolve_element_env, 0, 1, JS_PROP_CONFIGURABLE | JS_PROP_ENUMERABLE | JS_PROP_WRITABLE) < 0)\n return fail_reject();\n\n const fail_reject1 = (): JSValue => {\n JS_IteratorClose(ctx, iter, true);\n return fail_reject();\n };\n\n let index = 0;\n const pdone = { done: 0 };\n for (;;) {\n /* XXX: conformance: should close the iterator if error on 'done'\n access, but not on 'value' access */\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return fail_reject();\n if (pdone.done) break;\n const next_promise = JS_Call(ctx, promise_resolve, this_val, [item]);\n if (JS_IsException(next_promise)) return fail_reject1();\n const resolve_element_data: JSValue[] = [false, index, values, resolving_funcs[is_promise_any ? 1 : 0], resolve_element_env];\n let resolve_element = JS_NewCFunctionData(ctx, js_promise_all_resolve_element, 1, magic, resolve_element_data);\n if (JS_IsException(resolve_element)) return fail_reject1();\n /* the data array must be shared between the resolve and reject functions */\n const shared_data = (JS_GetOpaque(resolve_element, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord).data;\n let reject_element: JSValue;\n if (magic === PROMISE_MAGIC_allSettled) {\n reject_element = JS_NewCFunctionData(ctx, js_promise_all_resolve_element, 1, magic | 4, shared_data);\n if (JS_IsException(reject_element)) return fail_reject1();\n (JS_GetOpaque(reject_element, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord).data = shared_data;\n } else if (magic === PROMISE_MAGIC_any) {\n if (JS_DefinePropertyValueUint32(ctx, values, index, undefined, JS_PROP_C_W_E) < 0) return fail_reject1();\n reject_element = resolve_element;\n resolve_element = resolving_funcs[0];\n } else {\n reject_element = resolving_funcs[1];\n }\n if (remainingElementsCount_add(ctx, resolve_element_env, 1) < 0) return fail_reject1();\n const ret = JS_Invoke(ctx, next_promise, JS_ATOM_then, [resolve_element, reject_element]);\n if (JS_IsException(ret)) return fail_reject1();\n index++;\n }\n\n const is_zero = remainingElementsCount_add(ctx, resolve_element_env, -1);\n if (is_zero < 0) return fail_reject();\n if (is_zero) {\n let vals = values;\n if (magic === PROMISE_MAGIC_any) {\n const error = js_aggregate_error_constructor(ctx, values);\n if (JS_IsException(error)) return fail_reject();\n vals = error;\n }\n const ret = JS_Call(ctx, resolving_funcs[is_promise_any ? 1 : 0], undefined, [vals]);\n if (JS_IsException(ret)) return fail_reject();\n }\n return result_promise;\n}\n\nfunction js_promise_race(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const fail_reject = (): JSValue => {\n const error = JS_GetException(ctx);\n const ret = JS_Call(ctx, resolving_funcs[1], undefined, [error]);\n if (JS_IsException(ret)) return JS_EXCEPTION;\n return result_promise;\n };\n const promise_resolve = JS_GetProperty(ctx, this_val, JS_ATOM_resolve);\n if (JS_IsException(promise_resolve) || check_function(ctx, promise_resolve)) return fail_reject();\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return fail_reject();\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return fail_reject();\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return fail_reject();\n if (pdone.done) break;\n const next_promise = JS_Call(ctx, promise_resolve, this_val, [item]);\n if (JS_IsException(next_promise)) { JS_IteratorClose(ctx, iter, true); return fail_reject(); }\n const ret = JS_Invoke(ctx, next_promise, JS_ATOM_then, [resolving_funcs[0], resolving_funcs[1]]);\n if (JS_IsException(ret)) { JS_IteratorClose(ctx, iter, true); return fail_reject(); }\n }\n return result_promise;\n}\n\n/* PerformPromiseThen: resolve_reject = [onFulfilled, onRejected],\n cap_resolving_funcs = [resolve, reject] of the derived promise (may be undefined) */\nexport function perform_promise_then(ctx: JSContext, promise: JSValue, resolve_reject: [JSValue, JSValue],\n cap_resolving_funcs: [JSValue, JSValue]): number {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData;\n const rd_array: JSPromiseReactionData[] = [];\n for (let i = 0; i < 2; i++) {\n let handler = resolve_reject[i];\n if (!JS_IsFunction(ctx, handler)) handler = undefined;\n rd_array.push(new JSPromiseReactionData([cap_resolving_funcs[0], cap_resolving_funcs[1]], handler));\n }\n if (s.promise_state === JSPromiseState.PENDING) {\n s.promise_reactions[0].push(rd_array[0]);\n s.promise_reactions[1].push(rd_array[1]);\n } else {\n if (s.promise_state === JSPromiseState.REJECTED && !s.is_handled) {\n const rt = ctx.rt;\n if (rt.host_promise_rejection_tracker) {\n rt.host_promise_rejection_tracker(ctx, promise, s.promise_result, true, rt.host_promise_rejection_tracker_opaque);\n }\n }\n const i = s.promise_state === JSPromiseState.REJECTED ? 1 : 0;\n const rd = rd_array[i];\n JS_EnqueueJob(ctx, promise_reaction_job, [rd.resolving_funcs[0], rd.resolving_funcs[1], rd.handler, i !== 0, s.promise_result]);\n }\n s.is_handled = true;\n return 0;\n}\n\nexport function JS_SpeciesConstructor(ctx: JSContext, obj: JSValue, defaultConstructor: JSValue): JSValue {\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const ctor = JS_GetProperty(ctx, obj, JS_ATOM_constructor);\n if (JS_IsException(ctor)) return ctor;\n if (JS_IsUndefined(ctor)) return defaultConstructor;\n if (!JS_IsObject(ctor)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const species = JS_GetProperty(ctx, ctor, JS_ATOM_Symbol_species);\n if (JS_IsException(species)) return species;\n if (species === undefined || species === null) return defaultConstructor;\n if (!JS_IsConstructor(ctx, species)) return JS_ThrowTypeError(ctx, 'not a constructor');\n return species;\n}\n\nexport function js_promise_then(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = JS_GetOpaque2(ctx, this_val, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return JS_EXCEPTION;\n const ctor = JS_SpeciesConstructor(ctx, this_val, ctx.promise_ctor ?? undefined);\n if (JS_IsException(ctor)) return ctor;\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, ctor);\n if (JS_IsException(result_promise)) return result_promise;\n if (perform_promise_then(ctx, this_val, [argv[0], argv[1]], resolving_funcs)) return JS_EXCEPTION;\n return result_promise;\n}\n\nfunction js_promise_catch(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return JS_Invoke(ctx, this_val, JS_ATOM_then, [undefined, argv[0]]);\n}\n\nfunction js_promise_finally_value_thunk(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n return func_data[0];\n}\n\nfunction js_promise_finally_thrower(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n return JS_Throw(ctx, func_data[0]);\n}\n\nfunction js_promise_then_finally_func(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n const ctor = func_data[0];\n const onFinally = func_data[1];\n const res = JS_Call(ctx, onFinally, undefined, []);\n if (JS_IsException(res)) return res;\n const promise = js_promise_resolve(ctx, ctor, [res], 0);\n if (JS_IsException(promise)) return promise;\n let then_func: JSValue;\n if (magic === 0) then_func = JS_NewCFunctionData(ctx, js_promise_finally_value_thunk, 0, 0, [argv[0]]);\n else then_func = JS_NewCFunctionData(ctx, js_promise_finally_thrower, 0, 0, [argv[0]]);\n if (JS_IsException(then_func)) return then_func;\n return JS_Invoke(ctx, promise, JS_ATOM_then, [then_func]);\n}\n\nfunction js_promise_finally(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const onFinally = argv[0];\n const ctor = JS_SpeciesConstructor(ctx, this_val, ctx.promise_ctor ?? undefined);\n if (JS_IsException(ctor)) return ctor;\n const then_funcs: JSValue[] = [];\n if (!JS_IsFunction(ctx, onFinally)) {\n then_funcs.push(onFinally, onFinally);\n } else {\n for (let i = 0; i < 2; i++) {\n const f = JS_NewCFunctionData(ctx, js_promise_then_finally_func, 1, i, [ctor, onFinally]);\n if (JS_IsException(f)) return JS_EXCEPTION;\n then_funcs.push(f);\n }\n }\n return JS_Invoke(ctx, this_val, JS_ATOM_then, then_funcs);\n}\n\nfunction js_get_this(ctx: JSContext, this_val: JSValue): JSValue { return this_val; }\n\nconst js_promise_funcs: JSCFunctionListEntry[] = [\n JS_CFUNC_MAGIC_DEF('resolve', 1, js_promise_resolve, 0),\n JS_CFUNC_MAGIC_DEF('reject', 1, js_promise_resolve, 1),\n JS_CFUNC_MAGIC_DEF('all', 1, js_promise_all, PROMISE_MAGIC_all),\n JS_CFUNC_MAGIC_DEF('allSettled', 1, js_promise_all, PROMISE_MAGIC_allSettled),\n JS_CFUNC_MAGIC_DEF('any', 1, js_promise_all, PROMISE_MAGIC_any),\n JS_CFUNC_DEF('race', 1, js_promise_race),\n JS_CFUNC_DEF('withResolvers', 0, js_promise_withResolvers),\n JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),\n];\n\nconst js_promise_proto_funcs: JSCFunctionListEntry[] = [\n JS_CFUNC_DEF('then', 2, js_promise_then),\n JS_CFUNC_DEF('catch', 1, js_promise_catch),\n JS_CFUNC_DEF('finally', 1, js_promise_finally),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Promise', JS_PROP_CONFIGURABLE),\n];\n\n\n/* Promise constructor and prototype (the AsyncFunction / AsyncGenerator\n prototypes are installed by the interpreter module) */\nexport function JS_AddIntrinsicPromise(ctx: JSContext): void {\n const proto = JS_NewObject(ctx) as JSObject;\n ctx.class_proto[JSClassID.PROMISE] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_promise_proto_funcs);\n const obj1 = JS_NewCFunction2(ctx, js_promise_constructor, 'Promise', 1, JSCFunctionEnum.constructor, 0);\n ctx.promise_ctor = obj1 as JSObject;\n JS_SetPropertyFunctionList(ctx, obj1, js_promise_funcs);\n JS_NewGlobalCConstructor2(ctx, obj1, 'Promise', proto);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/builtins/promise.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * jseption: TypeScript port of QuickJS\n *\n * Promise implementation (port of the Promise section of quickjs.c).\n */\nimport * as Q from '../quickjs.ts';\nimport {\n JSContext, JSRuntime, JSValue, JSObject, JSClassID, JS_EXCEPTION, JS_IsException, JS_IsUndefined,\n JS_IsObject, JSPromiseData, JSPromiseState, JSPromiseReactionData, JSPromiseFunctionData,\n JSCFunctionDataRecord, JSCFunctionEnum, JSErrorEnum,\n JS_PROP_C_W_E, JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE,\n JS_ATOM_then, JS_ATOM_constructor, JS_ATOM_resolve, JS_ATOM_reject, JS_ATOM_promise, JS_ATOM_next,\n JS_ATOM_status, JS_ATOM_reason, JS_ATOM_value, JS_ATOM_errors, JS_ATOM_Symbol_species,\n JS_ATOM_empty_string, JS_ATOM_Symbol_toStringTag,\n hooks, JS_Throw, JS_GetException, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject,\n JS_NewObject, JS_NewObjectProtoClass, JS_NewArray, JS_NewCFunctionData, JS_NewCFunction2,\n JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyUint32, JS_DefinePropertyValue,\n JS_DefinePropertyValueUint32, JS_Call, JS_CallConstructor, JS_Invoke, JS_IsFunction, JS_IsConstructor,\n JS_GetOpaque, JS_GetOpaque2, JS_SetOpaque, js_create_from_ctor, js_same_value, JS_ToBoolFree,\n JS_ToInt32Free, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_EnqueueJob,\n JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF,\n JS_CGETSET_DEF, JS_PROP_STRING_DEF, JSCFunctionListEntry, JS_AtomToString,\n} from '../quickjs.ts';\n\n/* ---------------------------------------------------------------------\n Promise state\n --------------------------------------------------------------------- */\n\nexport function JS_PromiseState(ctx: JSContext, promise: JSValue): JSPromiseState | -1 {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return -1;\n return s.promise_state;\n}\n\nexport function JS_PromiseResult(ctx: JSContext, promise: JSValue): JSValue {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return undefined;\n return s.promise_result;\n}\n\nexport function check_function(ctx: JSContext, obj: JSValue): number {\n if (JS_IsFunction(ctx, obj)) return 0;\n JS_ThrowTypeError(ctx, 'not a function');\n return -1;\n}\n\n/* argv: [resolve, reject, handler, is_reject, arg] */\nfunction promise_reaction_job(ctx: JSContext, argv: JSValue[]): JSValue {\n const handler = argv[2];\n let is_reject = JS_ToBoolFree(ctx, argv[3]);\n const arg = argv[4];\n let res: JSValue;\n if (JS_IsUndefined(handler)) {\n if (is_reject) res = JS_Throw(ctx, arg);\n else res = arg;\n } else {\n res = JS_Call(ctx, handler, undefined, [arg]);\n }\n is_reject = JS_IsException(res);\n if (is_reject) res = JS_GetException(ctx);\n const func = argv[is_reject ? 1 : 0];\n /* as an extension, we support undefined as value to avoid creating a\n dummy promise in the 'await' implementation of async functions */\n if (!JS_IsUndefined(func)) return JS_Call(ctx, func, undefined, [res]);\n return undefined;\n}\n\nfunction fulfill_or_reject_promise(ctx: JSContext, promise: JSValue, value: JSValue, is_reject: boolean): void {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s || s.promise_state !== JSPromiseState.PENDING) return; /* should never happen */\n s.promise_result = value;\n s.promise_state = is_reject ? JSPromiseState.REJECTED : JSPromiseState.FULFILLED;\n if (s.promise_state === JSPromiseState.REJECTED && !s.is_handled) {\n const rt = ctx.rt;\n if (rt.host_promise_rejection_tracker) {\n rt.host_promise_rejection_tracker(ctx, promise, value, false, rt.host_promise_rejection_tracker_opaque);\n }\n }\n const idx = is_reject ? 1 : 0;\n for (const rd of s.promise_reactions[idx]) {\n JS_EnqueueJob(ctx, promise_reaction_job, [rd.resolving_funcs[0], rd.resolving_funcs[1], rd.handler, is_reject, value]);\n }\n s.promise_reactions[0] = [];\n s.promise_reactions[1] = [];\n}\n\nfunction reject_promise(ctx: JSContext, promise: JSValue, value: JSValue): void {\n fulfill_or_reject_promise(ctx, promise, value, true);\n}\n\n/* argv: [promise, thenable, then] */\nfunction js_promise_resolve_thenable_job(ctx: JSContext, argv: JSValue[]): JSValue {\n const promise = argv[0], thenable = argv[1], then = argv[2];\n const args: [JSValue, JSValue] = [undefined, undefined];\n if (js_create_resolving_functions(ctx, args, promise) < 0) return JS_EXCEPTION;\n let res = JS_Call(ctx, then, thenable, [args[0], args[1]]);\n if (JS_IsException(res)) {\n const error = JS_GetException(ctx);\n res = JS_Call(ctx, args[1], undefined, [error]);\n }\n return res;\n}\n\nexport function js_create_resolving_functions(ctx: JSContext, resolving_funcs: [JSValue, JSValue], promise: JSValue): number {\n const sr = { already_resolved: false }; /* must be shared between the two functions */\n for (let i = 0; i < 2; i++) {\n let fobj: object;\n const impl: Q.JSHostImpl = (_this_val, _new_target, args) => {\n js_promise_resolve_function_call(ctx, fobj, args.length > 0 ? args[0] : undefined);\n return undefined;\n };\n fobj = Q.js_new_host_function(ctx, impl, false, '', 1, ctx.function_proto,\n (JSClassID.PROMISE_RESOLVE_FUNCTION + i) as JSClassID);\n Q.js_meta.get(fobj)!.u = new JSPromiseFunctionData(promise, sr);\n resolving_funcs[i] = fobj;\n }\n return 0;\n}\n\nexport function js_promise_resolve_function_call(ctx: JSContext, func_obj: JSValue, resolution: JSValue): JSValue {\n const m = Q.js_get_meta(func_obj)!;\n const s = m.u as JSPromiseFunctionData | null;\n if (!s || s.presolved.already_resolved) return undefined;\n s.presolved.already_resolved = true;\n const is_reject = m.class_id === JSClassID.PROMISE_REJECT_FUNCTION;\n if (is_reject || !JS_IsObject(resolution)) {\n fulfill_or_reject_promise(ctx, s.promise, resolution, is_reject);\n return undefined;\n }\n if (js_same_value(ctx, resolution, s.promise)) {\n JS_ThrowTypeError(ctx, 'promise self resolution');\n const error = JS_GetException(ctx);\n reject_promise(ctx, s.promise, error);\n return undefined;\n }\n const then = JS_GetProperty(ctx, resolution, JS_ATOM_then);\n if (JS_IsException(then)) {\n const error = JS_GetException(ctx);\n reject_promise(ctx, s.promise, error);\n } else if (!JS_IsFunction(ctx, then)) {\n fulfill_or_reject_promise(ctx, s.promise, resolution, is_reject);\n } else {\n JS_EnqueueJob(ctx, js_promise_resolve_thenable_job, [s.promise, resolution, then]);\n }\n return undefined;\n}\n\n/* ---------------------------------------------------------------------\n Promise constructor and capabilities\n --------------------------------------------------------------------- */\n\nfunction js_promise_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[]): JSValue {\n const executor = argv[0];\n if (check_function(ctx, executor)) return JS_EXCEPTION;\n const obj = js_create_from_ctor(ctx, new_target, JSClassID.PROMISE);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n const s = new JSPromiseData();\n JS_SetOpaque(obj, s);\n const args: [JSValue, JSValue] = [undefined, undefined];\n if (js_create_resolving_functions(ctx, args, obj)) return JS_EXCEPTION;\n const ret = JS_Call(ctx, executor, undefined, [args[0], args[1]]);\n if (JS_IsException(ret)) {\n const error = JS_GetException(ctx);\n const ret2 = JS_Call(ctx, args[1], undefined, [error]);\n if (JS_IsException(ret2)) return JS_EXCEPTION;\n }\n return obj;\n}\n\nfunction js_promise_executor(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n for (let i = 0; i < 2; i++) {\n if (!JS_IsUndefined(func_data[i])) return JS_ThrowTypeError(ctx, 'resolving function already set');\n func_data[i] = argv[i];\n }\n return undefined;\n}\n\nfunction js_promise_executor_new(ctx: JSContext): JSValue {\n return JS_NewCFunctionData(ctx, js_promise_executor, 2, 0, [undefined, undefined]);\n}\n\nfunction js_new_promise_capability(ctx: JSContext, resolving_funcs: [JSValue, JSValue], ctor: JSValue): JSValue {\n const executor = js_promise_executor_new(ctx);\n if (JS_IsException(executor)) return executor;\n let result_promise: JSValue;\n if (JS_IsUndefined(ctor)) {\n result_promise = js_promise_constructor(ctx, ctor, [executor]);\n } else {\n result_promise = JS_CallConstructor(ctx, ctor, [executor]);\n }\n if (JS_IsException(result_promise)) return JS_EXCEPTION;\n const s = JS_GetOpaque(executor, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord;\n for (let i = 0; i < 2; i++) {\n if (check_function(ctx, s.data[i])) return JS_EXCEPTION;\n }\n resolving_funcs[0] = s.data[0];\n resolving_funcs[1] = s.data[1];\n return result_promise;\n}\n\n/* resolving_funcs receives [resolve, reject]; returns the promise */\nexport function JS_NewPromiseCapability(ctx: JSContext, resolving_funcs: [JSValue, JSValue]): JSValue {\n return js_new_promise_capability(ctx, resolving_funcs, undefined);\n}\n\n/* Promise.resolve / Promise.reject (magic = is_reject) with 'this_val' as constructor */\nexport function js_promise_resolve(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_reject = magic !== 0;\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n if (!is_reject && JS_GetOpaque(argv[0], JSClassID.PROMISE)) {\n const ctor = JS_GetProperty(ctx, argv[0], JS_ATOM_constructor);\n if (JS_IsException(ctor)) return ctor;\n if (js_same_value(ctx, ctor, this_val)) return argv[0];\n }\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const ret = JS_Call(ctx, resolving_funcs[is_reject ? 1 : 0], undefined, [argv[0]]);\n if (JS_IsException(ret)) return ret;\n return result_promise;\n}\n\n/* PromiseResolve(C, x) */\nexport function JS_PromiseResolve(ctx: JSContext, ctor: JSValue, value: JSValue): JSValue {\n return js_promise_resolve(ctx, ctor, [value], 0);\n}\n\nfunction js_promise_withResolvers(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_promise, result_promise, JS_PROP_C_W_E);\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_resolve, resolving_funcs[0], JS_PROP_C_W_E);\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1], JS_PROP_C_W_E);\n return obj;\n}\n\n/* Promise.try(callbackfn, ...args) */\nfunction js_promise_try(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n let is_reject = 0;\n let ret = JS_Call(ctx, argv[0], undefined, argv.slice(1));\n if (JS_IsException(ret)) {\n is_reject = 1;\n ret = JS_GetException(ctx);\n }\n const ret2 = JS_Call(ctx, resolving_funcs[is_reject], undefined, [ret]);\n if (JS_IsException(ret2)) return ret2;\n return result_promise;\n}\n\n/* return -1 on exception, else 1 if the counter reached zero, 0 otherwise */\nfunction remainingElementsCount_add(ctx: JSContext, resolve_element_env: JSValue, addend: number): number {\n const val = JS_GetPropertyUint32(ctx, resolve_element_env, 0);\n if (JS_IsException(val)) return -1;\n const n = JS_ToInt32Free(ctx, val);\n if (JS_IsException(n)) return -1;\n const remainingElementsCount = (n as number) + addend;\n if (JS_SetPropertyUint32(ctx, resolve_element_env, 0, remainingElementsCount) < 0) return -1;\n return remainingElementsCount === 0 ? 1 : 0;\n}\n\nconst PROMISE_MAGIC_all = 0;\nconst PROMISE_MAGIC_allSettled = 1;\nconst PROMISE_MAGIC_any = 2;\n\nfunction js_aggregate_error_constructor(ctx: JSContext, errors: JSValue): JSValue {\n const obj = JS_NewObjectProtoClass(ctx, ctx.native_error_proto[JSErrorEnum.AGGREGATE_ERROR], JSClassID.ERROR);\n if (JS_IsException(obj)) return obj;\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_errors, errors, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);\n return obj;\n}\n\n/* func_data: [alreadyCalled, index, values, resolve, resolve_element_env] */\nfunction js_promise_all_resolve_element(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number,\n func_data: JSValue[]): JSValue {\n const resolve_type = magic & 3;\n const is_reject = (magic & 4) !== 0;\n const alreadyCalled = JS_ToBoolFree(ctx, func_data[0]);\n const values = func_data[2];\n const resolve = func_data[3];\n const resolve_element_env = func_data[4];\n const idx = JS_ToInt32Free(ctx, func_data[1]);\n if (JS_IsException(idx)) return JS_EXCEPTION;\n if (alreadyCalled) return undefined;\n func_data[0] = true;\n let obj: JSValue;\n if (resolve_type === PROMISE_MAGIC_allSettled) {\n obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_status, is_reject ? 'rejected' : 'fulfilled', JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n if (JS_DefinePropertyValue(ctx, obj, is_reject ? JS_ATOM_reason : JS_ATOM_value, argv[0], JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n } else {\n obj = argv[0];\n }\n if (JS_DefinePropertyValueUint32(ctx, values, idx as number, obj, JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n const is_zero = remainingElementsCount_add(ctx, resolve_element_env, -1);\n if (is_zero < 0) return JS_EXCEPTION;\n if (is_zero) {\n let ret: JSValue;\n if (resolve_type === PROMISE_MAGIC_any) {\n const error = js_aggregate_error_constructor(ctx, values);\n if (JS_IsException(error)) return JS_EXCEPTION;\n ret = JS_Call(ctx, resolve, undefined, [error]);\n } else {\n ret = JS_Call(ctx, resolve, undefined, [values]);\n }\n if (JS_IsException(ret)) return ret;\n }\n return undefined;\n}\n\n/* magic = 0: Promise.all 1: Promise.allSettled 2: Promise.any */\nfunction js_promise_all(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_promise_any = (magic === PROMISE_MAGIC_any);\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n\n const fail_reject = (): JSValue => {\n const error = JS_GetException(ctx);\n const ret = JS_Call(ctx, resolving_funcs[1], undefined, [error]);\n if (JS_IsException(ret)) return JS_EXCEPTION;\n return result_promise;\n };\n\n const promise_resolve = JS_GetProperty(ctx, this_val, JS_ATOM_resolve);\n if (JS_IsException(promise_resolve) || check_function(ctx, promise_resolve)) return fail_reject();\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return fail_reject();\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return fail_reject();\n const values = JS_NewArray(ctx);\n if (JS_IsException(values)) return fail_reject();\n const resolve_element_env = JS_NewArray(ctx);\n if (JS_IsException(resolve_element_env)) return fail_reject();\n /* remainingElementsCount field */\n if (JS_DefinePropertyValueUint32(ctx, resolve_element_env, 0, 1, JS_PROP_CONFIGURABLE | JS_PROP_ENUMERABLE | JS_PROP_WRITABLE) < 0)\n return fail_reject();\n\n const fail_reject1 = (): JSValue => {\n JS_IteratorClose(ctx, iter, true);\n return fail_reject();\n };\n\n let index = 0;\n const pdone = { done: 0 };\n for (;;) {\n /* XXX: conformance: should close the iterator if error on 'done'\n access, but not on 'value' access */\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return fail_reject();\n if (pdone.done) break;\n const next_promise = JS_Call(ctx, promise_resolve, this_val, [item]);\n if (JS_IsException(next_promise)) return fail_reject1();\n const resolve_element_data: JSValue[] = [false, index, values, resolving_funcs[is_promise_any ? 1 : 0], resolve_element_env];\n let resolve_element = JS_NewCFunctionData(ctx, js_promise_all_resolve_element, 1, magic, resolve_element_data);\n if (JS_IsException(resolve_element)) return fail_reject1();\n /* the data array must be shared between the resolve and reject functions */\n const shared_data = (JS_GetOpaque(resolve_element, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord).data;\n let reject_element: JSValue;\n if (magic === PROMISE_MAGIC_allSettled) {\n reject_element = JS_NewCFunctionData(ctx, js_promise_all_resolve_element, 1, magic | 4, shared_data);\n if (JS_IsException(reject_element)) return fail_reject1();\n (JS_GetOpaque(reject_element, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord).data = shared_data;\n } else if (magic === PROMISE_MAGIC_any) {\n if (JS_DefinePropertyValueUint32(ctx, values, index, undefined, JS_PROP_C_W_E) < 0) return fail_reject1();\n reject_element = resolve_element;\n resolve_element = resolving_funcs[0];\n } else {\n reject_element = resolving_funcs[1];\n }\n if (remainingElementsCount_add(ctx, resolve_element_env, 1) < 0) return fail_reject1();\n const ret = JS_Invoke(ctx, next_promise, JS_ATOM_then, [resolve_element, reject_element]);\n if (JS_IsException(ret)) return fail_reject1();\n index++;\n }\n\n const is_zero = remainingElementsCount_add(ctx, resolve_element_env, -1);\n if (is_zero < 0) return fail_reject();\n if (is_zero) {\n let vals = values;\n if (magic === PROMISE_MAGIC_any) {\n const error = js_aggregate_error_constructor(ctx, values);\n if (JS_IsException(error)) return fail_reject();\n vals = error;\n }\n const ret = JS_Call(ctx, resolving_funcs[is_promise_any ? 1 : 0], undefined, [vals]);\n if (JS_IsException(ret)) return fail_reject();\n }\n return result_promise;\n}\n\nfunction js_promise_race(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const fail_reject = (): JSValue => {\n const error = JS_GetException(ctx);\n const ret = JS_Call(ctx, resolving_funcs[1], undefined, [error]);\n if (JS_IsException(ret)) return JS_EXCEPTION;\n return result_promise;\n };\n const promise_resolve = JS_GetProperty(ctx, this_val, JS_ATOM_resolve);\n if (JS_IsException(promise_resolve) || check_function(ctx, promise_resolve)) return fail_reject();\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return fail_reject();\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return fail_reject();\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return fail_reject();\n if (pdone.done) break;\n const next_promise = JS_Call(ctx, promise_resolve, this_val, [item]);\n if (JS_IsException(next_promise)) { JS_IteratorClose(ctx, iter, true); return fail_reject(); }\n const ret = JS_Invoke(ctx, next_promise, JS_ATOM_then, [resolving_funcs[0], resolving_funcs[1]]);\n if (JS_IsException(ret)) { JS_IteratorClose(ctx, iter, true); return fail_reject(); }\n }\n return result_promise;\n}\n\n/* PerformPromiseThen: resolve_reject = [onFulfilled, onRejected],\n cap_resolving_funcs = [resolve, reject] of the derived promise (may be undefined) */\nexport function perform_promise_then(ctx: JSContext, promise: JSValue, resolve_reject: [JSValue, JSValue],\n cap_resolving_funcs: [JSValue, JSValue]): number {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData;\n const rd_array: JSPromiseReactionData[] = [];\n for (let i = 0; i < 2; i++) {\n let handler = resolve_reject[i];\n if (!JS_IsFunction(ctx, handler)) handler = undefined;\n rd_array.push(new JSPromiseReactionData([cap_resolving_funcs[0], cap_resolving_funcs[1]], handler));\n }\n if (s.promise_state === JSPromiseState.PENDING) {\n s.promise_reactions[0].push(rd_array[0]);\n s.promise_reactions[1].push(rd_array[1]);\n } else {\n if (s.promise_state === JSPromiseState.REJECTED && !s.is_handled) {\n const rt = ctx.rt;\n if (rt.host_promise_rejection_tracker) {\n rt.host_promise_rejection_tracker(ctx, promise, s.promise_result, true, rt.host_promise_rejection_tracker_opaque);\n }\n }\n const i = s.promise_state === JSPromiseState.REJECTED ? 1 : 0;\n const rd = rd_array[i];\n JS_EnqueueJob(ctx, promise_reaction_job, [rd.resolving_funcs[0], rd.resolving_funcs[1], rd.handler, i !== 0, s.promise_result]);\n }\n s.is_handled = true;\n return 0;\n}\n\nexport function JS_SpeciesConstructor(ctx: JSContext, obj: JSValue, defaultConstructor: JSValue): JSValue {\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const ctor = JS_GetProperty(ctx, obj, JS_ATOM_constructor);\n if (JS_IsException(ctor)) return ctor;\n if (JS_IsUndefined(ctor)) return defaultConstructor;\n if (!JS_IsObject(ctor)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const species = JS_GetProperty(ctx, ctor, JS_ATOM_Symbol_species);\n if (JS_IsException(species)) return species;\n if (species === undefined || species === null) return defaultConstructor;\n if (!JS_IsConstructor(ctx, species)) return Q.JS_ThrowTypeErrorNotAConstructor(ctx, species);\n return species;\n}\n\nexport function js_promise_then(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = JS_GetOpaque2(ctx, this_val, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return JS_EXCEPTION;\n const ctor = JS_SpeciesConstructor(ctx, this_val, ctx.promise_ctor ?? undefined);\n if (JS_IsException(ctor)) return ctor;\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, ctor);\n if (JS_IsException(result_promise)) return result_promise;\n if (perform_promise_then(ctx, this_val, [argv[0], argv[1]], resolving_funcs)) return JS_EXCEPTION;\n return result_promise;\n}\n\nfunction js_promise_catch(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return JS_Invoke(ctx, this_val, JS_ATOM_then, [undefined, argv[0]]);\n}\n\nfunction js_promise_finally_value_thunk(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n return func_data[0];\n}\n\nfunction js_promise_finally_thrower(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n return JS_Throw(ctx, func_data[0]);\n}\n\nfunction js_promise_then_finally_func(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n const ctor = func_data[0];\n const onFinally = func_data[1];\n const res = JS_Call(ctx, onFinally, undefined, []);\n if (JS_IsException(res)) return res;\n const promise = js_promise_resolve(ctx, ctor, [res], 0);\n if (JS_IsException(promise)) return promise;\n let then_func: JSValue;\n if (magic === 0) then_func = JS_NewCFunctionData(ctx, js_promise_finally_value_thunk, 0, 0, [argv[0]]);\n else then_func = JS_NewCFunctionData(ctx, js_promise_finally_thrower, 0, 0, [argv[0]]);\n if (JS_IsException(then_func)) return then_func;\n return JS_Invoke(ctx, promise, JS_ATOM_then, [then_func]);\n}\n\nfunction js_promise_finally(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const onFinally = argv[0];\n const ctor = JS_SpeciesConstructor(ctx, this_val, ctx.promise_ctor ?? undefined);\n if (JS_IsException(ctor)) return ctor;\n const then_funcs: JSValue[] = [];\n if (!JS_IsFunction(ctx, onFinally)) {\n then_funcs.push(onFinally, onFinally);\n } else {\n for (let i = 0; i < 2; i++) {\n const f = JS_NewCFunctionData(ctx, js_promise_then_finally_func, 1, i, [ctor, onFinally]);\n if (JS_IsException(f)) return JS_EXCEPTION;\n then_funcs.push(f);\n }\n }\n return JS_Invoke(ctx, this_val, JS_ATOM_then, then_funcs);\n}\n\nfunction js_get_this(ctx: JSContext, this_val: JSValue): JSValue { return this_val; }\n\nconst js_promise_funcs: JSCFunctionListEntry[] = [\n JS_CFUNC_MAGIC_DEF('resolve', 1, js_promise_resolve, 0),\n JS_CFUNC_MAGIC_DEF('reject', 1, js_promise_resolve, 1),\n JS_CFUNC_MAGIC_DEF('all', 1, js_promise_all, PROMISE_MAGIC_all),\n JS_CFUNC_MAGIC_DEF('allSettled', 1, js_promise_all, PROMISE_MAGIC_allSettled),\n JS_CFUNC_MAGIC_DEF('any', 1, js_promise_all, PROMISE_MAGIC_any),\n JS_CFUNC_DEF('race', 1, js_promise_race),\n JS_CFUNC_DEF('try', 1, js_promise_try),\n JS_CFUNC_DEF('withResolvers', 0, js_promise_withResolvers),\n JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),\n];\n\nconst js_promise_proto_funcs: JSCFunctionListEntry[] = [\n JS_CFUNC_DEF('then', 2, js_promise_then),\n JS_CFUNC_DEF('catch', 1, js_promise_catch),\n JS_CFUNC_DEF('finally', 1, js_promise_finally),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Promise', JS_PROP_CONFIGURABLE),\n];\n\n\n/* Promise constructor and prototype (the AsyncFunction / AsyncGenerator\n prototypes are installed by the interpreter module) */\nexport function JS_AddIntrinsicPromise(ctx: JSContext): void {\n const proto = JS_NewObject(ctx) as JSObject;\n ctx.class_proto[JSClassID.PROMISE] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_promise_proto_funcs);\n const obj1 = JS_NewCFunction2(ctx, js_promise_constructor, 'Promise', 1, JSCFunctionEnum.constructor, 0);\n ctx.promise_ctor = obj1 as JSObject;\n JS_SetPropertyFunctionList(ctx, obj1, js_promise_funcs);\n JS_NewGlobalCConstructor2(ctx, obj1, 'Promise', proto);\n}\n"]}
|
package/dist/builtins/proxy.js
CHANGED
|
@@ -175,7 +175,7 @@ export function JS_NewProxy(ctx, target, handler) {
|
|
|
175
175
|
const s = new JSProxyData(target, handler, JS_IsFunction(ctx, target));
|
|
176
176
|
const { proxy, revoke } = Proxy.revocable(target, make_adapter(ctx, s));
|
|
177
177
|
s.host_revoke = revoke;
|
|
178
|
-
const m = new JSObjectMeta(
|
|
178
|
+
const m = new JSObjectMeta(45 /* JSClassID.PROXY */);
|
|
179
179
|
m.u = s;
|
|
180
180
|
m.is_constructor = JS_IsConstructor(ctx, target);
|
|
181
181
|
m.realm = ctx;
|
|
@@ -187,7 +187,7 @@ function js_proxy_constructor(ctx, new_target, argv) {
|
|
|
187
187
|
}
|
|
188
188
|
function js_proxy_revoke(ctx, this_val, argv, magic, func_data) {
|
|
189
189
|
const p = func_data[0];
|
|
190
|
-
if (JS_IsObject(p) && JS_GetClassID(p) ===
|
|
190
|
+
if (JS_IsObject(p) && JS_GetClassID(p) === 45 /* JSClassID.PROXY */) {
|
|
191
191
|
const s = JS_GetAnyOpaque(p);
|
|
192
192
|
/* We do not free the handler and target in case they are
|
|
193
193
|
referenced as constants in the C call stack */
|
package/dist/builtins/reflect.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Reflect object (port of the Reflect part of quickjs.c)
|
|
3
|
+
*/
|
|
4
|
+
import * as Q from "../quickjs.js";
|
|
5
|
+
import { JS_EXCEPTION, JS_IsObject, JS_IsConstructor, JS_ValueToAtom, JS_ATOM_NULL, JS_GetPropertyInternal, JS_SetPropertyInternal, JS_HasProperty, JS_DeleteProperty, JS_CallConstructor2, build_arg_list, JS_ThrowTypeErrorNotAnObject, JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF, JS_PROP_STRING_DEF, JS_OBJECT_DEF, JS_PROP_WRITABLE, JS_PROP_CONFIGURABLE, JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_ATOM_Symbol_toStringTag, } from "../quickjs.js";
|
|
2
6
|
import { js_function_apply } from "../interpreter.js";
|
|
3
7
|
import { js_object_defineProperty, js_object_getOwnPropertyDescriptor, js_object_getPrototypeOf, js_object_isExtensible, js_object_preventExtensions, JS_GetOwnPropertyNames2, js_set_prototype_internal, } from "./object.js";
|
|
4
8
|
const JS_ITERATOR_KIND_KEY = 0;
|
|
@@ -12,7 +16,7 @@ function js_reflect_construct(ctx, this_val, argv) {
|
|
|
12
16
|
if (argv.length > 2) {
|
|
13
17
|
new_target = argv[2];
|
|
14
18
|
if (!JS_IsConstructor(ctx, new_target))
|
|
15
|
-
return
|
|
19
|
+
return Q.JS_ThrowTypeErrorNotAConstructor(ctx, new_target);
|
|
16
20
|
}
|
|
17
21
|
else {
|
|
18
22
|
new_target = func;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/builtins/reflect.ts"],"names":[],"mappings":"AAIA,OAAO,EACe,YAAY,EAAkB,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAC7G,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EACjF,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,4BAA4B,EACpF,0BAA0B,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,aAAa,EAC/F,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,0BAA0B,GAC3G,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,wBAAwB,EAAE,kCAAkC,EAAE,wBAAwB,EAAE,sBAAsB,EAC9G,2BAA2B,EAAE,uBAAuB,EAAE,yBAAyB,GAChF,MAAM,aAAa,CAAC;AAErB,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B,SAAS,gBAAgB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC1E,OAAO,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,UAAmB,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC;YAAE,OAAO,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,OAAO,YAAY,CAAC;IAC9B,OAAO,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACnF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC/C,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC/C,OAAO,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC/C,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC/C,MAAM,GAAG,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IACnF,MAAM,GAAG,GAAG,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpE,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAc,EAAE,QAAiB,EAAE,IAAe;IAC5E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;IACpE,OAAO,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,gBAAgB,GAAG;IACvB,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,gBAAgB,CAAC;IAC1C,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE,oBAAoB,CAAC;IAClD,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACpE,YAAY,CAAC,gBAAgB,EAAE,CAAC,EAAE,yBAAyB,CAAC;IAC5D,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,cAAc,CAAC;IACtC,kBAAkB,CAAC,0BAA0B,EAAE,CAAC,EAAE,kCAAkC,EAAE,CAAC,CAAC;IACxF,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACpE,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,cAAc,CAAC;IACtC,kBAAkB,CAAC,cAAc,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAChE,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,kBAAkB,CAAC;IAC9C,kBAAkB,CAAC,mBAAmB,EAAE,CAAC,EAAE,2BAA2B,EAAE,CAAC,CAAC;IAC1E,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,cAAc,CAAC;IACtC,YAAY,CAAC,gBAAgB,EAAE,CAAC,EAAE,yBAAyB,CAAC;IAC5D,kBAAkB,CAAC,0BAA0B,EAAE,SAAS,EAAE,oBAAoB,CAAC;CAChF,CAAC;AAEF,MAAM,cAAc,GAAG;IACrB,aAAa,CAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,oBAAoB,CAAC;CACpF,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,GAAc;IACnD,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAClE,CAAC","sourcesContent":["/*\n * Reflect object (port of the Reflect part of quickjs.c)\n */\nimport * as Q from '../quickjs.ts';\nimport {\n JSContext, JSValue, JS_EXCEPTION, JS_IsException, JS_IsObject, JS_IsConstructor, JS_ValueToAtom, JS_ATOM_NULL,\n JS_GetPropertyInternal, JS_SetPropertyInternal, JS_HasProperty, JS_DeleteProperty,\n JS_CallConstructor2, build_arg_list, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject,\n JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF, JS_PROP_STRING_DEF, JS_OBJECT_DEF,\n JS_PROP_WRITABLE, JS_PROP_CONFIGURABLE, JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_ATOM_Symbol_toStringTag,\n} from '../quickjs.ts';\nimport { js_function_apply } from '../interpreter.ts';\nimport {\n js_object_defineProperty, js_object_getOwnPropertyDescriptor, js_object_getPrototypeOf, js_object_isExtensible,\n js_object_preventExtensions, JS_GetOwnPropertyNames2, js_set_prototype_internal,\n} from './object.ts';\n\nconst JS_ITERATOR_KIND_KEY = 0;\n\nfunction js_reflect_apply(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return js_function_apply(ctx, argv[0], argv.slice(1), 2);\n}\n\nfunction js_reflect_construct(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const func = argv[0];\n const array_arg = argv[1];\n let new_target: JSValue;\n if (argv.length > 2) {\n new_target = argv[2];\n if (!JS_IsConstructor(ctx, new_target)) return JS_ThrowTypeError(ctx, 'not a constructor');\n } else {\n new_target = func;\n }\n const tab = build_arg_list(ctx, array_arg);\n if (!tab) return JS_EXCEPTION;\n return JS_CallConstructor2(ctx, func, new_target, tab);\n}\n\nfunction js_reflect_deleteProperty(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, argv[1]);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_DeleteProperty(ctx, obj, atom, 0);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_get(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const receiver = argv.length > 2 ? argv[2] : obj;\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n return JS_GetPropertyInternal(ctx, obj, atom, receiver, false);\n}\n\nfunction js_reflect_has(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_HasProperty(ctx, obj, atom);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_set(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n const val = argv[2];\n const receiver = argv.length > 3 ? argv[3] : obj;\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_SetPropertyInternal(ctx, obj, atom, val, receiver, 0);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_setPrototypeOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const ret = js_set_prototype_internal(ctx, argv[0], argv[1], false);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_ownKeys(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(argv[0])) return JS_ThrowTypeErrorNotAnObject(ctx);\n return JS_GetOwnPropertyNames2(ctx, argv[0], JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK, JS_ITERATOR_KIND_KEY);\n}\n\nconst js_reflect_funcs = [\n JS_CFUNC_DEF('apply', 3, js_reflect_apply),\n JS_CFUNC_DEF('construct', 2, js_reflect_construct),\n JS_CFUNC_MAGIC_DEF('defineProperty', 3, js_object_defineProperty, 1),\n JS_CFUNC_DEF('deleteProperty', 2, js_reflect_deleteProperty),\n JS_CFUNC_DEF('get', 2, js_reflect_get),\n JS_CFUNC_MAGIC_DEF('getOwnPropertyDescriptor', 2, js_object_getOwnPropertyDescriptor, 1),\n JS_CFUNC_MAGIC_DEF('getPrototypeOf', 1, js_object_getPrototypeOf, 1),\n JS_CFUNC_DEF('has', 2, js_reflect_has),\n JS_CFUNC_MAGIC_DEF('isExtensible', 1, js_object_isExtensible, 1),\n JS_CFUNC_DEF('ownKeys', 1, js_reflect_ownKeys),\n JS_CFUNC_MAGIC_DEF('preventExtensions', 1, js_object_preventExtensions, 1),\n JS_CFUNC_DEF('set', 3, js_reflect_set),\n JS_CFUNC_DEF('setPrototypeOf', 2, js_reflect_setPrototypeOf),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Reflect', JS_PROP_CONFIGURABLE),\n];\n\nconst js_reflect_obj = [\n JS_OBJECT_DEF('Reflect', js_reflect_funcs, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE),\n];\n\nexport function JS_AddIntrinsicReflect(ctx: JSContext): void {\n JS_SetPropertyFunctionList(ctx, ctx.global_obj, js_reflect_obj);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/builtins/reflect.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Reflect object (port of the Reflect part of quickjs.c)\n */\nimport * as Q from '../quickjs.ts';\nimport {\n JSContext, JSValue, JS_EXCEPTION, JS_IsException, JS_IsObject, JS_IsConstructor, JS_ValueToAtom, JS_ATOM_NULL,\n JS_GetPropertyInternal, JS_SetPropertyInternal, JS_HasProperty, JS_DeleteProperty,\n JS_CallConstructor2, build_arg_list, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject,\n JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF, JS_PROP_STRING_DEF, JS_OBJECT_DEF,\n JS_PROP_WRITABLE, JS_PROP_CONFIGURABLE, JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_ATOM_Symbol_toStringTag,\n} from '../quickjs.ts';\nimport { js_function_apply } from '../interpreter.ts';\nimport {\n js_object_defineProperty, js_object_getOwnPropertyDescriptor, js_object_getPrototypeOf, js_object_isExtensible,\n js_object_preventExtensions, JS_GetOwnPropertyNames2, js_set_prototype_internal,\n} from './object.ts';\n\nconst JS_ITERATOR_KIND_KEY = 0;\n\nfunction js_reflect_apply(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return js_function_apply(ctx, argv[0], argv.slice(1), 2);\n}\n\nfunction js_reflect_construct(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const func = argv[0];\n const array_arg = argv[1];\n let new_target: JSValue;\n if (argv.length > 2) {\n new_target = argv[2];\n if (!JS_IsConstructor(ctx, new_target)) return Q.JS_ThrowTypeErrorNotAConstructor(ctx, new_target);\n } else {\n new_target = func;\n }\n const tab = build_arg_list(ctx, array_arg);\n if (!tab) return JS_EXCEPTION;\n return JS_CallConstructor2(ctx, func, new_target, tab);\n}\n\nfunction js_reflect_deleteProperty(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, argv[1]);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_DeleteProperty(ctx, obj, atom, 0);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_get(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const receiver = argv.length > 2 ? argv[2] : obj;\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n return JS_GetPropertyInternal(ctx, obj, atom, receiver, false);\n}\n\nfunction js_reflect_has(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_HasProperty(ctx, obj, atom);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_set(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n const val = argv[2];\n const receiver = argv.length > 3 ? argv[3] : obj;\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_SetPropertyInternal(ctx, obj, atom, val, receiver, 0);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_setPrototypeOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const ret = js_set_prototype_internal(ctx, argv[0], argv[1], false);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_ownKeys(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(argv[0])) return JS_ThrowTypeErrorNotAnObject(ctx);\n return JS_GetOwnPropertyNames2(ctx, argv[0], JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK, JS_ITERATOR_KIND_KEY);\n}\n\nconst js_reflect_funcs = [\n JS_CFUNC_DEF('apply', 3, js_reflect_apply),\n JS_CFUNC_DEF('construct', 2, js_reflect_construct),\n JS_CFUNC_MAGIC_DEF('defineProperty', 3, js_object_defineProperty, 1),\n JS_CFUNC_DEF('deleteProperty', 2, js_reflect_deleteProperty),\n JS_CFUNC_DEF('get', 2, js_reflect_get),\n JS_CFUNC_MAGIC_DEF('getOwnPropertyDescriptor', 2, js_object_getOwnPropertyDescriptor, 1),\n JS_CFUNC_MAGIC_DEF('getPrototypeOf', 1, js_object_getPrototypeOf, 1),\n JS_CFUNC_DEF('has', 2, js_reflect_has),\n JS_CFUNC_MAGIC_DEF('isExtensible', 1, js_object_isExtensible, 1),\n JS_CFUNC_DEF('ownKeys', 1, js_reflect_ownKeys),\n JS_CFUNC_MAGIC_DEF('preventExtensions', 1, js_object_preventExtensions, 1),\n JS_CFUNC_DEF('set', 3, js_reflect_set),\n JS_CFUNC_DEF('setPrototypeOf', 2, js_reflect_setPrototypeOf),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Reflect', JS_PROP_CONFIGURABLE),\n];\n\nconst js_reflect_obj = [\n JS_OBJECT_DEF('Reflect', js_reflect_funcs, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE),\n];\n\nexport function JS_AddIntrinsicReflect(ctx: JSContext): void {\n JS_SetPropertyFunctionList(ctx, ctx.global_obj, js_reflect_obj);\n}\n"]}
|
package/dist/builtins/regexp.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* for IsRegExp, pattern/flags extraction and flag validation.
|
|
10
10
|
*/
|
|
11
11
|
import * as Q from "../quickjs.js";
|
|
12
|
-
import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_NewObject, JS_NewObjectProto, JS_GetProperty, JS_ToString, JS_ToBoolFree, JS_ThrowTypeError, JS_ThrowSyntaxError, js_proto_from_ctor, js_same_value, hooks, JS_SetPropertyFunctionList, JS_NewGlobalCConstructor, JS_CGETSET_DEF, JS_NATIVE_DEF, JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_constructor, JS_ATOM_source, JS_ATOM_flags, JS_ATOM_Symbol_match, JS_ATOM_Symbol_matchAll, JS_ATOM_Symbol_replace, JS_ATOM_Symbol_search, JS_ATOM_Symbol_split, JS_ATOM_Symbol_species, JS_ATOM_Symbol_toStringTag, } from "../quickjs.js";
|
|
12
|
+
import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_CFUNC_DEF, JS_NewObject, JS_NewObjectProto, JS_GetProperty, JS_ToString, JS_ToBoolFree, JS_ThrowTypeError, JS_ThrowSyntaxError, js_proto_from_ctor, js_same_value, hooks, JS_SetPropertyFunctionList, JS_NewGlobalCConstructor, JS_CGETSET_DEF, JS_NATIVE_DEF, JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_constructor, JS_ATOM_source, JS_ATOM_flags, JS_ATOM_Symbol_match, JS_ATOM_Symbol_matchAll, JS_ATOM_Symbol_replace, JS_ATOM_Symbol_search, JS_ATOM_Symbol_split, JS_ATOM_Symbol_species, JS_ATOM_Symbol_toStringTag, } from "../quickjs.js";
|
|
13
13
|
import { js_adopt_host_object, fix_match, fix_array, fix_regexp_string_iterator, fix_iter_result_match, HOST_REGEXP_STRING_ITERATOR_PROTO, } from "./native.js";
|
|
14
14
|
const RP = RegExp.prototype;
|
|
15
15
|
const host_getter = (name) => Object.getOwnPropertyDescriptor(RP, name).get;
|
|
@@ -99,10 +99,16 @@ function js_regexp_constructor(ctx, new_target, argv) {
|
|
|
99
99
|
return pat;
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
+
/* the prototype is read from new.target before the pattern and the flags
|
|
103
|
+
are converted to strings (QuickJS c31809e) */
|
|
102
104
|
let re;
|
|
105
|
+
let proto;
|
|
103
106
|
const re1 = js_get_regexp(ctx, pat, false);
|
|
104
107
|
if (re1) {
|
|
105
108
|
const pattern = SOURCE_GETTER.call(re1);
|
|
109
|
+
proto = js_proto_from_ctor(ctx, new_target, 18 /* JSClassID.REGEXP */);
|
|
110
|
+
if (JS_IsException(proto))
|
|
111
|
+
return proto;
|
|
106
112
|
if (JS_IsUndefined(flags1)) {
|
|
107
113
|
re = new RegExp(re1);
|
|
108
114
|
}
|
|
@@ -132,6 +138,9 @@ function js_regexp_constructor(ctx, new_target, argv) {
|
|
|
132
138
|
pattern_val = pat;
|
|
133
139
|
flags = flags1;
|
|
134
140
|
}
|
|
141
|
+
proto = js_proto_from_ctor(ctx, new_target, 18 /* JSClassID.REGEXP */);
|
|
142
|
+
if (JS_IsException(proto))
|
|
143
|
+
return proto;
|
|
135
144
|
let pattern;
|
|
136
145
|
if (JS_IsUndefined(pattern_val)) {
|
|
137
146
|
pattern = '';
|
|
@@ -146,10 +155,72 @@ function js_regexp_constructor(ctx, new_target, argv) {
|
|
|
146
155
|
if (!re)
|
|
147
156
|
return JS_EXCEPTION;
|
|
148
157
|
}
|
|
149
|
-
return
|
|
158
|
+
return js_adopt_host_object(ctx, re, proto, 18 /* JSClassID.REGEXP */);
|
|
150
159
|
}
|
|
151
160
|
function js_get_this(ctx, this_val) { return this_val; }
|
|
161
|
+
/* white space and line terminators above U+00FF (lre_is_space): the code
|
|
162
|
+
points below 256 are all escaped as \xNN anyway */
|
|
163
|
+
function regexp_escape_is_space(c) {
|
|
164
|
+
return c === 0x1680 || (c >= 0x2000 && c <= 0x200a) || c === 0x2028 || c === 0x2029 ||
|
|
165
|
+
c === 0x202f || c === 0x205f || c === 0x3000 || c === 0xfeff;
|
|
166
|
+
}
|
|
167
|
+
const regexp_escape_punct = ",-=<>#&!%:;@~'`\"";
|
|
168
|
+
/* RegExp.escape(string) (js_regexp_escape) */
|
|
169
|
+
function js_regexp_escape(ctx, this_val, argv) {
|
|
170
|
+
const str = argv[0];
|
|
171
|
+
if (typeof str !== 'string')
|
|
172
|
+
return JS_ThrowTypeError(ctx, 'not a string');
|
|
173
|
+
const hex = (c, n) => c.toString(16).padStart(n, '0');
|
|
174
|
+
let b = '';
|
|
175
|
+
let i = 0;
|
|
176
|
+
while (i < str.length) {
|
|
177
|
+
const i0 = i;
|
|
178
|
+
let c = str.charCodeAt(i++);
|
|
179
|
+
/* string_getc: a valid surrogate pair is one code point */
|
|
180
|
+
if (c >= 0xd800 && c < 0xdc00 && i < str.length) {
|
|
181
|
+
const c1 = str.charCodeAt(i);
|
|
182
|
+
if (c1 >= 0xdc00 && c1 < 0xe000) {
|
|
183
|
+
c = 0x10000 + ((c - 0xd800) << 10) + (c1 - 0xdc00);
|
|
184
|
+
i++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (c < 33) {
|
|
188
|
+
if (c >= 9 && c <= 13)
|
|
189
|
+
b += '\\' + 'tnvfr'[c - 9];
|
|
190
|
+
else
|
|
191
|
+
b += '\\x' + hex(c, 2);
|
|
192
|
+
}
|
|
193
|
+
else if (c < 128) {
|
|
194
|
+
const ch = String.fromCharCode(c);
|
|
195
|
+
if ((c >= 0x30 && c <= 0x39) || (c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a)) {
|
|
196
|
+
if (i0 === 0) {
|
|
197
|
+
b += '\\x' + hex(c, 2);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else if (regexp_escape_punct.includes(ch)) {
|
|
202
|
+
b += '\\x' + hex(c, 2);
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
else if (ch !== '_') {
|
|
206
|
+
b += '\\';
|
|
207
|
+
}
|
|
208
|
+
b += ch;
|
|
209
|
+
}
|
|
210
|
+
else if (c < 256) {
|
|
211
|
+
b += '\\x' + hex(c, 2);
|
|
212
|
+
}
|
|
213
|
+
else if ((c >= 0xd800 && c < 0xe000) || regexp_escape_is_space(c)) {
|
|
214
|
+
b += '\\u' + hex(c, 4);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
b += String.fromCodePoint(c);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return b;
|
|
221
|
+
}
|
|
152
222
|
const js_regexp_funcs = [
|
|
223
|
+
JS_CFUNC_DEF('escape', 1, js_regexp_escape),
|
|
153
224
|
JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),
|
|
154
225
|
];
|
|
155
226
|
/* The flag/source getters are generic on %RegExp.prototype% itself ("(?:)",
|
|
@@ -194,7 +265,7 @@ export function JS_AddIntrinsicRegExp(ctx) {
|
|
|
194
265
|
ctx.regexp_ctor = obj;
|
|
195
266
|
JS_SetPropertyFunctionList(ctx, obj, js_regexp_funcs);
|
|
196
267
|
const it_proto = JS_NewObjectProto(ctx, ctx.iterator_proto);
|
|
197
|
-
ctx.class_proto[
|
|
268
|
+
ctx.class_proto[43 /* JSClassID.REGEXP_STRING_ITERATOR */] = it_proto;
|
|
198
269
|
JS_SetPropertyFunctionList(ctx, it_proto, [
|
|
199
270
|
JS_NATIVE_DEF('next', 0, HOST_REGEXP_STRING_ITERATOR_PROTO.next, fix_iter_result_match),
|
|
200
271
|
JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'RegExp String Iterator', JS_PROP_CONFIGURABLE),
|