jseption 0.0.5 → 0.0.6

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.
Files changed (86) hide show
  1. package/README.md +25 -4
  2. package/dist/atoms.d.ts +1 -0
  3. package/dist/atoms.js +2 -1
  4. package/dist/atoms.js.map +1 -1
  5. package/dist/builtins/base64.d.ts +14 -0
  6. package/dist/builtins/base64.js +219 -0
  7. package/dist/builtins/base64.js.map +1 -0
  8. package/dist/builtins/bigint.js +3 -3
  9. package/dist/builtins/bigint.js.map +1 -1
  10. package/dist/builtins/date.d.ts +1 -0
  11. package/dist/builtins/date.js +26 -12
  12. package/dist/builtins/date.js.map +1 -1
  13. package/dist/builtins/error.js +9 -0
  14. package/dist/builtins/error.js.map +1 -1
  15. package/dist/builtins/float16.d.ts +3 -0
  16. package/dist/builtins/float16.js +69 -0
  17. package/dist/builtins/float16.js.map +1 -0
  18. package/dist/builtins/function.js +2 -2
  19. package/dist/builtins/index.js +9 -6
  20. package/dist/builtins/index.js.map +1 -1
  21. package/dist/builtins/iterator.d.ts +2 -0
  22. package/dist/builtins/iterator.js +624 -0
  23. package/dist/builtins/iterator.js.map +1 -0
  24. package/dist/builtins/json.d.ts +13 -1
  25. package/dist/builtins/json.js +283 -211
  26. package/dist/builtins/json.js.map +1 -1
  27. package/dist/builtins/mapset.js +365 -6
  28. package/dist/builtins/mapset.js.map +1 -1
  29. package/dist/builtins/math.js +203 -3
  30. package/dist/builtins/math.js.map +1 -1
  31. package/dist/builtins/native.js +6 -6
  32. package/dist/builtins/object.js +9 -2
  33. package/dist/builtins/object.js.map +1 -1
  34. package/dist/builtins/promise.js +31 -11
  35. package/dist/builtins/promise.js.map +1 -1
  36. package/dist/builtins/proxy.js +2 -2
  37. package/dist/builtins/reflect.js +6 -2
  38. package/dist/builtins/reflect.js.map +1 -1
  39. package/dist/builtins/regexp.js +74 -3
  40. package/dist/builtins/regexp.js.map +1 -1
  41. package/dist/builtins/string.js +1 -1
  42. package/dist/builtins/symbol.js +1 -1
  43. package/dist/builtins/symbol.js.map +1 -1
  44. package/dist/builtins/typedarray.d.ts +1 -0
  45. package/dist/builtins/typedarray.js +302 -32
  46. package/dist/builtins/typedarray.js.map +1 -1
  47. package/dist/builtins/weakref.js +7 -7
  48. package/dist/embed.js +3 -3
  49. package/dist/interpreter.js +15 -14
  50. package/dist/interpreter.js.map +1 -1
  51. package/dist/jit.d.ts +1 -0
  52. package/dist/jit.js +51 -13
  53. package/dist/jit.js.map +1 -1
  54. package/dist/jit_hook.d.ts +1 -0
  55. package/dist/jit_hook.js.map +1 -1
  56. package/dist/jit_runtime.d.ts +1 -1
  57. package/dist/jit_runtime.js +6 -6
  58. package/dist/jit_runtime.js.map +1 -1
  59. package/dist/jit_stack.d.ts +1 -0
  60. package/dist/jit_stack.js +2 -1
  61. package/dist/jit_stack.js.map +1 -1
  62. package/dist/jseption.d.ts +2 -0
  63. package/dist/jseption.js +1 -0
  64. package/dist/jseption.js.map +1 -1
  65. package/dist/membrane.js +1 -1
  66. package/dist/module.js +5 -3
  67. package/dist/module.js.map +1 -1
  68. package/dist/parser.js +26 -9
  69. package/dist/parser.js.map +1 -1
  70. package/dist/print.d.ts +12 -0
  71. package/dist/print.js +494 -0
  72. package/dist/print.js.map +1 -0
  73. package/dist/qjs.js +13 -10
  74. package/dist/qjs.js.map +1 -1
  75. package/dist/quickjs.d.ts +8 -0
  76. package/dist/quickjs.js +132 -53
  77. package/dist/quickjs.js.map +1 -1
  78. package/dist/std.d.ts +4 -2
  79. package/dist/std.js +42 -8
  80. package/dist/std.js.map +1 -1
  81. package/dist/values.d.ts +31 -27
  82. package/dist/values.js.map +1 -1
  83. package/dist/version.d.ts +1 -1
  84. package/dist/version.js +1 -1
  85. package/dist/version.js.map +1 -1
  86. package/package.json +1 -1
@@ -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, 45 /* JSClassID.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, 45 /* JSClassID.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, 45 /* JSClassID.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, (46 /* JSClassID.PROMISE_RESOLVE_FUNCTION */ + i));
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 === 47 /* JSClassID.PROMISE_REJECT_FUNCTION */;
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, 45 /* JSClassID.PROMISE */);
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], 45 /* JSClassID.PROMISE */)) {
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, 45 /* JSClassID.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 JS_ThrowTypeError(ctx, 'not a constructor');
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, 45 /* JSClassID.PROMISE */);
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[45 /* JSClassID.PROMISE */] = 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"]}
@@ -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(44 /* JSClassID.PROXY */);
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) === 44 /* JSClassID.PROXY */) {
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 */
@@ -1,4 +1,8 @@
1
- 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_ThrowTypeError, 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";
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 JS_ThrowTypeError(ctx, 'not a constructor');
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":"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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 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"]}
@@ -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 js_regexp_create(ctx, new_target, re);
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[42 /* JSClassID.REGEXP_STRING_ITERATOR */] = it_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),