xbintsc 0.1.0 → 0.1.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/README.md +22 -6
- package/dist/src/cli/main.js +1 -1
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/extensions/node/fs/index.d.ts +5 -0
- package/dist/src/extensions/node/fs/index.js +11 -0
- package/dist/src/extensions/node/fs/index.js.map +1 -0
- package/dist/src/extensions/node/fs/read-file.d.ts +8 -0
- package/dist/src/extensions/node/fs/read-file.js +11 -0
- package/dist/src/extensions/node/fs/read-file.js.map +1 -0
- package/dist/src/extensions/node/index.d.ts +11 -0
- package/dist/src/extensions/node/index.js +24 -0
- package/dist/src/extensions/node/index.js.map +1 -0
- package/dist/src/extensions/node/module.d.ts +17 -0
- package/dist/src/extensions/node/module.js +13 -0
- package/dist/src/extensions/node/module.js.map +1 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/tests/codegen/llvm.test.js +1 -1
- package/dist/tests/codegen/llvm.test.js.map +1 -1
- package/dist/tests/e2e/compile.test.js +1 -1
- package/dist/tests/e2e/compile.test.js.map +1 -1
- package/dist/tests/extensions/registry.test.js +2 -2
- package/dist/tests/extensions/registry.test.js.map +1 -1
- package/package.json +5 -1
- package/runtime/{ext_node.c → ext_node/fs/read_file.c} +4 -3
- package/scripts/build-runtime.mjs +1 -1
- package/src/cli/main.ts +1 -1
- package/src/extensions/node/fs/index.ts +13 -0
- package/src/extensions/node/fs/read-file.ts +13 -0
- package/src/extensions/node/index.ts +27 -0
- package/src/extensions/node/module.ts +24 -0
- package/src/index.ts +2 -1
- package/dist/src/extensions/node.d.ts +0 -9
- package/dist/src/extensions/node.js +0 -20
- package/dist/src/extensions/node.js.map +0 -1
- package/src/extensions/node.ts +0 -23
package/README.md
CHANGED
|
@@ -148,19 +148,35 @@ sources are compiled once and cached on the same principle.
|
|
|
148
148
|
|
|
149
149
|
## Extensions
|
|
150
150
|
|
|
151
|
-
An extension is a plain object (`src/extensions/registry.ts`)
|
|
151
|
+
An extension is a plain object (`src/extensions/registry.ts`). The `node`
|
|
152
|
+
extension is itself split into one folder per Node module, each pairing its
|
|
153
|
+
builtins with the C sources that implement them:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
src/extensions/node/ runtime/ext_node/
|
|
157
|
+
index.ts # nodeExtension fs/read_file.c
|
|
158
|
+
fs/index.ts
|
|
159
|
+
fs/read-file.ts
|
|
160
|
+
```
|
|
152
161
|
|
|
153
162
|
```ts
|
|
163
|
+
// src/extensions/node/index.ts
|
|
164
|
+
const modules: readonly NodeModule[] = [fsModule];
|
|
165
|
+
|
|
154
166
|
export const nodeExtension: Extension = {
|
|
155
167
|
name: "node",
|
|
156
|
-
runtimeSources: () =>
|
|
157
|
-
builtins: () => (
|
|
168
|
+
runtimeSources: () => modules.flatMap((m) => m.runtimeSources()),
|
|
169
|
+
builtins: () => modules.reduce(
|
|
170
|
+
(merged, m) => Object.assign(merged, m.builtins()),
|
|
171
|
+
{} as Record<string, BuiltinFunction>,
|
|
172
|
+
),
|
|
158
173
|
};
|
|
159
174
|
```
|
|
160
175
|
|
|
161
|
-
Registering it links the extra C
|
|
162
|
-
the C symbol with the uniform `(argc, argv)` calling convention.
|
|
163
|
-
|
|
176
|
+
Registering it links the extra C sources and makes `readFileSync(...)` resolve
|
|
177
|
+
to the C symbol with the uniform `(argc, argv)` calling convention. Adding a
|
|
178
|
+
module means dropping a folder under `src/extensions/node/` and its C
|
|
179
|
+
counterpart under `runtime/ext_node/`; the core compiler never changes.
|
|
164
180
|
|
|
165
181
|
## Tests
|
|
166
182
|
|
package/dist/src/cli/main.js
CHANGED
|
@@ -17,7 +17,7 @@ import { formatDiagnostic } from "../diagnostics/diagnostic.js";
|
|
|
17
17
|
import { SourceFile } from "../diagnostics/source.js";
|
|
18
18
|
import { build, compileString, COMPILER_VERSION } from "../driver/compiler.js";
|
|
19
19
|
import { createDefaultRegistry } from "../extensions/registry.js";
|
|
20
|
-
import { nodeExtension } from "../extensions/node.js";
|
|
20
|
+
import { nodeExtension } from "../extensions/node/index.js";
|
|
21
21
|
const defaultIo = {
|
|
22
22
|
stdout: (text) => process.stdout.write(text),
|
|
23
23
|
stderr: (text) => process.stderr.write(text),
|
package/dist/src/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAiB,gBAAgB,EAAmB,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAiB,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAA0B,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `fs` module: text file reads backed by `runtime/ext_node/fs`.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveFrom } from "../module.js";
|
|
5
|
+
import { readFileBuiltins } from "./read-file.js";
|
|
6
|
+
export const fsModule = {
|
|
7
|
+
name: "fs",
|
|
8
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/fs/read_file.c")],
|
|
9
|
+
builtins: () => readFileBuiltins,
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/node/fs/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,QAAQ,GAAe;IAClC,IAAI,EAAE,IAAI;IACV,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,6CAA6C,CAAC,CAAC;IACnG,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB;CACjC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concrete builtins for Node's `fs` module.
|
|
3
|
+
*
|
|
4
|
+
* Both names map to the same C symbol because the compiler only distinguishes
|
|
5
|
+
* globals, not the namespaces they come from.
|
|
6
|
+
*/
|
|
7
|
+
import type { BuiltinFunction } from "../../registry.js";
|
|
8
|
+
export declare const readFileBuiltins: Readonly<Record<string, BuiltinFunction>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concrete builtins for Node's `fs` module.
|
|
3
|
+
*
|
|
4
|
+
* Both names map to the same C symbol because the compiler only distinguishes
|
|
5
|
+
* globals, not the namespaces they come from.
|
|
6
|
+
*/
|
|
7
|
+
export const readFileBuiltins = {
|
|
8
|
+
readFileSync: { symbol: "xt_node_read_text_file" },
|
|
9
|
+
readTextFile: { symbol: "xt_node_read_text_file" },
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=read-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../../../../src/extensions/node/fs/read-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAA8C;IACzE,YAAY,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;IAClD,YAAY,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;CACnD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js compatibility extension.
|
|
3
|
+
*
|
|
4
|
+
* Registering it links the C sources under `runtime/ext_node/` and exposes the
|
|
5
|
+
* builtins each module implements, so `readFileSync("...")` in TypeScript
|
|
6
|
+
* resolves to the C implementation without the core compiler knowing anything
|
|
7
|
+
* about Node. Every Node module lives in its own subfolder next to this file
|
|
8
|
+
* (currently `fs/`), with the runtime counterpart under `runtime/ext_node/`.
|
|
9
|
+
*/
|
|
10
|
+
import type { Extension } from "../registry.js";
|
|
11
|
+
export declare const nodeExtension: Extension;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js compatibility extension.
|
|
3
|
+
*
|
|
4
|
+
* Registering it links the C sources under `runtime/ext_node/` and exposes the
|
|
5
|
+
* builtins each module implements, so `readFileSync("...")` in TypeScript
|
|
6
|
+
* resolves to the C implementation without the core compiler knowing anything
|
|
7
|
+
* about Node. Every Node module lives in its own subfolder next to this file
|
|
8
|
+
* (currently `fs/`), with the runtime counterpart under `runtime/ext_node/`.
|
|
9
|
+
*/
|
|
10
|
+
import { fsModule } from "./fs/index.js";
|
|
11
|
+
/** Every Node module the extension currently provides. */
|
|
12
|
+
const modules = [fsModule];
|
|
13
|
+
export const nodeExtension = {
|
|
14
|
+
name: "node",
|
|
15
|
+
description: "Node.js host APIs (fs, ...)",
|
|
16
|
+
runtimeSources: () => modules.flatMap((module) => module.runtimeSources()),
|
|
17
|
+
builtins: () => {
|
|
18
|
+
const merged = {};
|
|
19
|
+
for (const module of modules)
|
|
20
|
+
Object.assign(merged, module.builtins());
|
|
21
|
+
return merged;
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,0DAA0D;AAC1D,MAAM,OAAO,GAA0B,CAAC,QAAQ,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6BAA6B;IAC1C,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IAC1E,QAAQ,EAAE,GAAG,EAAE;QACb,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single Node.js module contributed by the `node` extension.
|
|
3
|
+
*
|
|
4
|
+
* Each module lives in its own folder (e.g. `node/fs`) and pairs the globally
|
|
5
|
+
* visible builtins it exposes with the C runtime sources that implement them.
|
|
6
|
+
*/
|
|
7
|
+
import type { BuiltinFunction } from "../registry.js";
|
|
8
|
+
export interface NodeModule {
|
|
9
|
+
/** Module name, e.g. `fs`. */
|
|
10
|
+
readonly name: string;
|
|
11
|
+
/** C sources compiled and linked for this module. */
|
|
12
|
+
runtimeSources(): readonly string[];
|
|
13
|
+
/** Global identifiers that resolve to this module's runtime symbols. */
|
|
14
|
+
builtins(): Readonly<Record<string, BuiltinFunction>>;
|
|
15
|
+
}
|
|
16
|
+
/** Resolve a path relative to the folder of the module that calls this. */
|
|
17
|
+
export declare function resolveFrom(importMetaUrl: string, relative: string): string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single Node.js module contributed by the `node` extension.
|
|
3
|
+
*
|
|
4
|
+
* Each module lives in its own folder (e.g. `node/fs`) and pairs the globally
|
|
5
|
+
* visible builtins it exposes with the C runtime sources that implement them.
|
|
6
|
+
*/
|
|
7
|
+
import { dirname, resolve } from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
/** Resolve a path relative to the folder of the module that calls this. */
|
|
10
|
+
export function resolveFrom(importMetaUrl, relative) {
|
|
11
|
+
return resolve(dirname(fileURLToPath(importMetaUrl)), relative);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../src/extensions/node/module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAYzC,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,aAAqB,EAAE,QAAgB;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClE,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -14,5 +14,6 @@ export { bind, SymbolKind, ScopeKind, type BindResult, type FunctionInfo, type S
|
|
|
14
14
|
export { generate, type CodegenResult, type CodegenOptions } from "./codegen/llvm.js";
|
|
15
15
|
export { XT_UNDEFINED, XT_NULL, XT_TRUE, XT_FALSE, numberLiteral, booleanLiteral, } from "./codegen/values.js";
|
|
16
16
|
export { ExtensionRegistry, createDefaultRegistry, coreExtension, type Extension } from "./extensions/registry.js";
|
|
17
|
-
export { nodeExtension } from "./extensions/node.js";
|
|
17
|
+
export { nodeExtension } from "./extensions/node/index.js";
|
|
18
|
+
export type { NodeModule } from "./extensions/node/module.js";
|
|
18
19
|
export * from "./driver/index.js";
|
package/dist/src/index.js
CHANGED
|
@@ -14,6 +14,6 @@ export { bind, SymbolKind, ScopeKind } from "./binder/binder.js";
|
|
|
14
14
|
export { generate } from "./codegen/llvm.js";
|
|
15
15
|
export { XT_UNDEFINED, XT_NULL, XT_TRUE, XT_FALSE, numberLiteral, booleanLiteral, } from "./codegen/values.js";
|
|
16
16
|
export { ExtensionRegistry, createDefaultRegistry, coreExtension } from "./extensions/registry.js";
|
|
17
|
-
export { nodeExtension } from "./extensions/node.js";
|
|
17
|
+
export { nodeExtension } from "./extensions/node/index.js";
|
|
18
18
|
export * from "./driver/index.js";
|
|
19
19
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AACnE,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAuD,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,QAAQ,EAA2C,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AACnE,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAuD,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,QAAQ,EAA2C,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,cAAc,mBAAmB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest";
|
|
|
2
2
|
import { compileToIr } from "../helpers.js";
|
|
3
3
|
import { numberLiteral } from "../../src/codegen/values.js";
|
|
4
4
|
import { createDefaultRegistry } from "../../src/extensions/registry.js";
|
|
5
|
-
import { nodeExtension } from "../../src/extensions/node.js";
|
|
5
|
+
import { nodeExtension } from "../../src/extensions/node/index.js";
|
|
6
6
|
function defineNames(ir) {
|
|
7
7
|
return [...ir.matchAll(/^define i64 @([A-Za-z0-9_.]+)/gm)].map((match) => match[1]);
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
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,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"llvm.test.js","sourceRoot":"","sources":["../../../tests/codegen/llvm.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { spawnSync } from "node:child_process";
|
|
|
9
9
|
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
10
10
|
import { build } from "../../src/driver/compiler.js";
|
|
11
11
|
import { createDefaultRegistry } from "../../src/extensions/registry.js";
|
|
12
|
-
import { nodeExtension } from "../../src/extensions/node.js";
|
|
12
|
+
import { nodeExtension } from "../../src/extensions/node/index.js";
|
|
13
13
|
import { hasClang } from "../helpers.js";
|
|
14
14
|
const describeWithClang = hasClang() ? describe : describe.skip;
|
|
15
15
|
describeWithClang("end-to-end compilation", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../../tests/e2e/compile.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,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,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../../tests/e2e/compile.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,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,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,iBAAiB,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEhE,iBAAiB,CAAC,wBAAwB,EAAE,GAAG,EAAE;IAC/C,IAAI,OAAe,CAAC;IACpB,IAAI,QAAgB,CAAC;IAErB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACtD,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CAAC,MAAc,EAAE,UAAmD,EAAE;QACvF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC1C,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;YAC1B,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;YAC5B,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG;;;;;;KAMd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG;;;;;;;KAOd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG;;;;;;;;;;KAUd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG;;;KAGd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,4BAA4B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { ExtensionRegistry, createDefaultRegistry, coreExtension } from "../../src/extensions/registry.js";
|
|
3
|
-
import { nodeExtension } from "../../src/extensions/node.js";
|
|
3
|
+
import { nodeExtension } from "../../src/extensions/node/index.js";
|
|
4
4
|
const demoExtension = {
|
|
5
5
|
name: "demo",
|
|
6
6
|
builtins: () => ({ demo: { symbol: "xt_demo" }, ping: { symbol: "xt_ping", returnVoid: true } }),
|
|
@@ -41,7 +41,7 @@ describe("ExtensionRegistry", () => {
|
|
|
41
41
|
it("node extension points at the ext C source", () => {
|
|
42
42
|
const sources = nodeExtension.runtimeSources?.() ?? [];
|
|
43
43
|
expect(sources).toHaveLength(1);
|
|
44
|
-
expect(sources[0]).toMatch(/ext_node\.c$/);
|
|
44
|
+
expect(sources[0]).toMatch(/ext_node[\\/]fs[\\/]read_file\.c$/);
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
47
|
//# sourceMappingURL=registry.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../tests/extensions/registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAkB,MAAM,kCAAkC,CAAC;AAC3H,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../tests/extensions/registry.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xbintsc",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "xbintsc - a TypeScript binary compiler (TypeScript -> LLVM IR -> native binary)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/zy445566/xbintsc.git"
|
|
10
|
+
},
|
|
7
11
|
"bin": {
|
|
8
12
|
"xbintsc": "./bin/xbintsc.js"
|
|
9
13
|
},
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Node.js
|
|
2
|
+
* Node.js `fs` module for xbintsc.
|
|
3
3
|
*
|
|
4
|
-
* Compiled and linked only when the `node` extension is registered.
|
|
5
|
-
*
|
|
4
|
+
* Compiled and linked only when the `node` extension is registered. Following
|
|
5
|
+
* the runtime calling convention, every builtin is:
|
|
6
|
+
* xt_value fn(int32_t argc, xt_value *argv)
|
|
6
7
|
*/
|
|
7
8
|
|
|
8
9
|
#include "rt.h"
|
package/src/cli/main.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { DiagnosticBag, formatDiagnostic, type Diagnostic } from "../diagnostics
|
|
|
18
18
|
import { SourceFile } from "../diagnostics/source.js";
|
|
19
19
|
import { build, compileString, COMPILER_VERSION, type EmitKind } from "../driver/compiler.js";
|
|
20
20
|
import { createDefaultRegistry, type ExtensionRegistry } from "../extensions/registry.js";
|
|
21
|
-
import { nodeExtension } from "../extensions/node.js";
|
|
21
|
+
import { nodeExtension } from "../extensions/node/index.js";
|
|
22
22
|
|
|
23
23
|
export interface CliIo {
|
|
24
24
|
readonly stdout: (text: string) => void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's `fs` module: text file reads backed by `runtime/ext_node/fs`.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { NodeModule } from "../module.js";
|
|
6
|
+
import { resolveFrom } from "../module.js";
|
|
7
|
+
import { readFileBuiltins } from "./read-file.js";
|
|
8
|
+
|
|
9
|
+
export const fsModule: NodeModule = {
|
|
10
|
+
name: "fs",
|
|
11
|
+
runtimeSources: () => [resolveFrom(import.meta.url, "../../../../runtime/ext_node/fs/read_file.c")],
|
|
12
|
+
builtins: () => readFileBuiltins,
|
|
13
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concrete builtins for Node's `fs` module.
|
|
3
|
+
*
|
|
4
|
+
* Both names map to the same C symbol because the compiler only distinguishes
|
|
5
|
+
* globals, not the namespaces they come from.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { BuiltinFunction } from "../../registry.js";
|
|
9
|
+
|
|
10
|
+
export const readFileBuiltins: Readonly<Record<string, BuiltinFunction>> = {
|
|
11
|
+
readFileSync: { symbol: "xt_node_read_text_file" },
|
|
12
|
+
readTextFile: { symbol: "xt_node_read_text_file" },
|
|
13
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js compatibility extension.
|
|
3
|
+
*
|
|
4
|
+
* Registering it links the C sources under `runtime/ext_node/` and exposes the
|
|
5
|
+
* builtins each module implements, so `readFileSync("...")` in TypeScript
|
|
6
|
+
* resolves to the C implementation without the core compiler knowing anything
|
|
7
|
+
* about Node. Every Node module lives in its own subfolder next to this file
|
|
8
|
+
* (currently `fs/`), with the runtime counterpart under `runtime/ext_node/`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { BuiltinFunction, Extension } from "../registry.js";
|
|
12
|
+
import type { NodeModule } from "./module.js";
|
|
13
|
+
import { fsModule } from "./fs/index.js";
|
|
14
|
+
|
|
15
|
+
/** Every Node module the extension currently provides. */
|
|
16
|
+
const modules: readonly NodeModule[] = [fsModule];
|
|
17
|
+
|
|
18
|
+
export const nodeExtension: Extension = {
|
|
19
|
+
name: "node",
|
|
20
|
+
description: "Node.js host APIs (fs, ...)",
|
|
21
|
+
runtimeSources: () => modules.flatMap((module) => module.runtimeSources()),
|
|
22
|
+
builtins: () => {
|
|
23
|
+
const merged: Record<string, BuiltinFunction> = {};
|
|
24
|
+
for (const module of modules) Object.assign(merged, module.builtins());
|
|
25
|
+
return merged;
|
|
26
|
+
},
|
|
27
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single Node.js module contributed by the `node` extension.
|
|
3
|
+
*
|
|
4
|
+
* Each module lives in its own folder (e.g. `node/fs`) and pairs the globally
|
|
5
|
+
* visible builtins it exposes with the C runtime sources that implement them.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { dirname, resolve } from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import type { BuiltinFunction } from "../registry.js";
|
|
11
|
+
|
|
12
|
+
export interface NodeModule {
|
|
13
|
+
/** Module name, e.g. `fs`. */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/** C sources compiled and linked for this module. */
|
|
16
|
+
runtimeSources(): readonly string[];
|
|
17
|
+
/** Global identifiers that resolve to this module's runtime symbols. */
|
|
18
|
+
builtins(): Readonly<Record<string, BuiltinFunction>>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Resolve a path relative to the folder of the module that calls this. */
|
|
22
|
+
export function resolveFrom(importMetaUrl: string, relative: string): string {
|
|
23
|
+
return resolve(dirname(fileURLToPath(importMetaUrl)), relative);
|
|
24
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -29,5 +29,6 @@ export {
|
|
|
29
29
|
booleanLiteral,
|
|
30
30
|
} from "./codegen/values.js";
|
|
31
31
|
export { ExtensionRegistry, createDefaultRegistry, coreExtension, type Extension } from "./extensions/registry.js";
|
|
32
|
-
export { nodeExtension } from "./extensions/node.js";
|
|
32
|
+
export { nodeExtension } from "./extensions/node/index.js";
|
|
33
|
+
export type { NodeModule } from "./extensions/node/module.js";
|
|
33
34
|
export * from "./driver/index.js";
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node.js compatibility extension.
|
|
3
|
-
*
|
|
4
|
-
* Registering it links `runtime/ext_node.c` and exposes the builtins it
|
|
5
|
-
* implements, so `readFileSync("...")` in TypeScript resolves to the C
|
|
6
|
-
* implementation without the core compiler knowing anything about Node.
|
|
7
|
-
*/
|
|
8
|
-
import type { Extension } from "./registry.js";
|
|
9
|
-
export declare const nodeExtension: Extension;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node.js compatibility extension.
|
|
3
|
-
*
|
|
4
|
-
* Registering it links `runtime/ext_node.c` and exposes the builtins it
|
|
5
|
-
* implements, so `readFileSync("...")` in TypeScript resolves to the C
|
|
6
|
-
* implementation without the core compiler knowing anything about Node.
|
|
7
|
-
*/
|
|
8
|
-
import { fileURLToPath } from "node:url";
|
|
9
|
-
import { dirname, resolve } from "node:path";
|
|
10
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
export const nodeExtension = {
|
|
12
|
-
name: "node",
|
|
13
|
-
description: "Node.js host APIs (readFileSync, ...)",
|
|
14
|
-
runtimeSources: () => [resolve(here, "../../runtime/ext_node.c")],
|
|
15
|
-
builtins: () => ({
|
|
16
|
-
readFileSync: { symbol: "xt_node_read_text_file" },
|
|
17
|
-
readTextFile: { symbol: "xt_node_read_text_file" },
|
|
18
|
-
}),
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=node.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/extensions/node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,uCAAuC;IACpD,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;IACjE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACf,YAAY,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;QAClD,YAAY,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;KACnD,CAAC;CACH,CAAC"}
|
package/src/extensions/node.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node.js compatibility extension.
|
|
3
|
-
*
|
|
4
|
-
* Registering it links `runtime/ext_node.c` and exposes the builtins it
|
|
5
|
-
* implements, so `readFileSync("...")` in TypeScript resolves to the C
|
|
6
|
-
* implementation without the core compiler knowing anything about Node.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { fileURLToPath } from "node:url";
|
|
10
|
-
import { dirname, resolve } from "node:path";
|
|
11
|
-
import type { Extension } from "./registry.js";
|
|
12
|
-
|
|
13
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
14
|
-
|
|
15
|
-
export const nodeExtension: Extension = {
|
|
16
|
-
name: "node",
|
|
17
|
-
description: "Node.js host APIs (readFileSync, ...)",
|
|
18
|
-
runtimeSources: () => [resolve(here, "../../runtime/ext_node.c")],
|
|
19
|
-
builtins: () => ({
|
|
20
|
-
readFileSync: { symbol: "xt_node_read_text_file" },
|
|
21
|
-
readTextFile: { symbol: "xt_node_read_text_file" },
|
|
22
|
-
}),
|
|
23
|
-
};
|