xbintsc 0.3.4 → 0.3.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/README.md +51 -8
- package/README.zh-CN.md +50 -8
- package/dist/src/codegen/generator/calls/invocation.js +9 -0
- package/dist/src/codegen/generator/calls/invocation.js.map +1 -1
- package/dist/src/codegen/generator/context.d.ts +27 -1
- package/dist/src/codegen/generator/context.js +57 -5
- package/dist/src/codegen/generator/context.js.map +1 -1
- package/dist/src/codegen/generator/state.d.ts +8 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/statements/control-flow.js +1 -8
- package/dist/src/codegen/generator/statements/control-flow.js.map +1 -1
- package/dist/src/codegen/generator/tables.d.ts +11 -0
- package/dist/src/codegen/generator/tables.js +13 -0
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/driver/toolchain-download.js +26 -0
- package/dist/src/driver/toolchain-download.js.map +1 -1
- package/dist/tests/ast/factory.test.d.ts +1 -0
- package/dist/tests/ast/factory.test.js +35 -0
- package/dist/tests/ast/factory.test.js.map +1 -0
- package/dist/tests/ast/visitor.test.d.ts +1 -0
- package/dist/tests/ast/visitor.test.js +53 -0
- package/dist/tests/ast/visitor.test.js.map +1 -0
- package/dist/tests/cli/main.test.js +109 -9
- package/dist/tests/cli/main.test.js.map +1 -1
- package/dist/tests/codegen/closures.test.d.ts +1 -0
- package/dist/tests/codegen/closures.test.js +32 -0
- package/dist/tests/codegen/closures.test.js.map +1 -0
- package/dist/tests/codegen/expressions.test.d.ts +1 -0
- package/dist/tests/codegen/expressions.test.js +149 -0
- package/dist/tests/codegen/expressions.test.js.map +1 -0
- package/dist/tests/codegen/llvm.test.js +38 -0
- package/dist/tests/codegen/llvm.test.js.map +1 -1
- package/dist/tests/codegen/values.test.d.ts +1 -0
- package/dist/tests/codegen/values.test.js +48 -0
- package/dist/tests/codegen/values.test.js.map +1 -0
- package/dist/tests/diagnostics/diagnostic.test.d.ts +1 -0
- package/dist/tests/diagnostics/diagnostic.test.js +117 -0
- package/dist/tests/diagnostics/diagnostic.test.js.map +1 -0
- package/dist/tests/diagnostics/source.test.d.ts +1 -0
- package/dist/tests/diagnostics/source.test.js +58 -0
- package/dist/tests/diagnostics/source.test.js.map +1 -0
- package/dist/tests/driver/modules.test.d.ts +1 -0
- package/dist/tests/driver/modules.test.js +140 -0
- package/dist/tests/driver/modules.test.js.map +1 -0
- package/dist/tests/driver/paths.test.js +17 -1
- package/dist/tests/driver/paths.test.js.map +1 -1
- package/dist/tests/driver/runtime-lib.test.d.ts +1 -0
- package/dist/tests/driver/runtime-lib.test.js +19 -0
- package/dist/tests/driver/runtime-lib.test.js.map +1 -0
- package/dist/tests/driver/toolchain-download.test.js +15 -0
- package/dist/tests/driver/toolchain-download.test.js.map +1 -1
- package/dist/tests/driver/toolchain-provider.test.js +112 -1
- package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
- package/dist/tests/e2e/compile-node.test.js +11 -0
- package/dist/tests/e2e/compile-node.test.js.map +1 -1
- package/dist/tests/extensions/node.test.d.ts +1 -0
- package/dist/tests/extensions/node.test.js +32 -0
- package/dist/tests/extensions/node.test.js.map +1 -0
- package/dist/tests/helpers.d.ts +4 -1
- package/dist/tests/helpers.js +2 -1
- package/dist/tests/helpers.js.map +1 -1
- package/dist/tests/lexer/identifiers.test.d.ts +1 -0
- package/dist/tests/lexer/identifiers.test.js +13 -0
- package/dist/tests/lexer/identifiers.test.js.map +1 -0
- package/dist/tests/lexer/numbers.test.d.ts +1 -0
- package/dist/tests/lexer/numbers.test.js +23 -0
- package/dist/tests/lexer/numbers.test.js.map +1 -0
- package/dist/tests/lexer/strings.test.d.ts +1 -0
- package/dist/tests/lexer/strings.test.js +72 -0
- package/dist/tests/lexer/strings.test.js.map +1 -0
- package/dist/tests/parser/declarations.test.d.ts +1 -0
- package/dist/tests/parser/declarations.test.js +70 -0
- package/dist/tests/parser/declarations.test.js.map +1 -0
- package/dist/tests/parser/expressions.test.d.ts +1 -0
- package/dist/tests/parser/expressions.test.js +47 -0
- package/dist/tests/parser/expressions.test.js.map +1 -0
- package/dist/tests/parser/helpers.test.d.ts +1 -0
- package/dist/tests/parser/helpers.test.js +58 -0
- package/dist/tests/parser/helpers.test.js.map +1 -0
- package/dist/tests/parser/literals.test.d.ts +1 -0
- package/dist/tests/parser/literals.test.js +70 -0
- package/dist/tests/parser/literals.test.js.map +1 -0
- package/dist/tests/parser/module-syntax.test.d.ts +1 -0
- package/dist/tests/parser/module-syntax.test.js +91 -0
- package/dist/tests/parser/module-syntax.test.js.map +1 -0
- package/dist/tests/parser/statements.test.d.ts +1 -0
- package/dist/tests/parser/statements.test.js +85 -0
- package/dist/tests/parser/statements.test.js.map +1 -0
- package/dist/tests/parser/type-members.test.d.ts +1 -0
- package/dist/tests/parser/type-members.test.js +86 -0
- package/dist/tests/parser/type-members.test.js.map +1 -0
- package/dist/tests/parser/types.test.d.ts +1 -0
- package/dist/tests/parser/types.test.js +143 -0
- package/dist/tests/parser/types.test.js.map +1 -0
- package/package.json +1 -1
- package/runtime/rt_internal.h +5 -3
- package/runtime/xt_io.c +15 -14
- package/src/codegen/generator/calls/invocation.ts +8 -0
- package/src/codegen/generator/context.ts +59 -5
- package/src/codegen/generator/state.ts +5 -0
- package/src/codegen/generator/statements/control-flow.ts +1 -8
- package/src/codegen/generator/tables.ts +14 -0
- package/src/driver/toolchain-download.ts +27 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { compileToIr } from "../helpers.js";
|
|
3
3
|
import { numberLiteral } from "../../src/codegen/values.js";
|
|
4
|
+
import { requiresSetjmpex } from "../../src/codegen/generator/tables.js";
|
|
4
5
|
import { DiagnosticCode } from "../../src/diagnostics/diagnostic.js";
|
|
5
6
|
import { createDefaultRegistry } from "../../src/extensions/registry.js";
|
|
6
7
|
import { nodeExtension } from "../../src/extensions/node/index.js";
|
|
@@ -57,6 +58,29 @@ describe("codegen", () => {
|
|
|
57
58
|
expect(ir).toMatch(/while\.body/);
|
|
58
59
|
expect(ir).toMatch(/while\.end/);
|
|
59
60
|
});
|
|
61
|
+
it("only asks for `_setjmpex` on 64-bit Windows on ARM", () => {
|
|
62
|
+
expect(requiresSetjmpex("win32", "arm64")).toBe(true);
|
|
63
|
+
expect(requiresSetjmpex("win32", "x64")).toBe(false);
|
|
64
|
+
expect(requiresSetjmpex("linux", "arm64")).toBe(false);
|
|
65
|
+
expect(requiresSetjmpex("darwin", "x64")).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
it("saves try frames with `_setjmp` on 32/64-bit non-ARM hosts", () => {
|
|
68
|
+
const { ir } = compileToIr("function a() {}\nfunction b() {}\ntry { a(); } catch (e) { b(); }", undefined, {
|
|
69
|
+
platform: "win32",
|
|
70
|
+
arch: "x64",
|
|
71
|
+
});
|
|
72
|
+
expect(ir).toContain("call i32 @_setjmp(i8*");
|
|
73
|
+
expect(ir).toContain("@llvm.frameaddress");
|
|
74
|
+
expect(ir).not.toContain("@_setjmpex");
|
|
75
|
+
});
|
|
76
|
+
it("saves try frames with `_setjmpex`/`sponentry` on Windows ARM64 (which has no `_setjmp`)", () => {
|
|
77
|
+
const { ir, diagnostics } = compileToIr("function a() {}\nfunction b() {}\ntry { a(); } catch (e) { b(); }", undefined, { platform: "win32", arch: "arm64" });
|
|
78
|
+
expect(diagnostics.filter((d) => d.category === "error")).toHaveLength(0);
|
|
79
|
+
expect(ir).toContain("declare i8* @llvm.sponentry()");
|
|
80
|
+
expect(ir).toContain("declare i32 @_setjmpex(i8*, i8*) returns_twice");
|
|
81
|
+
expect(ir).toMatch(/call i8\* @llvm\.sponentry\(\)/);
|
|
82
|
+
expect(ir).toMatch(/call i32 @_setjmpex\(i8\* %\w+, i8\* %\w+\)/);
|
|
83
|
+
});
|
|
60
84
|
it("allocates locals with alloca and promotes reads/writes through slots", () => {
|
|
61
85
|
const { ir } = compileToIr("let x = 1; x = 2; console.log(x);");
|
|
62
86
|
expect(ir).toContain("alloca i64");
|
|
@@ -107,6 +131,20 @@ describe("codegen", () => {
|
|
|
107
131
|
const { ir } = compileToIr('import * as path from "path";\npath.join("a", "b");', registry);
|
|
108
132
|
expect(ir).toMatch(/call i64 @xt_path_static\(i64 %\w+, i32 2, i64\* %\w+\)/);
|
|
109
133
|
});
|
|
134
|
+
it("resolves default and namespace imports of dispatcher-less node modules", () => {
|
|
135
|
+
const registry = createDefaultRegistry().register(nodeExtension);
|
|
136
|
+
const sources = [
|
|
137
|
+
'import fs from "node:fs";\nfs.readFileSync("f.txt");',
|
|
138
|
+
'import * as fs from "node:fs";\nfs.readFileSync("f.txt");',
|
|
139
|
+
'import cp from "node:child_process";\ncp.spawnSync("ls");',
|
|
140
|
+
];
|
|
141
|
+
for (const source of sources) {
|
|
142
|
+
const { diagnostics } = compileToIr(source, registry);
|
|
143
|
+
expect(diagnostics.filter((d) => d.category === "error")).toHaveLength(0);
|
|
144
|
+
}
|
|
145
|
+
const { ir } = compileToIr('import fs from "node:fs";\nfs.readFileSync("f.txt");', registry);
|
|
146
|
+
expect(ir).toMatch(/call i64 @xt_node_read_text_file\(i32 \d+, i64\* %\w+\)/);
|
|
147
|
+
});
|
|
110
148
|
it("reports unsupported syntax instead of crashing", () => {
|
|
111
149
|
const { diagnostics } = compileToIr("tag`x`;");
|
|
112
150
|
expect(diagnostics.some((d) => d.category === "error")).toBe(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llvm.test.js","sourceRoot":"","sources":["../../../tests/codegen/llvm.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"llvm.test.js","sourceRoot":"","sources":["../../../tests/codegen/llvm.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;AACvF,CAAC;AAED,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,sDAAsD,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,uBAAuB,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,uBAAuB,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAC5D,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,mEAAmE,EAAE,SAAS,EAAE;YACzG,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;QACjG,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,WAAW,CACrC,mEAAmE,EACnE,SAAS,EACT,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CACrC,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,mCAAmC,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,iDAAiD,CAAC,CAAC;QAC9E,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,wCAAwC,CAAC,CAAC;QACrE,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,iDAAiD,CAAC,CAAC;QAC3F,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,oGAAoG,CAAC,CAAC;QAC9I,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,sDAAsD,CAAC,CAAC;QAChG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,4DAA4D,EAAE,QAAQ,CAAC,CAAC;QACnG,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,qDAAqD,EAAE,QAAQ,CAAC,CAAC;QAC5F,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG;YACd,sDAAsD;YACtD,2DAA2D;YAC3D,2DAA2D;SAC5D,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,sDAAsD,EAAE,QAAQ,CAAC,CAAC;QAC7F,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,OAAO,GAAG;YACd,uBAAuB;YACvB,oBAAoB;YACpB,0BAA0B;YAC1B,uCAAuC;SACxC,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,OAAO,GAAG,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,gCAAgC,CAAC,CAAC;QACpG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { booleanLiteral, i64, numberLiteral, XT_FALSE, XT_TRUE } from "../../src/codegen/values.js";
|
|
3
|
+
/** The 64-bit pattern of a double as LLVM would spell it. */
|
|
4
|
+
function bits(value) {
|
|
5
|
+
const view = new DataView(new ArrayBuffer(8));
|
|
6
|
+
view.setFloat64(0, value);
|
|
7
|
+
const raw = (BigInt(view.getUint32(0)) << 32n) | BigInt(view.getUint32(4));
|
|
8
|
+
return BigInt.asIntN(64, raw).toString();
|
|
9
|
+
}
|
|
10
|
+
describe("numberLiteral", () => {
|
|
11
|
+
const values = [
|
|
12
|
+
0,
|
|
13
|
+
-0,
|
|
14
|
+
1,
|
|
15
|
+
-1,
|
|
16
|
+
0.5,
|
|
17
|
+
3.14159,
|
|
18
|
+
1e100,
|
|
19
|
+
-1e-100,
|
|
20
|
+
1 / 3,
|
|
21
|
+
Number.MIN_VALUE, // subnormal
|
|
22
|
+
5e-324, // smallest subnormal
|
|
23
|
+
2.2250738585072014e-308, // smallest normal
|
|
24
|
+
1.9999999999999998, // rounding overflows the mantissa
|
|
25
|
+
Number.MAX_VALUE,
|
|
26
|
+
Infinity,
|
|
27
|
+
-Infinity,
|
|
28
|
+
NaN,
|
|
29
|
+
];
|
|
30
|
+
for (const value of values) {
|
|
31
|
+
it(`encodes ${Object.is(value, -0) ? "-0" : String(value)}`, () => {
|
|
32
|
+
expect(numberLiteral(value)).toBe(bits(value));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
describe("booleanLiteral", () => {
|
|
37
|
+
it("encodes true and false with their tagged words", () => {
|
|
38
|
+
expect(booleanLiteral(true)).toBe(i64(XT_TRUE));
|
|
39
|
+
expect(booleanLiteral(false)).toBe(i64(XT_FALSE));
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe("i64", () => {
|
|
43
|
+
it("normalises unsigned patterns to signed decimals", () => {
|
|
44
|
+
expect(i64(0xffffffffffffffffn)).toBe("-1");
|
|
45
|
+
expect(i64(0x8000000000000000n)).toBe("-9223372036854775808");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=values.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.test.js","sourceRoot":"","sources":["../../../tests/codegen/values.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEpG,6DAA6D;AAC7D,SAAS,IAAI,CAAC,KAAa;IACzB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG;QACb,CAAC;QACD,CAAC,CAAC;QACF,CAAC;QACD,CAAC,CAAC;QACF,GAAG;QACH,OAAO;QACP,KAAK;QACL,CAAC,MAAM;QACP,CAAC,GAAG,CAAC;QACL,MAAM,CAAC,SAAS,EAAE,YAAY;QAC9B,MAAM,EAAE,qBAAqB;QAC7B,uBAAuB,EAAE,kBAAkB;QAC3C,kBAAkB,EAAE,kCAAkC;QACtD,MAAM,CAAC,SAAS;QAChB,QAAQ;QACR,CAAC,QAAQ;QACT,GAAG;KACJ,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,EAAE,CAAC,WAAW,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE;YAChE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { DiagnosticBag, DiagnosticCode, DiagnosticError, formatDiagnostic, formatDiagnostics, } from "../../src/diagnostics/diagnostic.js";
|
|
3
|
+
import { SourceFile } from "../../src/diagnostics/source.js";
|
|
4
|
+
describe("DiagnosticBag", () => {
|
|
5
|
+
it("records errors and warnings with optional locations", () => {
|
|
6
|
+
const bag = new DiagnosticBag();
|
|
7
|
+
bag.error(DiagnosticCode.UnexpectedToken, "boom", { start: 1, end: 3 }, "a.ts");
|
|
8
|
+
bag.warning(DiagnosticCode.UnsupportedFeature, "careful");
|
|
9
|
+
expect(bag.diagnostics).toHaveLength(2);
|
|
10
|
+
expect(bag.diagnostics[0]).toMatchObject({
|
|
11
|
+
category: "error",
|
|
12
|
+
code: DiagnosticCode.UnexpectedToken,
|
|
13
|
+
message: "boom",
|
|
14
|
+
fileName: "a.ts",
|
|
15
|
+
start: 1,
|
|
16
|
+
end: 3,
|
|
17
|
+
});
|
|
18
|
+
expect(bag.diagnostics[1]).toMatchObject({ category: "warning", message: "careful" });
|
|
19
|
+
});
|
|
20
|
+
it("tracks whether any error has been reported", () => {
|
|
21
|
+
const bag = new DiagnosticBag();
|
|
22
|
+
expect(bag.hasErrors).toBe(false);
|
|
23
|
+
bag.warning(DiagnosticCode.UnsupportedFeature, "just a warning");
|
|
24
|
+
expect(bag.hasErrors).toBe(false);
|
|
25
|
+
bag.error(DiagnosticCode.CodegenError, "real error");
|
|
26
|
+
expect(bag.hasErrors).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
it("marks and rolls back speculative diagnostics", () => {
|
|
29
|
+
const bag = new DiagnosticBag();
|
|
30
|
+
bag.error(DiagnosticCode.ExpectedToken, "first");
|
|
31
|
+
const mark = bag.mark();
|
|
32
|
+
bag.error(DiagnosticCode.ExpectedToken, "speculative");
|
|
33
|
+
bag.warning(DiagnosticCode.ExpectedToken, "speculative warning");
|
|
34
|
+
expect(bag.diagnostics).toHaveLength(3);
|
|
35
|
+
bag.reset(mark);
|
|
36
|
+
expect(bag.diagnostics).toHaveLength(1);
|
|
37
|
+
expect(bag.diagnostics[0].message).toBe("first");
|
|
38
|
+
});
|
|
39
|
+
it("adds pre-built diagnostics individually and in bulk", () => {
|
|
40
|
+
const first = { category: "error", code: DiagnosticCode.TypeMismatch, message: "one" };
|
|
41
|
+
const second = { category: "info", code: DiagnosticCode.TypeMismatch, message: "two" };
|
|
42
|
+
const bag = new DiagnosticBag();
|
|
43
|
+
bag.add(first);
|
|
44
|
+
bag.addAll([second]);
|
|
45
|
+
expect(bag.diagnostics).toEqual([first, second]);
|
|
46
|
+
});
|
|
47
|
+
it("throws a DiagnosticError only when errors are present", () => {
|
|
48
|
+
const clean = new DiagnosticBag();
|
|
49
|
+
clean.warning(DiagnosticCode.UnsupportedFeature, "no throw");
|
|
50
|
+
expect(() => clean.throwIfErrors()).not.toThrow();
|
|
51
|
+
const dirty = new DiagnosticBag();
|
|
52
|
+
dirty.error(DiagnosticCode.CodegenError, "kaboom");
|
|
53
|
+
expect(() => dirty.throwIfErrors()).toThrow(DiagnosticError);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("DiagnosticError", () => {
|
|
57
|
+
it("collects a single diagnostic into an array", () => {
|
|
58
|
+
const error = new DiagnosticError({ category: "error", code: DiagnosticCode.IOError, message: "io" });
|
|
59
|
+
expect(error.name).toBe("DiagnosticError");
|
|
60
|
+
expect(error.diagnostics).toHaveLength(1);
|
|
61
|
+
expect(error.message).toContain("TS6002");
|
|
62
|
+
});
|
|
63
|
+
it("accepts multiple diagnostics and joins their text", () => {
|
|
64
|
+
const error = new DiagnosticError([
|
|
65
|
+
{ category: "error", code: DiagnosticCode.IOError, message: "one" },
|
|
66
|
+
{ category: "error", code: DiagnosticCode.CodegenError, message: "two" },
|
|
67
|
+
]);
|
|
68
|
+
expect(error.diagnostics).toHaveLength(2);
|
|
69
|
+
expect(error.message.split("\n")).toHaveLength(2);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe("formatDiagnostic", () => {
|
|
73
|
+
it("falls back to <unknown> when there is no file name", () => {
|
|
74
|
+
const text = formatDiagnostic({ category: "error", code: DiagnosticCode.CodegenError, message: "oops" });
|
|
75
|
+
expect(text).toBe("<unknown> - error TS5001: oops");
|
|
76
|
+
});
|
|
77
|
+
it("uses the diagnostic file name when no source is available", () => {
|
|
78
|
+
const text = formatDiagnostic({
|
|
79
|
+
category: "warning",
|
|
80
|
+
code: DiagnosticCode.UnsupportedFeature,
|
|
81
|
+
message: "hmm",
|
|
82
|
+
fileName: "b.ts",
|
|
83
|
+
});
|
|
84
|
+
expect(text).toBe("b.ts - warning TS4005: hmm");
|
|
85
|
+
});
|
|
86
|
+
it("renders a source excerpt with a caret underline", () => {
|
|
87
|
+
const source = new SourceFile("a.ts", "let a = 1;\nlet b = 2;");
|
|
88
|
+
const text = formatDiagnostic({ category: "error", code: DiagnosticCode.CannotFindName, message: "no b", start: 15, end: 16 }, source);
|
|
89
|
+
expect(text).toContain("a.ts:2:5 - error TS3002: no b");
|
|
90
|
+
expect(text).toContain("let b = 2;");
|
|
91
|
+
expect(text).toContain("\n ^");
|
|
92
|
+
});
|
|
93
|
+
it("widens the caret to cover the diagnostic range", () => {
|
|
94
|
+
const source = new SourceFile("a.ts", "abcdef");
|
|
95
|
+
const text = formatDiagnostic({ category: "error", code: DiagnosticCode.CodegenError, message: "wide", start: 1, end: 4 }, source);
|
|
96
|
+
expect(text).toContain("\n ^^^");
|
|
97
|
+
});
|
|
98
|
+
it("omits the excerpt when the source has no start offset", () => {
|
|
99
|
+
const source = new SourceFile("a.ts", "abc");
|
|
100
|
+
const text = formatDiagnostic({ category: "error", code: DiagnosticCode.CodegenError, message: "no pos", fileName: "a.ts" }, source);
|
|
101
|
+
expect(text).toBe("a.ts - error TS5001: no pos");
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe("formatDiagnostics", () => {
|
|
105
|
+
it("looks up each source by file name", () => {
|
|
106
|
+
const source = new SourceFile("a.ts", "let x = ;");
|
|
107
|
+
const sources = new Map([["a.ts", source]]);
|
|
108
|
+
const text = formatDiagnostics([
|
|
109
|
+
{ category: "error", code: DiagnosticCode.ExpectedToken, message: "missing", fileName: "a.ts", start: 8 },
|
|
110
|
+
{ category: "info", code: DiagnosticCode.ExpectedToken, message: "other" },
|
|
111
|
+
], sources);
|
|
112
|
+
const lines = text.split("\n");
|
|
113
|
+
expect(lines[0]).toContain("a.ts:1:9 - error TS2002: missing");
|
|
114
|
+
expect(text).toContain("<unknown> - info TS2002: other");
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=diagnostic.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostic.test.js","sourceRoot":"","sources":["../../../tests/diagnostics/diagnostic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { SourceFile, combineHashes, hashText } from "../../src/diagnostics/source.js";
|
|
3
|
+
describe("SourceFile", () => {
|
|
4
|
+
it("normalizes a leading BOM and CRLF/CR line endings", () => {
|
|
5
|
+
const source = new SourceFile("a.ts", "\uFEFFa\r\nb\rc\n");
|
|
6
|
+
expect(source.text).toBe("a\nb\nc\n");
|
|
7
|
+
expect(source.fileName).toBe("a.ts");
|
|
8
|
+
});
|
|
9
|
+
it("reports its length from the normalized text", () => {
|
|
10
|
+
expect(new SourceFile("a.ts", "abc").length).toBe(3);
|
|
11
|
+
expect(new SourceFile("a.ts", "\uFEFFabc").length).toBe(3);
|
|
12
|
+
});
|
|
13
|
+
it("maps offsets to 1-based line/column pairs", () => {
|
|
14
|
+
const source = new SourceFile("a.ts", "a\nbb\nccc");
|
|
15
|
+
expect(source.positionAt(0)).toEqual({ line: 1, column: 1 });
|
|
16
|
+
expect(source.positionAt(1)).toEqual({ line: 1, column: 2 });
|
|
17
|
+
expect(source.positionAt(2)).toEqual({ line: 2, column: 1 });
|
|
18
|
+
expect(source.positionAt(3)).toEqual({ line: 2, column: 2 });
|
|
19
|
+
expect(source.positionAt(5)).toEqual({ line: 3, column: 1 });
|
|
20
|
+
expect(source.positionAt(7)).toEqual({ line: 3, column: 3 });
|
|
21
|
+
});
|
|
22
|
+
it("clamps out-of-range and negative offsets", () => {
|
|
23
|
+
const source = new SourceFile("a.ts", "abc");
|
|
24
|
+
expect(source.positionAt(-5)).toEqual({ line: 1, column: 1 });
|
|
25
|
+
expect(source.positionAt(100)).toEqual({ line: 1, column: 4 });
|
|
26
|
+
});
|
|
27
|
+
it("slices the raw text of a range", () => {
|
|
28
|
+
const source = new SourceFile("a.ts", "hello world");
|
|
29
|
+
expect(source.slice({ start: 0, end: 5 })).toBe("hello");
|
|
30
|
+
expect(source.slice({ start: 6, end: 11 })).toBe("world");
|
|
31
|
+
});
|
|
32
|
+
it("exposes a stable content hash on the instance", () => {
|
|
33
|
+
expect(new SourceFile("a.ts", "same").hash).toBe(hashText("same"));
|
|
34
|
+
expect(new SourceFile("a.ts", "same").hash).not.toBe(new SourceFile("a.ts", "other").hash);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe("hashText", () => {
|
|
38
|
+
it("is deterministic and zero-padded to 16 hex chars", () => {
|
|
39
|
+
const hash = hashText("hello");
|
|
40
|
+
expect(hash).toBe(hashText("hello"));
|
|
41
|
+
expect(hash).toMatch(/^[0-9a-f]{16}$/);
|
|
42
|
+
});
|
|
43
|
+
it("changes with the input and respects a seed", () => {
|
|
44
|
+
expect(hashText("a")).not.toBe(hashText("b"));
|
|
45
|
+
expect(hashText("a", 1n)).not.toBe(hashText("a"));
|
|
46
|
+
});
|
|
47
|
+
it("treats empty input as the seed", () => {
|
|
48
|
+
expect(hashText("", 0n)).toBe("0000000000000000");
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("combineHashes", () => {
|
|
52
|
+
it("combines parts without collisions between orderings", () => {
|
|
53
|
+
expect(combineHashes(["a", "b"])).toBe(combineHashes(["a", "b"]));
|
|
54
|
+
expect(combineHashes(["a", "b"])).not.toBe(combineHashes(["b", "a"]));
|
|
55
|
+
expect(combineHashes([])).toBe(hashText(""));
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=source.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.test.js","sourceRoot":"","sources":["../../../tests/diagnostics/source.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { bundleModules } from "../../src/driver/modules.js";
|
|
6
|
+
import { DiagnosticBag, DiagnosticCode } from "../../src/diagnostics/diagnostic.js";
|
|
7
|
+
import { walk } from "../../src/ast/visitor.js";
|
|
8
|
+
import { SyntaxKind } from "../../src/ast/nodes.js";
|
|
9
|
+
const directories = [];
|
|
10
|
+
function temporaryDirectory() {
|
|
11
|
+
const directory = mkdtempSync(join(tmpdir(), "xbintsc-modules-"));
|
|
12
|
+
directories.push(directory);
|
|
13
|
+
return directory;
|
|
14
|
+
}
|
|
15
|
+
function writeFiles(files) {
|
|
16
|
+
const directory = temporaryDirectory();
|
|
17
|
+
for (const [name, content] of Object.entries(files))
|
|
18
|
+
writeFileSync(join(directory, name), content);
|
|
19
|
+
return directory;
|
|
20
|
+
}
|
|
21
|
+
function bundle(entry) {
|
|
22
|
+
const bag = new DiagnosticBag();
|
|
23
|
+
const result = bundleModules(entry, bag);
|
|
24
|
+
return { result, bag };
|
|
25
|
+
}
|
|
26
|
+
function identifierTexts(node) {
|
|
27
|
+
const texts = [];
|
|
28
|
+
walk(node, (current) => {
|
|
29
|
+
if (current.kind === SyntaxKind.Identifier)
|
|
30
|
+
texts.push(current.text);
|
|
31
|
+
});
|
|
32
|
+
return texts;
|
|
33
|
+
}
|
|
34
|
+
afterEach(() => {
|
|
35
|
+
while (directories.length > 0)
|
|
36
|
+
rmSync(directories.pop(), { recursive: true, force: true });
|
|
37
|
+
});
|
|
38
|
+
describe("bundleModules", () => {
|
|
39
|
+
it("loads dependencies before the entry module and renames top-level bindings", () => {
|
|
40
|
+
const directory = writeFiles({
|
|
41
|
+
"util.ts": "export function add(a: number, b: number) { return a + b; }",
|
|
42
|
+
"main.ts": 'import { add } from "./util";\nconsole.log(add(1, 2));',
|
|
43
|
+
});
|
|
44
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
45
|
+
expect(bag.hasErrors).toBe(false);
|
|
46
|
+
expect(result?.moduleCount).toBe(2);
|
|
47
|
+
const names = identifierTexts(result.sourceFile);
|
|
48
|
+
// Both the declaration and its use get the unique module-prefixed name.
|
|
49
|
+
const renamed = names.filter((name) => name.endsWith("add"));
|
|
50
|
+
expect(renamed.length).toBeGreaterThanOrEqual(2);
|
|
51
|
+
expect(new Set(renamed).size).toBe(1);
|
|
52
|
+
});
|
|
53
|
+
it("rewrites default imports to the dependency's default export", () => {
|
|
54
|
+
const directory = writeFiles({
|
|
55
|
+
"util.ts": "export default function make() { return 1; }",
|
|
56
|
+
"main.ts": 'import make from "./util";\nmake();',
|
|
57
|
+
});
|
|
58
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
59
|
+
expect(bag.hasErrors).toBe(false);
|
|
60
|
+
const names = identifierTexts(result.sourceFile);
|
|
61
|
+
expect(names.some((name) => name.endsWith("make"))).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it("lowers `export default <expression>` into a synthetic const", () => {
|
|
64
|
+
const directory = writeFiles({ "main.ts": "export default 42;" });
|
|
65
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
66
|
+
expect(bag.hasErrors).toBe(false);
|
|
67
|
+
const statements = result.sourceFile.statements;
|
|
68
|
+
expect(statements).toHaveLength(1);
|
|
69
|
+
expect(statements[0].kind).toBe(SyntaxKind.VariableStatement);
|
|
70
|
+
const names = identifierTexts(result.sourceFile);
|
|
71
|
+
expect(names.some((name) => name.endsWith("default"))).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
it("lowers namespace imports into an object literal", () => {
|
|
74
|
+
const directory = writeFiles({
|
|
75
|
+
"util.ts": "export const x = 1;\nexport function add() { return 1; }",
|
|
76
|
+
"main.ts": 'import * as util from "./util";\nutil.x;',
|
|
77
|
+
});
|
|
78
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
79
|
+
expect(bag.hasErrors).toBe(false);
|
|
80
|
+
let hasObjectLiteral = false;
|
|
81
|
+
walk(result.sourceFile, (node) => {
|
|
82
|
+
if (node.kind === SyntaxKind.ObjectLiteralExpression)
|
|
83
|
+
hasObjectLiteral = true;
|
|
84
|
+
});
|
|
85
|
+
expect(hasObjectLiteral).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
it("resolves named re-exports from another module", () => {
|
|
88
|
+
const directory = writeFiles({
|
|
89
|
+
"math.ts": "export function add() { return 1; }",
|
|
90
|
+
"index.ts": 'export { add as plus } from "./math";',
|
|
91
|
+
"main.ts": 'import { plus } from "./index";\nplus();',
|
|
92
|
+
});
|
|
93
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
94
|
+
expect(bag.hasErrors).toBe(false);
|
|
95
|
+
expect(result?.moduleCount).toBe(3);
|
|
96
|
+
});
|
|
97
|
+
it("resolves `export *` re-exports", () => {
|
|
98
|
+
const directory = writeFiles({
|
|
99
|
+
"math.ts": "export const two = 2;",
|
|
100
|
+
"index.ts": 'export * from "./math";',
|
|
101
|
+
"main.ts": 'import { two } from "./index";\ntwo;',
|
|
102
|
+
});
|
|
103
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
104
|
+
expect(bag.hasErrors).toBe(false);
|
|
105
|
+
expect(result?.moduleCount).toBe(3);
|
|
106
|
+
});
|
|
107
|
+
it("keeps external (extension) imports in place", () => {
|
|
108
|
+
const directory = writeFiles({
|
|
109
|
+
"main.ts": 'import fs from "node:fs";\nfs.readFileSync("f.txt");',
|
|
110
|
+
});
|
|
111
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
112
|
+
expect(bag.hasErrors).toBe(false);
|
|
113
|
+
expect(result.sourceFile.statements[0].kind).toBe(SyntaxKind.ImportDeclaration);
|
|
114
|
+
});
|
|
115
|
+
it("terminates on a circular import graph", () => {
|
|
116
|
+
const directory = writeFiles({
|
|
117
|
+
"a.ts": 'import { b } from "./b";\nexport const a = 1;',
|
|
118
|
+
"b.ts": 'import { a } from "./a";\nexport const b = 2;',
|
|
119
|
+
});
|
|
120
|
+
const { result, bag } = bundle(join(directory, "a.ts"));
|
|
121
|
+
// Modules are cached before their imports are walked, so a cycle is bundled
|
|
122
|
+
// once rather than recursing forever.
|
|
123
|
+
expect(bag.hasErrors).toBe(false);
|
|
124
|
+
expect(result?.moduleCount).toBe(2);
|
|
125
|
+
});
|
|
126
|
+
it("reports a dependency that cannot be resolved", () => {
|
|
127
|
+
const directory = writeFiles({ "main.ts": 'import { x } from "./missing";\nx;' });
|
|
128
|
+
const { result, bag } = bundle(join(directory, "main.ts"));
|
|
129
|
+
expect(result).toBeUndefined();
|
|
130
|
+
expect(bag.diagnostics.some((d) => d.message.includes("Cannot resolve module"))).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
it("reports an entry file that does not exist", () => {
|
|
133
|
+
const directory = temporaryDirectory();
|
|
134
|
+
const { result, bag } = bundle(join(directory, "nope.ts"));
|
|
135
|
+
expect(result).toBeUndefined();
|
|
136
|
+
expect(bag.diagnostics.some((d) => d.code === DiagnosticCode.CodegenError)).toBe(true);
|
|
137
|
+
expect(bag.diagnostics.some((d) => d.message.includes("Cannot find module"))).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=modules.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.test.js","sourceRoot":"","sources":["../../../tests/driver/modules.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,UAAU,EAAa,MAAM,wBAAwB,CAAC;AAE/D,MAAM,WAAW,GAAa,EAAE,CAAC;AAEjC,SAAS,kBAAkB;IACzB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAClE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAA6B;IAC/C,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACnG,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;QACrB,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAE,OAAuC,CAAC,IAAI,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,WAAW,CAAC,GAAG,EAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,SAAS,EAAE,6DAA6D;YACxE,SAAS,EAAE,wDAAwD;SACpE,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC;QAClD,wEAAwE;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,SAAS,EAAE,8CAA8C;YACzD,SAAS,EAAE,qCAAqC;SACjD,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAClE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,MAAO,CAAC,UAAU,CAAC,UAAU,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,eAAe,CAAC,MAAO,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,SAAS,EAAE,0DAA0D;YACrE,SAAS,EAAE,0CAA0C;SACtD,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,MAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,uBAAuB;gBAAE,gBAAgB,GAAG,IAAI,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,SAAS,EAAE,qCAAqC;YAChD,UAAU,EAAE,uCAAuC;YACnD,SAAS,EAAE,0CAA0C;SACtD,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,SAAS,EAAE,uBAAuB;YAClC,UAAU,EAAE,yBAAyB;YACrC,SAAS,EAAE,sCAAsC;SAClD,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,SAAS,EAAE,sDAAsD;SAClE,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,MAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,MAAM,EAAE,+CAA+C;YACvD,MAAM,EAAE,+CAA+C;SACxD,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACxD,4EAA4E;QAC5E,sCAAsC;QACtC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,oCAAoC,EAAE,CAAC,CAAC;QAClF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { findPackageRoot, findRuntimeDir, platformSlug, releaseArchiveBase, releaseArchiveExtension, vendorRootDir, } from "../../src/driver/paths.js";
|
|
3
5
|
describe("platformSlug", () => {
|
|
4
6
|
it("joins the platform and architecture", () => {
|
|
5
7
|
expect(platformSlug()).toBe(`${process.platform}-${process.arch}`);
|
|
@@ -23,4 +25,18 @@ describe("releaseArchiveExtension", () => {
|
|
|
23
25
|
expect(releaseArchiveExtension(false)).toBe(".tar.gz");
|
|
24
26
|
});
|
|
25
27
|
});
|
|
28
|
+
describe("package layout", () => {
|
|
29
|
+
it("finds the runtime directory containing rt.h", () => {
|
|
30
|
+
const runtime = findRuntimeDir();
|
|
31
|
+
expect(existsSync(join(runtime, "rt.h"))).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
it("anchors the package root at the runtime parent and vendor beside it", () => {
|
|
34
|
+
const root = findPackageRoot();
|
|
35
|
+
expect(runtimeRootAnchor(root)).toBe(true);
|
|
36
|
+
expect(vendorRootDir()).toBe(join(root, "vendor"));
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
function runtimeRootAnchor(root) {
|
|
40
|
+
return existsSync(join(root, "runtime", "rt.h"));
|
|
41
|
+
}
|
|
26
42
|
//# sourceMappingURL=paths.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../tests/driver/paths.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../tests/driver/paths.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACrE,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC3E,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { findRuntimeLibrary, runtimeLibDir } from "../../src/driver/runtime-lib.js";
|
|
4
|
+
import { findRuntimeDir, platformSlug } from "../../src/driver/paths.js";
|
|
5
|
+
describe("runtime libraries", () => {
|
|
6
|
+
it("points at the per-platform archive folder", () => {
|
|
7
|
+
expect(runtimeLibDir()).toBe(join(findRuntimeDir(), "lib", platformSlug()));
|
|
8
|
+
});
|
|
9
|
+
it("returns undefined for an archive that is not bundled", () => {
|
|
10
|
+
expect(findRuntimeLibrary("definitely-not-a-real-archive")).toBeUndefined();
|
|
11
|
+
});
|
|
12
|
+
it("finds a bundled core archive when present", () => {
|
|
13
|
+
const core = findRuntimeLibrary("core");
|
|
14
|
+
// Prebuilt archives are optional, but when present they must be absolute.
|
|
15
|
+
if (core !== undefined)
|
|
16
|
+
expect(core.endsWith(".a") || core.endsWith(".lib")).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=runtime-lib.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-lib.test.js","sourceRoot":"","sources":["../../../tests/driver/runtime-lib.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,kBAAkB,CAAC,+BAA+B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,0EAA0E;QAC1E,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -20,6 +20,13 @@ describe("toolchainDownload", () => {
|
|
|
20
20
|
expect(target?.kind).toBe("zip");
|
|
21
21
|
expect(target?.stripComponents).toBe(1);
|
|
22
22
|
});
|
|
23
|
+
it("maps Windows arm64 to the pinned llvm-mingw release", () => {
|
|
24
|
+
const target = toolchainDownload("win32", "arm64");
|
|
25
|
+
expect(target?.url).toContain(`llvm-mingw-${LLVM_MINGW_VERSION}`);
|
|
26
|
+
expect(target?.url).toContain("ucrt-aarch64");
|
|
27
|
+
expect(target?.kind).toBe("zip");
|
|
28
|
+
expect(target?.stripComponents).toBe(1);
|
|
29
|
+
});
|
|
23
30
|
it("does not bundle a toolchain on macOS", () => {
|
|
24
31
|
expect(toolchainDownload("darwin", "arm64")).toBeUndefined();
|
|
25
32
|
expect(toolchainDownload("darwin", "x64")).toBeUndefined();
|
|
@@ -30,9 +37,17 @@ describe("toolchainDownload", () => {
|
|
|
30
37
|
expect(libraries[0]?.dest).toBe("libtinfo.so.5");
|
|
31
38
|
expect(libraries[0]?.urls.length).toBeGreaterThan(0);
|
|
32
39
|
});
|
|
40
|
+
it("bundles libtinfo.so.5 for Linux arm64", () => {
|
|
41
|
+
const libraries = toolchainSupportLibraries("linux", "arm64");
|
|
42
|
+
expect(libraries).toHaveLength(1);
|
|
43
|
+
expect(libraries[0]?.dest).toBe("libtinfo.so.5");
|
|
44
|
+
expect(libraries[0]?.member).toContain("aarch64-linux-gnu");
|
|
45
|
+
expect(libraries[0]?.urls.length).toBeGreaterThan(0);
|
|
46
|
+
});
|
|
33
47
|
it("requests no support libraries on other hosts", () => {
|
|
34
48
|
expect(toolchainSupportLibraries("darwin", "arm64")).toEqual([]);
|
|
35
49
|
expect(toolchainSupportLibraries("win32", "x64")).toEqual([]);
|
|
50
|
+
expect(toolchainSupportLibraries("win32", "arm64")).toEqual([]);
|
|
36
51
|
});
|
|
37
52
|
});
|
|
38
53
|
//# sourceMappingURL=toolchain-download.test.js.map
|