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.
Files changed (90) hide show
  1. package/README.md +30 -6
  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 +4 -1
  45. package/dist/builtins/typedarray.js +325 -37
  46. package/dist/builtins/typedarray.js.map +1 -1
  47. package/dist/builtins/weakref.js +7 -7
  48. package/dist/embed.d.ts +5 -0
  49. package/dist/embed.js +36 -11
  50. package/dist/embed.js.map +1 -1
  51. package/dist/interpreter.js +15 -14
  52. package/dist/interpreter.js.map +1 -1
  53. package/dist/jit.d.ts +1 -0
  54. package/dist/jit.js +51 -13
  55. package/dist/jit.js.map +1 -1
  56. package/dist/jit_hook.d.ts +1 -0
  57. package/dist/jit_hook.js.map +1 -1
  58. package/dist/jit_runtime.d.ts +1 -1
  59. package/dist/jit_runtime.js +6 -6
  60. package/dist/jit_runtime.js.map +1 -1
  61. package/dist/jit_stack.d.ts +1 -0
  62. package/dist/jit_stack.js +2 -1
  63. package/dist/jit_stack.js.map +1 -1
  64. package/dist/jseption.d.ts +2 -0
  65. package/dist/jseption.js +1 -0
  66. package/dist/jseption.js.map +1 -1
  67. package/dist/membrane.d.ts +6 -0
  68. package/dist/membrane.js +7 -3
  69. package/dist/membrane.js.map +1 -1
  70. package/dist/module.js +5 -3
  71. package/dist/module.js.map +1 -1
  72. package/dist/parser.js +26 -9
  73. package/dist/parser.js.map +1 -1
  74. package/dist/print.d.ts +12 -0
  75. package/dist/print.js +494 -0
  76. package/dist/print.js.map +1 -0
  77. package/dist/qjs.js +13 -10
  78. package/dist/qjs.js.map +1 -1
  79. package/dist/quickjs.d.ts +8 -0
  80. package/dist/quickjs.js +132 -53
  81. package/dist/quickjs.js.map +1 -1
  82. package/dist/std.d.ts +4 -2
  83. package/dist/std.js +42 -8
  84. package/dist/std.js.map +1 -1
  85. package/dist/values.d.ts +31 -27
  86. package/dist/values.js.map +1 -1
  87. package/dist/version.d.ts +1 -1
  88. package/dist/version.js +1 -1
  89. package/dist/version.js.map +1 -1
  90. package/package.json +1 -1
@@ -9,7 +9,7 @@
9
9
  * iterators are the host iterators re-prototyped to the guest Map/Set
10
10
  * Iterator prototypes, whose `next` is the host one.
11
11
  */
12
- import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto, JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64, JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF, JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set, JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr, } from "../quickjs.js";
12
+ import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto, JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64, JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF, JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set, JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr, JS_CFUNC_DEF, JS_GetClassID, JS_GetPropertyStr, JS_ThrowTypeErrorInvalidClass, JS_ThrowRangeError, JS_ToFloat64, JS_ToBoolFree, JS_ATOM_has, } from "../quickjs.js";
13
13
  import { js_adopt_host_object, fix_map_iterator, fix_set_iterator, fix_iter_result_entries, HOST_MAP_ITERATOR_PROTO, HOST_SET_ITERATOR_PROTO, } from "./native.js";
14
14
  const MAGIC_SET = 1 << 0;
15
15
  const MAGIC_WEAK = 1 << 1;
@@ -38,10 +38,10 @@ function new_host_collection(magic) {
38
38
  }
39
39
  export function js_map_constructor(ctx, new_target, argv, magic) {
40
40
  const is_set = (magic & MAGIC_SET) !== 0;
41
- const proto = js_proto_from_ctor(ctx, new_target, (34 /* JSClassID.MAP */ + magic));
41
+ const proto = js_proto_from_ctor(ctx, new_target, (35 /* JSClassID.MAP */ + magic));
42
42
  if (JS_IsException(proto))
43
43
  return JS_EXCEPTION;
44
- const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (34 /* JSClassID.MAP */ + magic));
44
+ const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (35 /* JSClassID.MAP */ + magic));
45
45
  /* the iterable argument is processed as in quickjs.c: the 'set'/'add'
46
46
  method is looked up on the new object (observable) and called for
47
47
  each entry */
@@ -151,8 +151,356 @@ function js_map_groupBy(ctx, this_val, argv) {
151
151
  }
152
152
  function js_get_this(ctx, this_val) { return this_val; }
153
153
  const MP = Map.prototype, SP = Set.prototype, WMP = WeakMap.prototype, WSP = WeakSet.prototype;
154
- const MAP_GET = MP.get, MAP_SET = MP.set;
154
+ const MAP_GET = MP.get, MAP_SET = MP.set, MAP_HAS = MP.has;
155
+ const WEAKMAP_GET = WMP.get, WEAKMAP_SET = WMP.set, WEAKMAP_HAS = WMP.has;
156
+ const SET_ADD = SP.add, SET_HAS = SP.has, SET_DELETE = SP.delete, SET_VALUES = SP.values;
155
157
  const getter = (o, name) => Object.getOwnPropertyDescriptor(o, name).get;
