jseption 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -4
- package/dist/atoms.d.ts +1 -0
- package/dist/atoms.js +2 -1
- package/dist/atoms.js.map +1 -1
- package/dist/builtins/base64.d.ts +14 -0
- package/dist/builtins/base64.js +219 -0
- package/dist/builtins/base64.js.map +1 -0
- package/dist/builtins/bigint.js +3 -3
- package/dist/builtins/bigint.js.map +1 -1
- package/dist/builtins/date.d.ts +1 -0
- package/dist/builtins/date.js +26 -12
- package/dist/builtins/date.js.map +1 -1
- package/dist/builtins/error.js +9 -0
- package/dist/builtins/error.js.map +1 -1
- package/dist/builtins/float16.d.ts +3 -0
- package/dist/builtins/float16.js +69 -0
- package/dist/builtins/float16.js.map +1 -0
- package/dist/builtins/function.js +2 -2
- package/dist/builtins/index.js +9 -6
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/iterator.d.ts +2 -0
- package/dist/builtins/iterator.js +624 -0
- package/dist/builtins/iterator.js.map +1 -0
- package/dist/builtins/json.d.ts +13 -1
- package/dist/builtins/json.js +283 -211
- package/dist/builtins/json.js.map +1 -1
- package/dist/builtins/mapset.js +365 -6
- package/dist/builtins/mapset.js.map +1 -1
- package/dist/builtins/math.js +203 -3
- package/dist/builtins/math.js.map +1 -1
- package/dist/builtins/native.js +6 -6
- package/dist/builtins/object.js +9 -2
- package/dist/builtins/object.js.map +1 -1
- package/dist/builtins/promise.js +31 -11
- package/dist/builtins/promise.js.map +1 -1
- package/dist/builtins/proxy.js +2 -2
- package/dist/builtins/reflect.js +6 -2
- package/dist/builtins/reflect.js.map +1 -1
- package/dist/builtins/regexp.js +74 -3
- package/dist/builtins/regexp.js.map +1 -1
- package/dist/builtins/string.js +1 -1
- package/dist/builtins/symbol.js +1 -1
- package/dist/builtins/symbol.js.map +1 -1
- package/dist/builtins/typedarray.d.ts +1 -0
- package/dist/builtins/typedarray.js +302 -32
- package/dist/builtins/typedarray.js.map +1 -1
- package/dist/builtins/weakref.js +7 -7
- package/dist/embed.js +3 -3
- package/dist/interpreter.js +15 -14
- package/dist/interpreter.js.map +1 -1
- package/dist/jit.d.ts +1 -0
- package/dist/jit.js +51 -13
- package/dist/jit.js.map +1 -1
- package/dist/jit_hook.d.ts +1 -0
- package/dist/jit_hook.js.map +1 -1
- package/dist/jit_runtime.d.ts +1 -1
- package/dist/jit_runtime.js +6 -6
- package/dist/jit_runtime.js.map +1 -1
- package/dist/jit_stack.d.ts +1 -0
- package/dist/jit_stack.js +2 -1
- package/dist/jit_stack.js.map +1 -1
- package/dist/jseption.d.ts +2 -0
- package/dist/jseption.js +1 -0
- package/dist/jseption.js.map +1 -1
- package/dist/membrane.js +1 -1
- package/dist/module.js +5 -3
- package/dist/module.js.map +1 -1
- package/dist/parser.js +26 -9
- package/dist/parser.js.map +1 -1
- package/dist/print.d.ts +12 -0
- package/dist/print.js +494 -0
- package/dist/print.js.map +1 -0
- package/dist/qjs.js +13 -10
- package/dist/qjs.js.map +1 -1
- package/dist/quickjs.d.ts +8 -0
- package/dist/quickjs.js +132 -53
- package/dist/quickjs.js.map +1 -1
- package/dist/std.d.ts +4 -2
- package/dist/std.js +42 -8
- package/dist/std.js.map +1 -1
- package/dist/values.d.ts +31 -27
- package/dist/values.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/dist/jit.d.ts
CHANGED
package/dist/jit.js
CHANGED
|
@@ -1068,6 +1068,8 @@ class BlockEmitter {
|
|
|
1068
1068
|
}
|
|
1069
1069
|
this.emit(`$s${i} = ${p.code};`);
|
|
1070
1070
|
this.slots[i] = P(temp_name(i), 1 /* PK.TEMP */, { fresh: p.fresh, mkeys: p.mkeys });
|
|
1071
|
+
if (p.name !== undefined)
|
|
1072
|
+
this.slots[i].name = p.name;
|
|
1071
1073
|
this.see_temp(i);
|
|
1072
1074
|
}
|
|
1073
1075
|
/* materialize every pending expression that is not trivially duplicable, in order */
|
|
@@ -1211,17 +1213,26 @@ class BlockEmitter {
|
|
|
1211
1213
|
/* before emitting a statement with side effects */
|
|
1212
1214
|
before_stmt() { this.flush_exprs(); }
|
|
1213
1215
|
/* --- variable access --- */
|
|
1216
|
+
/* the source name of the argument or variable at vardefs[i] ('' when unknown) */
|
|
1217
|
+
vardef_name(i) {
|
|
1218
|
+
const vd = this.fi.b.vardefs[i];
|
|
1219
|
+
return vd === undefined ? '' : this.fi.atom_name(vd.var_name);
|
|
1220
|
+
}
|
|
1214
1221
|
arg_read(i) {
|
|
1215
1222
|
const fi = this.fi;
|
|
1216
1223
|
if (i >= fi.argName.length)
|
|
1217
1224
|
return P('undefined', 0 /* PK.LIT */);
|
|
1218
|
-
|
|
1225
|
+
const p = fi.argCell[i] ? P(`${fi.argName[i]}.get()`, 3 /* PK.EXPR */) : P(fi.argName[i], 2 /* PK.LOCAL */, { local: fi.argName[i] });
|
|
1226
|
+
p.name = this.vardef_name(i);
|
|
1227
|
+
return p;
|
|
1219
1228
|
}
|
|
1220
1229
|
var_read(i) {
|
|
1221
1230
|
const fi = this.fi;
|
|
1222
1231
|
if (i >= fi.varName.length)
|
|
1223
1232
|
bail(`bad local index ${i}`);
|
|
1224
|
-
|
|
1233
|
+
const p = fi.varCell[i] ? P(`${fi.varName[i]}.get()`, 3 /* PK.EXPR */) : P(fi.varName[i], 2 /* PK.LOCAL */, { local: fi.varName[i] });
|
|
1234
|
+
p.name = this.vardef_name(fi.b.arg_count + i);
|
|
1235
|
+
return p;
|
|
1225
1236
|
}
|
|
1226
1237
|
write_local(is_arg, i, value) {
|
|
1227
1238
|
const fi = this.fi;
|
|
@@ -1582,7 +1593,16 @@ class BlockEmitter {
|
|
|
1582
1593
|
/* `new C(args)`: new.target is the constructor itself */
|
|
1583
1594
|
this.pop();
|
|
1584
1595
|
this.pop();
|
|
1585
|
-
|
|
1596
|
+
/* every native construct site is recorded: a failure there is named after the callee
|
|
1597
|
+
the site stored in $C.last_new once its arguments ran (after the last one, so a nested
|
|
1598
|
+
`new` in an argument cannot overwrite it) */
|
|
1599
|
+
this.fi.ctor_names.set(this.cur_pc, fn.name ?? '');
|
|
1600
|
+
if (args.length > 0)
|
|
1601
|
+
this.fi.uses_nw = true;
|
|
1602
|
+
const store = `$C.last_new = ${fn.code}`;
|
|
1603
|
+
const n = args.length;
|
|
1604
|
+
const argv = n === 0 ? [] : [...args.slice(0, n - 1), `($nw = ${args[n - 1]}, ${store}, $nw)`];
|
|
1605
|
+
e = n === 0 ? `(${store}, new ${fn.code}${this.M()}()${this.M()})` : `new ${fn.code}${this.M()}(${argv.join(', ')})${this.M()}`;
|
|
1586
1606
|
}
|
|
1587
1607
|
else {
|
|
1588
1608
|
const t = this.dup_code(this.depth - 1);
|
|
@@ -1682,7 +1702,9 @@ class BlockEmitter {
|
|
|
1682
1702
|
fi.uses_global = true;
|
|
1683
1703
|
const slow = `$RT.get_global(${insn.a}, ${op === 57 /* OP.get_var */})`;
|
|
1684
1704
|
const g = op === 57 /* OP.get_var */ ? `(($g = $G${acc}) !== undefined ? $g : ${slow})` : `$G${acc}`;
|
|
1685
|
-
|
|
1705
|
+
const pv = P(`(($g = $GV${acc}) !== undefined ? ($g === $U ? ${slow} : $g) : ${g})`, 3 /* PK.EXPR */);
|
|
1706
|
+
pv.name = fi.atom_name(insn.a);
|
|
1707
|
+
this.push(pv);
|
|
1686
1708
|
return false;
|
|
1687
1709
|
}
|
|
1688
1710
|
case 58 /* OP.put_var */:
|
|
@@ -1813,9 +1835,14 @@ class BlockEmitter {
|
|
|
1813
1835
|
case 223 /* OP.get_var_ref0 */:
|
|
1814
1836
|
case 224 /* OP.get_var_ref1 */:
|
|
1815
1837
|
case 225 /* OP.get_var_ref2 */:
|
|
1816
|
-
case 226 /* OP.get_var_ref3 */:
|
|
1817
|
-
|
|
1838
|
+
case 226 /* OP.get_var_ref3 */: {
|
|
1839
|
+
const pv = P(`$vr[${insn.a}].get()`, 3 /* PK.EXPR */);
|
|
1840
|
+
const cv = fi.b.closure_var[insn.a];
|
|
1841
|
+
if (cv !== undefined)
|
|
1842
|
+
pv.name = fi.atom_name(cv.var_name);
|
|
1843
|
+
this.push(pv);
|
|
1818
1844
|
return false;
|
|
1845
|
+
}
|
|
1819
1846
|
case 96 /* OP.put_var_ref */:
|
|
1820
1847
|
case 227 /* OP.put_var_ref0 */:
|
|
1821
1848
|
case 228 /* OP.put_var_ref1 */:
|
|
@@ -1840,7 +1867,11 @@ class BlockEmitter {
|
|
|
1840
1867
|
const d = this.depth;
|
|
1841
1868
|
this.before_stmt();
|
|
1842
1869
|
this.emit(`$s${d} = $vr[${insn.a}].get(); if ($s${d} === $U) $RT.throw_uninitialized($b, ${insn.a}, true);`);
|
|
1843
|
-
|
|
1870
|
+
const pv = P(`$s${d}`, 1 /* PK.TEMP */);
|
|
1871
|
+
const cv = fi.b.closure_var[insn.a];
|
|
1872
|
+
if (cv !== undefined)
|
|
1873
|
+
pv.name = fi.atom_name(cv.var_name);
|
|
1874
|
+
this.push(pv);
|
|
1844
1875
|
return false;
|
|
1845
1876
|
}
|
|
1846
1877
|
case 104 /* OP.put_var_ref_check */: {
|
|
@@ -1863,7 +1894,9 @@ class BlockEmitter {
|
|
|
1863
1894
|
const d = this.depth;
|
|
1864
1895
|
this.before_stmt();
|
|
1865
1896
|
this.emit(`$s${d} = ${this.local_value(false, insn.a)}; if ($s${d} === $U) $RT.throw_uninitialized($b, ${insn.a}, false);`);
|
|
1866
|
-
|
|
1897
|
+
const pv = P(`$s${d}`, 1 /* PK.TEMP */);
|
|
1898
|
+
pv.name = this.vardef_name(fi.b.arg_count + insn.a);
|
|
1899
|
+
this.push(pv);
|
|
1867
1900
|
return false;
|
|
1868
1901
|
}
|
|
1869
1902
|
case 100 /* OP.put_loc_check */: {
|
|
@@ -2023,7 +2056,10 @@ class BlockEmitter {
|
|
|
2023
2056
|
case 66 /* OP.get_field */: {
|
|
2024
2057
|
const o = this.dup_code(this.depth - 1);
|
|
2025
2058
|
this.pop();
|
|
2026
|
-
|
|
2059
|
+
const pv = P(this.get_field(o, insn.a), 3 /* PK.EXPR */);
|
|
2060
|
+
if (!fi.atom_is_symbol(insn.a))
|
|
2061
|
+
pv.name = fi.atom_name(insn.a);
|
|
2062
|
+
this.push(pv);
|
|
2027
2063
|
return false;
|
|
2028
2064
|
}
|
|
2029
2065
|
case 67 /* OP.get_field2 */: {
|
|
@@ -3029,7 +3065,7 @@ export function jit_generate_source(ctx, b, id = 0, opts = {}) {
|
|
|
3029
3065
|
const fi = {
|
|
3030
3066
|
ctx, b, A, strict, constructible, derived: b.is_derived_class_constructor, uses_direct: false, uses_global: false, uses_w: false,
|
|
3031
3067
|
natural: (opts.conv ?? jit_config.conv) === 'natural', arg_off: (opts.conv ?? jit_config.conv) === 'natural' ? 0 : 2,
|
|
3032
|
-
sloppy_sets: new Map(), sloppy_props: new Map(), uses_spe: false, uses_sdel: false,
|
|
3068
|
+
sloppy_sets: new Map(), sloppy_props: new Map(), uses_spe: false, uses_sdel: false, ctor_names: new Map(), uses_nw: false,
|
|
3033
3069
|
argName: [], argCell: [], varName: [], varCell: [],
|
|
3034
3070
|
atom_name: (atom) => JS_AtomGetStr(ctx, atom),
|
|
3035
3071
|
atom_is_symbol: (atom) => ctx.rt.atoms.isSymbol(atom),
|
|
@@ -3110,6 +3146,8 @@ export function jit_generate_source(ctx, b, id = 0, opts = {}) {
|
|
|
3110
3146
|
decls.push('$g');
|
|
3111
3147
|
if (fi.uses_w)
|
|
3112
3148
|
decls.push('$w');
|
|
3149
|
+
if (fi.uses_nw)
|
|
3150
|
+
decls.push('$nw');
|
|
3113
3151
|
const params = ['$t', '$nt'];
|
|
3114
3152
|
const fwparams = [];
|
|
3115
3153
|
for (let i = 0; i < b.arg_count; i++) {
|
|
@@ -3222,7 +3260,7 @@ ${prologue}${body}};
|
|
|
3222
3260
|
}
|
|
3223
3261
|
/* the url names the function for host stack traces; its id leads to the position table */
|
|
3224
3262
|
source += `\n//# sourceURL=jseption:${id}:${url_part(jit_file_name(ctx, b))}:${url_part(name || '<anonymous>')}`;
|
|
3225
|
-
const res = { source, name };
|
|
3263
|
+
const res = { source, name, ctor_names: fi.ctor_names };
|
|
3226
3264
|
if (osr !== undefined)
|
|
3227
3265
|
res.osr = { arg_cell: fi.argCell.slice(), var_cell: fi.varCell.slice(), depth: cfg.byPc.get(osr).stateIn.length };
|
|
3228
3266
|
return res;
|
|
@@ -3281,7 +3319,7 @@ function compile_variant(ctx, b, opts) {
|
|
|
3281
3319
|
try {
|
|
3282
3320
|
const id = jit_stack_alloc_id();
|
|
3283
3321
|
const gen = jit_generate_source(ctx, b, id, opts);
|
|
3284
|
-
const { source, name } = gen;
|
|
3322
|
+
const { source, name, ctor_names } = gen;
|
|
3285
3323
|
if (jit_config.dump)
|
|
3286
3324
|
console.log(`--- jit${opts.osr !== undefined ? ` (osr at ${opts.osr})` : opts.conv === 'forwarder' && jit_config.conv !== 'forwarder' ? ' (ctor)' : ''}: ${name || '<anonymous>'} ---\n${source}`);
|
|
3287
3325
|
const RT = make_jit_runtime(ctx, (bb) => jit_closure_compile(ctx, bb));
|
|
@@ -3297,7 +3335,7 @@ function compile_variant(ctx, b, opts) {
|
|
|
3297
3335
|
throw e;
|
|
3298
3336
|
}
|
|
3299
3337
|
const make = factory(...jit_runtime_factory_args(RT, b));
|
|
3300
|
-
const stack = { b, name, file: jit_file_name(ctx, b), source, lines: null };
|
|
3338
|
+
const stack = { b, name, file: jit_file_name(ctx, b), source, lines: null, ctor_names: ctor_names ?? null };
|
|
3301
3339
|
jit_stack_register(id, stack);
|
|
3302
3340
|
const compiled = { make, source, name, stack, osr: gen.osr };
|
|
3303
3341
|
jit_stats.compiled++;
|