@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
|
@@ -11,7 +11,6 @@ import { literalUnionArm } from "../union-discriminants.js";
|
|
|
11
11
|
import * as ts from "../ts7/adapter.js";
|
|
12
12
|
import { dirname } from "node:path";
|
|
13
13
|
import * as posix from "node:path/posix";
|
|
14
|
-
import { pathToFileURL } from "node:url";
|
|
15
14
|
import { captureContextArguments } from "./function-context.js";
|
|
16
15
|
import { OBJECT_CALLABLE_VALUES } from "./surfaces.js";
|
|
17
16
|
import { wasiGuestPath } from "../../wasi-paths.js";
|
|
@@ -54,11 +53,12 @@ import { classSymbolKeyOf } from "./symbol-fields.js";
|
|
|
54
53
|
import { lowerClassMethodValue } from "./class-method-values.js";
|
|
55
54
|
import { classInstanceOf } from "./class-dynamic-dispatch.js";
|
|
56
55
|
import { lowerGlobalValue } from "./lower-global-value.js";
|
|
56
|
+
import { importMetaField, isImportMeta } from "./import-meta.js";
|
|
57
57
|
import { lowerClassPrototypeData, lowerClassPrototypeComputedAssignment } from "./class-prototypes.js";
|
|
58
58
|
import { isClassCallback } from "./class-callbacks.js";
|
|
59
59
|
import { builtinPrototypeMethod, lowerArrayIsArrayValue, lowerCheckedPredicateValue, lowerNumberParserValue, lowerObjectAssignValue, lowerStringCodesValue } from "./lower-builtin-values.js";
|
|
60
60
|
import { lowerArrayFromValue } from "./lower-containers.js";
|
|
61
|
-
import { lowerPerfHooksTypeof } from "./lower-builtins.js";
|
|
61
|
+
import { lowerPerfHooksTypeof, lowerUrlAssignment } from "./lower-builtins.js";
|
|
62
62
|
import { jsBindingHasOpenWrites } from "./lower-stmts.js";
|
|
63
63
|
import { checkedClassInstanceOf } from "./class-construction.js";
|
|
64
64
|
import { lowerModuleNamespaceElement } from "./module-namespace-elements.js";
|
|
@@ -125,6 +125,25 @@ function isParseArgsDynProperty(lowerer, expr) {
|
|
|
125
125
|
return false;
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
|
+
function isStatFsDynProperty(lowerer, expr) {
|
|
129
|
+
if (!["type", "bsize", "blocks", "bfree", "bavail", "files", "ffree", "bigint"].includes(expr.name.text))
|
|
130
|
+
return false;
|
|
131
|
+
const symbol = lowerer.checker.getSymbolAtLocation(expr.name);
|
|
132
|
+
return !!symbol && lowerer.checker.declarationsOf(symbol).some((declaration) => {
|
|
133
|
+
if (!lowerer.isStdlibFile(declaration.getSourceFile()))
|
|
134
|
+
return false;
|
|
135
|
+
const parent = declaration.parent;
|
|
136
|
+
if (!ts.isInterfaceDeclaration(parent))
|
|
137
|
+
return false;
|
|
138
|
+
if (expr.name.text === "bigint" ? parent.name.text !== "StatFsOptions" : !["StatsFsBase", "StatsFs", "BigIntStatsFs"].includes(parent.name.text))
|
|
139
|
+
return false;
|
|
140
|
+
for (let node = parent.parent; node; node = node.parent) {
|
|
141
|
+
if (ts.isModuleDeclaration(node) && ts.isStringLiteral(node.name))
|
|
142
|
+
return node.name.text === "fs" || node.name.text === "node:fs";
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
128
147
|
export function lowerExpr(lowerer, expr) {
|
|
129
148
|
if (lowerExprDepth >= LOWER_EXPR_MAX_DEPTH) {
|
|
130
149
|
lowerer.unsupported("SC1090", expr, `expressions nested deeper than ${LOWER_EXPR_MAX_DEPTH} levels`);
|
|
@@ -2031,16 +2050,13 @@ function lowerExprInner(lowerer, expr) {
|
|
|
2031
2050
|
return nsUndefRead(lowerer, ambientRoot.text, expr, t);
|
|
2032
2051
|
}
|
|
2033
2052
|
}
|
|
2034
|
-
//
|
|
2035
|
-
//
|
|
2036
|
-
//
|
|
2037
|
-
// the generic dyn receiver path below. Provenance is limited to the
|
|
2038
|
-
// node:util parseArgs family; every other stdlib member keeps its
|
|
2039
|
-
// ordinary surface fence.
|
|
2053
|
+
// Checked-dynamic stdlib results retain ambient property symbols,
|
|
2054
|
+
// including parseArgs tokens narrowed to anonymous union arms. Only
|
|
2055
|
+
// members owned by these implemented families bypass the stdlib fence.
|
|
2040
2056
|
const segmentDataSymbol = lowerer.typeOf(expr.expression).getSymbol();
|
|
2041
2057
|
const segmentDataProperty = segmentDataSymbol?.name === "SegmentData" && lowerer.isStdlibSymbol(segmentDataSymbol) &&
|
|
2042
2058
|
["segment", "index", "input", "isWordLike"].includes(expr.name.text);
|
|
2043
|
-
if (isParseArgsDynProperty(lowerer, expr) || segmentDataProperty) {
|
|
2059
|
+
if (isParseArgsDynProperty(lowerer, expr) || isStatFsDynProperty(lowerer, expr) || segmentDataProperty) {
|
|
2044
2060
|
const recv = lowerer.lowerExpr(expr.expression);
|
|
2045
2061
|
if (recv.type.kind === "dyn") {
|
|
2046
2062
|
const key = {
|
|
@@ -2201,38 +2217,7 @@ function moduleFileName(lowerer, sf) {
|
|
|
2201
2217
|
: sf.fileName;
|
|
2202
2218
|
}
|
|
2203
2219
|
function importMetaProperty(lowerer, expr) {
|
|
2204
|
-
|
|
2205
|
-
return null;
|
|
2206
|
-
const meta = expr.expression;
|
|
2207
|
-
if (meta.keywordToken !== ts.SyntaxKind.ImportKeyword || meta.name.text !== "meta")
|
|
2208
|
-
return null;
|
|
2209
|
-
const sf = expr.getSourceFile();
|
|
2210
|
-
const fileName = moduleFileName(lowerer, sf);
|
|
2211
|
-
switch (expr.name.text) {
|
|
2212
|
-
case "env":
|
|
2213
|
-
return dynUndefinedExpr(locOf(expr));
|
|
2214
|
-
case "url":
|
|
2215
|
-
return {
|
|
2216
|
-
kind: "strLit",
|
|
2217
|
-
value: pathToFileURL(fileName, { windows: lowerer.targetPlatform === "win32" }).href,
|
|
2218
|
-
type: STRING,
|
|
2219
|
-
loc: locOf(expr),
|
|
2220
|
-
};
|
|
2221
|
-
case "filename":
|
|
2222
|
-
return { kind: "strLit", value: fileName, type: STRING, loc: locOf(expr) };
|
|
2223
|
-
case "dirname":
|
|
2224
|
-
return {
|
|
2225
|
-
kind: "strLit",
|
|
2226
|
-
value: lowerer.targetPlatform === "wasi" ? posix.dirname(fileName) : dirname(fileName),
|
|
2227
|
-
type: STRING,
|
|
2228
|
-
loc: locOf(expr),
|
|
2229
|
-
};
|
|
2230
|
-
case "main":
|
|
2231
|
-
return { kind: "boolLit", value: sf === lowerer.entry, type: BOOL, loc: locOf(expr) };
|
|
2232
|
-
default:
|
|
2233
|
-
lowerer.unsupported("SC1090", expr, `'import.meta.${expr.name.text}' (only url, filename, dirname, and main are supported in static ESM)`);
|
|
2234
|
-
return null;
|
|
2235
|
-
}
|
|
2220
|
+
return isImportMeta(expr.expression) ? importMetaField(lowerer, expr, expr.name.text) : null;
|
|
2236
2221
|
}
|
|
2237
2222
|
/** `c ? a : b`. An explicit destination constructs each branch at that
|
|
2238
2223
|
* layout before joining it. Without one, retain the expression's inferred
|
|
@@ -4495,6 +4480,12 @@ export function lowerOptionalNumber(lowerer, operand, loc, narrowedNode) {
|
|
|
4495
4480
|
* string-key element access (`a["length"]`) and string indexing (`s[0]`
|
|
4496
4481
|
* typechecks against the lib's index signature; use .charAt) stay out. */
|
|
4497
4482
|
export function lowerElementAccess(lowerer, expr) {
|
|
4483
|
+
if (isImportMeta(expr.expression)) {
|
|
4484
|
+
const name = lowerer.foldedStringKeyOf(expr.argumentExpression);
|
|
4485
|
+
if (name === null)
|
|
4486
|
+
lowerer.unsupported("SC1090", expr, "import.meta with a runtime-computed key (use a statically-known metadata field)");
|
|
4487
|
+
return importMetaField(lowerer, expr, name);
|
|
4488
|
+
}
|
|
4498
4489
|
// `a?.[i]`: the guard lowers as an optional-chain step around the
|
|
4499
4490
|
// plain element read below.
|
|
4500
4491
|
if (expr.questionDotToken && !lowerer.chainHandled.has(expr)) {
|
|
@@ -6591,6 +6582,9 @@ export function lowerBinary(lowerer, expr) {
|
|
|
6591
6582
|
if (cacheHas)
|
|
6592
6583
|
return cacheHas;
|
|
6593
6584
|
if (op === ts.SyntaxKind.EqualsToken || (op >= ts.SyntaxKind.FirstCompoundAssignment && op <= ts.SyntaxKind.LastCompoundAssignment)) {
|
|
6585
|
+
const urlWrite = lowerUrlAssignment(lowerer, expr);
|
|
6586
|
+
if (urlWrite)
|
|
6587
|
+
return urlWrite;
|
|
6594
6588
|
if (op === ts.SyntaxKind.EqualsToken) {
|
|
6595
6589
|
const prototypeWrite = lowerClassPrototypeComputedAssignment(lowerer, expr);
|
|
6596
6590
|
if (prototypeWrite)
|