158
+ const SET_SIZE = getter(SP, 'size');
159
+ /* map_normalize_key: -0 is +0 */
160
+ function map_normalize_key(key) {
161
+ return typeof key === 'number' && key === 0 ? 0 : key;
162
+ }
163
+ /* ---- Map and WeakMap upsert: getOrInsert, getOrInsertComputed ---- */
164
+ const UPSERT_COMPUTED = 1, UPSERT_WEAK = 2;
165
+ /* js_map_getOrInsert (magic: UPSERT_COMPUTED | UPSERT_WEAK) */
166
+ function js_map_getOrInsert(ctx, this_val, argv, magic) {
167
+ const computed = (magic & UPSERT_COMPUTED) !== 0;
168
+ const is_weak = (magic & UPSERT_WEAK) !== 0;
169
+ const class_id = is_weak ? 37 /* JSClassID.WEAKMAP */ : 35 /* JSClassID.MAP */;
170
+ if (JS_GetClassID(this_val) !== class_id)
171
+ return JS_ThrowTypeErrorInvalidClass(ctx, class_id);
172
+ const coll = this_val; /* the host Map or WeakMap */
173
+ const get = (is_weak ? WEAKMAP_GET : MAP_GET), set = (is_weak ? WEAKMAP_SET : MAP_SET);
174
+ const has = (is_weak ? WEAKMAP_HAS : MAP_HAS);
175
+ if (computed && !JS_IsFunction(ctx, argv[1]))
176
+ return JS_ThrowTypeError(ctx, 'not a function');
177
+ const key = map_normalize_key(argv[0]);
178
+ if (is_weak && !js_weakref_is_target(key))
179
+ return JS_ThrowTypeError(ctx, 'invalid value used as WeakMap key');
180
+ if (has.call(coll, key))
181
+ return get.call(coll, key);
182
+ let value;
183
+ if (computed) {
184
+ value = JS_Call(ctx, argv[1], undefined, [key]);
185
+ if (JS_IsException(value))
186
+ return JS_EXCEPTION;
187
+ /* the callback may have inserted the key: Set overwrites that entry in place */
188
+ }
189
+ else {
190
+ value = argv[1];
191
+ }
192
+ set.call(coll, key, value);
193
+ return value;
194
+ }
195
+ /* ---- Set methods ---- */
196
+ function get_this_set(ctx, this_val) {
197
+ if (JS_GetClassID(this_val) === 36 /* JSClassID.SET */)
198
+ return this_val;
199
+ JS_ThrowTypeErrorInvalidClass(ctx, 36 /* JSClassID.SET */);
200
+ return null;
201
+ }
202
+ /* get_set_record (GetSetRecord) */
203
+ function get_set_record(ctx, obj) {
204
+ let size;
205
+ if (JS_GetClassID(obj) === 36 /* JSClassID.SET */) {
206
+ size = SET_SIZE.call(obj);
207
+ }
208
+ else {
209
+ const v = JS_GetPropertyStr(ctx, obj, 'size');
210
+ if (JS_IsException(v))
211
+ return null;
212
+ const d = JS_ToFloat64(ctx, v);
213
+ if (JS_IsException(d))
214
+ return null;
215
+ if (Number.isNaN(d)) {
216
+ JS_ThrowTypeError(ctx, '.size is not a number');
217
+ return null;
218
+ }
219
+ size = Math.trunc(d);
220
+ if (size < 0) {
221
+ JS_ThrowRangeError(ctx, '.size must be positive');
222
+ return null;
223
+ }
224
+ }
225
+ const has = JS_GetProperty(ctx, obj, JS_ATOM_has);
226
+ if (JS_IsException(has))
227
+ return null;
228
+ if (JS_IsUndefined(has)) {
229
+ JS_ThrowTypeError(ctx, '.has is undefined');
230
+ return null;
231
+ }
232
+ if (!JS_IsFunction(ctx, has)) {
233
+ JS_ThrowTypeError(ctx, '.has is not a function');
234
+ return null;
235
+ }
236
+ const keys = JS_GetPropertyStr(ctx, obj, 'keys');
237
+ if (JS_IsException(keys))
238
+ return null;
239
+ if (JS_IsUndefined(keys)) {
240
+ JS_ThrowTypeError(ctx, '.keys is undefined');
241
+ return null;
242
+ }
243
+ if (!JS_IsFunction(ctx, keys)) {
244
+ JS_ThrowTypeError(ctx, '.keys is not a function');
245
+ return null;
246
+ }
247
+ return { size, has, keys };
248
+ }
249
+ /* copy 'this_val' in a new guest Set without side effects (no .add call) */
250
+ function js_copy_set(ctx, s) {
251
+ const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);
252
+ if (JS_IsException(newset))
253
+ return null;
254
+ for (const k of SET_VALUES.call(s))
255
+ SET_ADD.call(newset, k);
256
+ return newset;
257
+ }
258
+ /* the keys of the set-like 'other': the iterator and its next method */
259
+ function setlike_keys(ctx, other, r) {
260
+ const iter = JS_Call(ctx, r.keys, other, []);
261
+ if (JS_IsException(iter))
262
+ return null;
263
+ if (!JS_IsObject(iter)) {
264
+ JS_ThrowTypeErrorNotAnObject(ctx);
265
+ return null;
266
+ }
267
+ const next = JS_GetProperty(ctx, iter, JS_ATOM_next);
268
+ if (JS_IsException(next))
269
+ return null;
270
+ return { iter, next };
271
+ }
272
+ /* a live iteration of a guest Set (js_create_map_iterator + js_map_iterator_next) */
273
+ function set_iter(s) {
274
+ return SET_VALUES.call(s);
275
+ }
276
+ /* call other.has(item); -1 on exception */
277
+ function call_has(ctx, other, r, item) {
278
+ const rv = JS_Call(ctx, r.has, other, [item]);
279
+ if (JS_IsException(rv))
280
+ return -1;
281
+ return JS_ToBoolFree(ctx, rv) ? 1 : 0;
282
+ }
283
+ function js_set_isDisjointFrom(ctx, this_val, argv) {
284
+ const s = get_this_set(ctx, this_val);
285
+ if (!s)
286
+ return JS_EXCEPTION;
287
+ const r = get_set_record(ctx, argv[0]);
288
+ if (!r)
289
+ return JS_EXCEPTION;
290
+ let found = false;
291
+ if (SET_SIZE.call(s) <= r.size) {
292
+ const it = set_iter(s);
293
+ for (let e = it.next(); !e.done; e = it.next()) {
294
+ const ok = call_has(ctx, argv[0], r, e.value);
295
+ if (ok < 0)
296
+ return JS_EXCEPTION;
297
+ if (ok) {
298
+ found = true;
299
+ break;
300
+ }
301
+ }
302
+ }
303
+ else {
304
+ const k = setlike_keys(ctx, argv[0], r);
305
+ if (!k)
306
+ return JS_EXCEPTION;
307
+ const pdone = { done: 0 };
308
+ for (;;) {
309
+ const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
310
+ if (JS_IsException(item))
311
+ return JS_EXCEPTION;
312
+ if (pdone.done)
313
+ break;
314
+ if (SET_HAS.call(s, map_normalize_key(item))) {
315
+ found = true;
316
+ if (JS_IteratorClose(ctx, k.iter, false) < 0)
317
+ return JS_EXCEPTION;
318
+ break;
319
+ }
320
+ }
321
+ }
322
+ return !found;
323
+ }
324
+ function js_set_isSubsetOf(ctx, this_val, argv) {
325
+ const s = get_this_set(ctx, this_val);
326
+ if (!s)
327
+ return JS_EXCEPTION;
328
+ const r = get_set_record(ctx, argv[0]);
329
+ if (!r)
330
+ return JS_EXCEPTION;
331
+ if (SET_SIZE.call(s) > r.size)
332
+ return false;
333
+ const it = set_iter(s);
334
+ for (let e = it.next(); !e.done; e = it.next()) {
335
+ const ok = call_has(ctx, argv[0], r, e.value);
336
+ if (ok < 0)
337
+ return JS_EXCEPTION;
338
+ if (!ok)
339
+ return false;
340
+ }
341
+ return true;
342
+ }
343
+ function js_set_isSupersetOf(ctx, this_val, argv) {
344
+ const s = get_this_set(ctx, this_val);
345
+ if (!s)
346
+ return JS_EXCEPTION;
347
+ const r = get_set_record(ctx, argv[0]);
348
+ if (!r)
349
+ return JS_EXCEPTION;
350
+ if (SET_SIZE.call(s) < r.size)
351
+ return false;
352
+ const k = setlike_keys(ctx, argv[0], r);
353
+ if (!k)
354
+ return JS_EXCEPTION;
355
+ const pdone = { done: 0 };
356
+ for (;;) {
357
+ const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
358
+ if (JS_IsException(item))
359
+ return JS_EXCEPTION;
360
+ if (pdone.done)
361
+ return true;
362
+ if (!SET_HAS.call(s, map_normalize_key(item))) {
363
+ if (JS_IteratorClose(ctx, k.iter, false) < 0)
364
+ return JS_EXCEPTION;
365
+ return false;
366
+ }
367
+ }
368
+ }
369
+ function js_set_intersection(ctx, this_val, argv) {
370
+ const s = get_this_set(ctx, this_val);
371
+ if (!s)
372
+ return JS_EXCEPTION;
373
+ const r = get_set_record(ctx, argv[0]);
374
+ if (!r)
375
+ return JS_EXCEPTION;
376
+ if (SET_SIZE.call(s) > r.size) {
377
+ const k = setlike_keys(ctx, argv[0], r);
378
+ if (!k)
379
+ return JS_EXCEPTION;
380
+ const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);
381
+ if (JS_IsException(newset))
382
+ return JS_EXCEPTION;
383
+ const pdone = { done: 0 };
384
+ for (;;) {
385
+ const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
386
+ if (JS_IsException(item0))
387
+ return JS_EXCEPTION;
388
+ if (pdone.done)
389
+ break;
390
+ const item = map_normalize_key(item0);
391
+ if (SET_HAS.call(s, item) && !SET_HAS.call(newset, item))
392
+ SET_ADD.call(newset, item);
393
+ }
394
+ return newset;
395
+ }
396
+ const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);
397
+ if (JS_IsException(newset))
398
+ return JS_EXCEPTION;
399
+ const it = set_iter(s);
400
+ for (let e = it.next(); !e.done; e = it.next()) {
401
+ const ok = call_has(ctx, argv[0], r, e.value);
402
+ if (ok < 0)
403
+ return JS_EXCEPTION;
404
+ if (ok) {
405
+ const item = map_normalize_key(e.value);
406
+ if (!SET_HAS.call(newset, item))
407
+ SET_ADD.call(newset, item);
408
+ }
409
+ }
410
+ return newset;
411
+ }
412
+ function js_set_difference(ctx, this_val, argv) {
413
+ const s = get_this_set(ctx, this_val);
414
+ if (!s)
415
+ return JS_EXCEPTION;
416
+ const r = get_set_record(ctx, argv[0]);
417
+ if (!r)
418
+ return JS_EXCEPTION;
419
+ const t = js_copy_set(ctx, s);
420
+ if (!t)
421
+ return JS_EXCEPTION;
422
+ if (SET_SIZE.call(s) <= r.size) {
423
+ const it = set_iter(t);
424
+ for (let e = it.next(); !e.done; e = it.next()) {
425
+ const ok = call_has(ctx, argv[0], r, e.value);
426
+ if (ok < 0)
427
+ return JS_EXCEPTION;
428
+ if (ok)
429
+ SET_DELETE.call(t, e.value);
430
+ }
431
+ }
432
+ else {
433
+ const k = setlike_keys(ctx, argv[0], r);
434
+ if (!k)
435
+ return JS_EXCEPTION;
436
+ const pdone = { done: 0 };
437
+ for (;;) {
438
+ const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
439
+ if (JS_IsException(item))
440
+ return JS_EXCEPTION;
441
+ if (pdone.done)
442
+ break;
443
+ SET_DELETE.call(t, item);
444
+ }
445
+ }
446
+ return t;
447
+ }
448
+ function js_set_symmetricDifference(ctx, this_val, argv) {
449
+ const s = get_this_set(ctx, this_val);
450
+ if (!s)
451
+ return JS_EXCEPTION;
452
+ const r = get_set_record(ctx, argv[0]);
453
+ if (!r)
454
+ return JS_EXCEPTION;
455
+ const k = setlike_keys(ctx, argv[0], r);
456
+ if (!k)
457
+ return JS_EXCEPTION;
458
+ const t = js_copy_set(ctx, s);
459
+ if (!t)
460
+ return JS_EXCEPTION;
461
+ const pdone = { done: 0 };
462
+ for (;;) {
463
+ const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
464
+ if (JS_IsException(item0))
465
+ return JS_EXCEPTION;
466
+ if (pdone.done)
467
+ break;
468
+ /* note the subtlety: keys can disappear during iteration (mutating
469
+ iterators), and insertion order must be kept: check 'this', then the
470
+ copy. Present in 'this': delete from the copy; missing from both: add;
471
+ in the copy only: the iterator erased it from 'this', don't add */
472
+ const item = map_normalize_key(item0);
473
+ if (SET_HAS.call(s, item))
474
+ SET_DELETE.call(t, item);
475
+ else if (!SET_HAS.call(t, item))
476
+ SET_ADD.call(t, item);
477
+ }
478
+ return t;
479
+ }
480
+ function js_set_union(ctx, this_val, argv) {
481
+ const s = get_this_set(ctx, this_val);
482
+ if (!s)
483
+ return JS_EXCEPTION;
484
+ const r = get_set_record(ctx, argv[0]);
485
+ if (!r)
486
+ return JS_EXCEPTION;
487
+ const k = setlike_keys(ctx, argv[0], r);
488
+ if (!k)
489
+ return JS_EXCEPTION;
490
+ const t = js_copy_set(ctx, s);
491
+ if (!t)
492
+ return JS_EXCEPTION;
493
+ const pdone = { done: 0 };
494
+ for (;;) {
495
+ const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);
496
+ if (JS_IsException(item))
497
+ return JS_EXCEPTION;
498
+ if (pdone.done)
499
+ break;
500
+ SET_ADD.call(t, item);
501
+ }
502
+ return t;
503
+ }
156
504
  const js_map_funcs = [
157
505
  JS_CFUNC_MAGIC_DEF('groupBy', 2, js_map_groupBy, 1),
158
506
  JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),
