@scriptc/compiler 0.0.7 → 0.0.8
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/dist/backend/emission/emit-exprs.js +47 -1
- package/dist/backend/emission/emit-exprs.js.map +1 -1
- package/dist/backend/emission/emit-island.js +9 -1
- package/dist/backend/emission/emit-island.js.map +1 -1
- package/dist/backend/emission/emit-stmts.js +3 -1
- package/dist/backend/emission/emit-stmts.js.map +1 -1
- package/dist/backend/emission/emit-walkers.js +22 -8
- package/dist/backend/emission/emit-walkers.js.map +1 -1
- package/dist/backend/emission/emitter.js +5 -1
- package/dist/backend/emission/emitter.js.map +1 -1
- package/dist/backend/emission/may-throw.js +4 -3
- package/dist/backend/emission/may-throw.js.map +1 -1
- package/dist/backend/llvm/emitter.js +94 -7
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +43 -1
- package/dist/diagnostics/diagnostic.js +103 -5
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lib-contract.d.ts +24 -6
- package/dist/frontend/lib-contract.js +125 -44
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.js +16 -1
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +47 -7
- package/dist/frontend/lowering/lower-calls.js +560 -36
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +14 -1
- package/dist/frontend/lowering/lower-classes.js +85 -15
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.js +43 -1
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-emitter.js +1 -1
- package/dist/frontend/lowering/lower-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +26 -3
- package/dist/frontend/lowering/lower-exprs.js +455 -40
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +7 -0
- package/dist/frontend/lowering/lower-island.js +71 -10
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.d.ts +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-modules.js +95 -4
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +421 -43
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +19 -3
- package/dist/frontend/lowering/lowerer.js +188 -11
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/types.d.ts +28 -1
- package/dist/frontend/types.js +300 -8
- package/dist/frontend/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +37 -7
- package/dist/index.js.map +1 -1
- package/dist/ir/nodes.d.ts +28 -2
- package/dist/ir/nodes.js +35 -3
- package/dist/ir/nodes.js.map +1 -1
- package/dist/ir/validate.js +35 -6
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/profile.d.ts +17 -3
- package/dist/library/profile.js +38 -9
- package/dist/library/profile.js.map +1 -1
- package/dist/library/sidecar.js +162 -43
- package/dist/library/sidecar.js.map +1 -1
- package/dist/library/trap-teaching.d.ts +11 -0
- package/dist/library/trap-teaching.js +49 -0
- package/dist/library/trap-teaching.js.map +1 -0
- package/package.json +2 -2
- package/surface-manifest.json +37 -2
|
@@ -468,6 +468,27 @@ export function emitExpr(E, e) {
|
|
|
468
468
|
// result IS the left box. Narrowed shape: the single non-unit arm's
|
|
469
469
|
// payload is extracted unionNarrow-style (+1 for ref kinds, the
|
|
470
470
|
// checker proved the tag) and the left box is released.
|
|
471
|
+
if (e.left.type.kind === "jsval") {
|
|
472
|
+
// `a ?? b` on an island value: the engine's nullish test; the
|
|
473
|
+
// right runs lazily in its branch (already jsval-typed).
|
|
474
|
+
const l = E.emitExpr(e.left);
|
|
475
|
+
E.moveTemp(l);
|
|
476
|
+
const name = `sc_t${E.tempCounter++}`;
|
|
477
|
+
E.line(`${cDecl(e.type, name)};`);
|
|
478
|
+
E.line(`if (scr_jsval_is_nullish(${l.name})) {`);
|
|
479
|
+
E.indent++;
|
|
480
|
+
E.releaseValue(l.name, e.left.type);
|
|
481
|
+
E.emitBranchInto(name, e.right);
|
|
482
|
+
E.indent--;
|
|
483
|
+
E.line(`} else {`);
|
|
484
|
+
E.indent++;
|
|
485
|
+
E.line(`${name} = ${l.name};`);
|
|
486
|
+
E.indent--;
|
|
487
|
+
E.line(`}`);
|
|
488
|
+
if (isRefCounted(e.type))
|
|
489
|
+
E.currentFrame().push({ name, type: e.type });
|
|
490
|
+
return { name, type: e.type };
|
|
491
|
+
}
|
|
471
492
|
if (e.left.type.kind !== "union")
|
|
472
493
|
throw new Error("emitter bug: nullish left is not a union");
|
|
473
494
|
const def = E.unionsById.get(e.left.type.unionId);
|
|
@@ -4605,6 +4626,14 @@ export function emitExpr(E, e) {
|
|
|
4605
4626
|
return finish(`scr_domex_clone(${arg(0)}, ${arg(1)})`);
|
|
4606
4627
|
case "dyn.objKeys":
|
|
4607
4628
|
return finish(`scr_dyn_obj_keys(${arg(0)})`);
|
|
4629
|
+
case "dyn.assign":
|
|
4630
|
+
// Object.assign over DOM values: own members copy, the target
|
|
4631
|
+
// returns (+1); non-object receivers throw like Node.
|
|
4632
|
+
return finish(`scr_dyn_assign(${arg(0)}, ${arg(1)})`);
|
|
4633
|
+
case "dyn.hasOwn":
|
|
4634
|
+
// Object.hasOwn over a DOM receiver (throws on nullish, like
|
|
4635
|
+
// Node's ToObject).
|
|
4636
|
+
return finish(`scr_dyn_has_own(${arg(0)}, ${arg(1)})`);
|
|
4608
4637
|
case "dyn.objValues":
|
|
4609
4638
|
return finish(`scr_dyn_obj_values(${arg(0)})`);
|
|
4610
4639
|
case "dyn.objEntries":
|
|
@@ -5813,7 +5842,11 @@ export function emitExpr(E, e) {
|
|
|
5813
5842
|
const adapter = canMarshalFuncIntoIsland(fn)
|
|
5814
5843
|
? E.islandAdapter(fn.params.length, fn.ret.kind)
|
|
5815
5844
|
: E.islandTypedAdapter(fn);
|
|
5816
|
-
|
|
5845
|
+
// ISLAND-REST closures encode a NEGATIVE arity: the wrapper
|
|
5846
|
+
// pads the leading declared params and hands the trailing
|
|
5847
|
+
// slot the ENGINE array of the surplus arguments.
|
|
5848
|
+
const arity = fn.rest === true && fn.restAbi === "jsval" ? -fn.params.length : fn.params.length;
|
|
5849
|
+
return E.newTemp(e.type, `scr_jsval_from_closure(${v.name}, ${arity}, ${adapter})`);
|
|
5817
5850
|
}
|
|
5818
5851
|
default: {
|
|
5819
5852
|
const helper = E.jsonWriteHelper(e.value.type);
|
|
@@ -5911,6 +5944,19 @@ export function emitExpr(E, e) {
|
|
|
5911
5944
|
const pack = argPack(args.map((x) => x.name));
|
|
5912
5945
|
return E.newTemp(e.type, `scr_jsval_obj_lit(${args.length / 2}, ${pack})`);
|
|
5913
5946
|
}
|
|
5947
|
+
case "tplStrings": {
|
|
5948
|
+
const pack = argPack(args.map((x) => x.name));
|
|
5949
|
+
return E.newTemp(e.type, `scr_jsval_tpl_strings(${args.length / 2}, ${pack})`);
|
|
5950
|
+
}
|
|
5951
|
+
case "objSpread":
|
|
5952
|
+
// Spread completion: engine CopyDataProperties (getters can
|
|
5953
|
+
// throw — fallible); answers the target (+1).
|
|
5954
|
+
return finishFallible(`scr_jsval_obj_spread(${a(0)}, ${a(1)})`);
|
|
5955
|
+
case "defineGetter":
|
|
5956
|
+
// Getter completion for an island literal: defines key (a(1))
|
|
5957
|
+
// on obj (a(0)) as an engine getter invoking a(2); answers the
|
|
5958
|
+
// object (+1) for chaining.
|
|
5959
|
+
return E.newTemp(e.type, `scr_jsval_define_getter(${a(0)}, ${a(1)}, ${a(2)})`);
|
|
5914
5960
|
case "arrLit": {
|
|
5915
5961
|
const pack = argPack(args.map((x) => x.name));
|
|
5916
5962
|
return E.newTemp(e.type, `scr_jsval_arr_lit(${args.length}, ${pack})`);
|