xbintsc 0.5.6 → 0.5.21
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/AGENTS.md +20 -10
- package/README.md +8 -7
- package/README.zh-CN.md +6 -6
- package/dist/src/binder/declarations.js +14 -3
- package/dist/src/binder/declarations.js.map +1 -1
- package/dist/src/cli/hints.js +7 -1
- package/dist/src/cli/hints.js.map +1 -1
- package/dist/src/cli/main.js +115 -15
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/watch.d.ts +25 -0
- package/dist/src/cli/watch.js +93 -0
- package/dist/src/cli/watch.js.map +1 -0
- package/dist/src/codegen/generator/calls/access.js +11 -2
- package/dist/src/codegen/generator/calls/access.js.map +1 -1
- package/dist/src/codegen/generator/calls/closures.js +12 -4
- package/dist/src/codegen/generator/calls/closures.js.map +1 -1
- package/dist/src/codegen/generator/context.d.ts +8 -0
- package/dist/src/codegen/generator/context.js +22 -3
- package/dist/src/codegen/generator/context.js.map +1 -1
- package/dist/src/codegen/generator/expressions/operators.js +17 -15
- package/dist/src/codegen/generator/expressions/operators.js.map +1 -1
- package/dist/src/codegen/generator/expressions/primary.js +5 -0
- package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
- package/dist/src/codegen/generator/module.js +0 -7
- package/dist/src/codegen/generator/module.js.map +1 -1
- package/dist/src/codegen/generator/numeric.d.ts +6 -3
- package/dist/src/codegen/generator/numeric.js +54 -11
- package/dist/src/codegen/generator/numeric.js.map +1 -1
- package/dist/src/codegen/generator/state.js +23 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/statements/control-flow.js +1 -4
- package/dist/src/codegen/generator/statements/control-flow.js.map +1 -1
- package/dist/src/codegen/generator/statements/loops.js +48 -16
- package/dist/src/codegen/generator/statements/loops.js.map +1 -1
- package/dist/src/codegen/generator/tables.js +26 -1
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/diagnostics/diagnostic.d.ts +3 -1
- package/dist/src/diagnostics/diagnostic.js +23 -3
- package/dist/src/diagnostics/diagnostic.js.map +1 -1
- package/dist/src/driver/app-artifacts.d.ts +42 -0
- package/dist/src/driver/app-artifacts.js +53 -0
- package/dist/src/driver/app-artifacts.js.map +1 -0
- package/dist/src/driver/build-key.d.ts +29 -0
- package/dist/src/driver/build-key.js +35 -0
- package/dist/src/driver/build-key.js.map +1 -0
- package/dist/src/driver/bundler/graph.js +61 -12
- package/dist/src/driver/bundler/graph.js.map +1 -1
- package/dist/src/driver/bundler/merge.js +7 -1
- package/dist/src/driver/bundler/merge.js.map +1 -1
- package/dist/src/driver/compiler.d.ts +10 -67
- package/dist/src/driver/compiler.js +95 -234
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/driver/config.d.ts +3 -0
- package/dist/src/driver/config.js +8 -0
- package/dist/src/driver/config.js.map +1 -1
- package/dist/src/driver/frontend.d.ts +37 -0
- package/dist/src/driver/frontend.js +92 -0
- package/dist/src/driver/frontend.js.map +1 -0
- package/dist/src/driver/index.d.ts +1 -1
- package/dist/src/driver/index.js.map +1 -1
- package/dist/src/driver/options.d.ts +64 -0
- package/dist/src/driver/options.js +9 -0
- package/dist/src/driver/options.js.map +1 -0
- package/dist/src/driver/runtime-objects.d.ts +38 -0
- package/dist/src/driver/runtime-objects.js +112 -0
- package/dist/src/driver/runtime-objects.js.map +1 -0
- package/dist/src/driver/toolchain-provider.d.ts +4 -0
- package/dist/src/driver/toolchain-provider.js +4 -0
- package/dist/src/driver/toolchain-provider.js.map +1 -1
- package/dist/src/driver/toolchain.d.ts +32 -1
- package/dist/src/driver/toolchain.js +115 -11
- package/dist/src/driver/toolchain.js.map +1 -1
- package/dist/src/driver/version.d.ts +12 -0
- package/dist/src/driver/version.js +13 -0
- package/dist/src/driver/version.js.map +1 -0
- package/dist/src/driver/win-icon.d.ts +7 -9
- package/dist/src/driver/win-icon.js +37 -35
- package/dist/src/driver/win-icon.js.map +1 -1
- package/dist/src/extensions/node/fs/index.d.ts +4 -3
- package/dist/src/extensions/node/fs/index.js +12 -3
- package/dist/src/extensions/node/fs/index.js.map +1 -1
- package/dist/src/extensions/node/fs-promises/index.d.ts +5 -5
- package/dist/src/extensions/node/fs-promises/index.js +15 -6
- package/dist/src/extensions/node/fs-promises/index.js.map +1 -1
- package/dist/src/parser/declarations/classes.js +5 -0
- package/dist/src/parser/declarations/classes.js.map +1 -1
- package/dist/src/parser/declarations/functions.js +13 -1
- package/dist/src/parser/declarations/functions.js.map +1 -1
- package/dist/src/parser/modules.js +8 -3
- package/dist/src/parser/modules.js.map +1 -1
- package/dist/src/parser/parser.d.ts +1 -0
- package/dist/src/parser/parser.js +23 -0
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/tests/cli/check.test.d.ts +6 -0
- package/dist/tests/cli/check.test.js +68 -0
- package/dist/tests/cli/check.test.js.map +1 -0
- package/dist/tests/cli/main.test.js +19 -0
- package/dist/tests/cli/main.test.js.map +1 -1
- package/dist/tests/cli/watch.test.d.ts +6 -0
- package/dist/tests/cli/watch.test.js +72 -0
- package/dist/tests/cli/watch.test.js.map +1 -0
- package/dist/tests/codegen/expressions.test.js +15 -3
- package/dist/tests/codegen/expressions.test.js.map +1 -1
- package/dist/tests/codegen/llvm.test.js +16 -0
- package/dist/tests/codegen/llvm.test.js.map +1 -1
- package/dist/tests/diagnostics/diagnostic.test.js +8 -0
- package/dist/tests/diagnostics/diagnostic.test.js.map +1 -1
- package/dist/tests/docs/structure.test.d.ts +1 -0
- package/dist/tests/docs/structure.test.js +92 -0
- package/dist/tests/docs/structure.test.js.map +1 -0
- package/dist/tests/driver/compiler.test.js +6 -0
- package/dist/tests/driver/compiler.test.js.map +1 -1
- package/dist/tests/driver/config.test.js +9 -0
- package/dist/tests/driver/config.test.js.map +1 -1
- package/dist/tests/driver/icon.test.js +19 -32
- package/dist/tests/driver/icon.test.js.map +1 -1
- package/dist/tests/driver/invalid-input.test.d.ts +10 -0
- package/dist/tests/driver/invalid-input.test.js +29 -0
- package/dist/tests/driver/invalid-input.test.js.map +1 -0
- package/dist/tests/driver/modules.test.js +42 -3
- package/dist/tests/driver/modules.test.js.map +1 -1
- package/dist/tests/driver/toolchain-provider.test.js +27 -1
- package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
- package/dist/tests/driver/toolchain.test.js +60 -2
- package/dist/tests/driver/toolchain.test.js.map +1 -1
- package/dist/tests/e2e/array-buffer.test.d.ts +5 -0
- package/dist/tests/e2e/array-buffer.test.js +38 -0
- package/dist/tests/e2e/array-buffer.test.js.map +1 -0
- package/dist/tests/e2e/array-from-iterables.test.d.ts +7 -0
- package/dist/tests/e2e/array-from-iterables.test.js +34 -0
- package/dist/tests/e2e/array-from-iterables.test.js.map +1 -0
- package/dist/tests/e2e/array-symbol-iterator.test.d.ts +8 -0
- package/dist/tests/e2e/array-symbol-iterator.test.js +42 -0
- package/dist/tests/e2e/array-symbol-iterator.test.js.map +1 -0
- package/dist/tests/e2e/async-await.test.js +1 -1
- package/dist/tests/e2e/async-fs.test.d.ts +9 -0
- package/dist/tests/e2e/async-fs.test.js +119 -0
- package/dist/tests/e2e/async-fs.test.js.map +1 -0
- package/dist/tests/e2e/async-generators.test.d.ts +1 -0
- package/dist/tests/e2e/async-generators.test.js +154 -0
- package/dist/tests/e2e/async-generators.test.js.map +1 -0
- package/dist/tests/e2e/await-ordering.test.d.ts +5 -0
- package/dist/tests/e2e/await-ordering.test.js +37 -0
- package/dist/tests/e2e/await-ordering.test.js.map +1 -0
- package/dist/tests/e2e/compile-builtins.test.js +1 -1
- package/dist/tests/e2e/compile-modules.test.js +7 -0
- package/dist/tests/e2e/compile-modules.test.js.map +1 -1
- package/dist/tests/e2e/date-parse.test.d.ts +8 -0
- package/dist/tests/e2e/date-parse.test.js +38 -0
- package/dist/tests/e2e/date-parse.test.js.map +1 -0
- package/dist/tests/e2e/default-anonymous-exports.test.d.ts +7 -0
- package/dist/tests/e2e/default-anonymous-exports.test.js +23 -0
- package/dist/tests/e2e/default-anonymous-exports.test.js.map +1 -0
- package/dist/tests/e2e/fetch.test.js +24 -0
- package/dist/tests/e2e/fetch.test.js.map +1 -1
- package/dist/tests/e2e/globals-microtask.test.d.ts +9 -0
- package/dist/tests/e2e/globals-microtask.test.js +37 -0
- package/dist/tests/e2e/globals-microtask.test.js.map +1 -0
- package/dist/tests/e2e/gui-inline-svg.test.d.ts +11 -0
- package/dist/tests/e2e/gui-inline-svg.test.js +160 -0
- package/dist/tests/e2e/gui-inline-svg.test.js.map +1 -0
- package/dist/tests/e2e/gui-media.test.js +8 -1
- package/dist/tests/e2e/gui-media.test.js.map +1 -1
- package/dist/tests/e2e/inspect-builtins.test.d.ts +10 -0
- package/dist/tests/e2e/inspect-builtins.test.js +43 -0
- package/dist/tests/e2e/inspect-builtins.test.js.map +1 -0
- package/dist/tests/e2e/json-builtin-objects.test.d.ts +9 -0
- package/dist/tests/e2e/json-builtin-objects.test.js +23 -0
- package/dist/tests/e2e/json-builtin-objects.test.js.map +1 -0
- package/dist/tests/e2e/json-circular.test.d.ts +6 -0
- package/dist/tests/e2e/json-circular.test.js +43 -0
- package/dist/tests/e2e/json-circular.test.js.map +1 -0
- package/dist/tests/e2e/json-parse-reviver.test.d.ts +6 -0
- package/dist/tests/e2e/json-parse-reviver.test.js +29 -0
- package/dist/tests/e2e/json-parse-reviver.test.js.map +1 -0
- package/dist/tests/e2e/json-stringify-replacer.test.d.ts +6 -0
- package/dist/tests/e2e/json-stringify-replacer.test.js +27 -0
- package/dist/tests/e2e/json-stringify-replacer.test.js.map +1 -0
- package/dist/tests/e2e/json-stringify-space.test.d.ts +6 -0
- package/dist/tests/e2e/json-stringify-space.test.js +23 -0
- package/dist/tests/e2e/json-stringify-space.test.js.map +1 -0
- package/dist/tests/e2e/method-dispatch-errors.test.d.ts +9 -0
- package/dist/tests/e2e/method-dispatch-errors.test.js +38 -0
- package/dist/tests/e2e/method-dispatch-errors.test.js.map +1 -0
- package/dist/tests/e2e/native-extensions.test.js +1 -1
- package/dist/tests/e2e/native-extensions.test.js.map +1 -1
- package/dist/tests/e2e/promise-with-resolvers.test.d.ts +5 -0
- package/dist/tests/e2e/promise-with-resolvers.test.js +20 -0
- package/dist/tests/e2e/promise-with-resolvers.test.js.map +1 -0
- package/dist/tests/e2e/property-descriptors.test.d.ts +5 -0
- package/dist/tests/e2e/property-descriptors.test.js +25 -0
- package/dist/tests/e2e/property-descriptors.test.js.map +1 -0
- package/dist/tests/e2e/property-ic.test.d.ts +1 -0
- package/dist/tests/e2e/property-ic.test.js +55 -0
- package/dist/tests/e2e/property-ic.test.js.map +1 -0
- package/dist/tests/e2e/runtime-errors.test.d.ts +10 -0
- package/dist/tests/e2e/runtime-errors.test.js +52 -0
- package/dist/tests/e2e/runtime-errors.test.js.map +1 -0
- package/dist/tests/e2e/structured-clone.test.d.ts +6 -0
- package/dist/tests/e2e/structured-clone.test.js +49 -0
- package/dist/tests/e2e/structured-clone.test.js.map +1 -0
- package/dist/tests/e2e/text-codec.test.d.ts +6 -0
- package/dist/tests/e2e/text-codec.test.js +24 -0
- package/dist/tests/e2e/text-codec.test.js.map +1 -0
- package/dist/tests/e2e/typed-array-views.test.d.ts +6 -0
- package/dist/tests/e2e/typed-array-views.test.js +39 -0
- package/dist/tests/e2e/typed-array-views.test.js.map +1 -0
- package/dist/tests/e2e/url-search-params.test.d.ts +5 -0
- package/dist/tests/e2e/url-search-params.test.js +30 -0
- package/dist/tests/e2e/url-search-params.test.js.map +1 -0
- package/dist/tests/e2e/weak-collections.test.d.ts +1 -0
- package/dist/tests/e2e/weak-collections.test.js +88 -0
- package/dist/tests/e2e/weak-collections.test.js.map +1 -0
- package/dist/tests/parser/declarations.test.js +12 -0
- package/dist/tests/parser/declarations.test.js.map +1 -1
- package/dist/tests/parser/module-syntax.test.js +9 -0
- package/dist/tests/parser/module-syntax.test.js.map +1 -1
- package/dist/tests/parser/parser.test.js +7 -0
- package/dist/tests/parser/parser.test.js.map +1 -1
- package/dist/tests/version.test.js +5 -1
- package/dist/tests/version.test.js.map +1 -1
- package/doc/ai/README.md +4 -3
- package/doc/ai/cli.md +41 -0
- package/doc/ai/contributing.md +20 -16
- package/doc/ai/extensions.md +13 -10
- package/doc/ai/language-support.md +19 -14
- package/doc/ai/troubleshooting.md +11 -9
- package/doc/ai/zh-CN/README.md +3 -2
- package/doc/ai/zh-CN/cli.md +35 -0
- package/doc/ai/zh-CN/contributing.md +16 -15
- package/doc/ai/zh-CN/extensions.md +12 -9
- package/doc/ai/zh-CN/language-support.md +19 -15
- package/doc/ai/zh-CN/troubleshooting.md +9 -8
- package/doc/gui/api.md +8 -0
- package/doc/gui/build.md +13 -4
- package/doc/gui/known-issues.md +19 -14
- package/doc/gui/media.md +32 -3
- package/doc/gui/rendering.md +3 -1
- package/doc/gui.md +28 -5
- package/doc/icon.md +5 -4
- package/doc/implemented/async.md +51 -0
- package/doc/implemented/binder.md +13 -0
- package/doc/implemented/cli.md +47 -0
- package/doc/implemented/codegen.md +33 -0
- package/doc/implemented/collections.md +26 -0
- package/doc/implemented/driver.md +19 -0
- package/doc/implemented/extensions.md +19 -0
- package/doc/implemented/fetch.md +44 -0
- package/doc/implemented/lexer.md +23 -0
- package/doc/implemented/modules.md +28 -0
- package/doc/implemented/node/assert.md +17 -0
- package/doc/implemented/node/buffer.md +29 -0
- package/doc/implemented/node/child-process.md +29 -0
- package/doc/implemented/node/crypto.md +9 -0
- package/doc/implemented/node/dgram.md +15 -0
- package/doc/implemented/node/events.md +37 -0
- package/doc/implemented/node/fs-promises.md +49 -0
- package/doc/implemented/node/fs.md +112 -0
- package/doc/implemented/node/http.md +21 -0
- package/doc/implemented/node/net.md +17 -0
- package/doc/implemented/node/os.md +22 -0
- package/doc/implemented/node/path.md +33 -0
- package/doc/implemented/node/process.md +23 -0
- package/doc/implemented/node/querystring.md +20 -0
- package/doc/implemented/node/stream-promises.md +8 -0
- package/doc/implemented/node/stream.md +19 -0
- package/doc/implemented/node/test.md +10 -0
- package/doc/implemented/node/url.md +8 -0
- package/doc/implemented/node/util.md +25 -0
- package/doc/implemented/node/worker-threads.md +10 -0
- package/doc/implemented/node/zlib.md +8 -0
- package/doc/implemented/node.md +48 -0
- package/doc/implemented/operators.md +38 -0
- package/doc/implemented/parser.md +58 -0
- package/doc/implemented/pipeline.md +28 -0
- package/doc/implemented/runtime-core.md +32 -0
- package/doc/implemented/stdlib.md +78 -0
- package/doc/implemented/strings.md +27 -0
- package/doc/implemented/tests.md +10 -0
- package/doc/implemented/typed-arrays.md +26 -0
- package/doc/implemented/value-model.md +18 -0
- package/doc/implemented.md +54 -355
- package/doc/node-implemented.md +3 -585
- package/doc/node-unimplemented.md +3 -164
- package/doc/requirements.md +23 -8
- package/doc/unimplemented/classes.md +22 -0
- package/doc/unimplemented/deviations.md +27 -0
- package/doc/unimplemented/expressions.md +26 -0
- package/doc/unimplemented/functions.md +21 -0
- package/doc/unimplemented/modules.md +22 -0
- package/doc/unimplemented/node/async.md +20 -0
- package/doc/unimplemented/node/bun.md +9 -0
- package/doc/unimplemented/node/fs-promises.md +20 -0
- package/doc/unimplemented/node/fs.md +30 -0
- package/doc/unimplemented/node/globals.md +23 -0
- package/doc/unimplemented/node/modules.md +21 -0
- package/doc/unimplemented/node.md +21 -0
- package/doc/unimplemented/statements.md +18 -0
- package/doc/unimplemented/stdlib.md +54 -0
- package/doc/unimplemented/toolchain.md +14 -0
- package/doc/unimplemented/types.md +12 -0
- package/doc/unimplemented.md +18 -275
- package/doc/xbintsc.config.schema.json +12 -0
- package/doc/zh-CN/gui/api.md +7 -0
- package/doc/zh-CN/gui/build.md +11 -3
- package/doc/zh-CN/gui/known-issues.md +17 -11
- package/doc/zh-CN/gui/media.md +26 -2
- package/doc/zh-CN/gui/rendering.md +2 -1
- package/doc/zh-CN/gui.md +21 -3
- package/doc/zh-CN/icon.md +5 -4
- package/doc/zh-CN/implemented/async.md +49 -0
- package/doc/zh-CN/implemented/binder.md +13 -0
- package/doc/zh-CN/implemented/cli.md +46 -0
- package/doc/zh-CN/implemented/codegen.md +33 -0
- package/doc/zh-CN/implemented/collections.md +26 -0
- package/doc/zh-CN/implemented/driver.md +19 -0
- package/doc/zh-CN/implemented/extensions.md +19 -0
- package/doc/zh-CN/implemented/fetch.md +31 -0
- package/doc/zh-CN/implemented/lexer.md +23 -0
- package/doc/zh-CN/implemented/modules.md +28 -0
- package/doc/zh-CN/implemented/node/assert.md +17 -0
- package/doc/zh-CN/implemented/node/buffer.md +25 -0
- package/doc/zh-CN/implemented/node/child-process.md +27 -0
- package/doc/zh-CN/implemented/node/crypto.md +9 -0
- package/doc/zh-CN/implemented/node/dgram.md +15 -0
- package/doc/zh-CN/implemented/node/events.md +36 -0
- package/doc/zh-CN/implemented/node/fs-promises.md +30 -0
- package/doc/zh-CN/implemented/node/fs.md +105 -0
- package/doc/zh-CN/implemented/node/http.md +17 -0
- package/doc/zh-CN/implemented/node/net.md +17 -0
- package/doc/zh-CN/implemented/node/os.md +21 -0
- package/doc/zh-CN/implemented/node/path.md +26 -0
- package/doc/zh-CN/implemented/node/process.md +23 -0
- package/doc/zh-CN/implemented/node/querystring.md +20 -0
- package/doc/zh-CN/implemented/node/stream-promises.md +8 -0
- package/doc/zh-CN/implemented/node/stream.md +15 -0
- package/doc/zh-CN/implemented/node/test.md +10 -0
- package/doc/zh-CN/implemented/node/url.md +8 -0
- package/doc/zh-CN/implemented/node/util.md +25 -0
- package/doc/zh-CN/implemented/node/worker-threads.md +9 -0
- package/doc/zh-CN/implemented/node/zlib.md +8 -0
- package/doc/zh-CN/implemented/node.md +45 -0
- package/doc/zh-CN/implemented/operators.md +38 -0
- package/doc/zh-CN/implemented/parser.md +58 -0
- package/doc/zh-CN/implemented/pipeline.md +25 -0
- package/doc/zh-CN/implemented/runtime-core.md +31 -0
- package/doc/zh-CN/implemented/stdlib.md +76 -0
- package/doc/zh-CN/implemented/strings.md +27 -0
- package/doc/zh-CN/implemented/tests.md +10 -0
- package/doc/zh-CN/implemented/typed-arrays.md +26 -0
- package/doc/zh-CN/implemented/value-model.md +18 -0
- package/doc/zh-CN/implemented.md +50 -350
- package/doc/zh-CN/node-implemented.md +4 -531
- package/doc/zh-CN/node-unimplemented.md +4 -139
- package/doc/zh-CN/plan-require-node-modules.md +4 -4
- package/doc/zh-CN/requirements.md +20 -6
- package/doc/zh-CN/unimplemented/classes.md +22 -0
- package/doc/zh-CN/unimplemented/deviations.md +24 -0
- package/doc/zh-CN/unimplemented/expressions.md +24 -0
- package/doc/zh-CN/unimplemented/functions.md +21 -0
- package/doc/zh-CN/unimplemented/modules.md +19 -0
- package/doc/zh-CN/unimplemented/node/async.md +20 -0
- package/doc/zh-CN/unimplemented/node/bun.md +8 -0
- package/doc/zh-CN/unimplemented/node/fs-promises.md +12 -0
- package/doc/zh-CN/unimplemented/node/fs.md +24 -0
- package/doc/zh-CN/unimplemented/node/globals.md +14 -0
- package/doc/zh-CN/unimplemented/node/modules.md +15 -0
- package/doc/zh-CN/unimplemented/node.md +18 -0
- package/doc/zh-CN/unimplemented/statements.md +15 -0
- package/doc/zh-CN/unimplemented/stdlib.md +54 -0
- package/doc/zh-CN/unimplemented/toolchain.md +14 -0
- package/doc/zh-CN/unimplemented/types.md +11 -0
- package/doc/zh-CN/unimplemented.md +14 -237
- package/llms.txt +32 -4
- package/package.json +1 -1
- package/runtime/ext_gui/inline_svg.cpp +219 -0
- package/runtime/ext_gui/inline_svg.h +41 -0
- package/runtime/ext_gui/layout.cpp +18 -0
- package/runtime/ext_gui/layout.h +7 -0
- package/runtime/ext_gui/layout_flow.cpp +4 -3
- package/runtime/ext_gui/paint.cpp +14 -0
- package/runtime/ext_gui/paint.h +5 -1
- package/runtime/ext_gui/renderer_image.cpp +53 -25
- package/runtime/ext_gui/renderer_shaders.h +2 -2
- package/runtime/ext_gui/stb_image.h +1 -17
- package/runtime/ext_gui/style_ua.cpp +3 -0
- package/runtime/ext_gui/svg.cpp +122 -39
- package/runtime/ext_gui/svg.h +14 -3
- package/runtime/ext_gui/window.cpp +28 -0
- package/runtime/ext_node/child_process/child_process.c +173 -73
- package/runtime/ext_node/fs/async_api.c +314 -0
- package/runtime/ext_node/fs/async_complete.c +99 -0
- package/runtime/ext_node/fs/async_fh.c +206 -0
- package/runtime/ext_node/fs/async_job.c +81 -0
- package/runtime/ext_node/fs/async_job.h +132 -0
- package/runtime/ext_node/fs/async_worker.c +534 -0
- package/runtime/ext_node/fs/async_worker_dir.c +439 -0
- package/runtime/ext_node/fs/async_worker_dir.h +33 -0
- package/runtime/ext_node/fs/async_worker_fd.c +74 -0
- package/runtime/ext_node/fs/dir.c +60 -15
- package/runtime/ext_node/fs/fs_common.h +9 -0
- package/runtime/ext_node/fs/fs_ops.c +18 -29
- package/runtime/ext_node/fs/parts/builtins.inc +34 -0
- package/runtime/ext_node/fs/parts/platform.inc +66 -0
- package/runtime/ext_node/fs/promises.c +44 -234
- package/runtime/rt.h +15 -0
- package/runtime/rt_internal.h +108 -0
- package/runtime/xt_alloc.c +43 -7
- package/runtime/xt_array_buffer.c +284 -0
- package/runtime/xt_async.c +46 -21
- package/runtime/xt_async_io.c +333 -0
- package/runtime/xt_async_io.h +47 -0
- package/runtime/xt_bigint/helpers.inc +3 -3
- package/runtime/xt_builtins.c +21 -17
- package/runtime/xt_constructors.c +12 -2
- package/runtime/xt_containers/access.inc +148 -3
- package/runtime/xt_containers/objects.inc +26 -2
- package/runtime/xt_containers/shapes.inc +71 -0
- package/runtime/xt_containers.c +1 -0
- package/runtime/xt_coroutine.c +17 -0
- package/runtime/xt_fetch/async.inc +295 -0
- package/runtime/xt_fetch/request.inc +6 -183
- package/runtime/xt_fetch/socket.inc +5 -4
- package/runtime/xt_fetch.c +6 -4
- package/runtime/xt_generator.c +299 -10
- package/runtime/xt_io/inspect.inc +112 -0
- package/runtime/xt_loop.c +79 -7
- package/runtime/xt_performance.c +37 -0
- package/runtime/xt_promise.c +63 -1
- package/runtime/xt_stdlib/arrays.inc +1 -1
- package/runtime/xt_stdlib/dispatch.inc +46 -11
- package/runtime/xt_stdlib/strings.inc +1 -1
- package/runtime/xt_stdlib2/array-statics.inc +25 -0
- package/runtime/xt_stdlib2/arrays.inc +5 -3
- package/runtime/xt_stdlib2/container.inc +5 -0
- package/runtime/xt_stdlib2/date.inc +111 -3
- package/runtime/xt_stdlib2/error.inc +24 -0
- package/runtime/xt_stdlib2/json.inc +310 -19
- package/runtime/xt_stdlib2/number-string-statics.inc +1 -1
- package/runtime/xt_stdlib2/objects.inc +122 -0
- package/runtime/xt_stdlib2/set.inc +1 -1
- package/runtime/xt_structured_clone.c +159 -0
- package/runtime/xt_symbol.c +2 -2
- package/runtime/xt_text_codec.c +69 -0
- package/runtime/xt_typed_array/construction.inc +35 -5
- package/runtime/xt_typed_array/elements.inc +159 -0
- package/runtime/xt_typed_array/methods.inc +21 -5
- package/runtime/xt_typed_array.c +7 -10
- package/runtime/xt_url.c +375 -0
- package/runtime/xt_values/arithmetic.inc +2 -2
- package/runtime/xt_values/conversions.inc +1 -1
- package/runtime/xt_weak.c +281 -0
- package/scripts/build-gui.ts +133 -60
- package/scripts/check-version.ts +3 -3
- package/src/binder/declarations.ts +14 -3
- package/src/cli/hints.ts +8 -1
- package/src/cli/main.ts +119 -18
- package/src/cli/watch.ts +101 -0
- package/src/codegen/generator/calls/access.ts +10 -2
- package/src/codegen/generator/calls/closures.ts +12 -4
- package/src/codegen/generator/context.ts +23 -3
- package/src/codegen/generator/expressions/operators.ts +27 -13
- package/src/codegen/generator/expressions/primary.ts +4 -0
- package/src/codegen/generator/module.ts +0 -7
- package/src/codegen/generator/numeric.ts +85 -11
- package/src/codegen/generator/state.ts +23 -0
- package/src/codegen/generator/statements/control-flow.ts +1 -4
- package/src/codegen/generator/statements/loops.ts +50 -16
- package/src/codegen/generator/tables.ts +26 -1
- package/src/diagnostics/diagnostic.ts +23 -3
- package/src/driver/app-artifacts.ts +77 -0
- package/src/driver/build-key.ts +55 -0
- package/src/driver/bundler/graph.ts +63 -13
- package/src/driver/bundler/merge.ts +4 -1
- package/src/driver/compiler.ts +94 -328
- package/src/driver/config.ts +11 -0
- package/src/driver/frontend.ts +120 -0
- package/src/driver/index.ts +0 -1
- package/src/driver/options.ts +70 -0
- package/src/driver/runtime-objects.ts +134 -0
- package/src/driver/toolchain-provider.ts +4 -0
- package/src/driver/toolchain.ts +154 -10
- package/src/driver/version.ts +12 -0
- package/src/driver/win-icon.ts +36 -36
- package/src/extensions/node/fs/index.ts +12 -3
- package/src/extensions/node/fs-promises/index.ts +15 -6
- package/src/parser/declarations/classes.ts +4 -0
- package/src/parser/declarations/functions.ts +12 -1
- package/src/parser/modules.ts +8 -4
- package/src/parser/parser.ts +28 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Front end: source text in, LLVM IR out (no toolchain involved).
|
|
3
|
+
*
|
|
4
|
+
* `compileString` compiles one in-memory source text; `compileEntry` reads a
|
|
5
|
+
* file and first bundles every reachable module. `build` reuses the same
|
|
6
|
+
* `parseEntry` step so the module graph is resolved identically for `emit`,
|
|
7
|
+
* `run` and `build`.
|
|
8
|
+
*/
|
|
9
|
+
import { DiagnosticBag } from "../diagnostics/diagnostic.js";
|
|
10
|
+
import { type SourceFileNode } from "../ast/nodes.js";
|
|
11
|
+
import { type ExtensionRegistry } from "../extensions/registry.js";
|
|
12
|
+
import type { CompileStringResult } from "./options.js";
|
|
13
|
+
/** A parsed (and, for module entries, already bundled) entry file. */
|
|
14
|
+
export interface ParsedEntry {
|
|
15
|
+
readonly absoluteEntry: string;
|
|
16
|
+
readonly sourceText: string;
|
|
17
|
+
readonly sourceFile: SourceFileNode;
|
|
18
|
+
/** The text the incremental cache hashes (the bundled text for modules). */
|
|
19
|
+
readonly cacheText: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse an entry file, bundling its module graph first when it uses
|
|
23
|
+
* `import`/`export`. The caller owns `diagnostics` and must not run code
|
|
24
|
+
* generation when it has errors (the tree would be missing nodes).
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseEntry(entryPath: string, registry: ExtensionRegistry, diagnostics: DiagnosticBag): ParsedEntry;
|
|
27
|
+
/** Compile TypeScript source text to LLVM IR without touching the toolchain. */
|
|
28
|
+
export declare function compileString(source: string, fileName?: string, extensions?: ExtensionRegistry, options?: {
|
|
29
|
+
readonly debug?: boolean;
|
|
30
|
+
}): CompileStringResult;
|
|
31
|
+
/**
|
|
32
|
+
* Compile a file to LLVM IR, bundling every reachable relative module first so
|
|
33
|
+
* that imports from other TypeScript sources resolve exactly like `build`.
|
|
34
|
+
*/
|
|
35
|
+
export declare function compileEntry(entryPath: string, extensions?: ExtensionRegistry, options?: {
|
|
36
|
+
readonly debug?: boolean;
|
|
37
|
+
}): CompileStringResult;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Front end: source text in, LLVM IR out (no toolchain involved).
|
|
3
|
+
*
|
|
4
|
+
* `compileString` compiles one in-memory source text; `compileEntry` reads a
|
|
5
|
+
* file and first bundles every reachable module. `build` reuses the same
|
|
6
|
+
* `parseEntry` step so the module graph is resolved identically for `emit`,
|
|
7
|
+
* `run` and `build`.
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync } from "node:fs";
|
|
10
|
+
import { resolve } from "node:path";
|
|
11
|
+
import { DiagnosticBag } from "../diagnostics/diagnostic.js";
|
|
12
|
+
import { SourceFile } from "../diagnostics/source.js";
|
|
13
|
+
import { sourceTextBytes } from "../diagnostics/source-text.js";
|
|
14
|
+
import { Parser } from "../parser/parser.js";
|
|
15
|
+
import { generate } from "../codegen/llvm.js";
|
|
16
|
+
import { SyntaxKind } from "../ast/nodes.js";
|
|
17
|
+
import { bundleModules } from "./modules.js";
|
|
18
|
+
import { createDefaultRegistry } from "../extensions/registry.js";
|
|
19
|
+
/**
|
|
20
|
+
* Every module specifier the registry can resolve at code generation time (the
|
|
21
|
+
* registered platform modules plus the hints for known-but-disabled
|
|
22
|
+
* extensions). Bare imports outside this set are looked up in `node_modules`
|
|
23
|
+
* and bundled as source.
|
|
24
|
+
*/
|
|
25
|
+
function externalModuleSpecifiers(registry) {
|
|
26
|
+
return new Set([
|
|
27
|
+
...Object.keys(registry.modules()),
|
|
28
|
+
...Object.keys(registry.moduleHints()),
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse an entry file, bundling its module graph first when it uses
|
|
33
|
+
* `import`/`export`. The caller owns `diagnostics` and must not run code
|
|
34
|
+
* generation when it has errors (the tree would be missing nodes).
|
|
35
|
+
*/
|
|
36
|
+
export function parseEntry(entryPath, registry, diagnostics) {
|
|
37
|
+
const absoluteEntry = resolve(entryPath);
|
|
38
|
+
const sourceText = sourceTextBytes(readFileSync(absoluteEntry, "utf8"));
|
|
39
|
+
const file = new SourceFile(absoluteEntry, sourceText);
|
|
40
|
+
const parser = new Parser(file, diagnostics);
|
|
41
|
+
let sourceFile = parser.parseSourceFile();
|
|
42
|
+
const isModule = sourceFile.statements.some((statement) => statement.kind === SyntaxKind.ImportDeclaration ||
|
|
43
|
+
statement.kind === SyntaxKind.ExportDeclaration ||
|
|
44
|
+
statement.kind === SyntaxKind.ExportAssignment);
|
|
45
|
+
let cacheText = sourceText;
|
|
46
|
+
if (isModule) {
|
|
47
|
+
const bundled = bundleModules(absoluteEntry, diagnostics, externalModuleSpecifiers(registry), registry.assetLoaders());
|
|
48
|
+
if (bundled) {
|
|
49
|
+
sourceFile = bundled.sourceFile;
|
|
50
|
+
cacheText = bundled.text;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { absoluteEntry, sourceText, sourceFile, cacheText };
|
|
54
|
+
}
|
|
55
|
+
/** Compile TypeScript source text to LLVM IR without touching the toolchain. */
|
|
56
|
+
export function compileString(source, fileName = "input.ts", extensions, options = {}) {
|
|
57
|
+
const file = new SourceFile(fileName, source);
|
|
58
|
+
const diagnostics = new DiagnosticBag();
|
|
59
|
+
const parser = new Parser(file, diagnostics);
|
|
60
|
+
const sourceFile = parser.parseSourceFile();
|
|
61
|
+
const registry = extensions ?? createDefaultRegistry();
|
|
62
|
+
/* Code generation assumes a well-formed tree (binder and codegen both read
|
|
63
|
+
* required children), so never lower a file that already failed to parse. */
|
|
64
|
+
if (diagnostics.hasErrors)
|
|
65
|
+
return { ir: "", diagnostics: diagnostics.diagnostics };
|
|
66
|
+
const { ir } = generate(sourceFile, diagnostics, {
|
|
67
|
+
builtins: registry.builtins(),
|
|
68
|
+
modules: registry.modules(),
|
|
69
|
+
moduleHints: registry.moduleHints(),
|
|
70
|
+
debug: options.debug === true,
|
|
71
|
+
});
|
|
72
|
+
return { ir, diagnostics: diagnostics.diagnostics };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Compile a file to LLVM IR, bundling every reachable relative module first so
|
|
76
|
+
* that imports from other TypeScript sources resolve exactly like `build`.
|
|
77
|
+
*/
|
|
78
|
+
export function compileEntry(entryPath, extensions, options = {}) {
|
|
79
|
+
const registry = extensions ?? createDefaultRegistry();
|
|
80
|
+
const diagnostics = new DiagnosticBag();
|
|
81
|
+
const parsed = parseEntry(entryPath, registry, diagnostics);
|
|
82
|
+
if (diagnostics.hasErrors)
|
|
83
|
+
return { ir: "", diagnostics: diagnostics.diagnostics };
|
|
84
|
+
const { ir } = generate(parsed.sourceFile, diagnostics, {
|
|
85
|
+
builtins: registry.builtins(),
|
|
86
|
+
modules: registry.modules(),
|
|
87
|
+
moduleHints: registry.moduleHints(),
|
|
88
|
+
debug: options.debug === true,
|
|
89
|
+
});
|
|
90
|
+
return { ir, diagnostics: diagnostics.diagnostics };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=frontend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../../src/driver/frontend.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,5 +6,5 @@ export { findClang, realRunner, ToolchainError, type Runner, } from "./toolchain
|
|
|
6
6
|
export { resolveToolchain, type ResolvedToolchain, type ToolchainSource } from "./toolchain-provider.js";
|
|
7
7
|
export { CONFIG_FILE_NAME, findProjectConfig, loadProjectConfig, parseProjectConfig, resolveConfigPaths, ProjectConfigError, type AppConfig, type LoadedProjectConfig, type ProjectConfig, } from "./config.js";
|
|
8
8
|
export { ensureIconObject, iconSource, readIcon, toIcoBytes, pngToIco, ICON_SYMBOLS, EMPTY_ICON, IconError, type IconFormat, type IconInfo, } from "./icon.js";
|
|
9
|
-
export { ensureWindowsIconResource, resolveResourceCompiler, type ResourceCompiler,
|
|
9
|
+
export { ensureWindowsIconResource, resolveResourceCompiler, type ResourceCompiler, } from "./win-icon.js";
|
|
10
10
|
export { bundlePathFor, infoPlist, packageMacApp, type MacBundleOptions } from "./mac-bundle.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAsD,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC/H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,SAAS,EACT,UAAU,EACV,cAAc,GAEf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAgD,MAAM,yBAAyB,CAAC;AACzG,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GAInB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,GAGV,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAsD,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC/H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,SAAS,EACT,UAAU,EACV,cAAc,GAEf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAgD,MAAM,yBAAyB,CAAC;AACzG,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GAInB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,GAGV,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAyB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public option and result types for the build driver.
|
|
3
|
+
*
|
|
4
|
+
* They live apart from the orchestration in `compiler.ts` so a feature that
|
|
5
|
+
* adds one option touches this file (and the phase that consumes it) without
|
|
6
|
+
* colliding with unrelated driver work.
|
|
7
|
+
*/
|
|
8
|
+
import type { Diagnostic } from "../diagnostics/diagnostic.js";
|
|
9
|
+
import type { ExtensionRegistry } from "../extensions/registry.js";
|
|
10
|
+
import type { AppConfig } from "./config.js";
|
|
11
|
+
import type { PgoMode, Runner } from "./toolchain.js";
|
|
12
|
+
/** What `build` produces: an executable, an object file or LLVM IR only. */
|
|
13
|
+
export type EmitKind = "exe" | "obj" | "ir";
|
|
14
|
+
export interface BuildOptions {
|
|
15
|
+
/** Explicit output path (defaults to the source base name in `outDir`). */
|
|
16
|
+
readonly output?: string;
|
|
17
|
+
readonly outDir?: string;
|
|
18
|
+
readonly optimize?: "0" | "1" | "2" | "3";
|
|
19
|
+
readonly emit?: EmitKind;
|
|
20
|
+
readonly force?: boolean;
|
|
21
|
+
readonly verbose?: boolean;
|
|
22
|
+
readonly cacheDir?: string;
|
|
23
|
+
readonly extensions?: ExtensionRegistry;
|
|
24
|
+
readonly runner?: Runner;
|
|
25
|
+
readonly clang?: string;
|
|
26
|
+
/** Prefer a prebuilt `runtime/lib/<os>-<arch>/*.a` archive when present (default true). */
|
|
27
|
+
readonly preferPrebuilt?: boolean;
|
|
28
|
+
readonly write?: boolean;
|
|
29
|
+
/** Application icon embedded into the binary (shorthand for `app.icon`). */
|
|
30
|
+
readonly icon?: string;
|
|
31
|
+
/** Application metadata: name, icon and macOS bundle settings. */
|
|
32
|
+
readonly app?: AppConfig;
|
|
33
|
+
/** Emit LLVM debug metadata so `-g` produces DWARF/CodeView (default false). */
|
|
34
|
+
readonly debug?: boolean;
|
|
35
|
+
/** Compile the program and runtime to LTO bitcode and link with lld. */
|
|
36
|
+
readonly lto?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Profile-guided optimization. `generate` builds an instrumented binary that
|
|
39
|
+
* writes `.profraw` files into `pgoDir`; `use` consumes them.
|
|
40
|
+
*/
|
|
41
|
+
readonly pgo?: PgoMode;
|
|
42
|
+
/** Profile directory (default: `<outDir>/pgo`). */
|
|
43
|
+
readonly pgoDir?: string;
|
|
44
|
+
}
|
|
45
|
+
/** One phase of a build, in milliseconds (reported by `--time`). */
|
|
46
|
+
export interface PhaseTiming {
|
|
47
|
+
readonly phase: "frontend" | "codegen" | "runtime" | "clang" | "link";
|
|
48
|
+
readonly ms: number;
|
|
49
|
+
}
|
|
50
|
+
export interface BuildResult {
|
|
51
|
+
readonly outputPath: string;
|
|
52
|
+
readonly irPath?: string;
|
|
53
|
+
readonly cached: boolean;
|
|
54
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
55
|
+
readonly ir?: string;
|
|
56
|
+
/** macOS `.app` bundle produced by `app.bundle` (darwin only). */
|
|
57
|
+
readonly bundlePath?: string;
|
|
58
|
+
/** Per-phase timings, collected for `xbintsc build --time`. */
|
|
59
|
+
readonly timings?: readonly PhaseTiming[];
|
|
60
|
+
}
|
|
61
|
+
export interface CompileStringResult {
|
|
62
|
+
readonly ir: string;
|
|
63
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
64
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public option and result types for the build driver.
|
|
3
|
+
*
|
|
4
|
+
* They live apart from the orchestration in `compiler.ts` so a feature that
|
|
5
|
+
* adds one option touches this file (and the phase that consumes it) without
|
|
6
|
+
* colliding with unrelated driver work.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/driver/options.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiling the C runtime (and every extension's C sources) into linkable
|
|
3
|
+
* objects, reusing cached objects keyed by the source/header content hash.
|
|
4
|
+
*
|
|
5
|
+
* `RUNTIME_SOURCES` is the list of core translation units. A feature that adds
|
|
6
|
+
* a runtime file adds one line here and nowhere else.
|
|
7
|
+
*/
|
|
8
|
+
import type { ExtensionRegistry } from "../extensions/registry.js";
|
|
9
|
+
import { type PgoMode, type Runner } from "./toolchain.js";
|
|
10
|
+
/** Core runtime translation units (each compiled and cached independently). */
|
|
11
|
+
export declare const RUNTIME_SOURCES: readonly ["xt_alloc.c", "xt_values.c", "xt_bigint.c", "xt_containers.c", "xt_weak.c", "xt_typed_array.c", "xt_stdlib.c", "xt_stdlib2.c", "xt_promise.c", "xt_async.c", "xt_loop.c", "xt_async_io.c", "xt_generator.c", "xt_coroutine.c", "xt_fetch.c", "xt_symbol.c", "xt_builtins.c", "xt_constructors.c", "xt_structured_clone.c", "xt_performance.c", "xt_text_codec.c", "xt_url.c", "xt_array_buffer.c", "xt_io.c"];
|
|
12
|
+
export interface RuntimeObjects {
|
|
13
|
+
readonly runtimeObjects: readonly string[];
|
|
14
|
+
readonly extensionObjects: readonly string[];
|
|
15
|
+
/** Pre-built C++/Rust objects and archives contributed by native extensions. */
|
|
16
|
+
readonly nativeObjects: readonly string[];
|
|
17
|
+
}
|
|
18
|
+
export interface RuntimeObjectsOptions {
|
|
19
|
+
readonly runner: Runner;
|
|
20
|
+
readonly clang: string;
|
|
21
|
+
readonly runtimeDir: string;
|
|
22
|
+
readonly cacheDir: string;
|
|
23
|
+
readonly registry: ExtensionRegistry;
|
|
24
|
+
readonly preferPrebuilt: boolean;
|
|
25
|
+
readonly env: Record<string, string>;
|
|
26
|
+
readonly lto: boolean;
|
|
27
|
+
readonly pgo: PgoMode | undefined;
|
|
28
|
+
readonly pgoDir: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Compile the core runtime and every extension source, reusing cached object
|
|
32
|
+
* files keyed on the C source hash. Returns the object paths to link.
|
|
33
|
+
*
|
|
34
|
+
* When `preferPrebuilt` is set, a shipped static archive
|
|
35
|
+
* (`runtime/lib/<os>-<arch>/{core,ext_<name>}.a`) is used instead of compiling
|
|
36
|
+
* that group's C sources. Missing archives fall back to compiling the sources.
|
|
37
|
+
*/
|
|
38
|
+
export declare function ensureRuntimeObjects(options: RuntimeObjectsOptions): RuntimeObjects;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiling the C runtime (and every extension's C sources) into linkable
|
|
3
|
+
* objects, reusing cached objects keyed by the source/header content hash.
|
|
4
|
+
*
|
|
5
|
+
* `RUNTIME_SOURCES` is the list of core translation units. A feature that adds
|
|
6
|
+
* a runtime file adds one line here and nowhere else.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
9
|
+
import { basename, join, resolve } from "node:path";
|
|
10
|
+
import { hashParts } from "./cache.js";
|
|
11
|
+
import { findRuntimeLibrary } from "./runtime-lib.js";
|
|
12
|
+
import { compileC, optimizationFlags, RUNTIME_CFLAGS } from "./toolchain.js";
|
|
13
|
+
import { COMPILER_VERSION } from "./version.js";
|
|
14
|
+
/** Core runtime translation units (each compiled and cached independently). */
|
|
15
|
+
export const RUNTIME_SOURCES = [
|
|
16
|
+
"xt_alloc.c",
|
|
17
|
+
"xt_values.c",
|
|
18
|
+
"xt_bigint.c",
|
|
19
|
+
"xt_containers.c",
|
|
20
|
+
"xt_weak.c",
|
|
21
|
+
"xt_typed_array.c",
|
|
22
|
+
"xt_stdlib.c",
|
|
23
|
+
"xt_stdlib2.c",
|
|
24
|
+
"xt_promise.c",
|
|
25
|
+
"xt_async.c",
|
|
26
|
+
"xt_loop.c",
|
|
27
|
+
"xt_async_io.c",
|
|
28
|
+
"xt_generator.c",
|
|
29
|
+
"xt_coroutine.c",
|
|
30
|
+
"xt_fetch.c",
|
|
31
|
+
"xt_symbol.c",
|
|
32
|
+
"xt_builtins.c",
|
|
33
|
+
"xt_constructors.c",
|
|
34
|
+
"xt_structured_clone.c",
|
|
35
|
+
"xt_performance.c",
|
|
36
|
+
"xt_text_codec.c",
|
|
37
|
+
"xt_url.c",
|
|
38
|
+
"xt_array_buffer.c",
|
|
39
|
+
"xt_io.c",
|
|
40
|
+
];
|
|
41
|
+
/**
|
|
42
|
+
* Compile the core runtime and every extension source, reusing cached object
|
|
43
|
+
* files keyed on the C source hash. Returns the object paths to link.
|
|
44
|
+
*
|
|
45
|
+
* When `preferPrebuilt` is set, a shipped static archive
|
|
46
|
+
* (`runtime/lib/<os>-<arch>/{core,ext_<name>}.a`) is used instead of compiling
|
|
47
|
+
* that group's C sources. Missing archives fall back to compiling the sources.
|
|
48
|
+
*/
|
|
49
|
+
export function ensureRuntimeObjects(options) {
|
|
50
|
+
const { runner, clang, runtimeDir, cacheDir, registry, preferPrebuilt, env, lto, pgo, pgoDir } = options;
|
|
51
|
+
const optimization = optimizationFlags(lto, pgo, pgoDir);
|
|
52
|
+
/* Runtime objects depend on the shared headers (rt.h/rt_internal.h/...) and
|
|
53
|
+
the `#include`d implementation fragments (`.inc`), so any change to them
|
|
54
|
+
must invalidate every cached object. Hash them all. */
|
|
55
|
+
const headerParts = [];
|
|
56
|
+
const collectHeaders = (dir) => {
|
|
57
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
58
|
+
const full = join(dir, entry.name);
|
|
59
|
+
if (entry.isDirectory())
|
|
60
|
+
collectHeaders(full);
|
|
61
|
+
else if (entry.name.endsWith(".h") || entry.name.endsWith(".inc"))
|
|
62
|
+
headerParts.push(readFileSync(full, "utf8"));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
collectHeaders(runtimeDir);
|
|
66
|
+
const headerStamp = hashParts(headerParts);
|
|
67
|
+
const compileOne = (sourcePath, tag) => {
|
|
68
|
+
const body = readFileSync(sourcePath, "utf8");
|
|
69
|
+
const key = hashParts([
|
|
70
|
+
"runtime",
|
|
71
|
+
COMPILER_VERSION,
|
|
72
|
+
RUNTIME_CFLAGS.join(" "),
|
|
73
|
+
optimization.join(" "),
|
|
74
|
+
tag,
|
|
75
|
+
headerStamp,
|
|
76
|
+
body,
|
|
77
|
+
clang,
|
|
78
|
+
process.platform,
|
|
79
|
+
]);
|
|
80
|
+
const objectPath = join(cacheDir, `${tag}-${key}.o`);
|
|
81
|
+
if (!existsSync(objectPath)) {
|
|
82
|
+
compileC(runner, clang, sourcePath, objectPath, runtimeDir, env, optimization);
|
|
83
|
+
}
|
|
84
|
+
return objectPath;
|
|
85
|
+
};
|
|
86
|
+
const coreArchive = preferPrebuilt ? findRuntimeLibrary("core") : undefined;
|
|
87
|
+
const runtimeObjects = coreArchive
|
|
88
|
+
? [coreArchive]
|
|
89
|
+
: RUNTIME_SOURCES.map((source) => compileOne(join(runtimeDir, source), basename(source, ".c")));
|
|
90
|
+
const extensionObjects = [];
|
|
91
|
+
const seen = new Set();
|
|
92
|
+
for (const extension of registry.all()) {
|
|
93
|
+
const sources = extension.runtimeSources ? extension.runtimeSources() : [];
|
|
94
|
+
if (sources.length === 0)
|
|
95
|
+
continue;
|
|
96
|
+
const archive = preferPrebuilt ? findRuntimeLibrary(`ext_${extension.name}`) : undefined;
|
|
97
|
+
if (archive) {
|
|
98
|
+
extensionObjects.push(archive);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
for (const sourcePath of sources) {
|
|
102
|
+
const dedupeKey = resolve(sourcePath);
|
|
103
|
+
if (seen.has(dedupeKey))
|
|
104
|
+
continue;
|
|
105
|
+
seen.add(dedupeKey);
|
|
106
|
+
extensionObjects.push(compileOne(sourcePath, `ext_${extensionObjects.length}_${basename(sourcePath, ".c")}`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// A native archive may be shared by several manifests; link each once.
|
|
110
|
+
return { runtimeObjects, extensionObjects, nativeObjects: [...new Set(registry.nativeObjects())] };
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=runtime-objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-objects.js","sourceRoot":"","sources":["../../../src/driver/runtime-objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
* The version is checked here, not left to the first failed C compile: the
|
|
18
18
|
* emitted IR needs LLVM 16+ (opaque pointers), and a "clang 15 is too old"
|
|
19
19
|
* error up front is far more actionable than a wall of IR type errors later.
|
|
20
|
+
* On Windows the target is checked as well: only an MSVC-targeting clang can
|
|
21
|
+
* link against the runtime, so a compiler built for another Windows ABI is
|
|
22
|
+
* skipped (or rejected, when named explicitly) instead of producing objects
|
|
23
|
+
* the linker cannot mix.
|
|
20
24
|
*
|
|
21
25
|
* Extra linker arguments (for example `-fuse-ld=lld`) can be supplied through
|
|
22
26
|
* `xbintsc_LINKER_ARGS`.
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
* The version is checked here, not left to the first failed C compile: the
|
|
18
18
|
* emitted IR needs LLVM 16+ (opaque pointers), and a "clang 15 is too old"
|
|
19
19
|
* error up front is far more actionable than a wall of IR type errors later.
|
|
20
|
+
* On Windows the target is checked as well: only an MSVC-targeting clang can
|
|
21
|
+
* link against the runtime, so a compiler built for another Windows ABI is
|
|
22
|
+
* skipped (or rejected, when named explicitly) instead of producing objects
|
|
23
|
+
* the linker cannot mix.
|
|
20
24
|
*
|
|
21
25
|
* Extra linker arguments (for example `-fuse-ld=lld`) can be supplied through
|
|
22
26
|
* `xbintsc_LINKER_ARGS`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolchain-provider.js","sourceRoot":"","sources":["../../../src/driver/toolchain-provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toolchain-provider.js","sourceRoot":"","sources":["../../../src/driver/toolchain-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAkC,MAAM,gBAAgB,CAAC;AAkBzF,SAAS,UAAU,CAAC,QAA2B;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,SAAiB,UAAU;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,OAAO;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;QAC1B,GAAG,EAAE,EAAE;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -42,6 +42,8 @@ export interface ClangProbe {
|
|
|
42
42
|
/** True when the command ran and exited 0. */
|
|
43
43
|
readonly responds: boolean;
|
|
44
44
|
readonly version?: ClangVersion;
|
|
45
|
+
/** The `Target:` triple clang was built for, when it prints one. */
|
|
46
|
+
readonly target?: string;
|
|
45
47
|
/** First line of the version output, for diagnostics. */
|
|
46
48
|
readonly summary: string;
|
|
47
49
|
}
|
|
@@ -58,6 +60,15 @@ export interface ClangLocation {
|
|
|
58
60
|
* gcc, which `cc` may resolve to).
|
|
59
61
|
*/
|
|
60
62
|
export declare function parseClangVersion(output: string): ClangVersion | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Extract the `Target:` triple from `clang --version` output. Windows builds
|
|
65
|
+
* must target the MSVC ABI; clang built for a GNU/Windows or other triple emits
|
|
66
|
+
* objects that cannot be linked into an xbintsc executable (see
|
|
67
|
+
* {@link isMsvcTarget}).
|
|
68
|
+
*/
|
|
69
|
+
export declare function parseClangTarget(output: string): string | undefined;
|
|
70
|
+
/** True when a clang target triple uses the MSVC ABI on Windows. */
|
|
71
|
+
export declare function isMsvcTarget(target: string): boolean;
|
|
61
72
|
/** Run `<command> --version` and classify the result. Never throws. */
|
|
62
73
|
export declare function probeClang(runner: Runner, command: string, env?: Record<string, string>): ClangProbe;
|
|
63
74
|
/** Commands probed for a system compiler, in preference order. */
|
|
@@ -75,6 +86,10 @@ export declare function systemClangCandidates(): string[];
|
|
|
75
86
|
export declare function locateClang(runner?: Runner): ClangLocation;
|
|
76
87
|
/** Locate a supported clang-compatible C compiler, or throw a clear error. */
|
|
77
88
|
export declare function findClang(runner?: Runner): string;
|
|
89
|
+
/** Profile-guided optimization stage (`--pgo-generate` / `--pgo-use`). */
|
|
90
|
+
export type PgoMode = "generate" | "use";
|
|
91
|
+
/** clang flags for LTO and the selected PGO stage. */
|
|
92
|
+
export declare function optimizationFlags(lto: boolean | undefined, pgo: PgoMode | undefined, pgoDir: string | undefined): string[];
|
|
78
93
|
export interface CompileIrOptions {
|
|
79
94
|
readonly clang: string;
|
|
80
95
|
readonly irPath: string;
|
|
@@ -83,6 +98,11 @@ export interface CompileIrOptions {
|
|
|
83
98
|
readonly env?: Record<string, string>;
|
|
84
99
|
/** Emit debug info (`-g`) and keep frame pointers for crash backtraces. */
|
|
85
100
|
readonly debug?: boolean;
|
|
101
|
+
/** Compile to LTO bitcode and let the linker optimize across units. */
|
|
102
|
+
readonly lto?: boolean;
|
|
103
|
+
/** Instrument (`generate`) or consume (`use`) an LLVM profile. */
|
|
104
|
+
readonly pgo?: PgoMode;
|
|
105
|
+
readonly pgoDir?: string;
|
|
86
106
|
}
|
|
87
107
|
/** Compile an LLVM IR file to a native object file. */
|
|
88
108
|
export declare function compileIr(runner: Runner, options: CompileIrOptions): void;
|
|
@@ -93,6 +113,9 @@ export interface LinkOptions {
|
|
|
93
113
|
readonly linkerFlags: readonly string[];
|
|
94
114
|
readonly optimize: string;
|
|
95
115
|
readonly env?: Record<string, string>;
|
|
116
|
+
readonly lto?: boolean;
|
|
117
|
+
readonly pgo?: PgoMode;
|
|
118
|
+
readonly pgoDir?: string;
|
|
96
119
|
}
|
|
97
120
|
export declare function link(runner: Runner, options: LinkOptions): void;
|
|
98
121
|
/**
|
|
@@ -102,4 +125,12 @@ export declare function link(runner: Runner, options: LinkOptions): void;
|
|
|
102
125
|
*/
|
|
103
126
|
export declare const RUNTIME_CFLAGS: readonly ["-O2", "-Wall", "-Wextra", "-D_CRT_SECURE_NO_WARNINGS", ...string[]];
|
|
104
127
|
/** Compile a C source to an object file (used for the runtime and extensions). */
|
|
105
|
-
export declare function compileC(runner: Runner, clang: string, sourcePath: string, objectPath: string, includeDir: string, env?: Record<string, string
|
|
128
|
+
export declare function compileC(runner: Runner, clang: string, sourcePath: string, objectPath: string, includeDir: string, env?: Record<string, string>, extraFlags?: readonly string[]): void;
|
|
129
|
+
/**
|
|
130
|
+
* Merge the `.profraw` files written by an instrumented binary into the
|
|
131
|
+
* `default.profdata` that `-fprofile-use=<dir>` expects. Clang's `-fprofile-use`
|
|
132
|
+
* does not read raw profiles directly; this runs `llvm-profdata merge`.
|
|
133
|
+
*
|
|
134
|
+
* `xbintsc_LLVM_PROFDATA` selects the tool when it is not on `PATH`.
|
|
135
|
+
*/
|
|
136
|
+
export declare function mergeProfileData(runner: Runner, directory: string, clang: string, env?: Record<string, string>): void;
|