@@ -160,6 +508,8 @@ const js_map_funcs = [
160
508
  const js_map_proto_funcs = [
161
509
  JS_NATIVE_DEF('set', 2, MP.set),
162
510
  JS_NATIVE_DEF('get', 1, MP.get),
511
+ JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, 0),
512
+ JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_COMPUTED),
163
513
  JS_NATIVE_DEF('has', 1, MP.has),
164
514
  JS_NATIVE_DEF('delete', 1, MP.delete),
165
515
  JS_NATIVE_DEF('clear', 0, MP.clear),
@@ -182,6 +532,13 @@ const js_set_proto_funcs = [
182
532
  JS_NATIVE_DEF('clear', 0, SP.clear),
183
533
  JS_NATIVE_GETSET_DEF('size', getter(SP, 'size'), null),
184
534
  JS_NATIVE_DEF('forEach', 1, SP.forEach),
535
+ JS_CFUNC_DEF('isDisjointFrom', 1, js_set_isDisjointFrom),
536
+ JS_CFUNC_DEF('isSubsetOf', 1, js_set_isSubsetOf),
537
+ JS_CFUNC_DEF('isSupersetOf', 1, js_set_isSupersetOf),
538
+ JS_CFUNC_DEF('intersection', 1, js_set_intersection),
539
+ JS_CFUNC_DEF('difference', 1, js_set_difference),
540
+ JS_CFUNC_DEF('symmetricDifference', 1, js_set_symmetricDifference),
541
+ JS_CFUNC_DEF('union', 1, js_set_union),
185
542
  JS_NATIVE_DEF('values', 0, SP.values, fix_set_iterator),
186
543
  JS_ALIAS_DEF('keys', 'values'),
187
544
  JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'values'),
