jseption 0.0.0-stage → 0.0.2

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 (114) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +191 -2
  3. package/dist/atoms.d.ts +255 -0
  4. package/dist/atoms.js +445 -0
  5. package/dist/atoms.js.map +1 -0
  6. package/dist/builtins/array.d.ts +3 -0
  7. package/dist/builtins/array.js +116 -0
  8. package/dist/builtins/array.js.map +1 -0
  9. package/dist/builtins/bigint.d.ts +3 -0
  10. package/dist/builtins/bigint.js +122 -0
  11. package/dist/builtins/bigint.js.map +1 -0
  12. package/dist/builtins/boolean.d.ts +2 -0
  13. package/dist/builtins/boolean.js +26 -0
  14. package/dist/builtins/boolean.js.map +1 -0
  15. package/dist/builtins/date.d.ts +3 -0
  16. package/dist/builtins/date.js +1046 -0
  17. package/dist/builtins/date.js.map +1 -0
  18. package/dist/builtins/error.d.ts +2 -0
  19. package/dist/builtins/error.js +154 -0
  20. package/dist/builtins/error.js.map +1 -0
  21. package/dist/builtins/function.d.ts +5 -0
  22. package/dist/builtins/function.js +164 -0
  23. package/dist/builtins/function.js.map +1 -0
  24. package/dist/builtins/global.d.ts +2 -0
  25. package/dist/builtins/global.js +29 -0
  26. package/dist/builtins/global.js.map +1 -0
  27. package/dist/builtins/index.d.ts +3 -0
  28. package/dist/builtins/index.js +139 -0
  29. package/dist/builtins/index.js.map +1 -0
  30. package/dist/builtins/json.d.ts +6 -0
  31. package/dist/builtins/json.js +984 -0
  32. package/dist/builtins/json.js.map +1 -0
  33. package/dist/builtins/mapset.d.ts +4 -0
  34. package/dist/builtins/mapset.js +234 -0
  35. package/dist/builtins/mapset.js.map +1 -0
  36. package/dist/builtins/math.d.ts +2 -0
  37. package/dist/builtins/math.js +62 -0
  38. package/dist/builtins/math.js.map +1 -0
  39. package/dist/builtins/native.d.ts +22 -0
  40. package/dist/builtins/native.js +250 -0
  41. package/dist/builtins/native.js.map +1 -0
  42. package/dist/builtins/number.d.ts +4 -0
  43. package/dist/builtins/number.js +76 -0
  44. package/dist/builtins/number.js.map +1 -0
  45. package/dist/builtins/object.d.ts +12 -0
  46. package/dist/builtins/object.js +575 -0
  47. package/dist/builtins/object.js.map +1 -0
  48. package/dist/builtins/promise.d.ts +13 -0
  49. package/dist/builtins/promise.js +582 -0
  50. package/dist/builtins/promise.js.map +1 -0
  51. package/dist/builtins/proxy.d.ts +3 -0
  52. package/dist/builtins/proxy.js +226 -0
  53. package/dist/builtins/proxy.js.map +1 -0
  54. package/dist/builtins/reflect.d.ts +2 -0
  55. package/dist/builtins/reflect.js +109 -0
  56. package/dist/builtins/reflect.js.map +1 -0
  57. package/dist/builtins/regexp.d.ts +2 -0
  58. package/dist/builtins/regexp.js +203 -0
  59. package/dist/builtins/regexp.js.map +1 -0
  60. package/dist/builtins/string.d.ts +4 -0
  61. package/dist/builtins/string.js +135 -0
  62. package/dist/builtins/string.js.map +1 -0
  63. package/dist/builtins/symbol.d.ts +3 -0
  64. package/dist/builtins/symbol.js +98 -0
  65. package/dist/builtins/symbol.js.map +1 -0
  66. package/dist/builtins/typedarray.d.ts +15 -0
  67. package/dist/builtins/typedarray.js +1838 -0
  68. package/dist/builtins/typedarray.js.map +1 -0
  69. package/dist/builtins/weakref.d.ts +18 -0
  70. package/dist/builtins/weakref.js +130 -0
  71. package/dist/builtins/weakref.js.map +1 -0
  72. package/dist/dump.d.ts +2 -0
  73. package/dist/dump.js +124 -0
  74. package/dist/dump.js.map +1 -0
  75. package/dist/embed.d.ts +18 -0
  76. package/dist/embed.js +286 -0
  77. package/dist/embed.js.map +1 -0
  78. package/dist/interpreter.d.ts +81 -0
  79. package/dist/interpreter.js +3768 -0
  80. package/dist/interpreter.js.map +1 -0
  81. package/dist/jit.d.ts +59 -0
  82. package/dist/jit.js +3440 -0
  83. package/dist/jit.js.map +1 -0
  84. package/dist/jit_hook.d.ts +21 -0
  85. package/dist/jit_hook.js +4 -0
  86. package/dist/jit_hook.js.map +1 -0
  87. package/dist/jit_runtime.d.ts +104 -0
  88. package/dist/jit_runtime.js +721 -0
  89. package/dist/jit_runtime.js.map +1 -0
  90. package/dist/jit_stack.d.ts +24 -0
  91. package/dist/jit_stack.js +227 -0
  92. package/dist/jit_stack.js.map +1 -0
  93. package/dist/jseption.d.ts +15 -0
  94. package/dist/jseption.js +61 -0
  95. package/dist/jseption.js.map +1 -0
  96. package/dist/opcodes.d.ts +347 -0
  97. package/dist/opcodes.js +322 -0
  98. package/dist/opcodes.js.map +1 -0
  99. package/dist/parser.d.ts +283 -0
  100. package/dist/parser.js +9752 -0
  101. package/dist/parser.js.map +1 -0
  102. package/dist/qjs.d.ts +2 -0
  103. package/dist/qjs.js +122 -0
  104. package/dist/qjs.js.map +1 -0
  105. package/dist/quickjs.d.ts +460 -0
  106. package/dist/quickjs.js +3408 -0
  107. package/dist/quickjs.js.map +1 -0
  108. package/dist/std.d.ts +4 -0
  109. package/dist/std.js +273 -0
  110. package/dist/std.js.map +1 -0
  111. package/dist/values.d.ts +447 -0
  112. package/dist/values.js +461 -0
  113. package/dist/values.js.map +1 -0
  114. package/package.json +59 -4
