@scriptc/compiler 0.2.2 → 0.2.3
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/ambient/scriptc-node-fallback.d.ts +99 -27
- package/dist/backend/cycle-analysis.js +63 -50
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +51 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/llvm/borrowed-receivers.d.ts +9 -0
- package/dist/backend/llvm/borrowed-receivers.js +58 -0
- package/dist/backend/llvm/borrowed-receivers.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +20 -0
- package/dist/backend/llvm/call-lifetimes.js +179 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.test.d.ts +1 -0
- package/dist/backend/llvm/call-lifetimes.test.js +205 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +2 -2
- package/dist/backend/llvm/dyn.js +79 -35
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +33 -0
- package/dist/backend/llvm/emitter.js +189 -16
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +20 -1
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +1 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +42 -5
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +70 -13
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +1 -1
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +6 -5
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +1 -1
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +5 -10
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +35 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +44 -0
- package/dist/backend/llvm/local-array-reads.js +313 -0
- package/dist/backend/llvm/local-array-reads.js.map +1 -0
- package/dist/backend/llvm/local-array-reads.test.d.ts +1 -0
- package/dist/backend/llvm/local-array-reads.test.js +446 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +36 -0
- package/dist/backend/llvm/map-read-lifetimes.js +128 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.test.d.ts +1 -0
- package/dist/backend/llvm/map-read-lifetimes.test.js +123 -0
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -0
- package/dist/backend/llvm/shapes.js +1 -0
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/split.js +15 -5
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +17 -0
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.d.ts +20 -0
- package/dist/backend/llvm/stack-unions.js +61 -0
- package/dist/backend/llvm/stack-unions.js.map +1 -0
- package/dist/backend/llvm/stack-unions.test.d.ts +1 -0
- package/dist/backend/llvm/stack-unions.test.js +241 -0
- package/dist/backend/llvm/stack-unions.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.d.ts +12 -0
- package/dist/backend/llvm/string-lifetimes.js +70 -0
- package/dist/backend/llvm/string-lifetimes.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.d.ts +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +230 -0
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -0
- package/dist/backend/mangle.d.ts +2 -0
- package/dist/backend/mangle.js +4 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.js +67 -29
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +104 -1
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +2 -2
- package/dist/backend/native-toolchain.js +2 -0
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/frontend/input-tracker.js +3 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +38 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.d.ts +31 -0
- package/dist/frontend/lowering/collection-ingestion.js +215 -0
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.js +2 -0
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/import-meta.d.ts +10 -0
- package/dist/frontend/lowering/import-meta.js +52 -0
- package/dist/frontend/lowering/import-meta.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +105 -41
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +2 -0
- package/dist/frontend/lowering/lower-builtin-values.js +22 -1
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +3 -13
- package/dist/frontend/lowering/lower-builtins.js +150 -46
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +6 -3
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +4 -4
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +5 -1
- package/dist/frontend/lowering/lower-containers.js +40 -3
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +35 -41
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +43 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +72 -68
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-system-errors.d.ts +6 -0
- package/dist/frontend/lowering/lower-system-errors.js +29 -0
- package/dist/frontend/lowering/lower-system-errors.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +4 -3
- package/dist/frontend/lowering/lowerer.js +50 -22
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +2 -2
- package/dist/frontend/lowering/surfaces.js +69 -21
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/module-syntax.d.ts +1 -1
- package/dist/frontend/module-syntax.js +8 -1
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/module-syntax.test.js +10 -0
- package/dist/frontend/module-syntax.test.js.map +1 -1
- package/dist/frontend/npm.d.ts +4 -0
- package/dist/frontend/npm.js +86 -33
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +103 -0
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/services-node.js +3 -2
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services.d.ts +5 -1
- package/dist/frontend/services.js +9 -1
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +21 -0
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +2 -0
- package/dist/frontend/ts7/ast-node.js +30 -4
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +60 -1
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/type-mapper.js +6 -0
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +1 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +7 -0
- package/dist/ir/integer-loops.js +23 -0
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.d.ts +1 -0
- package/dist/ir/integer-loops.test.js +41 -0
- package/dist/ir/integer-loops.test.js.map +1 -0
- package/dist/ir/ir.d.ts +21 -17
- package/dist/ir/ir.js +43 -9
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +18 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/validate.js +161 -76
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +227 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.js +9 -2
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/fence-eval.test.d.ts +1 -0
- package/dist/library/fence-eval.test.js +21 -0
- package/dist/library/fence-eval.test.js.map +1 -0
- package/dist/native/runtime-typescript.d.ts +4 -0
- package/dist/native/runtime-typescript.js +61 -0
- package/dist/native/runtime-typescript.js.map +1 -0
- package/dist/native/runtime-typescript.test.d.ts +1 -0
- package/dist/native/runtime-typescript.test.js +41 -0
- package/dist/native/runtime-typescript.test.js.map +1 -0
- package/package.json +20 -20
- package/surface-manifest.json +271 -17
|
@@ -49,7 +49,8 @@ export declare function lowerArrayFromValue(lowerer: Lowerer, loc: SrcLoc): IrEx
|
|
|
49
49
|
* terminate (fractional lengths truncate, negative/NaN produce an empty
|
|
50
50
|
* array — Node-exact). Array inputs copy through the iterator's indexed
|
|
51
51
|
* values, including holes as present undefined, and may map each value.
|
|
52
|
-
* Set inputs
|
|
52
|
+
* Map and Set inputs consume live values or entries and may map them.
|
|
53
|
+
* Strings iterate by code point and may map.
|
|
53
54
|
* Other iterable shapes keep the fence. Null when the callee isn't an
|
|
54
55
|
* Array-static access. */
|
|
55
56
|
export declare function lowerArrayFromCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression): IrExpr | null;
|
|
@@ -225,6 +226,9 @@ export declare function lowerSetSeedNew(lowerer: Lowerer, node: ts.Expression, s
|
|
|
225
226
|
export declare function lowerMapSeedNew(lowerer: Lowerer, argNode: ts.Expression, mapT: IrType & {
|
|
226
227
|
kind: "map";
|
|
227
228
|
}): IrExpr | null;
|
|
229
|
+
export declare function mapFromSeedValue(lowerer: Lowerer, seed: IrExpr, mapT: IrType & {
|
|
230
|
+
kind: "map";
|
|
231
|
+
}): IrExpr | null;
|
|
228
232
|
/** `Object.keys/values/entries` over an INDEX-SIGNATURE (overflow-carrying)
|
|
229
233
|
* record shape: declared fields answer first from the compile-time field
|
|
230
234
|
* list (declaration order, undefined-valued fields skipped — exactly the
|
|
@@ -18,6 +18,7 @@ import { dynUndefinedExpr, newFnCtx, nodeThrowExpr } from "./lowerer.js";
|
|
|
18
18
|
import { boolLit, countedFor, numLit, strLit, varRef } from "../../ir/build.js";
|
|
19
19
|
import { defaultAfterUndefined, lowerPositionArgument, lowerStaticallyUndefinedArgument, positionNumber } from "./optional-arguments.js";
|
|
20
20
|
import { lowerArrayCopyWithin, lowerArrayFill } from "./array-indexed-mutation.js";
|
|
21
|
+
import { collectionInput, collectionDestinationMatches, ingestCollection, lowerCollectionInput } from "./collection-ingestion.js";
|
|
21
22
|
/** Object() and new Object() preserve known object inputs. Primitive
|
|
22
23
|
* boxing and unproven checked-dynamic values retain their refusal. */
|
|
23
24
|
export function lowerObjectConstructor(lowerer, args, loc) {
|
|
@@ -2991,7 +2992,8 @@ export function lowerArrayFromValue(lowerer, loc) {
|
|
|
2991
2992
|
* terminate (fractional lengths truncate, negative/NaN produce an empty
|
|
2992
2993
|
* array — Node-exact). Array inputs copy through the iterator's indexed
|
|
2993
2994
|
* values, including holes as present undefined, and may map each value.
|
|
2994
|
-
* Set inputs
|
|
2995
|
+
* Map and Set inputs consume live values or entries and may map them.
|
|
2996
|
+
* Strings iterate by code point and may map.
|
|
2995
2997
|
* Other iterable shapes keep the fence. Null when the callee isn't an
|
|
2996
2998
|
* Array-static access. */
|
|
2997
2999
|
export function lowerArrayFromCall(lowerer, call, access) {
|
|
@@ -3025,6 +3027,26 @@ export function lowerArrayFromCall(lowerer, call, access) {
|
|
|
3025
3027
|
return { kind: "call", callee: name, args: [0, 1, 2].map((i) => args[i]
|
|
3026
3028
|
? lowerer.lowerExprExpecting(args[i], DYN) : dynUndefinedExpr(loc)), type: DYN, loc };
|
|
3027
3029
|
}
|
|
3030
|
+
if ((args.length === 1 || args.length === 2) && !args.some(ts.isSpreadElement)) {
|
|
3031
|
+
const input = collectionInput(lowerer, args[0]);
|
|
3032
|
+
if (input) {
|
|
3033
|
+
const source = lowerCollectionInput(lowerer, input);
|
|
3034
|
+
if (source) {
|
|
3035
|
+
if (args.length === 1) {
|
|
3036
|
+
fenceProducedArrayElem(lowerer, call, "'Array.from(collection)'", input.element);
|
|
3037
|
+
return ingestCollection(lowerer, input, source, { kind: "array", elem: input.element }, loc);
|
|
3038
|
+
}
|
|
3039
|
+
const callback = hofCallbackArg(lowerer, args[1], [input.element], arrayOf(input.element));
|
|
3040
|
+
if (callback.arity > 2)
|
|
3041
|
+
lowerer.noLowering("Array.from mapper with an array parameter", args[1]);
|
|
3042
|
+
if (callback.fnArg.type.ret.kind === "void" || callback.fnArg.type.ret.kind === "func")
|
|
3043
|
+
lowerer.badType(call, lowerer.typeOf(call));
|
|
3044
|
+
const element = callbackArrayElem(lowerer, call, callback.fnArg.type.ret);
|
|
3045
|
+
fenceProducedArrayElem(lowerer, call, "'Array.from(collection, mapper)'", element);
|
|
3046
|
+
return ingestCollection(lowerer, input, source, { kind: "array", elem: element }, loc, callback.fnArg);
|
|
3047
|
+
}
|
|
3048
|
+
}
|
|
3049
|
+
}
|
|
3028
3050
|
// MAPPER-LESS `Array.from({ length: n })` (usually with an explicit
|
|
3029
3051
|
// type argument — the pMap results-array idiom): a length-n array of
|
|
3030
3052
|
// ABSENT slots, filled by index before any read. Union elements with
|
|
@@ -5361,7 +5383,14 @@ export function lowerSetSeedNew(lowerer, node, setT) {
|
|
|
5361
5383
|
const elems = node.elements.map((element) => lowerer.lowerCollectionKey(element, setT.elem));
|
|
5362
5384
|
return { kind: "setNew", seed: { kind: "arrayLit", elems, type: arrayOf(setT.elem), loc }, type: setT, loc };
|
|
5363
5385
|
}
|
|
5364
|
-
const
|
|
5386
|
+
const input = collectionInput(lowerer, node);
|
|
5387
|
+
if (input && collectionDestinationMatches(lowerer, input, setT)) {
|
|
5388
|
+
const source = lowerCollectionInput(lowerer, input);
|
|
5389
|
+
if (source)
|
|
5390
|
+
return ingestCollection(lowerer, input, source, setT, loc);
|
|
5391
|
+
}
|
|
5392
|
+
const seedType = lowerer.typeOf(node);
|
|
5393
|
+
const declared = lowerer.mapTypeOf(seedType);
|
|
5365
5394
|
const scalar = setT.elem.kind === "f64" || setT.elem.kind === "string";
|
|
5366
5395
|
let source = !scalar && (declared?.kind === "array" || declared?.kind === "record")
|
|
5367
5396
|
? lowerer.lowerCollectionKey(node, declared)
|
|
@@ -5500,10 +5529,18 @@ export function lowerMapSeedNew(lowerer, argNode, mapT) {
|
|
|
5500
5529
|
], true) };
|
|
5501
5530
|
return mapFromSeedValue(lowerer, lowerer.lowerArrayLiteral(argNode, { kind: "array", elem: tuple }), mapT);
|
|
5502
5531
|
}
|
|
5532
|
+
const input = collectionInput(lowerer, argNode);
|
|
5533
|
+
if (input) {
|
|
5534
|
+
if (!collectionDestinationMatches(lowerer, input, mapT))
|
|
5535
|
+
return null;
|
|
5536
|
+
const source = lowerCollectionInput(lowerer, input);
|
|
5537
|
+
if (source)
|
|
5538
|
+
return ingestCollection(lowerer, input, source, mapT, locOf(argNode));
|
|
5539
|
+
}
|
|
5503
5540
|
const seed = lowerer.lowerExpr(argNode);
|
|
5504
5541
|
return mapFromSeedValue(lowerer, seed, mapT);
|
|
5505
5542
|
}
|
|
5506
|
-
function mapFromSeedValue(lowerer, seed, mapT) {
|
|
5543
|
+
export function mapFromSeedValue(lowerer, seed, mapT) {
|
|
5507
5544
|
const loc = seed.loc;
|
|
5508
5545
|
if (isUnitType(seed.type)) {
|
|
5509
5546
|
return defaultAfterUndefined(seed, { kind: "mapNew", type: mapT, loc });
|