@@ -195,6 +552,8 @@ const js_set_iterator_proto_funcs = [
195
552
  const js_weak_map_proto_funcs = [
196
553
  JS_NATIVE_DEF('set', 2, WMP.set),
197
554
  JS_NATIVE_DEF('get', 1, WMP.get),
555
+ JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, UPSERT_WEAK),
556
+ JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_WEAK | UPSERT_COMPUTED),
198
557
  JS_NATIVE_DEF('has', 1, WMP.has),
199
558
  JS_NATIVE_DEF('delete', 1, WMP.delete),
200
559
  JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakMap', JS_PROP_CONFIGURABLE),
@@ -217,7 +576,7 @@ export function JS_AddIntrinsicMapSet(ctx) {
217
576
  for (let i = 0; i < 4; i++) {
218
577
  const name = JS_AtomGetStr(ctx, JS_ATOM_Map + i);
219
578
  const proto = JS_NewObject(ctx);
220
- ctx.class_proto[34 /* JSClassID.MAP */ + i] = proto;
579
+ ctx.class_proto[35 /* JSClassID.MAP */ + i] = proto;
221
580
  JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i]);
222
581
  const obj1 = JS_NewCFunctionMagic(ctx, js_map_constructor, name, 0, 3 /* JSCFunctionEnum.constructor_magic */, i);
223
582
  if (i < 2) {
@@ -227,7 +586,7 @@ export function JS_AddIntrinsicMapSet(ctx) {
227
586
  }
228
587
  for (let i = 0; i < 2; i++) {
229
588
  const proto = JS_NewObjectProto(ctx, ctx.iterator_proto);
230
- ctx.class_proto[38 /* JSClassID.MAP_ITERATOR */ + i] = proto;
589
+ ctx.class_proto[39 /* JSClassID.MAP_ITERATOR */ + i] = proto;
231
590
  JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i + 4]);
232
591
  }
