@scriptc/compiler 0.2.2 → 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/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-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/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/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 +27 -0
- package/dist/backend/llvm/call-lifetimes.js +199 -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 +259 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -0
- 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/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 +56 -7
- package/dist/backend/llvm/emitter.js +310 -37
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +24 -5
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +4 -3
- 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 +50 -5
- 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 +136 -57
- 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 +33 -31
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +61 -27
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +9 -3
- 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/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/lib-shared.js +35 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +42 -0
- package/dist/backend/llvm/local-array-reads.js +226 -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 +127 -0
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -0
- 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 +24 -6
- 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 +262 -0
- package/dist/backend/llvm/stack-unions.test.js.map +1 -0
- 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 +12 -0
- package/dist/backend/llvm/string-lifetimes.js +72 -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 +239 -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 +224 -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/containers/string-and-regexp.js +6 -0
- package/dist/frontend/lowering/containers/string-and-regexp.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 +152 -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 +7 -7
- 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 +52 -37
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +47 -43
- 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 +60 -25
- 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 +8 -2
- 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 +4 -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 +26 -0
- package/dist/ir/integer-loops.js +130 -1
- 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 +91 -0
- package/dist/ir/integer-loops.test.js.map +1 -0
- 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 +29 -22
- package/dist/ir/ir.js +59 -14
- 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 +208 -105
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +247 -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/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 +271 -17
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Lowerer } from "./lowerer.js";
|
|
2
|
+
import { type IrExpr, type SrcLoc } from "../../ir/ir.js";
|
|
3
|
+
/** Build the native Map through the same checked entry conversion as
|
|
4
|
+
* new Map(iterable), so its values use the ordinary mutable tuple layout. */
|
|
5
|
+
export declare function lowerSystemErrorMap(lowerer: Lowerer, loc: SrcLoc): IrExpr;
|
|
6
|
+
export declare function lowerSystemErrorMapValue(lowerer: Lowerer, loc: SrcLoc): IrExpr;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DYN, F64, STRING } from "../../ir/ir.js";
|
|
2
|
+
import { mapFromSeedValue } from "./lower-containers.js";
|
|
3
|
+
import { InternalCompilerError } from "../../errors.js";
|
|
4
|
+
/** Build the native Map through the same checked entry conversion as
|
|
5
|
+
* new Map(iterable), so its values use the ordinary mutable tuple layout. */
|
|
6
|
+
export function lowerSystemErrorMap(lowerer, loc) {
|
|
7
|
+
const pair = { kind: "record", shapeId: lowerer.shapes.intern([
|
|
8
|
+
{ name: "0", type: STRING }, { name: "1", type: STRING },
|
|
9
|
+
], true) };
|
|
10
|
+
const map = { kind: "map", key: F64, value: pair };
|
|
11
|
+
const entries = { kind: "libCall", fn: "util.systemErrorEntries", args: [], type: DYN, loc };
|
|
12
|
+
const result = mapFromSeedValue(lowerer, entries, map);
|
|
13
|
+
if (!result)
|
|
14
|
+
throw new InternalCompilerError("system error entries must seed a native Map");
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
export function lowerSystemErrorMapValue(lowerer, loc) {
|
|
18
|
+
const key = "%builtin.util.getSystemErrorMap";
|
|
19
|
+
let name = lowerer.builtinCallableValueFns.get(key);
|
|
20
|
+
const result = lowerSystemErrorMap(lowerer, loc);
|
|
21
|
+
if (!name) {
|
|
22
|
+
name = key;
|
|
23
|
+
lowerer.builtinCallableValueFns.set(key, name);
|
|
24
|
+
lowerer.liftedFns.push({ name, params: [], returnType: result.type, locals: [],
|
|
25
|
+
body: [{ kind: "return", value: result, loc }], loc });
|
|
26
|
+
}
|
|
27
|
+
return { kind: "closure", fnName: name, captures: [], type: { kind: "func", params: [], ret: result.type }, loc };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=lower-system-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lower-system-errors.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-system-errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAyC,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;6EAC6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAW;IAC/D,MAAM,IAAI,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACpE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;SACzD,EAAE,IAAI,CAAC,EAAE,CAAC;IACX,MAAM,GAAG,GAA6B,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC7E,MAAM,OAAO,GAAW,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACrG,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,qBAAqB,CAAC,6CAA6C,CAAC,CAAC;IAC5F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAgB,EAAE,GAAW;IACpE,MAAM,GAAG,GAAG,iCAAiC,CAAC;IAC9C,IAAI,IAAI,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,GAAG,CAAC;QACX,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC5E,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;AACpH,CAAC"}
|
|
@@ -1927,9 +1927,10 @@ export declare class Lowerer {
|
|
|
1927
1927
|
exactClassOfReceiver(expr: ts.Expression): ClassInfo | null;
|
|
1928
1928
|
lowerClassMembers(info: ClassInfo): IrFunction[];
|
|
1929
1929
|
lowerStaticFieldInits(info: ClassInfo): IrStmt[];
|
|
1930
|
-
/**
|
|
1931
|
-
*
|
|
1932
|
-
|
|
1930
|
+
/** Method-like members with their collected method-map names. Body
|
|
1931
|
+
* lowering omits abstract declarations; ABI analysis must include them
|
|
1932
|
+
* because an abstract-typed call selects the same virtual slot. */
|
|
1933
|
+
classMethodMembers(info: ClassInfo, includeAbstract?: boolean): Generator<{
|
|
1933
1934
|
mName: string;
|
|
1934
1935
|
member: ts.MethodDeclaration | ts.AccessorDeclaration;
|
|
1935
1936
|
}>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pathModuleValue } from "./lower-builtin-values.js";
|
|
1
|
+
import { lowerUtilTypeValue, pathModuleValue, utilTypesModuleValue } from "./lower-builtin-values.js";
|
|
2
2
|
import { everyExprChild, everyStmtChild, transformStmtList } from "../../ir/traverse.js";
|
|
3
3
|
import { RuntimeOptionalLocals } from "./runtime-optional-locals.js";
|
|
4
4
|
import { sanitizeUnregisteredClassTypes } from "./sanitize-class-types.js";
|
|
@@ -33,7 +33,7 @@ import * as ts from "../ts7/adapter.js";
|
|
|
33
33
|
import { literalValues } from "../literal-values.js";
|
|
34
34
|
import { discriminantOwners, literalUnionArm } from "../union-discriminants.js";
|
|
35
35
|
import { anyOpRequiresDynamicDiag, blockedBindingUseDiag, checkerPanicDiag, componentTypeDiag, isCheckerPanic, genericSignatureTypeDiag, indexSignatureTypeDiag, intersectionTypeDiag, noLoweringDiag, overloadedSignatureTypeDiag, recordShapeMismatchDiag, requiresDynamicApiDiag, requiresDynamicPackageDiag, requiresDynamicTypeDiag, unionMismatchDiag, UNSUPPORTED, unsupportedDiag, unsupportedTypeDiag, } from "../../diagnostics/diagnostic.js";
|
|
36
|
-
import { arrayOf, BOOL, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn, canCrossIslandBoundary, canExitIslandToType, canMarshalTypedFuncIntoIsland, DYN, DYN_HANDLE_KINDS, F64, isDynTypedRefType, isJsonSafeType, isJsonStringifySafeType, isSupportedMapKey, isSupportedMapValue, isUndefinedArmedUnion, isUnitType, JSVAL, NULL_T, RUNTIME_ERROR_CLASSES, STRING, typeEquals, UNDEFINED_T, VOID } from "../../ir/ir.js";
|
|
36
|
+
import { arrayOf, BOOL, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn, canCrossIslandBoundary, canExitIslandToType, canMarshalTypedFuncIntoIsland, DYN, DYN_HANDLE_KINDS, F64, isDynTypedRefType, isJsonSafeType, isJsonStringifySafeType, isPrimitiveCollectionKey, isSupportedMapKey, isSupportedMapValue, isUndefinedArmedUnion, isUnitType, JSVAL, NULL_T, RUNTIME_ERROR_CLASSES, STRING, typeEquals, UNDEFINED_T, VOID } from "../../ir/ir.js";
|
|
37
37
|
import {} from "../npm.js";
|
|
38
38
|
import { provenanceActive } from "../provenance-registry.js";
|
|
39
39
|
import { ambientDtsPath, canonicalBuiltinModule, cjsExportAssignmentOf, cjsExportDiscardReason, fallbackDtsPath, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isNodeEsmFile, isNodeTypesPath, locOf, orderedImportsOf, overridesDtsPath, npmStaticDepSf7, requireSpecOf, resolveImport, workspacePackageOfPath, } from "../program.js";
|
|
@@ -58,6 +58,7 @@ import { lowerDgramDnsModuleCall, lowerDgramMethodCall } from "./lower-dgram.js"
|
|
|
58
58
|
import { lowerNodeTestModuleCall, lowerTestDirectCall, lowerTestMethodCall, lowerTestCtxProperty } from "./lower-test.js";
|
|
59
59
|
import { lowerAssertModuleCall, lowerAssertDirectCall } from "./lower-assert.js";
|
|
60
60
|
import { lowerUtilModuleCall } from "./lower-inspect.js";
|
|
61
|
+
import { lowerSystemErrorMapValue } from "./lower-system-errors.js";
|
|
61
62
|
import { lowerComptime, comptimeBakeable, rejectComptimeCaptures, comptimeValueToIr } from "./lower-comptime.js";
|
|
62
63
|
import { lowerStmts, hasJsTypeAnnotation, noteBlockedBindings, isBlockedBinding, lowerScopedBlock, predeclareForwardCapture, predeclareForwardFnDecl, predeclareForwardVar, lowerStmt, lowerVarStatement, lowerDestructuringDecl, lowerDestructuringAssignParts, lowerBindingPattern, lowerJsvalBindingPattern, checkBindingElement, bindPatternTarget, isParseArgsDynCheckerType, lowerVarDeclList, lowerVarDecl, lowerSwitch, lowerTry, lowerExprStatement, lowerForOf, lowerForStatement } from "./lower-stmts.js";
|
|
63
64
|
import { lowerExpr, maybeNarrow, lowerUnitComparison, lowerNullishCoalesce, lowerCondition, ensureBool, requireTruthyUnion, eqComparableUnion, lowerIntrinsicProperty, lowerArrayLiteral, lowerElementAccess, lowerElementWrite, lowerRecordKeyRead, ensureString, lowerTemplate, lowerAsExpression, lowerPrefixUnary, lowerBinary, lowerCaughtTypeofTest, caughtRead, caughtLocalOf, caughtToString, lowerInstanceOf, lowerRegexLiteral, lowerFieldRead, lowerUnionProperty, fieldTarget, fieldGetExpr, fieldSetStmt, lowerFieldCompound, uniqueSymbolKeyOf } from "./lower-exprs.js";
|
|
@@ -2789,7 +2790,7 @@ export class Lowerer {
|
|
|
2789
2790
|
});
|
|
2790
2791
|
}
|
|
2791
2792
|
for (const info of this.classes.values()) {
|
|
2792
|
-
for (const { mName, member } of this.classMethodMembers(info)) {
|
|
2793
|
+
for (const { mName, member } of this.classMethodMembers(info, true)) {
|
|
2793
2794
|
if (!member.name || !(ts.isIdentifier(member.name) || ts.isStringLiteral(member.name)))
|
|
2794
2795
|
continue;
|
|
2795
2796
|
const symbol = symbolOf(member.name);
|
|
@@ -3459,21 +3460,32 @@ export class Lowerer {
|
|
|
3459
3460
|
}
|
|
3460
3461
|
return;
|
|
3461
3462
|
}
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
if (
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
const
|
|
3471
|
-
if (
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3463
|
+
// A virtual slot has one argument representation, even when
|
|
3464
|
+
// the unchecked read reaches only a base-typed call site.
|
|
3465
|
+
// Promote every implementation and its parameter bindings so
|
|
3466
|
+
// downstream calls and returns see the same optional value.
|
|
3467
|
+
const family = familyBySymbol.get(symbol);
|
|
3468
|
+
if (family)
|
|
3469
|
+
optionalMethodFamilies.add(family);
|
|
3470
|
+
for (const target of family ?? [symbol]) {
|
|
3471
|
+
const parameterShape = signatureBySymbol.get(target)?.params[i];
|
|
3472
|
+
if (!parameterShape)
|
|
3473
|
+
continue;
|
|
3474
|
+
parameterShape.type = addUndefined(parameterShape.type);
|
|
3475
|
+
const set = optionalParams.get(target) ?? new Set();
|
|
3476
|
+
const before = set.size;
|
|
3477
|
+
set.add(i);
|
|
3478
|
+
optionalParams.set(target, set);
|
|
3479
|
+
if (set.size !== before) {
|
|
3480
|
+
changed = true;
|
|
3481
|
+
const parameter = functionDeclBySymbol.get(target)?.parameters[i];
|
|
3482
|
+
if (parameter) {
|
|
3483
|
+
for (const bound of boundIdentifiersOf(parameter.name)) {
|
|
3484
|
+
const boundSymbol = symbolOf(bound);
|
|
3485
|
+
if (boundSymbol && !optionalSymbols.has(boundSymbol)) {
|
|
3486
|
+
optionalSymbols.add(boundSymbol);
|
|
3487
|
+
changed = true;
|
|
3488
|
+
}
|
|
3477
3489
|
}
|
|
3478
3490
|
}
|
|
3479
3491
|
}
|
|
@@ -8071,9 +8083,17 @@ export class Lowerer {
|
|
|
8071
8083
|
literal = literal.expression;
|
|
8072
8084
|
// Fresh literals have no previous outer identity to preserve. Build them
|
|
8073
8085
|
// for their storage layout, just as ordinary contextual literals do.
|
|
8074
|
-
if (ts.isObjectLiteralExpression(literal) || ts.isArrayLiteralExpression(literal) ||
|
|
8086
|
+
if (ts.isObjectLiteralExpression(literal) || ts.isArrayLiteralExpression(literal) ||
|
|
8087
|
+
isPrimitiveCollectionKey(expected, expected.kind === "union" ? this.unions.get(expected.unionId)?.arms : undefined)) {
|
|
8075
8088
|
return this.lowerExprExpecting(node, expected);
|
|
8076
8089
|
}
|
|
8090
|
+
const value = this.lowerExpr(node);
|
|
8091
|
+
const valueArms = value.type.kind === "union" ? this.unions.get(value.type.unionId)?.arms ?? [] : [value.type];
|
|
8092
|
+
// Primitive checks and reboxing preserve values, including tag-only
|
|
8093
|
+
// null/undefined keys. Identity restrictions apply only to references.
|
|
8094
|
+
if (valueArms.length > 0 && valueArms.every((arm) => isPrimitiveCollectionKey(arm))) {
|
|
8095
|
+
return this.coerceInto(node, value, expected);
|
|
8096
|
+
}
|
|
8077
8097
|
// Assertions can perform their own conversion before slot coercion.
|
|
8078
8098
|
// Inspect the assertion chain so a width copy cannot hide behind its
|
|
8079
8099
|
// already-converted result type. Union-arm checks only unwrap a box.
|
|
@@ -8088,7 +8108,6 @@ export class Lowerer {
|
|
|
8088
8108
|
}
|
|
8089
8109
|
asserted = asserted.expression;
|
|
8090
8110
|
}
|
|
8091
|
-
const value = this.lowerExpr(node);
|
|
8092
8111
|
const source = (value.type.kind === "union" ? this.unions.get(value.type.unionId)?.arms ?? [] : [value.type]).filter((type) => !isUnitType(type));
|
|
8093
8112
|
const target = expected.kind === "union" ? this.unions.get(expected.unionId)?.arms ?? [] : [expected];
|
|
8094
8113
|
const preservesIdentity = source.length > 0 && source.every((from) => target.some((to) => typeEquals(from, to) || (from.kind === "object" && to.kind === "object" && this.isSubclassOf(from.className, to.className))));
|
|
@@ -8749,9 +8768,10 @@ export class Lowerer {
|
|
|
8749
8768
|
lowerStaticFieldInits(info) {
|
|
8750
8769
|
return lowerStaticFieldInits(this, info);
|
|
8751
8770
|
}
|
|
8752
|
-
/**
|
|
8753
|
-
*
|
|
8754
|
-
|
|
8771
|
+
/** Method-like members with their collected method-map names. Body
|
|
8772
|
+
* lowering omits abstract declarations; ABI analysis must include them
|
|
8773
|
+
* because an abstract-typed call selects the same virtual slot. */
|
|
8774
|
+
*classMethodMembers(info, includeAbstract = false) {
|
|
8755
8775
|
if (!info.decl)
|
|
8756
8776
|
return; // builtin error classes: runtime-provided bodies
|
|
8757
8777
|
for (const member of info.decl.members) {
|
|
@@ -8775,7 +8795,8 @@ export class Lowerer {
|
|
|
8775
8795
|
if (baseName === null)
|
|
8776
8796
|
continue;
|
|
8777
8797
|
const mName = ts.isMethodDeclaration(fnLike) ? baseName : `${ts.isGetAccessor(fnLike) ? "get" : "set"}:${baseName}`;
|
|
8778
|
-
|
|
8798
|
+
const signature = info.methods.get(mName);
|
|
8799
|
+
if (!signature || (!fnLike.body && !(includeAbstract && signature.abstract)))
|
|
8779
8800
|
continue;
|
|
8780
8801
|
yield { mName, member: fnLike };
|
|
8781
8802
|
}
|
|
@@ -9946,6 +9967,9 @@ export class Lowerer {
|
|
|
9946
9967
|
// methods and properties keep their existing process lowerings.
|
|
9947
9968
|
if (stdlibGlobalNameOf(this, expr) === "process")
|
|
9948
9969
|
return null;
|
|
9970
|
+
const imported = ts.isIdentifier(expr) ? this.builtinImportOf(expr) : null;
|
|
9971
|
+
if (imported?.module === "util" && imported.member === "types")
|
|
9972
|
+
return "util/types";
|
|
9949
9973
|
const stored = ts.isIdentifier(expr)
|
|
9950
9974
|
? (this.peekLocal(expr)?.type ?? this.globalOf(expr)?.type)
|
|
9951
9975
|
: undefined;
|
|
@@ -10231,6 +10255,12 @@ export class Lowerer {
|
|
|
10231
10255
|
* deliberately narrower than table membership because many table rows
|
|
10232
10256
|
* are only dispatch sentinels for call-site-specific lowering. */
|
|
10233
10257
|
lowerBuiltinCallableValue(bi, loc) {
|
|
10258
|
+
if (bi.module === "util" && bi.member === "types")
|
|
10259
|
+
return utilTypesModuleValue(this, loc);
|
|
10260
|
+
if (bi.module === "util/types" && builtinModuleFnOf(this, bi.module, bi.member))
|
|
10261
|
+
return lowerUtilTypeValue(this, bi.member, loc);
|
|
10262
|
+
if (bi.module === "util" && bi.member === "getSystemErrorMap")
|
|
10263
|
+
return lowerSystemErrorMapValue(this, loc);
|
|
10234
10264
|
if (bi.module === "fs" && builtinModuleFnOf(this, bi.module, bi.member)?.fn === "fs.callbackCall") {
|
|
10235
10265
|
return { kind: "libCall", fn: "fs.callbackValue", args: [{ kind: "strLit", value: bi.member, type: STRING, loc }], type: DYN, loc };
|
|
10236
10266
|
}
|
|
@@ -10245,6 +10275,8 @@ export class Lowerer {
|
|
|
10245
10275
|
if (param.mode === "rest")
|
|
10246
10276
|
return { mode: "rest", type: arrayOf(param.type) };
|
|
10247
10277
|
if (param.mode === "optional") {
|
|
10278
|
+
if (param.type.kind === "dyn" && param.defaultValue === undefined)
|
|
10279
|
+
return { mode: "omittable", type: DYN };
|
|
10248
10280
|
return { mode: "omittable", type: this.withUndefinedArm(param.type), bodyType: param.type };
|
|
10249
10281
|
}
|
|
10250
10282
|
return { mode: "required", type: param.type };
|
|
@@ -10276,7 +10308,10 @@ export class Lowerer {
|
|
|
10276
10308
|
};
|
|
10277
10309
|
if (valueParam.mode !== "optional")
|
|
10278
10310
|
return ref;
|
|
10279
|
-
|
|
10311
|
+
// Checked runtime APIs consume undefined directly for omitted options.
|
|
10312
|
+
if (valueParam.type.kind === "dyn" && valueParam.defaultValue === undefined)
|
|
10313
|
+
return ref;
|
|
10314
|
+
if (valueParam.defaultValue === undefined || (valueParam.type.kind !== "string" && valueParam.type.kind !== "f64") || param.type.kind !== "union") {
|
|
10280
10315
|
throw new InternalCompilerError(`builtin callable value '${display}' has an unsupported optional default`);
|
|
10281
10316
|
}
|
|
10282
10317
|
const undefTag = this.armTag(param.type.unionId, UNDEFINED_T);
|