@scriptc/compiler 0.2.3 → 0.2.4
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/llvm/borrowed-inputs.d.ts +15 -0
- package/dist/backend/llvm/borrowed-inputs.js +28 -0
- package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
- package/dist/backend/llvm/byte-numbers.d.ts +10 -0
- package/dist/backend/llvm/byte-numbers.js +235 -0
- package/dist/backend/llvm/byte-numbers.js.map +1 -0
- package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
- package/dist/backend/llvm/bytes-bounds.js +189 -0
- package/dist/backend/llvm/bytes-bounds.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +7 -0
- package/dist/backend/llvm/call-lifetimes.js +27 -7
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +54 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.d.ts +9 -0
- package/dist/backend/llvm/checked-value-lifetimes.js +35 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
- package/dist/backend/llvm/counted-loops.d.ts +6 -0
- package/dist/backend/llvm/counted-loops.js +28 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +25 -9
- package/dist/backend/llvm/emitter.js +131 -31
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +4 -4
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +3 -2
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +4 -4
- package/dist/backend/llvm/expr-bytes.js +68 -35
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +21 -13
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +2 -1
- package/dist/backend/llvm/expr-containers.js +68 -46
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +11 -0
- package/dist/backend/llvm/expr-control.js +26 -5
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +32 -30
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +55 -22
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +8 -2
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +10 -0
- package/dist/backend/llvm/integer-values.js +41 -0
- package/dist/backend/llvm/integer-values.js.map +1 -0
- package/dist/backend/llvm/integer-views.d.ts +7 -0
- package/dist/backend/llvm/integer-views.js +67 -0
- package/dist/backend/llvm/integer-views.js.map +1 -0
- package/dist/backend/llvm/integer-views.test.d.ts +1 -0
- package/dist/backend/llvm/integer-views.test.js +34 -0
- package/dist/backend/llvm/integer-views.test.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.js +3 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +5 -5
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +2 -4
- package/dist/backend/llvm/local-array-reads.js +4 -91
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +11 -11
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +2 -2
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +5 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.d.ts +22 -0
- package/dist/backend/llvm/reference-effects.js +148 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -0
- package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
- package/dist/backend/llvm/reference-effects.test.js +74 -0
- package/dist/backend/llvm/reference-effects.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +7 -4
- package/dist/backend/llvm/shapes.js +23 -6
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +23 -2
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.d.ts +10 -0
- package/dist/backend/llvm/string-construction.js +38 -0
- package/dist/backend/llvm/string-construction.js.map +1 -0
- package/dist/backend/llvm/string-construction.test.d.ts +1 -0
- package/dist/backend/llvm/string-construction.test.js +65 -0
- package/dist/backend/llvm/string-construction.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.d.ts +2 -2
- package/dist/backend/llvm/string-lifetimes.js +5 -3
- package/dist/backend/llvm/string-lifetimes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +19 -10
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +9 -0
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +6 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.js +2 -0
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +3 -3
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.js +12 -34
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +12 -2
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lowerer.js +10 -3
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/type-mapper.js +2 -2
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/ir/analysis.js +3 -1
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/byte-numbers.d.ts +20 -0
- package/dist/ir/byte-numbers.js +65 -0
- package/dist/ir/byte-numbers.js.map +1 -0
- package/dist/ir/byte-numbers.test.d.ts +1 -0
- package/dist/ir/byte-numbers.test.js +42 -0
- package/dist/ir/byte-numbers.test.js.map +1 -0
- package/dist/ir/integer-loops.d.ts +19 -0
- package/dist/ir/integer-loops.js +107 -1
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +51 -1
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +8 -6
- package/dist/ir/integer-ranges.js +343 -89
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +54 -3
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +8 -5
- package/dist/ir/ir.js +16 -5
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/validate.js +47 -29
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +20 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/native/toolchain.js +6 -3
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +43 -5
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +1 -1
|
@@ -5,7 +5,7 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
5
5
|
* methods with Node-exact forEach desugaring, iterator helpers, and indexed
|
|
6
6
|
* record operations. */
|
|
7
7
|
import * as ts from "../ts7/adapter.js";
|
|
8
|
-
import { BOOL, CAUGHT, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, funcOf, isRefCounted, isSupportedArrayElem, isSupportedIndexValue, isUnitType, typeEquals } from "../../ir/ir.js";
|
|
8
|
+
import { BOOL, CAUGHT, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, funcOf, isPrimitiveCollectionKey, isRefCounted, isSupportedArrayElem, isSupportedIndexValue, isUnitType, typeEquals } from "../../ir/ir.js";
|
|
9
9
|
import { ARRAY_METHODS, COLLECTION_ITERATOR_METHODS, MAP_METHODS, SET_COMBINE_METHODS, SET_METHODS } from "./surfaces.js";
|
|
10
10
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
11
11
|
import { forOfVarTarget, lowerDestructuringAssign } from "./lower-stmts.js";
|
|
@@ -3386,6 +3386,14 @@ export function lowerMapMethodCall(lowerer, call, access) {
|
|
|
3386
3386
|
const v = receiverIr.value.kind === "dyn"
|
|
3387
3387
|
? lowerer.lowerCollectionKey(call.arguments[1], receiverIr.value)
|
|
3388
3388
|
: lowerer.lowerExprExpecting(call.arguments[1], receiverIr.value);
|
|
3389
|
+
// A discarded set result needs no second receiver read or identity
|
|
3390
|
+
// owner. Keep the ordinary operand order: receiver, key, then value.
|
|
3391
|
+
let parent = call.parent;
|
|
3392
|
+
while (ts.isParenthesizedExpression(parent))
|
|
3393
|
+
parent = parent.parent;
|
|
3394
|
+
if (ts.isExpressionStatement(parent)) {
|
|
3395
|
+
return { kind: "mapIntrinsic", method: "set", receiver, args: [k, v], type: VOID, loc };
|
|
3396
|
+
}
|
|
3389
3397
|
const slot = lowerer.declareHiddenLocal("%mapSetReceiver", receiver.type);
|
|
3390
3398
|
const ref = varRef(slot.id, receiver.type, loc);
|
|
3391
3399
|
return { kind: "seqExpr", stmts: [
|
|
@@ -5391,7 +5399,7 @@ export function lowerSetSeedNew(lowerer, node, setT) {
|
|
|
5391
5399
|
}
|
|
5392
5400
|
const seedType = lowerer.typeOf(node);
|
|
5393
5401
|
const declared = lowerer.mapTypeOf(seedType);
|
|
5394
|
-
const scalar = setT.elem.kind === "
|
|
5402
|
+
const scalar = isPrimitiveCollectionKey(setT.elem, setT.elem.kind === "union" ? lowerer.unions.get(setT.elem.unionId)?.arms : undefined);
|
|
5395
5403
|
let source = !scalar && (declared?.kind === "array" || declared?.kind === "record")
|
|
5396
5404
|
? lowerer.lowerCollectionKey(node, declared)
|
|
5397
5405
|
: lowerer.lowerExpr(node);
|
|
@@ -5448,7 +5456,7 @@ function setFromSeedValue(lowerer, source, setT, missing) {
|
|
|
5448
5456
|
}
|
|
5449
5457
|
let seed;
|
|
5450
5458
|
if (source.type.kind === "set" && typeEquals(source.type, setT)) {
|
|
5451
|
-
|
|
5459
|
+
return { kind: "setIntrinsic", method: "clone", receiver: source, args: [], type: setT, loc };
|
|
5452
5460
|
}
|
|
5453
5461
|
else if (source.type.kind === "string" && setT.elem.kind === "string") {
|
|
5454
5462
|
seed = strCharsCall(lowerer, source, loc);
|
|
@@ -5569,37 +5577,7 @@ export function mapFromSeedValue(lowerer, seed, mapT) {
|
|
|
5569
5577
|
if (seed.type.kind === "map") {
|
|
5570
5578
|
if (!typeEquals(seed.type, mapT))
|
|
5571
5579
|
return null;
|
|
5572
|
-
|
|
5573
|
-
let name = lowerer.mapHofHelpers.get(key);
|
|
5574
|
-
if (!name) {
|
|
5575
|
-
name = `%map.copy.${lowerer.mapHofHelpers.size}`;
|
|
5576
|
-
lowerer.mapHofHelpers.set(key, name);
|
|
5577
|
-
const source = varRef("source.0", mapT, loc);
|
|
5578
|
-
const target = varRef("target.0", mapT, loc);
|
|
5579
|
-
const index = varRef("i.0", F64, loc);
|
|
5580
|
-
const read = (method, type) => ({
|
|
5581
|
-
kind: "mapIntrinsic", method, receiver: source, args: method === "iterCount" ? [] : [index], type, loc,
|
|
5582
|
-
});
|
|
5583
|
-
lowerer.liftedFns.push({
|
|
5584
|
-
name, params: [{ localId: "source.0", name: "source", type: mapT }], returnType: mapT,
|
|
5585
|
-
locals: [
|
|
5586
|
-
{ id: "source.0", name: "source", type: mapT, mutable: false },
|
|
5587
|
-
{ id: "target.0", name: "target", type: mapT, mutable: false },
|
|
5588
|
-
{ id: "i.0", name: "i", type: F64, mutable: true },
|
|
5589
|
-
],
|
|
5590
|
-
body: [
|
|
5591
|
-
{ kind: "varDecl", localId: "target.0", init: { kind: "mapNew", type: mapT, loc }, loc },
|
|
5592
|
-
countedFor(loc, read("iterCount", F64), () => [{
|
|
5593
|
-
kind: "if", cond: read("iterLive", BOOL), then: [{ kind: "exprStmt", expr: {
|
|
5594
|
-
kind: "mapIntrinsic", method: "set", receiver: target,
|
|
5595
|
-
args: [read("iterKey", mapT.key), read("iterValue", mapT.value)], type: VOID, loc,
|
|
5596
|
-
}, loc }], else_: null, loc,
|
|
5597
|
-
}]),
|
|
5598
|
-
{ kind: "return", value: target, loc },
|
|
5599
|
-
], loc,
|
|
5600
|
-
});
|
|
5601
|
-
}
|
|
5602
|
-
return { kind: "call", callee: name, args: [seed], type: mapT, loc };
|
|
5580
|
+
return { kind: "mapIntrinsic", method: "clone", receiver: seed, args: [], type: mapT, loc };
|
|
5603
5581
|
}
|
|
5604
5582
|
if (seed.type.kind === "dyn" || seed.type.kind === "array" &&
|
|
5605
5583
|
!(seed.type.elem.kind === "record" && lowerer.shapes.get(seed.type.elem.shapeId)?.tuple)) {
|