233
592
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mapset.js","sourceRoot":"","sources":["../../src/builtins/mapset.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Map, Set, WeakMap, WeakSet and their iterators (port of the Map/Set\n * part of quickjs.c)\n *\n * Guest collections are host collections with the guest prototype\n * (builtins/native.ts): the constructor creates the host Map/Set/WeakMap/\n * WeakSet, re-prototypes it to the prototype derived from new.target and\n * tags it with the class id. Every method is the borrowed host native; the\n * iterators are the host iterators re-prototyped to the guest Map/Set\n * Iterator prototypes, whose `next` is the host one.\n */\nimport {\n JSContext, JSValue, JSObject, JSClassID, JSCFunctionEnum,\n JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto,\n JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor,\n JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64,\n JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64,\n JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF,\n JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set,\n JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr,\n} from '../quickjs.ts';\nimport {\n js_adopt_host_object, fix_map_iterator, fix_set_iterator, fix_iter_result_entries, HOST_MAP_ITERATOR_PROTO,\n HOST_SET_ITERATOR_PROTO,\n} from './native.ts';\n\nconst MAGIC_SET = 1 << 0;\nconst MAGIC_WEAK = 1 << 1;\n\n/* true if 'val' can be the target of a weak reference: an object or a\n non registered symbol (js_weakref_is_target) */\nexport function js_weakref_is_target(val: JSValue): boolean {\n if (JS_IsObject(val)) return true;\n if (typeof val === 'symbol') return Symbol.keyFor(val) === undefined;\n return false;\n}\n\nfunction 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\nfunction new_host_collection(magic: number): object {\n switch (magic) {\n case 0: return new Map();\n case MAGIC_SET: return new Set();\n case MAGIC_WEAK: return new WeakMap();\n default: return new WeakSet();\n }\n}\n\nexport function js_map_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_set = (magic & MAGIC_SET) !== 0;\n const proto = js_proto_from_ctor(ctx, new_target, (JSClassID.MAP + magic) as JSClassID);\n if (JS_IsException(proto)) return JS_EXCEPTION;\n const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (JSClassID.MAP + magic) as JSClassID);\n\n /* the iterable argument is processed as in quickjs.c: the 'set'/'add'\n method is looked up on the new object (observable) and called for\n each entry */\n const arr = argv.length > 0 ? argv[0] : undefined;\n if (arr !== undefined && arr !== null) {\n const adder = JS_GetProperty(ctx, obj, is_set ? JS_ATOM_add : JS_ATOM_set);\n if (JS_IsException(adder)) return JS_EXCEPTION;\n if (!JS_IsFunction(ctx, adder)) {\n return JS_ThrowTypeError(ctx, 'set/add is not a function');\n }\n const iter = JS_GetIterator(ctx, arr, false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n let ret: JSValue;\n if (is_set) {\n ret = JS_Call(ctx, adder, obj, [item]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n } else {\n if (!JS_IsObject(item)) {\n JS_ThrowTypeErrorNotAnObject(ctx);\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const key = JS_GetPropertyUint32(ctx, item, 0);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const value = JS_GetPropertyUint32(ctx, item, 1);\n if (JS_IsException(value)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n ret = JS_Call(ctx, adder, obj, [key, value]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n }\n }\n }\n return obj;\n}\n\n/* Map.groupBy (js_object_groupBy with is_map = 1; Object.groupBy is in object.ts) */\nfunction js_map_groupBy(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n // \"is function?\" check must be observed before argv[0] is accessed\n const cb = argv[1];\n if (check_function(ctx, cb)) return JS_EXCEPTION;\n\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n\n const next = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next)) return JS_EXCEPTION;\n\n const groups = js_map_constructor(ctx, undefined, [], 0);\n if (JS_IsException(groups)) return JS_EXCEPTION;\n const map = groups as Map<JSValue, JSValue>;\n\n const pdone = { done: 0 };\n for (let idx = 0; ; idx++) {\n if (idx >= Number.MAX_SAFE_INTEGER) {\n JS_ThrowTypeError(ctx, 'too many elements');\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const v = JS_IteratorNext(ctx, iter, next, [], pdone);\n if (JS_IsException(v)) return JS_EXCEPTION;\n if (pdone.done) break; // v is JS_UNDEFINED\n\n let key = JS_Call(ctx, cb, ctx.global_obj, [v, idx]);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n /* -0 is normalized to +0 */\n if (typeof key === 'number' && key === 0) key = 0;\n\n let prop = MAP_GET.call(map, key);\n if (JS_IsUndefined(prop)) {\n prop = JS_NewArray(ctx);\n MAP_SET.call(map, key, prop);\n }\n const len = js_get_length64(ctx, prop);\n if (len < 0) return JS_EXCEPTION;\n if (JS_SetPropertyInt64(ctx, prop, len, v) < 0) return JS_EXCEPTION;\n }\n return groups;\n}\n\nfunction js_get_this(ctx: JSContext, this_val: JSValue): JSValue { return this_val; }\n\nconst MP = Map.prototype, SP = Set.prototype, WMP = WeakMap.prototype, WSP = WeakSet.prototype;\nconst MAP_GET = MP.get, MAP_SET = MP.set;\nconst getter = (o: object, name: string) => Object.getOwnPropertyDescriptor(o, name)!.get!;\n\nconst js_map_funcs = [\n JS_CFUNC_MAGIC_DEF('groupBy', 2, js_map_groupBy, 1),\n JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),\n];\n\nconst js_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, MP.set),\n JS_NATIVE_DEF('get', 1, MP.get),\n JS_NATIVE_DEF('has', 1, MP.has),\n JS_NATIVE_DEF('delete', 1, MP.delete),\n JS_NATIVE_DEF('clear', 0, MP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(MP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, MP.forEach),\n JS_NATIVE_DEF('values', 0, MP.values, fix_map_iterator),\n JS_NATIVE_DEF('keys', 0, MP.keys, fix_map_iterator),\n JS_NATIVE_DEF('entries', 0, MP.entries, fix_map_iterator),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'entries'),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_MAP_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, SP.add),\n JS_NATIVE_DEF('has', 1, SP.has),\n JS_NATIVE_DEF('delete', 1, SP.delete),\n JS_NATIVE_DEF('clear', 0, SP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(SP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, SP.forEach),\n JS_NATIVE_DEF('values', 0, SP.values, fix_set_iterator),\n JS_ALIAS_DEF('keys', 'values'),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'values'),\n JS_NATIVE_DEF('entries', 0, SP.entries, fix_set_iterator),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_SET_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, WMP.set),\n JS_NATIVE_DEF('get', 1, WMP.get),\n JS_NATIVE_DEF('has', 1, WMP.has),\n JS_NATIVE_DEF('delete', 1, WMP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakMap', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, WSP.add),\n JS_NATIVE_DEF('has', 1, WSP.has),\n JS_NATIVE_DEF('delete', 1, WSP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakSet', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_proto_funcs_ptr = [\n js_map_proto_funcs,\n js_set_proto_funcs,\n js_weak_map_proto_funcs,\n js_weak_set_proto_funcs,\n js_map_iterator_proto_funcs,\n js_set_iterator_proto_funcs,\n];\n\nexport function JS_AddIntrinsicMapSet(ctx: JSContext): void {\n for (let i = 0; i < 4; i++) {\n const name = JS_AtomGetStr(ctx, JS_ATOM_Map + i);\n const proto = JS_NewObject(ctx) as JSObject;\n ctx.class_proto[JSClassID.MAP + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i]);\n const obj1 = JS_NewCFunctionMagic(ctx, js_map_constructor as any, name, 0, JSCFunctionEnum.constructor_magic, i);\n if (i < 2) {\n JS_SetPropertyFunctionList(ctx, obj1, js_map_funcs);\n }\n JS_NewGlobalCConstructor2(ctx, obj1, name, proto);\n }\n\n for (let i = 0; i < 2; i++) {\n const proto = JS_NewObjectProto(ctx, ctx.iterator_proto) as JSObject;\n ctx.class_proto[JSClassID.MAP_ITERATOR + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i + 4]);\n }\n}\n"]}
1
+ {"version":3,"file":"mapset.js","sourceRoot":"","sources":["../../src/builtins/mapset.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Map, Set, WeakMap, WeakSet and their iterators (port of the Map/Set\n * part of quickjs.c)\n *\n * Guest collections are host collections with the guest prototype\n * (builtins/native.ts): the constructor creates the host Map/Set/WeakMap/\n * WeakSet, re-prototypes it to the prototype derived from new.target and\n * tags it with the class id. Every method is the borrowed host native; the\n * iterators are the host iterators re-prototyped to the guest Map/Set\n * Iterator prototypes, whose `next` is the host one.\n */\nimport {\n JSContext, JSValue, JSObject, JSClassID, JSCFunctionEnum,\n JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsObject, JS_IsFunction, JS_NewObject, JS_NewObjectProto,\n JS_NewArray, JS_NewCFunctionMagic, js_proto_from_ctor,\n JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyInt64,\n JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, js_get_length64,\n JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_NATIVE_DEF,\n JS_NATIVE_GETSET_DEF, JS_PROP_STRING_DEF, JS_ALIAS_DEF, JS_PROP_CONFIGURABLE, JS_ATOM_Map, JS_ATOM_add, JS_ATOM_set,\n JS_ATOM_next, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_toStringTag, JS_ATOM_Symbol_species, JS_AtomGetStr,\n JS_CFUNC_DEF, JS_GetClassID, JS_GetPropertyStr, JS_ThrowTypeErrorInvalidClass, JS_ThrowRangeError, JS_ToFloat64,\n JS_ToBoolFree, JS_ATOM_has,\n} from '../quickjs.ts';\nimport {\n js_adopt_host_object, fix_map_iterator, fix_set_iterator, fix_iter_result_entries, HOST_MAP_ITERATOR_PROTO,\n HOST_SET_ITERATOR_PROTO,\n} from './native.ts';\n\nconst MAGIC_SET = 1 << 0;\nconst MAGIC_WEAK = 1 << 1;\n\n/* true if 'val' can be the target of a weak reference: an object or a\n non registered symbol (js_weakref_is_target) */\nexport function js_weakref_is_target(val: JSValue): boolean {\n if (JS_IsObject(val)) return true;\n if (typeof val === 'symbol') return Symbol.keyFor(val) === undefined;\n return false;\n}\n\nfunction 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\nfunction new_host_collection(magic: number): object {\n switch (magic) {\n case 0: return new Map();\n case MAGIC_SET: return new Set();\n case MAGIC_WEAK: return new WeakMap();\n default: return new WeakSet();\n }\n}\n\nexport function js_map_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_set = (magic & MAGIC_SET) !== 0;\n const proto = js_proto_from_ctor(ctx, new_target, (JSClassID.MAP + magic) as JSClassID);\n if (JS_IsException(proto)) return JS_EXCEPTION;\n const obj = js_adopt_host_object(ctx, new_host_collection(magic), proto, (JSClassID.MAP + magic) as JSClassID);\n\n /* the iterable argument is processed as in quickjs.c: the 'set'/'add'\n method is looked up on the new object (observable) and called for\n each entry */\n const arr = argv.length > 0 ? argv[0] : undefined;\n if (arr !== undefined && arr !== null) {\n const adder = JS_GetProperty(ctx, obj, is_set ? JS_ATOM_add : JS_ATOM_set);\n if (JS_IsException(adder)) return JS_EXCEPTION;\n if (!JS_IsFunction(ctx, adder)) {\n return JS_ThrowTypeError(ctx, 'set/add is not a function');\n }\n const iter = JS_GetIterator(ctx, arr, false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n let ret: JSValue;\n if (is_set) {\n ret = JS_Call(ctx, adder, obj, [item]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n } else {\n if (!JS_IsObject(item)) {\n JS_ThrowTypeErrorNotAnObject(ctx);\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const key = JS_GetPropertyUint32(ctx, item, 0);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const value = JS_GetPropertyUint32(ctx, item, 1);\n if (JS_IsException(value)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n ret = JS_Call(ctx, adder, obj, [key, value]);\n if (JS_IsException(ret)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n }\n }\n }\n return obj;\n}\n\n/* Map.groupBy (js_object_groupBy with is_map = 1; Object.groupBy is in object.ts) */\nfunction js_map_groupBy(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n // \"is function?\" check must be observed before argv[0] is accessed\n const cb = argv[1];\n if (check_function(ctx, cb)) return JS_EXCEPTION;\n\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n\n const next = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next)) return JS_EXCEPTION;\n\n const groups = js_map_constructor(ctx, undefined, [], 0);\n if (JS_IsException(groups)) return JS_EXCEPTION;\n const map = groups as Map<JSValue, JSValue>;\n\n const pdone = { done: 0 };\n for (let idx = 0; ; idx++) {\n if (idx >= Number.MAX_SAFE_INTEGER) {\n JS_ThrowTypeError(ctx, 'too many elements');\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n const v = JS_IteratorNext(ctx, iter, next, [], pdone);\n if (JS_IsException(v)) return JS_EXCEPTION;\n if (pdone.done) break; // v is JS_UNDEFINED\n\n let key = JS_Call(ctx, cb, ctx.global_obj, [v, idx]);\n if (JS_IsException(key)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n /* -0 is normalized to +0 */\n if (typeof key === 'number' && key === 0) key = 0;\n\n let prop = MAP_GET.call(map, key);\n if (JS_IsUndefined(prop)) {\n prop = JS_NewArray(ctx);\n MAP_SET.call(map, key, prop);\n }\n const len = js_get_length64(ctx, prop);\n if (len < 0) return JS_EXCEPTION;\n if (JS_SetPropertyInt64(ctx, prop, len, v) < 0) return JS_EXCEPTION;\n }\n return groups;\n}\n\nfunction js_get_this(ctx: JSContext, this_val: JSValue): JSValue { return this_val; }\n\nconst MP = Map.prototype, SP = Set.prototype, WMP = WeakMap.prototype, WSP = WeakSet.prototype;\nconst MAP_GET = MP.get, MAP_SET = MP.set, MAP_HAS = MP.has;\nconst WEAKMAP_GET = WMP.get, WEAKMAP_SET = WMP.set, WEAKMAP_HAS = WMP.has;\nconst SET_ADD = SP.add, SET_HAS = SP.has, SET_DELETE = SP.delete, SET_VALUES = SP.values;\nconst getter = (o: object, name: string) => Object.getOwnPropertyDescriptor(o, name)!.get!;\nconst SET_SIZE = getter(SP, 'size');\n\n/* map_normalize_key: -0 is +0 */\nfunction map_normalize_key(key: JSValue): JSValue {\n return typeof key === 'number' && key === 0 ? 0 : key;\n}\n\n/* ---- Map and WeakMap upsert: getOrInsert, getOrInsertComputed ---- */\n\nconst UPSERT_COMPUTED = 1, UPSERT_WEAK = 2;\n\n/* js_map_getOrInsert (magic: UPSERT_COMPUTED | UPSERT_WEAK) */\nfunction js_map_getOrInsert(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const computed = (magic & UPSERT_COMPUTED) !== 0;\n const is_weak = (magic & UPSERT_WEAK) !== 0;\n const class_id = is_weak ? JSClassID.WEAKMAP : JSClassID.MAP;\n if (JS_GetClassID(this_val) !== class_id) return JS_ThrowTypeErrorInvalidClass(ctx, class_id);\n const coll = this_val as object; /* the host Map or WeakMap */\n /* the host Map or WeakMap methods, called on the host collection */\n type HostFn = (this: object, ...args: JSValue[]) => any;\n const get = (is_weak ? WEAKMAP_GET : MAP_GET) as HostFn, set = (is_weak ? WEAKMAP_SET : MAP_SET) as HostFn;\n const has = (is_weak ? WEAKMAP_HAS : MAP_HAS) as HostFn;\n if (computed && !JS_IsFunction(ctx, argv[1])) return JS_ThrowTypeError(ctx, 'not a function');\n const key = map_normalize_key(argv[0]);\n if (is_weak && !js_weakref_is_target(key)) return JS_ThrowTypeError(ctx, 'invalid value used as WeakMap key');\n if (has.call(coll, key)) return get.call(coll, key);\n let value: JSValue;\n if (computed) {\n value = JS_Call(ctx, argv[1], undefined, [key]);\n if (JS_IsException(value)) return JS_EXCEPTION;\n /* the callback may have inserted the key: Set overwrites that entry in place */\n } else {\n value = argv[1];\n }\n set.call(coll, key, value);\n return value;\n}\n\n/* ---- Set methods ---- */\n\nfunction get_this_set(ctx: JSContext, this_val: JSValue): Set<JSValue> | null {\n if (JS_GetClassID(this_val) === JSClassID.SET) return this_val as Set<JSValue>;\n JS_ThrowTypeErrorInvalidClass(ctx, JSClassID.SET);\n return null;\n}\n\ninterface SetRecord { size: number; has: JSValue; keys: JSValue }\n\n/* get_set_record (GetSetRecord) */\nfunction get_set_record(ctx: JSContext, obj: JSValue): SetRecord | null {\n let size: number;\n if (JS_GetClassID(obj) === JSClassID.SET) {\n size = SET_SIZE.call(obj);\n } else {\n const v = JS_GetPropertyStr(ctx, obj, 'size');\n if (JS_IsException(v)) return null;\n const d = JS_ToFloat64(ctx, v);\n if (JS_IsException(d)) return null;\n if (Number.isNaN(d)) { JS_ThrowTypeError(ctx, '.size is not a number'); return null; }\n size = Math.trunc(d as number);\n if (size < 0) { JS_ThrowRangeError(ctx, '.size must be positive'); return null; }\n }\n const has = JS_GetProperty(ctx, obj, JS_ATOM_has);\n if (JS_IsException(has)) return null;\n if (JS_IsUndefined(has)) { JS_ThrowTypeError(ctx, '.has is undefined'); return null; }\n if (!JS_IsFunction(ctx, has)) { JS_ThrowTypeError(ctx, '.has is not a function'); return null; }\n const keys = JS_GetPropertyStr(ctx, obj, 'keys');\n if (JS_IsException(keys)) return null;\n if (JS_IsUndefined(keys)) { JS_ThrowTypeError(ctx, '.keys is undefined'); return null; }\n if (!JS_IsFunction(ctx, keys)) { JS_ThrowTypeError(ctx, '.keys is not a function'); return null; }\n return { size, has, keys };\n}\n\n/* copy 'this_val' in a new guest Set without side effects (no .add call) */\nfunction js_copy_set(ctx: JSContext, s: Set<JSValue>): Set<JSValue> | null {\n const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);\n if (JS_IsException(newset)) return null;\n for (const k of SET_VALUES.call(s) as Iterable<JSValue>) SET_ADD.call(newset, k);\n return newset as Set<JSValue>;\n}\n\n/* the keys of the set-like 'other': the iterator and its next method */\nfunction setlike_keys(ctx: JSContext, other: JSValue, r: SetRecord): { iter: JSValue; next: JSValue } | null {\n const iter = JS_Call(ctx, r.keys, other, []);\n if (JS_IsException(iter)) return null;\n if (!JS_IsObject(iter)) { JS_ThrowTypeErrorNotAnObject(ctx); return null; }\n const next = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next)) return null;\n return { iter, next };\n}\n\n/* a live iteration of a guest Set (js_create_map_iterator + js_map_iterator_next) */\nfunction set_iter(s: Set<JSValue>): Iterator<JSValue> {\n return SET_VALUES.call(s) as Iterator<JSValue>;\n}\n\n/* call other.has(item); -1 on exception */\nfunction call_has(ctx: JSContext, other: JSValue, r: SetRecord, item: JSValue): number {\n const rv = JS_Call(ctx, r.has, other, [item]);\n if (JS_IsException(rv)) return -1;\n return JS_ToBoolFree(ctx, rv) ? 1 : 0;\n}\n\nfunction js_set_isDisjointFrom(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n let found = false;\n if (SET_SIZE.call(s) <= r.size) {\n const it = set_iter(s);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (ok) { found = true; break; }\n }\n } else {\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n if (SET_HAS.call(s, map_normalize_key(item))) {\n found = true;\n if (JS_IteratorClose(ctx, k.iter, false) < 0) return JS_EXCEPTION;\n break;\n }\n }\n }\n return !found;\n}\n\nfunction js_set_isSubsetOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n if (SET_SIZE.call(s) > r.size) return false;\n const it = set_iter(s);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (!ok) return false;\n }\n return true;\n}\n\nfunction js_set_isSupersetOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n if (SET_SIZE.call(s) < r.size) return false;\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) return true;\n if (!SET_HAS.call(s, map_normalize_key(item))) {\n if (JS_IteratorClose(ctx, k.iter, false) < 0) return JS_EXCEPTION;\n return false;\n }\n }\n}\n\nfunction js_set_intersection(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n if (SET_SIZE.call(s) > r.size) {\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);\n if (JS_IsException(newset)) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item0)) return JS_EXCEPTION;\n if (pdone.done) break;\n const item = map_normalize_key(item0);\n if (SET_HAS.call(s, item) && !SET_HAS.call(newset, item)) SET_ADD.call(newset, item);\n }\n return newset;\n }\n const newset = js_map_constructor(ctx, undefined, [], MAGIC_SET);\n if (JS_IsException(newset)) return JS_EXCEPTION;\n const it = set_iter(s);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (ok) {\n const item = map_normalize_key(e.value);\n if (!SET_HAS.call(newset, item)) SET_ADD.call(newset, item);\n }\n }\n return newset;\n}\n\nfunction js_set_difference(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n const t = js_copy_set(ctx, s);\n if (!t) return JS_EXCEPTION;\n if (SET_SIZE.call(s) <= r.size) {\n const it = set_iter(t);\n for (let e = it.next(); !e.done; e = it.next()) {\n const ok = call_has(ctx, argv[0], r, e.value);\n if (ok < 0) return JS_EXCEPTION;\n if (ok) SET_DELETE.call(t, e.value);\n }\n } else {\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n SET_DELETE.call(t, item);\n }\n }\n return t;\n}\n\nfunction js_set_symmetricDifference(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const t = js_copy_set(ctx, s);\n if (!t) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item0 = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item0)) return JS_EXCEPTION;\n if (pdone.done) break;\n /* note the subtlety: keys can disappear during iteration (mutating\n iterators), and insertion order must be kept: check 'this', then the\n copy. Present in 'this': delete from the copy; missing from both: add;\n in the copy only: the iterator erased it from 'this', don't add */\n const item = map_normalize_key(item0);\n if (SET_HAS.call(s, item)) SET_DELETE.call(t, item);\n else if (!SET_HAS.call(t, item)) SET_ADD.call(t, item);\n }\n return t;\n}\n\nfunction js_set_union(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = get_this_set(ctx, this_val);\n if (!s) return JS_EXCEPTION;\n const r = get_set_record(ctx, argv[0]);\n if (!r) return JS_EXCEPTION;\n const k = setlike_keys(ctx, argv[0], r);\n if (!k) return JS_EXCEPTION;\n const t = js_copy_set(ctx, s);\n if (!t) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, k.iter, k.next, [], pdone);\n if (JS_IsException(item)) return JS_EXCEPTION;\n if (pdone.done) break;\n SET_ADD.call(t, item);\n }\n return t;\n}\n\n\nconst js_map_funcs = [\n JS_CFUNC_MAGIC_DEF('groupBy', 2, js_map_groupBy, 1),\n JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),\n];\n\nconst js_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, MP.set),\n JS_NATIVE_DEF('get', 1, MP.get),\n JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, 0),\n JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_COMPUTED),\n JS_NATIVE_DEF('has', 1, MP.has),\n JS_NATIVE_DEF('delete', 1, MP.delete),\n JS_NATIVE_DEF('clear', 0, MP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(MP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, MP.forEach),\n JS_NATIVE_DEF('values', 0, MP.values, fix_map_iterator),\n JS_NATIVE_DEF('keys', 0, MP.keys, fix_map_iterator),\n JS_NATIVE_DEF('entries', 0, MP.entries, fix_map_iterator),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'entries'),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_MAP_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Map Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, SP.add),\n JS_NATIVE_DEF('has', 1, SP.has),\n JS_NATIVE_DEF('delete', 1, SP.delete),\n JS_NATIVE_DEF('clear', 0, SP.clear),\n JS_NATIVE_GETSET_DEF('size', getter(SP, 'size'), null),\n JS_NATIVE_DEF('forEach', 1, SP.forEach),\n JS_CFUNC_DEF('isDisjointFrom', 1, js_set_isDisjointFrom),\n JS_CFUNC_DEF('isSubsetOf', 1, js_set_isSubsetOf),\n JS_CFUNC_DEF('isSupersetOf', 1, js_set_isSupersetOf),\n JS_CFUNC_DEF('intersection', 1, js_set_intersection),\n JS_CFUNC_DEF('difference', 1, js_set_difference),\n JS_CFUNC_DEF('symmetricDifference', 1, js_set_symmetricDifference),\n JS_CFUNC_DEF('union', 1, js_set_union),\n JS_NATIVE_DEF('values', 0, SP.values, fix_set_iterator),\n JS_ALIAS_DEF('keys', 'values'),\n JS_ALIAS_DEF(JS_ATOM_Symbol_iterator, 'values'),\n JS_NATIVE_DEF('entries', 0, SP.entries, fix_set_iterator),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set', JS_PROP_CONFIGURABLE),\n];\n\nconst js_set_iterator_proto_funcs = [\n JS_NATIVE_DEF('next', 0, (HOST_SET_ITERATOR_PROTO as any).next, fix_iter_result_entries),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Set Iterator', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_map_proto_funcs = [\n JS_NATIVE_DEF('set', 2, WMP.set),\n JS_NATIVE_DEF('get', 1, WMP.get),\n JS_CFUNC_MAGIC_DEF('getOrInsert', 2, js_map_getOrInsert, UPSERT_WEAK),\n JS_CFUNC_MAGIC_DEF('getOrInsertComputed', 2, js_map_getOrInsert, UPSERT_WEAK | UPSERT_COMPUTED),\n JS_NATIVE_DEF('has', 1, WMP.has),\n JS_NATIVE_DEF('delete', 1, WMP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakMap', JS_PROP_CONFIGURABLE),\n];\n\nconst js_weak_set_proto_funcs = [\n JS_NATIVE_DEF('add', 1, WSP.add),\n JS_NATIVE_DEF('has', 1, WSP.has),\n JS_NATIVE_DEF('delete', 1, WSP.delete),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'WeakSet', JS_PROP_CONFIGURABLE),\n];\n\nconst js_map_proto_funcs_ptr = [\n js_map_proto_funcs,\n js_set_proto_funcs,\n js_weak_map_proto_funcs,\n js_weak_set_proto_funcs,\n js_map_iterator_proto_funcs,\n js_set_iterator_proto_funcs,\n];\n\nexport function JS_AddIntrinsicMapSet(ctx: JSContext): void {\n for (let i = 0; i < 4; i++) {\n const name = JS_AtomGetStr(ctx, JS_ATOM_Map + i);\n const proto = JS_NewObject(ctx) as JSObject;\n ctx.class_proto[JSClassID.MAP + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i]);\n const obj1 = JS_NewCFunctionMagic(ctx, js_map_constructor as any, name, 0, JSCFunctionEnum.constructor_magic, i);\n if (i < 2) {\n JS_SetPropertyFunctionList(ctx, obj1, js_map_funcs);\n }\n JS_NewGlobalCConstructor2(ctx, obj1, name, proto);\n }\n\n for (let i = 0; i < 2; i++) {\n const proto = JS_NewObjectProto(ctx, ctx.iterator_proto) as JSObject;\n ctx.class_proto[JSClassID.MAP_ITERATOR + i] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_map_proto_funcs_ptr[i + 4]);\n }\n}\n"]}