@scriptc/compiler 0.1.4 → 0.1.6
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 +75 -11
- package/dist/backend/c/c-emitter.d.ts +5 -1
- package/dist/backend/c/c-emitter.js +22 -9
- package/dist/backend/c/c-emitter.js.map +1 -1
- package/dist/backend/c/exprs.d.ts +2 -2
- package/dist/backend/c/exprs.js +298 -27
- package/dist/backend/c/exprs.js.map +1 -1
- package/dist/backend/c/stmts.js +5 -3
- package/dist/backend/c/stmts.js.map +1 -1
- package/dist/backend/c/types.d.ts +2 -3
- package/dist/backend/c/types.js +8 -1
- package/dist/backend/c/types.js.map +1 -1
- package/dist/backend/c/walkers.js +1 -1
- package/dist/backend/c/walkers.js.map +1 -1
- package/dist/backend/link-plan.d.ts +1 -0
- package/dist/backend/link-plan.js +2 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/dyn.js +1 -1
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.js +25 -9
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +1 -2
- package/dist/backend/llvm/expr-bytes.js +22 -17
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +1 -0
- package/dist/backend/llvm/expr-containers.js +58 -4
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +6 -2
- package/dist/backend/llvm/expr-primitives.js +22 -7
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +20 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +53 -10
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +4 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +65 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +2 -0
- package/dist/backend/native-toolchain.js +2 -1
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/targets.d.ts +3 -0
- package/dist/backend/targets.js +13 -0
- package/dist/backend/targets.js.map +1 -1
- package/dist/coverage/surface-manifest.js +12 -5
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +2 -0
- package/dist/executable/executable-cache.js +3 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -3
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.d.ts +8 -0
- package/dist/frontend/lowering/array-indexed-mutation.js +176 -0
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
- package/dist/frontend/lowering/containers/bytes.js +6 -5
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -6
- package/dist/frontend/lowering/containers/string-and-regexp.js +420 -34
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +8 -0
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/indexed-comparison.d.ts +6 -0
- package/dist/frontend/lowering/indexed-comparison.js +30 -0
- package/dist/frontend/lowering/indexed-comparison.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +5 -6
- package/dist/frontend/lowering/lower-builtins.js +24 -16
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +3 -2
- package/dist/frontend/lowering/lower-calls.js +522 -89
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +5 -29
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +15 -11
- package/dist/frontend/lowering/lower-containers.js +588 -146
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +12 -0
- package/dist/frontend/lowering/lower-exprs.js +145 -11
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-island.js +17 -6
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +2 -4
- package/dist/frontend/lowering/lower-server.js +288 -32
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +4 -4
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.js +37 -2
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.d.ts +9 -1
- package/dist/frontend/lowering/optional-arguments.js +67 -1
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.d.ts +3 -1
- package/dist/frontend/lowering/pairs-snapshot.js +12 -4
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +10 -14
- package/dist/frontend/lowering/surfaces.js +50 -28
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/npm-static-prune.d.ts +6 -0
- package/dist/frontend/npm-static-prune.js +203 -0
- package/dist/frontend/npm-static-prune.js.map +1 -0
- package/dist/frontend/npm-static-prune.test.d.ts +1 -0
- package/dist/frontend/npm-static-prune.test.js +48 -0
- package/dist/frontend/npm-static-prune.test.js.map +1 -0
- package/dist/frontend/npm.js +7 -6
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/program.js +15 -4
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/provenance.js +8 -3
- package/dist/frontend/provenance.js.map +1 -1
- package/dist/frontend/type-mapper.js +16 -5
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +13 -41
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +5 -3
- package/dist/ir/analysis.js +25 -11
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +50 -2
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/constant-tables.d.ts +17 -0
- package/dist/ir/constant-tables.js +99 -0
- package/dist/ir/constant-tables.js.map +1 -0
- package/dist/ir/constant-tables.test.d.ts +1 -0
- package/dist/ir/constant-tables.test.js +78 -0
- package/dist/ir/constant-tables.test.js.map +1 -0
- package/dist/ir/integer-ranges.d.ts +13 -0
- package/dist/ir/integer-ranges.js +122 -0
- package/dist/ir/integer-ranges.js.map +1 -0
- package/dist/ir/integer-ranges.test.d.ts +1 -0
- package/dist/ir/integer-ranges.test.js +63 -0
- package/dist/ir/integer-ranges.test.js.map +1 -0
- package/dist/ir/ir.d.ts +56 -35
- package/dist/ir/ir.js +9 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +6 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +8 -0
- package/dist/ir/scalar-records.js +216 -0
- package/dist/ir/scalar-records.js.map +1 -0
- package/dist/ir/scalar-records.test.d.ts +1 -0
- package/dist/ir/scalar-records.test.js +142 -0
- package/dist/ir/scalar-records.test.js.map +1 -0
- package/dist/ir/validate.js +135 -34
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.d.ts +1 -0
- package/dist/ir/validate.test.js +48 -0
- package/dist/ir/validate.test.js.map +1 -0
- package/dist/library/cache-primitives.d.ts +1 -1
- package/dist/library/cache-primitives.js +3 -3
- package/dist/library/cache-primitives.js.map +1 -1
- package/dist/library/fence-eval.js +11 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/library-cache.js +0 -1
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +3 -3
- package/dist/library/library-cache.test.js.map +1 -1
- package/package.json +17 -17
- package/surface-manifest.json +90 -45
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import * as ts from "../ts7/adapter.js";
|
|
2
|
-
import type { IrExpr, IrType } from "../../ir/ir.js";
|
|
2
|
+
import type { IrExpr, IrType, SrcLoc } from "../../ir/ir.js";
|
|
3
3
|
import type { Lowerer } from "./lowerer.js";
|
|
4
4
|
/** Lower an expression whose checker type is statically `undefined`/`void`. */
|
|
5
5
|
export declare function lowerStaticallyUndefinedArgument(lowerer: Lowerer, node: ts.Expression): IrExpr | null;
|
|
6
6
|
/** Preserve an explicitly undefined argument's effects, then use its default. */
|
|
7
7
|
export declare function defaultAfterUndefined(value: IrExpr, defaultValue: IrExpr): IrExpr;
|
|
8
|
+
/** Convert an omitted or supplied string-search value after preserving its effects. */
|
|
9
|
+
export declare function lowerStringSearchArgument(lowerer: Lowerer, node: ts.Expression | undefined, loc: SrcLoc): IrExpr;
|
|
10
|
+
/** Convert a lowered string-search value while preserving unit-value effects. */
|
|
11
|
+
export declare function coerceStringSearchValue(lowerer: Lowerer, value: IrExpr, node: ts.Expression, loc: SrcLoc): IrExpr;
|
|
8
12
|
/** Lower an optional argument, applying its default only to the undefined arm. */
|
|
9
13
|
export declare function lowerOptionalArgument(lowerer: Lowerer, node: ts.Expression, expected: IrType, defaultValue: IrExpr): IrExpr;
|
|
14
|
+
/** Complete an omitted or statically undefined position without dropping argument effects. */
|
|
15
|
+
export declare function lowerPositionArgument(lowerer: Lowerer, node: ts.Expression | undefined, defaultValue: IrExpr): IrExpr;
|
|
16
|
+
/** Convert a stabilized position after the method has evaluated its arguments. */
|
|
17
|
+
export declare function positionNumber(lowerer: Lowerer, value: IrExpr, defaultValue: IrExpr, node: ts.Expression, subject: string): IrExpr;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as ts from "../ts7/adapter.js";
|
|
2
|
-
import { typeEquals } from "../../ir/ir.js";
|
|
2
|
+
import { BOOL, F64, isUnitType, typeEquals } from "../../ir/ir.js";
|
|
3
|
+
import { numLit, strLit } from "../../ir/build.js";
|
|
3
4
|
import { isSafeToDiscard } from "./expressions/evaluation-safety.js";
|
|
4
5
|
/** Lower an expression whose checker type is statically `undefined`/`void`. */
|
|
5
6
|
export function lowerStaticallyUndefinedArgument(lowerer, node) {
|
|
@@ -38,6 +39,23 @@ export function defaultAfterUndefined(value, defaultValue) {
|
|
|
38
39
|
loc: value.loc,
|
|
39
40
|
};
|
|
40
41
|
}
|
|
42
|
+
/** Convert an omitted or supplied string-search value after preserving its effects. */
|
|
43
|
+
export function lowerStringSearchArgument(lowerer, node, loc) {
|
|
44
|
+
const absent = strLit("undefined", loc);
|
|
45
|
+
if (!node)
|
|
46
|
+
return absent;
|
|
47
|
+
const undefinedArg = lowerStaticallyUndefinedArgument(lowerer, node);
|
|
48
|
+
if (undefinedArg)
|
|
49
|
+
return defaultAfterUndefined(undefinedArg, absent);
|
|
50
|
+
return coerceStringSearchValue(lowerer, lowerer.lowerExpr(node), node, loc);
|
|
51
|
+
}
|
|
52
|
+
/** Convert a lowered string-search value while preserving unit-value effects. */
|
|
53
|
+
export function coerceStringSearchValue(lowerer, value, node, loc) {
|
|
54
|
+
if (isUnitType(value.type)) {
|
|
55
|
+
return defaultAfterUndefined(value, strLit(value.type.kind === "nullT" ? "null" : "undefined", loc));
|
|
56
|
+
}
|
|
57
|
+
return lowerer.ensureString(value, node);
|
|
58
|
+
}
|
|
41
59
|
/** Lower an optional argument, applying its default only to the undefined arm. */
|
|
42
60
|
export function lowerOptionalArgument(lowerer, node, expected, defaultValue) {
|
|
43
61
|
const undefinedArg = lowerStaticallyUndefinedArgument(lowerer, node);
|
|
@@ -54,4 +72,52 @@ export function lowerOptionalArgument(lowerer, node, expected, defaultValue) {
|
|
|
54
72
|
}
|
|
55
73
|
return lowerer.coerceInto(node, value, expected);
|
|
56
74
|
}
|
|
75
|
+
/** Complete an omitted or statically undefined position without dropping argument effects. */
|
|
76
|
+
export function lowerPositionArgument(lowerer, node, defaultValue) {
|
|
77
|
+
if (!node)
|
|
78
|
+
return defaultValue;
|
|
79
|
+
const undefinedArg = lowerStaticallyUndefinedArgument(lowerer, node);
|
|
80
|
+
if (undefinedArg)
|
|
81
|
+
return defaultAfterUndefined(undefinedArg, defaultValue);
|
|
82
|
+
const value = lowerer.lowerExpr(node);
|
|
83
|
+
if (isUnitType(value.type) || value.type.kind === "void") {
|
|
84
|
+
return defaultAfterUndefined(value, value.type.kind === "nullT" ? numLit(0, value.loc) : defaultValue);
|
|
85
|
+
}
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
/** Convert a stabilized position after the method has evaluated its arguments. */
|
|
89
|
+
export function positionNumber(lowerer, value, defaultValue, node, subject) {
|
|
90
|
+
const loc = value.loc;
|
|
91
|
+
switch (value.type.kind) {
|
|
92
|
+
case "f64": return value;
|
|
93
|
+
case "string": return { kind: "libCall", fn: "num.fromString", args: [value], type: F64, loc };
|
|
94
|
+
case "bool": return { kind: "ternary", cond: value, then: numLit(1, loc), else_: numLit(0, loc), type: F64, loc };
|
|
95
|
+
case "nullT": return numLit(0, loc);
|
|
96
|
+
case "undefinedT": return defaultValue;
|
|
97
|
+
case "jsval": return { kind: "jsExit", value, type: F64, loc };
|
|
98
|
+
case "union": {
|
|
99
|
+
const unionId = value.type.unionId;
|
|
100
|
+
const arms = lowerer.unions.get(unionId).arms;
|
|
101
|
+
let result = defaultValue;
|
|
102
|
+
for (let tag = arms.length - 1; tag >= 0; tag--) {
|
|
103
|
+
const narrowed = { kind: "unionNarrow", unionId, tag, value, type: arms[tag], loc };
|
|
104
|
+
const converted = positionNumber(lowerer, narrowed, defaultValue, node, subject);
|
|
105
|
+
result = tag === arms.length - 1 ? converted : {
|
|
106
|
+
kind: "ternary",
|
|
107
|
+
cond: { kind: "unionIsTag", unionId, tag, value, negated: false, type: BOOL, loc },
|
|
108
|
+
then: converted, else_: result, type: F64, loc,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
case "dyn": return {
|
|
114
|
+
kind: "ternary",
|
|
115
|
+
cond: { kind: "dynTest", test: "undefined", value, type: BOOL, loc },
|
|
116
|
+
then: defaultValue,
|
|
117
|
+
else_: { kind: "libCall", fn: "dyn.toNumberCoerce", args: [value], type: F64, loc },
|
|
118
|
+
type: F64, loc,
|
|
119
|
+
};
|
|
120
|
+
default: return lowerer.noLowering(`${subject} of '${lowerer.fmt(value.type)}' values`, node);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
57
123
|
//# sourceMappingURL=optional-arguments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional-arguments.js","sourceRoot":"","sources":["../../../src/frontend/lowering/optional-arguments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"optional-arguments.js","sourceRoot":"","sources":["../../../src/frontend/lowering/optional-arguments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { type IrExpr, type IrLibFn, type IrParam, type IrType, type SrcLoc } from "../../ir/ir.js";
|
|
2
2
|
import type { Lowerer } from "./lowerer.js";
|
|
3
3
|
/** Intern a helper that materializes a pure string-index record from a flat
|
|
4
|
-
* `[key, value, ...]` array
|
|
4
|
+
* `[key, value, ...]` array. Distinct HTTP records use the pair keys and
|
|
5
|
+
* look up each key's full string[] value. */
|
|
5
6
|
export declare function pairsSnapshotHelper(lowerer: Lowerer, shapeId: string, loc: SrcLoc, options: {
|
|
6
7
|
keyPrefix: string;
|
|
7
8
|
libCall: IrLibFn;
|
|
8
9
|
params?: IrParam[];
|
|
9
10
|
callArgs?: IrExpr[];
|
|
10
11
|
indexValueOk?: (indexValue: IrType) => boolean;
|
|
12
|
+
lookupValue?: "http.reqHeaderValues" | "http.reqTrailerValues";
|
|
11
13
|
}): string | null;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { arrayOf, BOOL, F64, STRING } from "../../ir/ir.js";
|
|
2
2
|
import { numLit, varRef } from "../../ir/build.js";
|
|
3
3
|
/** Intern a helper that materializes a pure string-index record from a flat
|
|
4
|
-
* `[key, value, ...]` array
|
|
4
|
+
* `[key, value, ...]` array. Distinct HTTP records use the pair keys and
|
|
5
|
+
* look up each key's full string[] value. */
|
|
5
6
|
export function pairsSnapshotHelper(lowerer, shapeId, loc, options) {
|
|
6
7
|
const shape = lowerer.shapes.get(shapeId);
|
|
7
8
|
if (!shape || shape.tuple || shape.fields.length > 0 || !shape.indexValue)
|
|
@@ -11,8 +12,13 @@ export function pairsSnapshotHelper(lowerer, shapeId, loc, options) {
|
|
|
11
12
|
return null;
|
|
12
13
|
if (indexValue.kind !== "union")
|
|
13
14
|
return null;
|
|
14
|
-
const stringTag = lowerer.armTag(indexValue.unionId, STRING);
|
|
15
|
-
if (
|
|
15
|
+
const stringTag = options.lookupValue ? -1 : lowerer.armTag(indexValue.unionId, STRING);
|
|
16
|
+
if (options.lookupValue) {
|
|
17
|
+
const arrayValue = lowerer.withUndefinedArm(arrayOf(STRING));
|
|
18
|
+
if (arrayValue.kind !== "union" || indexValue.unionId !== arrayValue.unionId)
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
else if (stringTag < 0)
|
|
16
22
|
return null;
|
|
17
23
|
const key = `${options.keyPrefix}.snapshot:${shapeId}`;
|
|
18
24
|
const existing = lowerer.widthHelpers.get(key);
|
|
@@ -71,7 +77,9 @@ export function pairsSnapshotHelper(lowerer, shapeId, loc, options) {
|
|
|
71
77
|
obj: varRef("out.0", recordType, loc),
|
|
72
78
|
shapeId,
|
|
73
79
|
key: pairAt(0),
|
|
74
|
-
value:
|
|
80
|
+
value: options.lookupValue
|
|
81
|
+
? { kind: "libCall", fn: options.lookupValue, args: [...(options.callArgs ?? []), pairAt(0)], type: indexValue, loc }
|
|
82
|
+
: { kind: "unionWrap", unionId: indexValue.unionId, tag: stringTag, value: pairAt(1), type: indexValue, loc },
|
|
75
83
|
loc,
|
|
76
84
|
}],
|
|
77
85
|
loc,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pairs-snapshot.js","sourceRoot":"","sources":["../../../src/frontend/lowering/pairs-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAwD,MAAM,EAAe,MAAM,gBAAgB,CAAC;AAC/H,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGnD;
|
|
1
|
+
{"version":3,"file":"pairs-snapshot.js","sourceRoot":"","sources":["../../../src/frontend/lowering/pairs-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -103,6 +103,8 @@ export declare const STR_METHODS: Record<string, {
|
|
|
103
103
|
minArgs: number;
|
|
104
104
|
maxArgs: number;
|
|
105
105
|
}>;
|
|
106
|
+
/** String index reads return an undefined arm and compose the existing UTF-16 intrinsics. */
|
|
107
|
+
export declare const STRING_INDEX_METHODS: Set<string>;
|
|
106
108
|
/** One member of the island-backed ambient surface: declared argument
|
|
107
109
|
* types (tsc enforces them at call sites; the arity double-checks the
|
|
108
110
|
* table against the ambient file) and the validated island-exit target the
|
|
@@ -114,8 +116,8 @@ export interface IslandFnEntry {
|
|
|
114
116
|
export declare const boundaryIntoIslandMsg: (typeName: string) => string;
|
|
115
117
|
export declare const boundaryOutOfIslandMsg: (typeName: string) => string;
|
|
116
118
|
/** The island-backed surface — standard-library APIs with no static
|
|
117
|
-
* runtime implementation (Math methods
|
|
118
|
-
*
|
|
119
|
+
* runtime implementation (Math methods outside STATIC_MATH_FNS,
|
|
120
|
+
* number/string methods beyond the
|
|
119
121
|
* intrinsic set, parseFloat, ...). ONE table drives both sides of the
|
|
120
122
|
* gate: under --dynamic each entry lowers to marshal → engine execution →
|
|
121
123
|
* validated exit to the declared return type; without the flag each use
|
|
@@ -132,8 +134,8 @@ export declare const ISLAND_SURFACE: {
|
|
|
132
134
|
/** `Math.<fn>(...)` lowers to callMethod(globalGet("Math"), fn, args);
|
|
133
135
|
* Math.PI and Math.E are compile-time numeric literals in STATIC_MATH_PROPS;
|
|
134
136
|
* remaining Math properties retain island/fence behavior.
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
+
* The entries here handle untabled scalar call shapes where --dynamic is
|
|
138
|
+
* available; STATIC_MATH_FNS handles the ordinary typed calls first. */
|
|
137
139
|
math: {
|
|
138
140
|
fns: Record<string, IslandFnEntry | undefined>;
|
|
139
141
|
props: Record<string, IrType | undefined>;
|
|
@@ -164,16 +166,10 @@ export declare const ISLAND_SURFACE: {
|
|
|
164
166
|
* their island/fence behavior through ISLAND_SURFACE.math.props and the
|
|
165
167
|
* generic standard-library member fence. */
|
|
166
168
|
export declare const STATIC_MATH_PROPS: Record<string, number | undefined>;
|
|
167
|
-
/** Math members with a STATIC lowering
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* (lowerIslandMethodCall), so the tabled arities compile statically and
|
|
172
|
-
* other arities keep the island/fence story — except min/max, whose
|
|
173
|
-
* variadic spelling lowers at ANY plain arity (the n-ary left fold of
|
|
174
|
-
* the scalar compare; zero arguments answer the fold's ∓Infinity seed);
|
|
175
|
-
* unioned with the island table for the methods-as-values fence
|
|
176
|
-
* (lowerMathProperty). */
|
|
169
|
+
/** Math members with a STATIC lowering. Most use the tabled arity; min/max
|
|
170
|
+
* accept any plain arity, and hypot accepts any arity including number[]
|
|
171
|
+
* spreads. Checked before the island table by lowerIslandMethodCall and
|
|
172
|
+
* included in the methods-as-values fence by lowerMathProperty. */
|
|
177
173
|
export declare const STATIC_MATH_FNS: Record<string, {
|
|
178
174
|
fn: IrLibFn;
|
|
179
175
|
arity: number;
|
|
@@ -261,6 +261,8 @@ export const ARRAY_METHODS = new Set([
|
|
|
261
261
|
"unshift",
|
|
262
262
|
"pop",
|
|
263
263
|
"reverse",
|
|
264
|
+
"fill",
|
|
265
|
+
"copyWithin",
|
|
264
266
|
"concat",
|
|
265
267
|
"map",
|
|
266
268
|
"filter",
|
|
@@ -273,9 +275,11 @@ export const ARRAY_METHODS = new Set([
|
|
|
273
275
|
"every",
|
|
274
276
|
"at",
|
|
275
277
|
"flatMap",
|
|
278
|
+
"flat",
|
|
276
279
|
"reduce",
|
|
277
280
|
"reduceRight",
|
|
278
281
|
"indexOf",
|
|
282
|
+
"lastIndexOf",
|
|
279
283
|
"includes",
|
|
280
284
|
"join",
|
|
281
285
|
"slice",
|
|
@@ -330,19 +334,19 @@ export const COMPOUND_ASSIGN_OPS = {
|
|
|
330
334
|
* parameters) that typecheck but have no lowering — those forms are fenced
|
|
331
335
|
* per site instead of silently dropping arguments. */
|
|
332
336
|
export const STR_METHODS = {
|
|
333
|
-
charCodeAt: { method: "charCodeAt", result: F64, minArgs:
|
|
334
|
-
charAt: { method: "charAt", result: STRING, minArgs:
|
|
335
|
-
indexOf: { method: "indexOf", result: F64, minArgs:
|
|
337
|
+
charCodeAt: { method: "charCodeAt", result: F64, minArgs: 0, maxArgs: 1 },
|
|
338
|
+
charAt: { method: "charAt", result: STRING, minArgs: 0, maxArgs: 1 },
|
|
339
|
+
indexOf: { method: "indexOf", result: F64, minArgs: 0, maxArgs: 2 },
|
|
336
340
|
// includes with a position argument is indexOf's clamp exactly (the
|
|
337
341
|
// spec routes both through StringIndexOf) — the emitter composes
|
|
338
342
|
// scr_str_index_of(...) != -1 for the two-argument form.
|
|
339
|
-
includes: { method: "includes", result: BOOL, minArgs:
|
|
340
|
-
startsWith: { method: "startsWith", result: BOOL, minArgs:
|
|
341
|
-
endsWith: { method: "endsWith", result: BOOL, minArgs:
|
|
343
|
+
includes: { method: "includes", result: BOOL, minArgs: 0, maxArgs: 2 },
|
|
344
|
+
startsWith: { method: "startsWith", result: BOOL, minArgs: 0, maxArgs: 2 },
|
|
345
|
+
endsWith: { method: "endsWith", result: BOOL, minArgs: 0, maxArgs: 2 },
|
|
342
346
|
slice: { method: "slice", result: STRING, minArgs: 0, maxArgs: 2 },
|
|
343
347
|
// substring: slice's clamp-and-swap sibling (negatives clamp to 0
|
|
344
348
|
// instead of counting from the end; start > end swaps).
|
|
345
|
-
substring: { method: "substring", result: STRING, minArgs:
|
|
349
|
+
substring: { method: "substring", result: STRING, minArgs: 0, maxArgs: 2 },
|
|
346
350
|
repeat: { method: "repeat", result: STRING, minArgs: 1, maxArgs: 1 },
|
|
347
351
|
trim: { method: "trim", result: STRING, minArgs: 0, maxArgs: 0 },
|
|
348
352
|
trimStart: { method: "trimStart", result: STRING, minArgs: 0, maxArgs: 0 },
|
|
@@ -357,11 +361,10 @@ export const STR_METHODS = {
|
|
|
357
361
|
// Empty separator splits per UTF-16 code unit —
|
|
358
362
|
// astral halves become U+FFFD (SEMANTICS.md divergence 2, the same
|
|
359
363
|
// substitution the island's boundary marshal applied).
|
|
360
|
-
split: { method: "split", result: arrayOf(STRING), minArgs:
|
|
361
|
-
//
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
padEnd: { method: "padEnd", result: STRING, minArgs: 1, maxArgs: 2 },
|
|
364
|
+
split: { method: "split", result: arrayOf(STRING), minArgs: 0, maxArgs: 2 },
|
|
365
|
+
// Padding completes omitted lengths and fill strings in its lowering.
|
|
366
|
+
padStart: { method: "padStart", result: STRING, minArgs: 0, maxArgs: 2 },
|
|
367
|
+
padEnd: { method: "padEnd", result: STRING, minArgs: 0, maxArgs: 2 },
|
|
365
368
|
// The lre-backed pair (ECMA Default Case Conversion, final sigma
|
|
366
369
|
// included — scr_regex.c): static now, no island needed; their presence
|
|
367
370
|
// flips the regex LINK switch (moduleUsesRegex).
|
|
@@ -374,6 +377,8 @@ export const STR_METHODS = {
|
|
|
374
377
|
isWellFormed: { method: "isWellFormed", result: BOOL, minArgs: 0, maxArgs: 0 },
|
|
375
378
|
toWellFormed: { method: "toWellFormed", result: STRING, minArgs: 0, maxArgs: 0 },
|
|
376
379
|
};
|
|
380
|
+
/** String index reads return an undefined arm and compose the existing UTF-16 intrinsics. */
|
|
381
|
+
export const STRING_INDEX_METHODS = new Set(["at", "codePointAt"]);
|
|
377
382
|
const ISL_N1 = { args: [F64], ret: F64 };
|
|
378
383
|
const ISL_N2 = { args: [F64, F64], ret: F64 };
|
|
379
384
|
export const boundaryIntoIslandMsg = (typeName) => `passing a value of type '${typeName}' into dynamically-executed ('any'-typed) code ` +
|
|
@@ -383,8 +388,8 @@ export const boundaryOutOfIslandMsg = (typeName) => `using an 'any' value where
|
|
|
383
388
|
`(an 'any' value can only exit to numbers, strings, booleans, JSON-safe records/arrays/unions, ` +
|
|
384
389
|
`and 'T | undefined' over those)`;
|
|
385
390
|
/** The island-backed surface — standard-library APIs with no static
|
|
386
|
-
* runtime implementation (Math methods
|
|
387
|
-
*
|
|
391
|
+
* runtime implementation (Math methods outside STATIC_MATH_FNS,
|
|
392
|
+
* number/string methods beyond the
|
|
388
393
|
* intrinsic set, parseFloat, ...). ONE table drives both sides of the
|
|
389
394
|
* gate: under --dynamic each entry lowers to marshal → engine execution →
|
|
390
395
|
* validated exit to the declared return type; without the flag each use
|
|
@@ -401,11 +406,10 @@ export const ISLAND_SURFACE = {
|
|
|
401
406
|
/** `Math.<fn>(...)` lowers to callMethod(globalGet("Math"), fn, args);
|
|
402
407
|
* Math.PI and Math.E are compile-time numeric literals in STATIC_MATH_PROPS;
|
|
403
408
|
* remaining Math properties retain island/fence behavior.
|
|
404
|
-
*
|
|
405
|
-
*
|
|
409
|
+
* The entries here handle untabled scalar call shapes where --dynamic is
|
|
410
|
+
* available; STATIC_MATH_FNS handles the ordinary typed calls first. */
|
|
406
411
|
math: {
|
|
407
|
-
//
|
|
408
|
-
// (STATIC_MATH_FNS below).
|
|
412
|
+
// The static table below handles these methods at its admitted arities.
|
|
409
413
|
fns: {
|
|
410
414
|
abs: ISL_N1, acos: ISL_N1, asin: ISL_N1, atan: ISL_N1, atan2: ISL_N2,
|
|
411
415
|
cbrt: ISL_N1, ceil: ISL_N1, cos: ISL_N1, exp: ISL_N1,
|
|
@@ -456,16 +460,10 @@ export const STATIC_MATH_PROPS = {
|
|
|
456
460
|
PI: 3.141592653589793,
|
|
457
461
|
E: 2.718281828459045,
|
|
458
462
|
};
|
|
459
|
-
/** Math members with a STATIC lowering
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
*
|
|
463
|
-
* (lowerIslandMethodCall), so the tabled arities compile statically and
|
|
464
|
-
* other arities keep the island/fence story — except min/max, whose
|
|
465
|
-
* variadic spelling lowers at ANY plain arity (the n-ary left fold of
|
|
466
|
-
* the scalar compare; zero arguments answer the fold's ∓Infinity seed);
|
|
467
|
-
* unioned with the island table for the methods-as-values fence
|
|
468
|
-
* (lowerMathProperty). */
|
|
463
|
+
/** Math members with a STATIC lowering. Most use the tabled arity; min/max
|
|
464
|
+
* accept any plain arity, and hypot accepts any arity including number[]
|
|
465
|
+
* spreads. Checked before the island table by lowerIslandMethodCall and
|
|
466
|
+
* included in the methods-as-values fence by lowerMathProperty. */
|
|
469
467
|
export const STATIC_MATH_FNS = {
|
|
470
468
|
floor: { fn: "math.floor", arity: 1 },
|
|
471
469
|
abs: { fn: "math.abs", arity: 1 },
|
|
@@ -478,6 +476,22 @@ export const STATIC_MATH_FNS = {
|
|
|
478
476
|
min: { fn: "math.min", arity: 2 },
|
|
479
477
|
max: { fn: "math.max", arity: 2 },
|
|
480
478
|
random: { fn: "math.random", arity: 0 },
|
|
479
|
+
sin: { fn: "math.sin", arity: 1 },
|
|
480
|
+
cos: { fn: "math.cos", arity: 1 },
|
|
481
|
+
tan: { fn: "math.tan", arity: 1 },
|
|
482
|
+
asin: { fn: "math.asin", arity: 1 },
|
|
483
|
+
acos: { fn: "math.acos", arity: 1 },
|
|
484
|
+
atan: { fn: "math.atan", arity: 1 },
|
|
485
|
+
cbrt: { fn: "math.cbrt", arity: 1 },
|
|
486
|
+
sign: { fn: "math.sign", arity: 1 },
|
|
487
|
+
exp: { fn: "math.exp", arity: 1 },
|
|
488
|
+
sqrt: { fn: "math.sqrt", arity: 1 },
|
|
489
|
+
log: { fn: "math.log", arity: 1 },
|
|
490
|
+
log2: { fn: "math.log2", arity: 1 },
|
|
491
|
+
log10: { fn: "math.log10", arity: 1 },
|
|
492
|
+
atan2: { fn: "math.atan2", arity: 2 },
|
|
493
|
+
pow: { fn: "math.pow", arity: 2 },
|
|
494
|
+
hypot: { fn: "math.hypotArr", arity: 2 },
|
|
481
495
|
};
|
|
482
496
|
/** Number prototype methods with dedicated STATIC lowering paths. The
|
|
483
497
|
* libCall spellings are also the compiled-graph witnesses used by library
|
|
@@ -828,6 +842,7 @@ export const BUILTIN_MODULE_FNS = {
|
|
|
828
842
|
* thread machinery) and never runs as a cluster worker (cluster forks the
|
|
829
843
|
* node binary itself) — Node's own answers for a directly-run script. */
|
|
830
844
|
export const BUILTIN_MODULE_CONSTS = {
|
|
845
|
+
http: { maxHeaderSize: 16384 },
|
|
831
846
|
path: { sep: "/", delimiter: ":" },
|
|
832
847
|
"path/posix": { sep: "/", delimiter: ":" },
|
|
833
848
|
"path/win32": { sep: "\\", delimiter: ";" },
|
|
@@ -1035,6 +1050,13 @@ export const AMBIENT_SURFACE_FNS = [
|
|
|
1035
1050
|
fns: ["process.columns"],
|
|
1036
1051
|
note: "the columns read on the process stdio streams (terminal geometry)",
|
|
1037
1052
|
},
|
|
1053
|
+
{
|
|
1054
|
+
id: "node-builtin.process.rows",
|
|
1055
|
+
kind: "node-builtin",
|
|
1056
|
+
name: "process.rows",
|
|
1057
|
+
fns: ["process.rows"],
|
|
1058
|
+
note: "the rows read on process.stdout/stderr (terminal geometry)",
|
|
1059
|
+
},
|
|
1038
1060
|
{
|
|
1039
1061
|
id: "node-builtin.process.kill",
|
|
1040
1062
|
kind: "node-builtin",
|