@scriptc/compiler 0.0.32 → 0.0.34
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/cc-cache.test.js +430 -1
- package/dist/backend/cc-cache.test.js.map +1 -1
- package/dist/backend/cc.d.ts +25 -0
- package/dist/backend/cc.js +818 -88
- package/dist/backend/cc.js.map +1 -1
- package/dist/backend/emission/emit-exprs.js +79 -3
- package/dist/backend/emission/emit-exprs.js.map +1 -1
- package/dist/backend/emission/emit-shapes.js +37 -4
- package/dist/backend/emission/emit-shapes.js.map +1 -1
- package/dist/backend/emission/emitter.d.ts +23 -7
- package/dist/backend/emission/emitter.js +171 -27
- package/dist/backend/emission/emitter.js.map +1 -1
- package/dist/backend/emission/may-throw.js +7 -4
- package/dist/backend/emission/may-throw.js.map +1 -1
- package/dist/backend/ffi-callbacks.d.ts +38 -1
- package/dist/backend/ffi-callbacks.js +76 -3
- package/dist/backend/ffi-callbacks.js.map +1 -1
- package/dist/backend/library-identity.d.ts +22 -0
- package/dist/backend/library-identity.js +103 -0
- package/dist/backend/library-identity.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +3 -0
- package/dist/backend/llvm/emitter.js +278 -17
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +1 -0
- package/dist/backend/llvm/shapes.js +25 -1
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/mangle.d.ts +1 -0
- package/dist/backend/mangle.js +3 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/object-localize.d.ts +5 -5
- package/dist/backend/object-localize.js +19 -16
- package/dist/backend/object-localize.js.map +1 -1
- package/dist/backend/object-localize.test.js +37 -13
- package/dist/backend/object-localize.test.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +2 -0
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/ffi/profile.d.ts +17 -5
- package/dist/ffi/profile.js +169 -22
- package/dist/ffi/profile.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +82 -0
- package/dist/frontend/input-tracker.js +380 -0
- package/dist/frontend/input-tracker.js.map +1 -0
- package/dist/frontend/input-tracker.test.d.ts +1 -0
- package/dist/frontend/input-tracker.test.js +137 -0
- package/dist/frontend/input-tracker.test.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.js +2 -8
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +1 -0
- package/dist/frontend/lowering/lower-calls.js +244 -163
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +3 -0
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.js +113 -28
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +67 -1
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +45 -26
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +1 -1
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +48 -3
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +79 -29
- package/dist/frontend/lowering/lowerer.js +429 -87
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/npm-static-rewrite.js +25 -26
- package/dist/frontend/npm-static-rewrite.js.map +1 -1
- package/dist/frontend/npm-static.js +29 -30
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.d.ts +1 -0
- package/dist/frontend/npm-static.test.js +15 -0
- package/dist/frontend/npm-static.test.js.map +1 -0
- package/dist/frontend/npm.js +5 -17
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/program.js +2 -6
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.js +8 -29
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +2 -0
- package/dist/frontend/ts7/checker.js +20 -3
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/program.js +17 -18
- package/dist/frontend/ts7/program.js.map +1 -1
- package/dist/frontend/types.d.ts +41 -0
- package/dist/frontend/types.js +147 -8
- package/dist/frontend/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +275 -41
- package/dist/index.js.map +1 -1
- package/dist/ir/nodes.d.ts +42 -12
- package/dist/ir/nodes.js +7 -1
- package/dist/ir/nodes.js.map +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +1 -1
- package/dist/ir/validate.js +104 -1
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/early-cache.d.ts +65 -0
- package/dist/library/early-cache.js +380 -0
- package/dist/library/early-cache.js.map +1 -0
- package/dist/library/early-cache.test.d.ts +1 -0
- package/dist/library/early-cache.test.js +528 -0
- package/dist/library/early-cache.test.js.map +1 -0
- package/dist/library/int-infer.js +14 -0
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +21 -4
- package/dist/library/int-infer.test.js.map +1 -1
- package/dist/library/profile.d.ts +3 -0
- package/dist/library/profile.js +9 -1
- package/dist/library/profile.js.map +1 -1
- package/dist/library/semantic-source.d.ts +13 -0
- package/dist/library/semantic-source.js +257 -0
- package/dist/library/semantic-source.js.map +1 -0
- package/dist/library/semantic-source.test.d.ts +1 -0
- package/dist/library/semantic-source.test.js +113 -0
- package/dist/library/semantic-source.test.js.map +1 -0
- package/dist/library/sidecar.d.ts +6 -0
- package/dist/library/sidecar.js +11 -0
- package/dist/library/sidecar.js.map +1 -1
- package/package.json +2 -2
- package/surface-manifest.json +1 -1
|
@@ -2453,6 +2453,8 @@ export function droppableStatic(e) {
|
|
|
2453
2453
|
return e.elems.every(droppableStatic);
|
|
2454
2454
|
case "recordLit":
|
|
2455
2455
|
return e.fields.every((f) => droppableStatic(f.value));
|
|
2456
|
+
case "recordClone":
|
|
2457
|
+
return droppableStatic(e.source) && e.overrides.every((f) => droppableStatic(f.value));
|
|
2456
2458
|
case "closure":
|
|
2457
2459
|
return true;
|
|
2458
2460
|
default:
|
|
@@ -4527,6 +4529,66 @@ export function lowerObjectLiteral(L, expr) {
|
|
|
4527
4529
|
}
|
|
4528
4530
|
}
|
|
4529
4531
|
const fieldTypes = new Map(shape.fields.map((f) => [f.name, f.type]));
|
|
4532
|
+
// The clone probe may lower the leading spread before declining (a
|
|
4533
|
+
// static `as` cast can make the checker-visible shape match while its
|
|
4534
|
+
// erased IR value keeps a wider shape). Reuse that exact value in the
|
|
4535
|
+
// ordinary spread path so lowering still happens once.
|
|
4536
|
+
let leadingSpreadLowered = null;
|
|
4537
|
+
// The overwhelmingly common immutable-update form over a record:
|
|
4538
|
+
// `{ ...model, changed, other: value }`. The historic lowering expanded
|
|
4539
|
+
// the spread into one recordGet per untouched field at EVERY site, then
|
|
4540
|
+
// the backends inlined all of those retains and stores into the caller.
|
|
4541
|
+
// A 178-field model updated hundreds of times consequently produced a
|
|
4542
|
+
// half-million-line LLVM function. Keep the same evaluation/ownership
|
|
4543
|
+
// semantics in one compact IR node: source first, explicit overrides in
|
|
4544
|
+
// source order, and one backend clone helper per shape.
|
|
4545
|
+
//
|
|
4546
|
+
// Stay deliberately narrow. Tuple/index/accessor shapes, conditional or
|
|
4547
|
+
// multiple spreads, spread-after-explicit order, and shape-changing width
|
|
4548
|
+
// copies retain their existing lowering and diagnostics.
|
|
4549
|
+
if (!isJsSourceFile(expr.getSourceFile()) &&
|
|
4550
|
+
!shape.indexValue &&
|
|
4551
|
+
!shape.tuple &&
|
|
4552
|
+
!shapeHasAccessorSlots(shape) &&
|
|
4553
|
+
expr.properties.length >= 2 &&
|
|
4554
|
+
ts.isSpreadAssignment(expr.properties[0]) &&
|
|
4555
|
+
!conditionalSpreadOf(expr.properties[0].expression) &&
|
|
4556
|
+
expr.properties.slice(1).every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
4557
|
+
p.name !== undefined &&
|
|
4558
|
+
(ts.isIdentifier(p.name) ||
|
|
4559
|
+
ts.isStringLiteral(p.name) ||
|
|
4560
|
+
ts.isNumericLiteral(p.name) ||
|
|
4561
|
+
(ts.isComputedPropertyName(p.name) && literalComputedKey(L, p.name) !== null)))) {
|
|
4562
|
+
const spread = expr.properties[0];
|
|
4563
|
+
const props = expr.properties.slice(1);
|
|
4564
|
+
const names = props.map((p) => propNameText(L, p.name));
|
|
4565
|
+
const unique = new Set(names);
|
|
4566
|
+
const sourceType = L.mapTypeOf(L.typeOf(spread.expression));
|
|
4567
|
+
if (sourceType?.kind === "record" &&
|
|
4568
|
+
sourceType.shapeId === type.shapeId &&
|
|
4569
|
+
unique.size === names.length &&
|
|
4570
|
+
names.every((name) => fieldTypes.has(name))) {
|
|
4571
|
+
const source = L.lowerExpr(spread.expression);
|
|
4572
|
+
if (source.type.kind === "record" && source.type.shapeId === type.shapeId) {
|
|
4573
|
+
const overrides = [];
|
|
4574
|
+
for (let i = 0; i < props.length; i++) {
|
|
4575
|
+
const p = props[i];
|
|
4576
|
+
const name = names[i];
|
|
4577
|
+
const fieldType = fieldTypes.get(name);
|
|
4578
|
+
const valueNode = ts.isPropertyAssignment(p) ? p.initializer : p;
|
|
4579
|
+
let value = ts.isPropertyAssignment(p)
|
|
4580
|
+
? L.lowerExpr(p.initializer)
|
|
4581
|
+
: L.lowerShorthandValue(p);
|
|
4582
|
+
value = L.coerceInto(valueNode, value, fieldType);
|
|
4583
|
+
if (!typeEquals(value.type, fieldType))
|
|
4584
|
+
L.badType(valueNode, L.typeOf(valueNode));
|
|
4585
|
+
overrides.push({ name, value });
|
|
4586
|
+
}
|
|
4587
|
+
return { kind: "recordClone", source, overrides, type, loc };
|
|
4588
|
+
}
|
|
4589
|
+
leadingSpreadLowered = source;
|
|
4590
|
+
}
|
|
4591
|
+
}
|
|
4530
4592
|
// A PURE index-signature target with spreads — `{ ...process.env }`,
|
|
4531
4593
|
// `{ ...process.env, ...extraEnv }`, `{ ...env, PATH: p }` (the
|
|
4532
4594
|
// spawn-env pattern): the field-by-field desugar below cannot
|
|
@@ -4743,7 +4805,11 @@ export function lowerObjectLiteral(L, expr) {
|
|
|
4743
4805
|
let srcNode = prop.expression;
|
|
4744
4806
|
while (ts.isParenthesizedExpression(srcNode))
|
|
4745
4807
|
srcNode = srcNode.expression;
|
|
4746
|
-
const srcLowered =
|
|
4808
|
+
const srcLowered = prop === expr.properties[0] && leadingSpreadLowered !== null
|
|
4809
|
+
? leadingSpreadLowered
|
|
4810
|
+
: ts.isIdentifier(srcNode)
|
|
4811
|
+
? null
|
|
4812
|
+
: L.lowerExpr(srcNode);
|
|
4747
4813
|
const srcType = srcLowered ? srcLowered.type : L.mapTypeOf(L.typeOf(srcNode));
|
|
4748
4814
|
// `...options.installConfig` — a spread of `Partial<X> | undefined`
|
|
4749
4815
|
// (the optional-options merge idiom `{ ...DEFAULTS, ...overrides }`):
|