@@ -0,0 +1,575 @@
1
+ /*
2
+ * Object objects (port of the Object part of quickjs.c)
3
+ */
4
+ import * as Q from "../quickjs.js";
5
+ import { JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsNull, JS_IsObject, JS_IsFunction, JS_IsArray, JS_NewObject, JS_NewObjectProto, JS_NewArray, js_create_array, JS_ToObject, JS_ValueToAtom, JS_ATOM_NULL, JS_AtomToValue, JS_AtomToString, JS_GetProperty, JS_GetPropertyUint32, JS_GetPrototype, JS_SetPrototypeInternal, JS_IsExtensible, JS_PreventExtensions, JS_GetOwnPropertyInternal, JS_GetOwnPropertyNamesInternal, JS_DefineProperty, JS_DefinePropertyValue, JS_DefinePropertyValueValue, JS_DefinePropertyValueInt64, js_obj_to_desc, new_desc, js_create_from_ctor, js_get_length64, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, JS_Invoke, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_NewGlobalCConstructor, JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_NATIVE_DEF, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF, JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE, JS_PROP_C_W_E, JS_PROP_GETSET, JS_PROP_THROW, JS_PROP_HAS_CONFIGURABLE, JS_PROP_HAS_ENUMERABLE, JS_PROP_HAS_GET, JS_PROP_HAS_SET, JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_GPN_ENUM_ONLY, JS_ATOM_Array, JS_ATOM_Function, JS_ATOM_Object, JS_ATOM_Symbol_toStringTag, JS_ATOM_toString, JS_ATOM_next, JS_ATOM_get, JS_ATOM_set, JS_ATOM_value, JS_ATOM_writable, JS_ATOM_enumerable, JS_ATOM_configurable, JS_ATOM_empty_string, JS_ATOM___proto__, } from "../quickjs.js";
6
+ import { fix_any, fix_array, fix_entries } from "./native.js";
7
+ const MAX_SAFE_INTEGER = 9007199254740991;
8
+ /* check_function() in C */
9
+ function check_function(ctx, obj) {
10
+ if (JS_IsFunction(ctx, obj))
11
+ return 0;
12
+ JS_ThrowTypeError(ctx, 'not a function');
13
+ return -1;
14
+ }
15
+ /* JS_GetActiveFunction() in C */
16
+ function JS_GetActiveFunction(ctx) {
17
+ return ctx.rt.current_stack_frame ? ctx.rt.current_stack_frame.cur_func : undefined;
18
+ }
19
+ export function JS_DefinePropertyDesc(ctx, obj, prop, desc, flags) {
20
+ const d = new_desc();
21
+ if (js_obj_to_desc(ctx, d, desc) < 0)
22
+ return -1;
23
+ return JS_DefineProperty(ctx, obj, prop, d.value, d.getter, d.setter, d.flags | flags);
24
+ }
25
+ export function JS_ObjectDefineProperties(ctx, obj, properties) {
26
+ if (!JS_IsObject(obj)) {
27
+ JS_ThrowTypeErrorNotAnObject(ctx);
28
+ return -1;
29
+ }
30
+ const props = JS_ToObject(ctx, properties);
31
+ if (JS_IsException(props))
32
+ return -1;
33
+ const p = props;
34
+ /* XXX: not done in the same order as the spec */
35
+ const atoms = JS_GetOwnPropertyNamesInternal(ctx, p, JS_GPN_ENUM_ONLY | JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK);
36
+ if (!atoms)
37
+ return -1;
38
+ for (const e of atoms) {
39
+ const desc = JS_GetProperty(ctx, props, e.atom);
40
+ if (JS_IsException(desc))
41
+ return -1;
42
+ if (JS_DefinePropertyDesc(ctx, obj, e.atom, desc, JS_PROP_THROW) < 0)
43
+ return -1;
44
+ }
45
+ return 0;
46
+ }
47
+ function js_object_constructor(ctx, new_target, argv) {
48
+ if (!JS_IsUndefined(new_target) && new_target !== JS_GetActiveFunction(ctx)) {
49
+ return js_create_from_ctor(ctx, new_target, 1 /* JSClassID.OBJECT */);
50
+ }
51
+ const v = argv[0];
52
+ if (v === null || v === undefined)
53
+ return JS_NewObject(ctx);
54
+ return JS_ToObject(ctx, v);
55
+ }
56
+ function js_object_create(ctx, this_val, argv) {
57
+ const proto = argv[0];
58
+ if (!JS_IsObject(proto) && !JS_IsNull(proto))
59
+ return JS_ThrowTypeError(ctx, 'not a prototype');
60
+ const obj = JS_NewObjectProto(ctx, proto);
61
+ if (JS_IsException(obj))
62
+ return JS_EXCEPTION;
63
+ const props = argv[1];
64
+ if (!JS_IsUndefined(props)) {
65
+ if (JS_ObjectDefineProperties(ctx, obj, props))
66
+ return JS_EXCEPTION;
67
+ }
68
+ return obj;
69
+ }
70
+ export function js_object_getPrototypeOf(ctx, this_val, argv, magic) {
71
+ const val = argv[0];
72
+ if (!JS_IsObject(val)) {
73
+ /* ES6 feature non compatible with ES5.1: primitive types are accepted */
74
+ if (magic || JS_IsNull(val) || JS_IsUndefined(val))
75
+ return JS_ThrowTypeErrorNotAnObject(ctx);
76
+ }
77
+ return JS_GetPrototype(ctx, val);
78
+ }
79
+ /* Wrapper around the core JS_SetPrototypeInternal reproducing the argument
80
+ checks of the C version: a non object/null prototype is always a
81
+ TypeError, a non object target is a TypeError unless throw_flag is set
82
+ (then primitives are accepted), and a proxy trap returning false in
83
+ throw mode is a TypeError. */
84
+ export function js_set_prototype_internal(ctx, obj, proto_val, throw_flag) {
85
+ if (throw_flag) {
86
+ if (JS_IsNull(obj) || JS_IsUndefined(obj)) {
87
+ JS_ThrowTypeErrorNotAnObject(ctx);
88
+ return -1;
89
+ }
90
+ }
91
+ else {
92
+ if (!JS_IsObject(obj)) {
93
+ JS_ThrowTypeErrorNotAnObject(ctx);
94
+ return -1;
95
+ }
96
+ }
97
+ if (!JS_IsObject(proto_val) && !JS_IsNull(proto_val)) {
98
+ JS_ThrowTypeErrorNotAnObject(ctx);
99
+ return -1;
100
+ }
101
+ const ret = JS_SetPrototypeInternal(ctx, obj, proto_val, throw_flag);
102
+ if (ret === 0 && throw_flag) {
103
+ /* only a proxy setPrototypeOf trap can return false here without
104
+ having thrown already */
105
+ JS_ThrowTypeError(ctx, 'proxy: bad prototype');
106
+ return -1;
107
+ }
108
+ return ret;
109
+ }
110
+ /* magic = 1 if called as Reflect.defineProperty */
111
+ export function js_object_defineProperty(ctx, this_val, argv, magic) {
112
+ const obj = argv[0];
113
+ const prop = argv[1];
114
+ const desc = argv[2];
115
+ if (!JS_IsObject(obj))
116
+ return JS_ThrowTypeErrorNotAnObject(ctx);
117
+ const atom = JS_ValueToAtom(ctx, prop);
118
+ if (atom === JS_ATOM_NULL)
119
+ return JS_EXCEPTION;
120
+ let flags = 0;
121
+ if (!magic)
122
+ flags |= JS_PROP_THROW;
123
+ const ret = JS_DefinePropertyDesc(ctx, obj, atom, desc, flags);
124
+ if (ret < 0)
125
+ return JS_EXCEPTION;
126
+ if (magic)
127
+ return ret !== 0;
128
+ return obj;
129
+ }
130
+ function js_object_defineProperties(ctx, this_val, argv) {
131
+ // defineProperties(obj, properties)
132
+ const obj = argv[0];
133
+ if (JS_ObjectDefineProperties(ctx, obj, argv[1]))
134
+ return JS_EXCEPTION;
135
+ return obj;
136
+ }
137
+ /* magic = 1 if called as __defineSetter__ */
138
+ function js_object___defineGetter__(ctx, this_val, argv, magic) {
139
+ const prop = argv[0];
140
+ const value = argv[1];
141
+ const obj = JS_ToObject(ctx, this_val);
142
+ if (JS_IsException(obj))
143
+ return JS_EXCEPTION;
144
+ if (check_function(ctx, value))
145
+ return JS_EXCEPTION;
146
+ const atom = JS_ValueToAtom(ctx, prop);
147
+ if (atom === JS_ATOM_NULL)
148
+ return JS_EXCEPTION;
149
+ let flags = JS_PROP_THROW | JS_PROP_HAS_ENUMERABLE | JS_PROP_ENUMERABLE | JS_PROP_HAS_CONFIGURABLE | JS_PROP_CONFIGURABLE;
150
+ let get, set;
151
+ if (magic) {
152
+ get = undefined;
153
+ set = value;
154
+ flags |= JS_PROP_HAS_SET;
155
+ }
156
+ else {
157
+ get = value;
158
+ set = undefined;
159
+ flags |= JS_PROP_HAS_GET;
160
+ }
161
+ const ret = JS_DefineProperty(ctx, obj, atom, undefined, get, set, flags);
162
+ if (ret < 0)
163
+ return JS_EXCEPTION;
164
+ return undefined;
165
+ }
166
+ export function js_object_getOwnPropertyDescriptor(ctx, this_val, argv, magic) {
167
+ let obj;
168
+ if (magic) {
169
+ /* Reflect.getOwnPropertyDescriptor case */
170
+ if (!JS_IsObject(argv[0]))
171
+ return JS_ThrowTypeErrorNotAnObject(ctx);
172
+ obj = argv[0];
173
+ }
174
+ else {
175
+ obj = JS_ToObject(ctx, argv[0]);
176
+ if (JS_IsException(obj))
177
+ return obj;
178
+ }
179
+ const prop = argv[1];
180
+ const atom = JS_ValueToAtom(ctx, prop);
181
+ if (atom === JS_ATOM_NULL)
182
+ return JS_EXCEPTION;
183
+ let ret = undefined;
184
+ if (JS_IsObject(obj)) {
185
+ const desc = new_desc();
186
+ const res = JS_GetOwnPropertyInternal(ctx, desc, obj, atom);
187
+ if (res < 0)
188
+ return JS_EXCEPTION;
189
+ if (res) {
190
+ ret = JS_NewObject(ctx);
191
+ if (JS_IsException(ret))
192
+ return JS_EXCEPTION;
193
+ const flags = JS_PROP_C_W_E | JS_PROP_THROW;
194
+ if (desc.flags & JS_PROP_GETSET) {
195
+ if (JS_DefinePropertyValue(ctx, ret, JS_ATOM_get, desc.getter, flags) < 0 ||
196
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_set, desc.setter, flags) < 0)
197
+ return JS_EXCEPTION;
198
+ }
199
+ else {
200
+ if (JS_DefinePropertyValue(ctx, ret, JS_ATOM_value, desc.value, flags) < 0 ||
201
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_writable, (desc.flags & JS_PROP_WRITABLE) !== 0, flags) < 0)
202
+ return JS_EXCEPTION;
203
+ }
204
+ if (JS_DefinePropertyValue(ctx, ret, JS_ATOM_enumerable, (desc.flags & JS_PROP_ENUMERABLE) !== 0, flags) < 0 ||
205
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_configurable, (desc.flags & JS_PROP_CONFIGURABLE) !== 0, flags) < 0)
206
+ return JS_EXCEPTION;
207
+ }
208
+ }
209
+ return ret;
210
+ }
211
+ function js_object_getOwnPropertyDescriptors(ctx, this_val, argv) {
212
+ //getOwnPropertyDescriptors(obj)
213
+ const obj = JS_ToObject(ctx, argv[0]);
214
+ if (JS_IsException(obj))
215
+ return JS_EXCEPTION;
216
+ const p = obj;
217
+ const props = JS_GetOwnPropertyNamesInternal(ctx, p, JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK);
218
+ if (!props)
219
+ return JS_EXCEPTION;
220
+ const r = JS_NewObject(ctx);
221
+ if (JS_IsException(r))
222
+ return JS_EXCEPTION;
223
+ for (const e of props) {
224
+ const atomValue = JS_AtomToValue(ctx, e.atom);
225
+ if (JS_IsException(atomValue))
226
+ return JS_EXCEPTION;
227
+ const desc = js_object_getOwnPropertyDescriptor(ctx, undefined, [obj, atomValue], 0);
228
+ if (JS_IsException(desc))
229
+ return JS_EXCEPTION;
230
+ if (!JS_IsUndefined(desc)) {
231
+ if (JS_DefinePropertyValue(ctx, r, e.atom, desc, JS_PROP_C_W_E | JS_PROP_THROW) < 0)
232
+ return JS_EXCEPTION;
233
+ }
234
+ }
235
+ return r;
236
+ }
237
+ export function JS_GetOwnPropertyNames2(ctx, obj1, flags, kind) {
238
+ const obj = JS_ToObject(ctx, obj1);
239
+ if (JS_IsException(obj))
240
+ return JS_EXCEPTION;
241
+ const p = obj;
242
+ const atoms = JS_GetOwnPropertyNamesInternal(ctx, p, flags & ~JS_GPN_ENUM_ONLY);
243
+ if (!atoms)
244
+ return JS_EXCEPTION;
245
+ const values = [];
246
+ for (const e of atoms) {
247
+ const atom = e.atom;
248
+ if (flags & JS_GPN_ENUM_ONLY) {
249
+ /* Check if property is still enumerable */
250
+ const desc = new_desc();
251
+ const res = JS_GetOwnPropertyInternal(ctx, desc, p, atom);
252
+ if (res < 0)
253
+ return JS_EXCEPTION;
254
+ if (!res)
255
+ continue;
256
+ if (!(desc.flags & JS_PROP_ENUMERABLE))
257
+ continue;
258
+ }
259
+ let val;
260
+ switch (kind) {
261
+ default:
262
+ case 0 /* ObjIterKind.KEY */:
263
+ val = JS_AtomToValue(ctx, atom);
264
+ if (JS_IsException(val))
265
+ return JS_EXCEPTION;
266
+ break;
267
+ case 1 /* ObjIterKind.VALUE */:
268
+ val = JS_GetProperty(ctx, obj, atom);
269
+ if (JS_IsException(val))
270
+ return JS_EXCEPTION;
271
+ break;
272
+ case 2 /* ObjIterKind.KEY_AND_VALUE */: {
273
+ const key = JS_AtomToValue(ctx, atom);
274
+ if (JS_IsException(key))
275
+ return JS_EXCEPTION;
276
+ const value = JS_GetProperty(ctx, obj, atom);
277
+ if (JS_IsException(value))
278
+ return JS_EXCEPTION;
279
+ val = js_create_array(ctx, [key, value]);
280
+ break;
281
+ }
282
+ }
283
+ values.push(val);
284
+ }
285
+ return js_create_array(ctx, values);
286
+ }
287
+ function js_object_keys(ctx, this_val, argv, kind) {
288
+ return JS_GetOwnPropertyNames2(ctx, argv[0], JS_GPN_ENUM_ONLY | JS_GPN_STRING_MASK, kind);
289
+ }
290
+ export function js_object_isExtensible(ctx, this_val, argv, reflect) {
291
+ const obj = argv[0];
292
+ if (!JS_IsObject(obj)) {
293
+ if (reflect)
294
+ return JS_ThrowTypeErrorNotAnObject(ctx);
295
+ return false;
296
+ }
297
+ const ret = JS_IsExtensible(ctx, obj);
298
+ if (ret < 0)
299
+ return JS_EXCEPTION;
300
+ return ret !== 0;
301
+ }
302
+ export function js_object_preventExtensions(ctx, this_val, argv, reflect) {
303
+ const obj = argv[0];
304
+ if (!JS_IsObject(obj)) {
305
+ if (reflect)
306
+ return JS_ThrowTypeErrorNotAnObject(ctx);
307
+ return obj;
308
+ }
309
+ const ret = JS_PreventExtensions(ctx, obj);
310
+ if (ret < 0)
311
+ return JS_EXCEPTION;
312
+ if (reflect)
313
+ return ret !== 0;
314
+ if (!ret)
315
+ return JS_ThrowTypeError(ctx, 'proxy preventExtensions handler returned false');
316
+ return obj;
317
+ }
318
+ function js_object_valueOf(ctx, this_val, argv) {
319
+ return JS_ToObject(ctx, this_val);
320
+ }
321
+ export function js_object_toString(ctx, this_val, argv) {
322
+ let tag;
323
+ if (JS_IsNull(this_val)) {
324
+ tag = 'Null';
325
+ }
326
+ else if (JS_IsUndefined(this_val)) {
327
+ tag = 'Undefined';
328
+ }
329
+ else {
330
+ const obj = JS_ToObject(ctx, this_val);
331
+ if (JS_IsException(obj))
332
+ return obj;
333
+ const is_array = JS_IsArray(ctx, obj);
334
+ if (is_array < 0)
335
+ return JS_EXCEPTION;
336
+ let atom;
337
+ if (is_array) {
338
+ atom = JS_ATOM_Array;
339
+ }
340
+ else if (JS_IsFunction(ctx, obj)) {
341
+ atom = JS_ATOM_Function;
342
+ }
343
+ else {
344
+ const p = obj;
345
+ switch (Q.JS_GetClassID(p)) {
346
+ case 5 /* JSClassID.STRING */:
347
+ case 8 /* JSClassID.ARGUMENTS */:
348
+ case 9 /* JSClassID.MAPPED_ARGUMENTS */:
349
+ case 3 /* JSClassID.ERROR */:
350
+ case 6 /* JSClassID.BOOLEAN */:
351
+ case 4 /* JSClassID.NUMBER */:
352
+ case 10 /* JSClassID.DATE */:
353
+ case 18 /* JSClassID.REGEXP */:
354
+ atom = ctx.rt.class_array[Q.JS_GetClassID(p)].class_name;
355
+ break;
356
+ default:
357
+ atom = JS_ATOM_Object;
358
+ break;
359
+ }
360
+ }
361
+ tag = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_toStringTag);
362
+ if (JS_IsException(tag))
363
+ return JS_EXCEPTION;
364
+ if (typeof tag !== 'string')
365
+ tag = JS_AtomToString(ctx, atom);
366
+ }
367
+ return '[object ' + tag + ']';
368
+ }
369
+ function js_object_toLocaleString(ctx, this_val, argv) {
370
+ return JS_Invoke(ctx, this_val, JS_ATOM_toString, []);
371
+ }
372
+ function js_object_fromEntries(ctx, this_val, argv) {
373
+ /* RequireObjectCoercible() not necessary because it is tested in
374
+ JS_GetIterator() by JS_GetProperty() */
375
+ const iterable = argv[0];
376
+ const obj = JS_NewObject(ctx);
377
+ if (JS_IsException(obj))
378
+ return obj;
379
+ const iter = JS_GetIterator(ctx, iterable, false);
380
+ if (JS_IsException(iter))
381
+ return JS_EXCEPTION;
382
+ const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);
383
+ if (JS_IsException(next_method)) {
384
+ JS_IteratorClose(ctx, iter, true);
385
+ return JS_EXCEPTION;
386
+ }
387
+ const pdone = { done: 0 };
388
+ for (;;) {
389
+ const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);
390
+ if (JS_IsException(item))
391
+ return JS_EXCEPTION;
392
+ if (pdone.done)
393
+ break;
394
+ if (!JS_IsObject(item)) {
395
+ JS_ThrowTypeErrorNotAnObject(ctx);
396
+ JS_IteratorClose(ctx, iter, true);
397
+ return JS_EXCEPTION;
398
+ }
399
+ const key = JS_GetPropertyUint32(ctx, item, 0);
400
+ if (JS_IsException(key)) {
401
+ JS_IteratorClose(ctx, iter, true);
402
+ return JS_EXCEPTION;
403
+ }
404
+ const value = JS_GetPropertyUint32(ctx, item, 1);
405
+ if (JS_IsException(value)) {
406
+ JS_IteratorClose(ctx, iter, true);
407
+ return JS_EXCEPTION;
408
+ }
409
+ if (JS_DefinePropertyValueValue(ctx, obj, key, value, JS_PROP_C_W_E | JS_PROP_THROW) < 0) {
410
+ JS_IteratorClose(ctx, iter, true);
411
+ return JS_EXCEPTION;
412
+ }
413
+ }
414
+ return obj;
415
+ }
416
+ /* __getClass is a debugging helper exposed by QuickJS */
417
+ function js_object___getClass(ctx, this_val, argv) {
418
+ let atom;
419
+ const v = argv[0];
420
+ if (Q.JS_IsObject(v)) {
421
+ let class_id = Q.JS_GetClassID(v);
422
+ if (class_id === 44 /* JSClassID.PROXY */ && JS_IsFunction(ctx, v))
423
+ class_id = 13 /* JSClassID.BYTECODE_FUNCTION */;
424
+ atom = ctx.rt.class_array[class_id].class_name;
425
+ }
426
+ else {
427
+ atom = JS_ATOM_empty_string;
428
+ }
429
+ return JS_AtomToString(ctx, atom);
430
+ }
431
+ /* append 'v' at the end of the array 'arr' (js_array_push() in C) */
432
+ function array_append(ctx, arr, v) {
433
+ const len = js_get_length64(ctx, arr);
434
+ if (len < 0)
435
+ return -1;
436
+ return JS_DefinePropertyValueInt64(ctx, arr, len, v, JS_PROP_C_W_E | JS_PROP_THROW);
437
+ }
438
+ /* Object.groupBy (is_map = 0). Map.groupBy (is_map = 1) lives in mapset.ts */
439
+ function js_object_groupBy(ctx, this_val, argv, is_map) {
440
+ // "is function?" check must be observed before argv[0] is accessed
441
+ const cb = argv[1];
442
+ if (check_function(ctx, cb))
443
+ return JS_EXCEPTION;
444
+ const iter = JS_GetIterator(ctx, argv[0], false);
445
+ if (JS_IsException(iter))
446
+ return JS_EXCEPTION;
447
+ const next = JS_GetProperty(ctx, iter, JS_ATOM_next);
448
+ if (JS_IsException(next))
449
+ return JS_EXCEPTION;
450
+ const groups = JS_NewObjectProto(ctx, null);
451
+ if (JS_IsException(groups))
452
+ return JS_EXCEPTION;
453
+ const pdone = { done: 0 };
454
+ for (let idx = 0;; idx++) {
455
+ if (idx >= MAX_SAFE_INTEGER) {
456
+ JS_ThrowTypeError(ctx, 'too many elements');
457
+ JS_IteratorClose(ctx, iter, true);
458
+ return JS_EXCEPTION;
459
+ }
460
+ const v = JS_IteratorNext(ctx, iter, next, [], pdone);
461
+ if (JS_IsException(v))
462
+ return JS_EXCEPTION;
463
+ if (pdone.done)
464
+ break; // v is JS_UNDEFINED
465
+ const key = JS_Call(ctx, cb, ctx.global_obj, [v, idx]);
466
+ if (JS_IsException(key)) {
467
+ JS_IteratorClose(ctx, iter, true);
468
+ return JS_EXCEPTION;
469
+ }
470
+ const key_atom = JS_ValueToAtom(ctx, key);
471
+ if (key_atom === JS_ATOM_NULL) {
472
+ JS_IteratorClose(ctx, iter, true);
473
+ return JS_EXCEPTION;
474
+ }
475
+ let prop = JS_GetProperty(ctx, groups, key_atom);
476
+ if (JS_IsException(prop))
477
+ return JS_EXCEPTION;
478
+ if (JS_IsUndefined(prop)) {
479
+ prop = JS_NewArray(ctx);
480
+ if (JS_IsException(prop))
481
+ return JS_EXCEPTION;
482
+ if (JS_DefinePropertyValue(ctx, groups, key_atom, prop, JS_PROP_C_W_E) < 0)
483
+ return JS_EXCEPTION;
484
+ }
485
+ if (array_append(ctx, prop, v) < 0)
486
+ return JS_EXCEPTION;
487
+ }
488
+ return groups;
489
+ }
490
+ function js_object_get___proto__(ctx, this_val) {
491
+ const val = JS_ToObject(ctx, this_val);
492
+ if (JS_IsException(val))
493
+ return val;
494
+ return JS_GetPrototype(ctx, val);
495
+ }
496
+ function js_object_set___proto__(ctx, this_val, proto) {
497
+ if (JS_IsUndefined(this_val) || JS_IsNull(this_val))
498
+ return JS_ThrowTypeErrorNotAnObject(ctx);
499
+ if (!JS_IsObject(proto) && !JS_IsNull(proto))
500
+ return undefined;
501
+ if (js_set_prototype_internal(ctx, this_val, proto, true) < 0)
502
+ return JS_EXCEPTION;
503
+ return undefined;
504
+ }
505
+ /* magic = 1 for __lookupSetter__ */
506
+ function js_object___lookupGetter__(ctx, this_val, argv, setter) {
507
+ let obj = JS_ToObject(ctx, this_val);
508
+ if (JS_IsException(obj))
509
+ return JS_EXCEPTION;
510
+ const prop = JS_ValueToAtom(ctx, argv[0]);
511
+ if (prop === JS_ATOM_NULL)
512
+ return JS_EXCEPTION;
513
+ for (;;) {
514
+ const desc = new_desc();
515
+ const has_prop = JS_GetOwnPropertyInternal(ctx, desc, obj, prop);
516
+ if (has_prop < 0)
517
+ return JS_EXCEPTION;
518
+ if (has_prop) {
519
+ if (desc.flags & JS_PROP_GETSET)
520
+ return setter ? desc.setter : desc.getter;
521
+ return undefined;
522
+ }
523
+ obj = JS_GetPrototype(ctx, obj);
524
+ if (JS_IsException(obj))
525
+ return JS_EXCEPTION;
526
+ if (JS_IsNull(obj))
527
+ return undefined;
528
+ }
529
+ }
530
+ const js_object_funcs = [
531
+ JS_CFUNC_DEF('create', 2, js_object_create),
532
+ JS_CFUNC_MAGIC_DEF('getPrototypeOf', 1, js_object_getPrototypeOf, 0),
533
+ JS_NATIVE_DEF('setPrototypeOf', 2, Object.setPrototypeOf),
534
+ JS_CFUNC_MAGIC_DEF('defineProperty', 3, js_object_defineProperty, 0),
535
+ JS_CFUNC_DEF('defineProperties', 2, js_object_defineProperties),
536
+ JS_NATIVE_DEF('getOwnPropertyNames', 1, Object.getOwnPropertyNames, fix_array),
537
+ JS_NATIVE_DEF('getOwnPropertySymbols', 1, Object.getOwnPropertySymbols, fix_array),
538
+ JS_CFUNC_MAGIC_DEF('groupBy', 2, js_object_groupBy, 0),
539
+ JS_NATIVE_DEF('keys', 1, Object.keys, fix_array),
540
+ JS_NATIVE_DEF('values', 1, Object.values, fix_array),
541
+ JS_NATIVE_DEF('entries', 1, Object.entries, fix_entries),
542
+ JS_NATIVE_DEF('isExtensible', 1, Object.isExtensible),
543
+ JS_NATIVE_DEF('preventExtensions', 1, Object.preventExtensions),
544
+ JS_CFUNC_MAGIC_DEF('getOwnPropertyDescriptor', 2, js_object_getOwnPropertyDescriptor, 0),
545
+ JS_CFUNC_DEF('getOwnPropertyDescriptors', 1, js_object_getOwnPropertyDescriptors),
546
+ JS_NATIVE_DEF('is', 2, Object.is),
547
+ JS_NATIVE_DEF('assign', 2, Object.assign, fix_any),
548
+ JS_NATIVE_DEF('seal', 1, Object.seal),
549
+ JS_NATIVE_DEF('freeze', 1, Object.freeze),
550
+ JS_NATIVE_DEF('isSealed', 1, Object.isSealed),
551
+ JS_NATIVE_DEF('isFrozen', 1, Object.isFrozen),
552
+ JS_CFUNC_DEF('__getClass', 1, js_object___getClass),
553
+ JS_CFUNC_DEF('fromEntries', 1, js_object_fromEntries),
554
+ JS_NATIVE_DEF('hasOwn', 2, Object.hasOwn),
555
+ ];
556
+ const js_object_proto_funcs = [
557
+ JS_CFUNC_DEF('toString', 0, js_object_toString),
558
+ JS_CFUNC_DEF('toLocaleString', 0, js_object_toLocaleString),
559
+ JS_CFUNC_DEF('valueOf', 0, js_object_valueOf),
560
+ JS_NATIVE_DEF('hasOwnProperty', 1, Object.prototype.hasOwnProperty),
561
+ JS_NATIVE_DEF('isPrototypeOf', 1, Object.prototype.isPrototypeOf),
562
+ JS_NATIVE_DEF('propertyIsEnumerable', 1, Object.prototype.propertyIsEnumerable),
563
+ JS_CGETSET_DEF(JS_ATOM___proto__, js_object_get___proto__, js_object_set___proto__),
564
+ JS_CFUNC_MAGIC_DEF('__defineGetter__', 2, js_object___defineGetter__, 0),
565
+ JS_CFUNC_MAGIC_DEF('__defineSetter__', 2, js_object___defineGetter__, 1),
566
+ JS_CFUNC_MAGIC_DEF('__lookupGetter__', 1, js_object___lookupGetter__, 0),
567
+ JS_CFUNC_MAGIC_DEF('__lookupSetter__', 1, js_object___lookupGetter__, 1),
568
+ ];
569
+ export function JS_AddIntrinsicObject(ctx) {
570
+ /* Object */
571
+ const obj = JS_NewGlobalCConstructor(ctx, 'Object', js_object_constructor, 1, ctx.class_proto[1 /* JSClassID.OBJECT */]);
572
+ JS_SetPropertyFunctionList(ctx, obj, js_object_funcs);
573
+ JS_SetPropertyFunctionList(ctx, ctx.class_proto[1 /* JSClassID.OBJECT */], js_object_proto_funcs);
574
+ }
575
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/builtins/object.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Object objects (port of the Object part of quickjs.c)\n */\nimport * as Q from '../quickjs.ts';\nimport {\n JSContext, JSValue, JSObject, JSClassID, JSAtom, JSPropertyDescriptor, JS_EXCEPTION, JS_IsException, JS_IsUndefined,\n JS_IsNull, JS_IsObject, JS_IsFunction, JS_IsArray, JS_NewObject, JS_NewObjectProto, JS_NewArray, js_create_array,\n JS_ToObject, JS_ValueToAtom, JS_ATOM_NULL, JS_AtomToValue, JS_AtomToString, JS_GetProperty, JS_GetPropertyUint32,\n JS_GetPropertyInt64, JS_GetPrototype, JS_SetPrototypeInternal, JS_IsExtensible, JS_PreventExtensions,\n JS_GetOwnPropertyInternal, JS_GetOwnPropertyNamesInternal, JS_DefineProperty, JS_DefinePropertyValue,\n JS_DefinePropertyValueValue, JS_DefinePropertyValueInt64, js_obj_to_desc, new_desc, js_create_from_ctor,\n js_get_length64, JS_CopyDataProperties, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_Call, JS_Invoke,\n js_same_value, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_NewGlobalCConstructor,\n JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_NATIVE_DEF, JS_CFUNC_MAGIC_DEF, JS_CGETSET_DEF,\n JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE, JS_PROP_C_W_E, JS_PROP_GETSET, JS_PROP_THROW,\n JS_PROP_HAS_CONFIGURABLE, JS_PROP_HAS_WRITABLE, JS_PROP_HAS_ENUMERABLE, JS_PROP_HAS_GET, JS_PROP_HAS_SET,\n JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_GPN_ENUM_ONLY,\n JS_ATOM_Array, JS_ATOM_Function, JS_ATOM_Object, JS_ATOM_Symbol_toStringTag, JS_ATOM_toString, JS_ATOM_next,\n JS_ATOM_get, JS_ATOM_set, JS_ATOM_value, JS_ATOM_writable, JS_ATOM_enumerable, JS_ATOM_configurable,\n JS_ATOM_empty_string, JS_ATOM___proto__,\n} from '../quickjs.ts';\nimport { fix_any, fix_array, fix_entries } from './native.ts';\n\n/* same values as JSIteratorKind in builtins/index.ts (JS_ITERATOR_KIND_xxx in C) */\nconst enum ObjIterKind { KEY, VALUE, KEY_AND_VALUE }\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\n/* check_function() in C */\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\n/* JS_GetActiveFunction() in C */\nfunction JS_GetActiveFunction(ctx: JSContext): JSValue {\n return ctx.rt.current_stack_frame ? ctx.rt.current_stack_frame.cur_func : undefined;\n}\n\nexport function JS_DefinePropertyDesc(ctx: JSContext, obj: JSValue, prop: JSAtom, desc: JSValue, flags: number): number {\n const d = new_desc();\n if (js_obj_to_desc(ctx, d, desc) < 0) return -1;\n return JS_DefineProperty(ctx, obj, prop, d.value, d.getter, d.setter, d.flags | flags);\n}\n\nexport function JS_ObjectDefineProperties(ctx: JSContext, obj: JSValue, properties: JSValue): number {\n if (!JS_IsObject(obj)) {\n JS_ThrowTypeErrorNotAnObject(ctx);\n return -1;\n }\n const props = JS_ToObject(ctx, properties);\n if (JS_IsException(props)) return -1;\n const p = props as JSObject;\n /* XXX: not done in the same order as the spec */\n const atoms = JS_GetOwnPropertyNamesInternal(ctx, p, JS_GPN_ENUM_ONLY | JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK);\n if (!atoms) return -1;\n for (const e of atoms) {\n const desc = JS_GetProperty(ctx, props, e.atom);\n if (JS_IsException(desc)) return -1;\n if (JS_DefinePropertyDesc(ctx, obj, e.atom, desc, JS_PROP_THROW) < 0) return -1;\n }\n return 0;\n}\n\nfunction js_object_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsUndefined(new_target) && new_target !== JS_GetActiveFunction(ctx)) {\n return js_create_from_ctor(ctx, new_target, JSClassID.OBJECT);\n }\n const v = argv[0];\n if (v === null || v === undefined) return JS_NewObject(ctx);\n return JS_ToObject(ctx, v);\n}\n\nfunction js_object_create(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const proto = argv[0];\n if (!JS_IsObject(proto) && !JS_IsNull(proto)) return JS_ThrowTypeError(ctx, 'not a prototype');\n const obj = JS_NewObjectProto(ctx, proto);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n const props = argv[1];\n if (!JS_IsUndefined(props)) {\n if (JS_ObjectDefineProperties(ctx, obj, props)) return JS_EXCEPTION;\n }\n return obj;\n}\n\nexport function js_object_getPrototypeOf(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const val = argv[0];\n if (!JS_IsObject(val)) {\n /* ES6 feature non compatible with ES5.1: primitive types are accepted */\n if (magic || JS_IsNull(val) || JS_IsUndefined(val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n }\n return JS_GetPrototype(ctx, val);\n}\n\n/* Wrapper around the core JS_SetPrototypeInternal reproducing the argument\n checks of the C version: a non object/null prototype is always a\n TypeError, a non object target is a TypeError unless throw_flag is set\n (then primitives are accepted), and a proxy trap returning false in\n throw mode is a TypeError. */\nexport function js_set_prototype_internal(ctx: JSContext, obj: JSValue, proto_val: JSValue, throw_flag: boolean): number {\n if (throw_flag) {\n if (JS_IsNull(obj) || JS_IsUndefined(obj)) { JS_ThrowTypeErrorNotAnObject(ctx); return -1; }\n } else {\n if (!JS_IsObject(obj)) { JS_ThrowTypeErrorNotAnObject(ctx); return -1; }\n }\n if (!JS_IsObject(proto_val) && !JS_IsNull(proto_val)) { JS_ThrowTypeErrorNotAnObject(ctx); return -1; }\n const ret = JS_SetPrototypeInternal(ctx, obj, proto_val, throw_flag);\n if (ret === 0 && throw_flag) {\n /* only a proxy setPrototypeOf trap can return false here without\n having thrown already */\n JS_ThrowTypeError(ctx, 'proxy: bad prototype');\n return -1;\n }\n return ret;\n}\n\n/* magic = 1 if called as Reflect.defineProperty */\nexport function js_object_defineProperty(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n const desc = argv[2];\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 let flags = 0;\n if (!magic) flags |= JS_PROP_THROW;\n const ret = JS_DefinePropertyDesc(ctx, obj, atom, desc, flags);\n if (ret < 0) return JS_EXCEPTION;\n if (magic) return ret !== 0;\n return obj;\n}\n\nfunction js_object_defineProperties(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n // defineProperties(obj, properties)\n const obj = argv[0];\n if (JS_ObjectDefineProperties(ctx, obj, argv[1])) return JS_EXCEPTION;\n return obj;\n}\n\n/* magic = 1 if called as __defineSetter__ */\nfunction js_object___defineGetter__(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const prop = argv[0];\n const value = argv[1];\n const obj = JS_ToObject(ctx, this_val);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n if (check_function(ctx, value)) return JS_EXCEPTION;\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n let flags = JS_PROP_THROW | JS_PROP_HAS_ENUMERABLE | JS_PROP_ENUMERABLE | JS_PROP_HAS_CONFIGURABLE | JS_PROP_CONFIGURABLE;\n let get: JSValue, set: JSValue;\n if (magic) {\n get = undefined;\n set = value;\n flags |= JS_PROP_HAS_SET;\n } else {\n get = value;\n set = undefined;\n flags |= JS_PROP_HAS_GET;\n }\n const ret = JS_DefineProperty(ctx, obj, atom, undefined, get, set, flags);\n if (ret < 0) return JS_EXCEPTION;\n return undefined;\n}\n\nexport function js_object_getOwnPropertyDescriptor(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n let obj: JSValue;\n if (magic) {\n /* Reflect.getOwnPropertyDescriptor case */\n if (!JS_IsObject(argv[0])) return JS_ThrowTypeErrorNotAnObject(ctx);\n obj = argv[0];\n } else {\n obj = JS_ToObject(ctx, argv[0]);\n if (JS_IsException(obj)) return obj;\n }\n const prop = argv[1];\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n let ret: JSValue = undefined;\n if (JS_IsObject(obj)) {\n const desc = new_desc();\n const res = JS_GetOwnPropertyInternal(ctx, desc, obj, atom);\n if (res < 0) return JS_EXCEPTION;\n if (res) {\n ret = JS_NewObject(ctx);\n if (JS_IsException(ret)) return JS_EXCEPTION;\n const flags = JS_PROP_C_W_E | JS_PROP_THROW;\n if (desc.flags & JS_PROP_GETSET) {\n if (JS_DefinePropertyValue(ctx, ret, JS_ATOM_get, desc.getter, flags) < 0 ||\n JS_DefinePropertyValue(ctx, ret, JS_ATOM_set, desc.setter, flags) < 0) return JS_EXCEPTION;\n } else {\n if (JS_DefinePropertyValue(ctx, ret, JS_ATOM_value, desc.value, flags) < 0 ||\n JS_DefinePropertyValue(ctx, ret, JS_ATOM_writable, (desc.flags & JS_PROP_WRITABLE) !== 0, flags) < 0) return JS_EXCEPTION;\n }\n if (JS_DefinePropertyValue(ctx, ret, JS_ATOM_enumerable, (desc.flags & JS_PROP_ENUMERABLE) !== 0, flags) < 0 ||\n JS_DefinePropertyValue(ctx, ret, JS_ATOM_configurable, (desc.flags & JS_PROP_CONFIGURABLE) !== 0, flags) < 0) return JS_EXCEPTION;\n }\n }\n return ret;\n}\n\nfunction js_object_getOwnPropertyDescriptors(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n //getOwnPropertyDescriptors(obj)\n const obj = JS_ToObject(ctx, argv[0]);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n const p = obj as JSObject;\n const props = JS_GetOwnPropertyNamesInternal(ctx, p, JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK);\n if (!props) return JS_EXCEPTION;\n const r = JS_NewObject(ctx);\n if (JS_IsException(r)) return JS_EXCEPTION;\n for (const e of props) {\n const atomValue = JS_AtomToValue(ctx, e.atom);\n if (JS_IsException(atomValue)) return JS_EXCEPTION;\n const desc = js_object_getOwnPropertyDescriptor(ctx, undefined, [obj, atomValue], 0);\n if (JS_IsException(desc)) return JS_EXCEPTION;\n if (!JS_IsUndefined(desc)) {\n if (JS_DefinePropertyValue(ctx, r, e.atom, desc, JS_PROP_C_W_E | JS_PROP_THROW) < 0) return JS_EXCEPTION;\n }\n }\n return r;\n}\n\nexport function JS_GetOwnPropertyNames2(ctx: JSContext, obj1: JSValue, flags: number, kind: number): JSValue {\n const obj = JS_ToObject(ctx, obj1);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n const p = obj as JSObject;\n const atoms = JS_GetOwnPropertyNamesInternal(ctx, p, flags & ~JS_GPN_ENUM_ONLY);\n if (!atoms) return JS_EXCEPTION;\n const values: JSValue[] = [];\n for (const e of atoms) {\n const atom = e.atom;\n if (flags & JS_GPN_ENUM_ONLY) {\n /* Check if property is still enumerable */\n const desc = new_desc();\n const res = JS_GetOwnPropertyInternal(ctx, desc, p, atom);\n if (res < 0) return JS_EXCEPTION;\n if (!res) continue;\n if (!(desc.flags & JS_PROP_ENUMERABLE)) continue;\n }\n let val: JSValue;\n switch (kind) {\n default:\n case ObjIterKind.KEY:\n val = JS_AtomToValue(ctx, atom);\n if (JS_IsException(val)) return JS_EXCEPTION;\n break;\n case ObjIterKind.VALUE:\n val = JS_GetProperty(ctx, obj, atom);\n if (JS_IsException(val)) return JS_EXCEPTION;\n break;\n case ObjIterKind.KEY_AND_VALUE: {\n const key = JS_AtomToValue(ctx, atom);\n if (JS_IsException(key)) return JS_EXCEPTION;\n const value = JS_GetProperty(ctx, obj, atom);\n if (JS_IsException(value)) return JS_EXCEPTION;\n val = js_create_array(ctx, [key, value]);\n break;\n }\n }\n values.push(val);\n }\n return js_create_array(ctx, values);\n}\n\nfunction js_object_keys(ctx: JSContext, this_val: JSValue, argv: JSValue[], kind: number): JSValue {\n return JS_GetOwnPropertyNames2(ctx, argv[0], JS_GPN_ENUM_ONLY | JS_GPN_STRING_MASK, kind);\n}\n\nexport function js_object_isExtensible(ctx: JSContext, this_val: JSValue, argv: JSValue[], reflect: number): JSValue {\n const obj = argv[0];\n if (!JS_IsObject(obj)) {\n if (reflect) return JS_ThrowTypeErrorNotAnObject(ctx);\n return false;\n }\n const ret = JS_IsExtensible(ctx, obj);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nexport function js_object_preventExtensions(ctx: JSContext, this_val: JSValue, argv: JSValue[], reflect: number): JSValue {\n const obj = argv[0];\n if (!JS_IsObject(obj)) {\n if (reflect) return JS_ThrowTypeErrorNotAnObject(ctx);\n return obj;\n }\n const ret = JS_PreventExtensions(ctx, obj);\n if (ret < 0) return JS_EXCEPTION;\n if (reflect) return ret !== 0;\n if (!ret) return JS_ThrowTypeError(ctx, 'proxy preventExtensions handler returned false');\n return obj;\n}\n\nfunction js_object_valueOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return JS_ToObject(ctx, this_val);\n}\n\nexport function js_object_toString(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n let tag: JSValue;\n if (JS_IsNull(this_val)) {\n tag = 'Null';\n } else if (JS_IsUndefined(this_val)) {\n tag = 'Undefined';\n } else {\n const obj = JS_ToObject(ctx, this_val);\n if (JS_IsException(obj)) return obj;\n const is_array = JS_IsArray(ctx, obj);\n if (is_array < 0) return JS_EXCEPTION;\n let atom: JSAtom;\n if (is_array) {\n atom = JS_ATOM_Array;\n } else if (JS_IsFunction(ctx, obj)) {\n atom = JS_ATOM_Function;\n } else {\n const p = obj as JSObject;\n switch (Q.JS_GetClassID(p)) {\n case JSClassID.STRING:\n case JSClassID.ARGUMENTS:\n case JSClassID.MAPPED_ARGUMENTS:\n case JSClassID.ERROR:\n case JSClassID.BOOLEAN:\n case JSClassID.NUMBER:\n case JSClassID.DATE:\n case JSClassID.REGEXP:\n atom = ctx.rt.class_array[Q.JS_GetClassID(p)]!.class_name;\n break;\n default:\n atom = JS_ATOM_Object;\n break;\n }\n }\n tag = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_toStringTag);\n if (JS_IsException(tag)) return JS_EXCEPTION;\n if (typeof tag !== 'string') tag = JS_AtomToString(ctx, atom);\n }\n return '[object ' + (tag as string) + ']';\n}\n\nfunction js_object_toLocaleString(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return JS_Invoke(ctx, this_val, JS_ATOM_toString, []);\n}\n\nfunction js_object_fromEntries(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n /* RequireObjectCoercible() not necessary because it is tested in\n JS_GetIterator() by JS_GetProperty() */\n const iterable = argv[0];\n const obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return obj;\n const iter = JS_GetIterator(ctx, iterable, 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)) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\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 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)) { JS_IteratorClose(ctx, iter, true); return JS_EXCEPTION; }\n const value = JS_GetPropertyUint32(ctx, item, 1);\n if (JS_IsException(value)) { JS_IteratorClose(ctx, iter, true); return JS_EXCEPTION; }\n if (JS_DefinePropertyValueValue(ctx, obj, key, value, JS_PROP_C_W_E | JS_PROP_THROW) < 0) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n }\n return obj;\n}\n\n/* __getClass is a debugging helper exposed by QuickJS */\nfunction js_object___getClass(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n let atom: JSAtom;\n const v = argv[0];\n if (Q.JS_IsObject(v)) {\n let class_id = Q.JS_GetClassID(v);\n if (class_id === JSClassID.PROXY && JS_IsFunction(ctx, v)) class_id = JSClassID.BYTECODE_FUNCTION;\n atom = ctx.rt.class_array[class_id]!.class_name;\n } else {\n atom = JS_ATOM_empty_string;\n }\n return JS_AtomToString(ctx, atom);\n}\n\n/* append 'v' at the end of the array 'arr' (js_array_push() in C) */\nfunction array_append(ctx: JSContext, arr: JSValue, v: JSValue): number {\n const len = js_get_length64(ctx, arr);\n if (len < 0) return -1;\n return JS_DefinePropertyValueInt64(ctx, arr, len, v, JS_PROP_C_W_E | JS_PROP_THROW);\n}\n\n/* Object.groupBy (is_map = 0). Map.groupBy (is_map = 1) lives in mapset.ts */\nfunction js_object_groupBy(ctx: JSContext, this_val: JSValue, argv: JSValue[], is_map: number): 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 const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return JS_EXCEPTION;\n const next = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next)) return JS_EXCEPTION;\n const groups = JS_NewObjectProto(ctx, null);\n if (JS_IsException(groups)) return JS_EXCEPTION;\n const pdone = { done: 0 };\n for (let idx = 0; ; idx++) {\n if (idx >= 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 const 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 const key_atom = JS_ValueToAtom(ctx, key);\n if (key_atom === JS_ATOM_NULL) {\n JS_IteratorClose(ctx, iter, true);\n return JS_EXCEPTION;\n }\n let prop = JS_GetProperty(ctx, groups, key_atom);\n if (JS_IsException(prop)) return JS_EXCEPTION;\n if (JS_IsUndefined(prop)) {\n prop = JS_NewArray(ctx);\n if (JS_IsException(prop)) return JS_EXCEPTION;\n if (JS_DefinePropertyValue(ctx, groups, key_atom, prop, JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n }\n if (array_append(ctx, prop, v) < 0) return JS_EXCEPTION;\n }\n return groups;\n}\n\nfunction js_object_get___proto__(ctx: JSContext, this_val: JSValue): JSValue {\n const val = JS_ToObject(ctx, this_val);\n if (JS_IsException(val)) return val;\n return JS_GetPrototype(ctx, val);\n}\n\nfunction js_object_set___proto__(ctx: JSContext, this_val: JSValue, proto: JSValue): JSValue {\n if (JS_IsUndefined(this_val) || JS_IsNull(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n if (!JS_IsObject(proto) && !JS_IsNull(proto)) return undefined;\n if (js_set_prototype_internal(ctx, this_val, proto, true) < 0) return JS_EXCEPTION;\n return undefined;\n}\n\n/* magic = 1 for __lookupSetter__ */\nfunction js_object___lookupGetter__(ctx: JSContext, this_val: JSValue, argv: JSValue[], setter: number): JSValue {\n let obj = JS_ToObject(ctx, this_val);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n const prop = JS_ValueToAtom(ctx, argv[0]);\n if (prop === JS_ATOM_NULL) return JS_EXCEPTION;\n for (;;) {\n const desc = new_desc();\n const has_prop = JS_GetOwnPropertyInternal(ctx, desc, obj as JSObject, prop);\n if (has_prop < 0) return JS_EXCEPTION;\n if (has_prop) {\n if (desc.flags & JS_PROP_GETSET) return setter ? desc.setter : desc.getter;\n return undefined;\n }\n obj = JS_GetPrototype(ctx, obj);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n if (JS_IsNull(obj)) return undefined;\n }\n}\n\nconst js_object_funcs = [\n JS_CFUNC_DEF('create', 2, js_object_create),\n JS_CFUNC_MAGIC_DEF('getPrototypeOf', 1, js_object_getPrototypeOf, 0),\n JS_NATIVE_DEF('setPrototypeOf', 2, Object.setPrototypeOf),\n JS_CFUNC_MAGIC_DEF('defineProperty', 3, js_object_defineProperty, 0),\n JS_CFUNC_DEF('defineProperties', 2, js_object_defineProperties),\n JS_NATIVE_DEF('getOwnPropertyNames', 1, Object.getOwnPropertyNames, fix_array),\n JS_NATIVE_DEF('getOwnPropertySymbols', 1, Object.getOwnPropertySymbols, fix_array),\n JS_CFUNC_MAGIC_DEF('groupBy', 2, js_object_groupBy, 0),\n JS_NATIVE_DEF('keys', 1, Object.keys, fix_array),\n JS_NATIVE_DEF('values', 1, Object.values, fix_array),\n JS_NATIVE_DEF('entries', 1, Object.entries, fix_entries),\n JS_NATIVE_DEF('isExtensible', 1, Object.isExtensible),\n JS_NATIVE_DEF('preventExtensions', 1, Object.preventExtensions),\n JS_CFUNC_MAGIC_DEF('getOwnPropertyDescriptor', 2, js_object_getOwnPropertyDescriptor, 0),\n JS_CFUNC_DEF('getOwnPropertyDescriptors', 1, js_object_getOwnPropertyDescriptors),\n JS_NATIVE_DEF('is', 2, Object.is),\n JS_NATIVE_DEF('assign', 2, Object.assign, fix_any),\n JS_NATIVE_DEF('seal', 1, Object.seal),\n JS_NATIVE_DEF('freeze', 1, Object.freeze),\n JS_NATIVE_DEF('isSealed', 1, Object.isSealed),\n JS_NATIVE_DEF('isFrozen', 1, Object.isFrozen),\n JS_CFUNC_DEF('__getClass', 1, js_object___getClass),\n JS_CFUNC_DEF('fromEntries', 1, js_object_fromEntries),\n JS_NATIVE_DEF('hasOwn', 2, Object.hasOwn),\n];\n\nconst js_object_proto_funcs = [\n JS_CFUNC_DEF('toString', 0, js_object_toString),\n JS_CFUNC_DEF('toLocaleString', 0, js_object_toLocaleString),\n JS_CFUNC_DEF('valueOf', 0, js_object_valueOf),\n JS_NATIVE_DEF('hasOwnProperty', 1, Object.prototype.hasOwnProperty),\n JS_NATIVE_DEF('isPrototypeOf', 1, Object.prototype.isPrototypeOf),\n JS_NATIVE_DEF('propertyIsEnumerable', 1, Object.prototype.propertyIsEnumerable),\n JS_CGETSET_DEF(JS_ATOM___proto__, js_object_get___proto__, js_object_set___proto__),\n JS_CFUNC_MAGIC_DEF('__defineGetter__', 2, js_object___defineGetter__, 0),\n JS_CFUNC_MAGIC_DEF('__defineSetter__', 2, js_object___defineGetter__, 1),\n JS_CFUNC_MAGIC_DEF('__lookupGetter__', 1, js_object___lookupGetter__, 0),\n JS_CFUNC_MAGIC_DEF('__lookupSetter__', 1, js_object___lookupGetter__, 1),\n];\n\nexport function JS_AddIntrinsicObject(ctx: JSContext): void {\n /* Object */\n const obj = JS_NewGlobalCConstructor(ctx, 'Object', js_object_constructor, 1, ctx.class_proto[JSClassID.OBJECT]);\n JS_SetPropertyFunctionList(ctx, obj, js_object_funcs);\n JS_SetPropertyFunctionList(ctx, ctx.class_proto[JSClassID.OBJECT], js_object_proto_funcs);\n}\n"]}