xbintsc 0.3.87 → 0.5.20
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 +23 -11
- package/README.md +11 -9
- package/README.zh-CN.md +7 -7
- 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 +17 -4
- package/dist/src/codegen/generator/calls/access.js.map +1 -1
- package/dist/src/codegen/generator/calls/closures.js +13 -1
- package/dist/src/codegen/generator/calls/closures.js.map +1 -1
- package/dist/src/codegen/generator/calls/invocation.js +4 -3
- package/dist/src/codegen/generator/calls/invocation.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 +11 -1
- package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
- package/dist/src/codegen/generator/module.d.ts +0 -1
- package/dist/src/codegen/generator/module.js +10 -17
- 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 +27 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/statements/control-flow.js +2 -7
- 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.d.ts +9 -0
- package/dist/src/codegen/generator/tables.js +100 -3
- 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 +94 -230
- 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 +111 -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/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/closures.test.js +8 -0
- package/dist/tests/codegen/closures.test.js.map +1 -1
- 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.d.ts +10 -0
- package/dist/tests/e2e/async-await.test.js +247 -0
- package/dist/tests/e2e/async-await.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/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-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-coverage-globals.test.js +46 -0
- package/dist/tests/e2e/runtime-coverage-globals.test.js.map +1 -1
- 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/string-utf16.test.d.ts +6 -0
- package/dist/tests/e2e/string-utf16.test.js +133 -0
- package/dist/tests/e2e/string-utf16.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 +26 -21
- package/doc/ai/extensions.md +12 -9
- package/doc/ai/language-support.md +26 -19
- package/doc/ai/troubleshooting.md +15 -12
- 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 +19 -18
- package/doc/ai/zh-CN/extensions.md +10 -7
- package/doc/ai/zh-CN/language-support.md +26 -20
- package/doc/ai/zh-CN/troubleshooting.md +12 -10
- package/doc/gui/build.md +13 -4
- package/doc/gui/known-issues.md +9 -5
- package/doc/gui/rendering.md +3 -1
- package/doc/gui.md +4 -3
- package/doc/icon.md +5 -4
- package/doc/implemented/async.md +38 -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 +12 -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 +38 -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 -352
- 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 +17 -0
- package/doc/unimplemented/node/bun.md +9 -0
- package/doc/unimplemented/node/fs-promises.md +16 -0
- package/doc/unimplemented/node/fs.md +31 -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 -274
- package/doc/xbintsc.config.schema.json +12 -0
- package/doc/zh-CN/gui/build.md +11 -3
- package/doc/zh-CN/gui/known-issues.md +9 -4
- package/doc/zh-CN/gui/rendering.md +2 -1
- package/doc/zh-CN/gui.md +3 -2
- package/doc/zh-CN/icon.md +5 -4
- package/doc/zh-CN/implemented/async.md +38 -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 +12 -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 +27 -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 -347
- 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 +17 -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 -236
- package/llms.txt +32 -4
- package/package.json +1 -1
- package/runtime/ext_gui/renderer_shaders.h +2 -2
- package/runtime/ext_gui/stb_image.h +1 -17
- package/runtime/ext_node/child_process/child_process.c +173 -73
- package/runtime/rt.h +47 -0
- package/runtime/rt_internal.h +205 -10
- package/runtime/xt_alloc.c +49 -7
- package/runtime/xt_array_buffer.c +284 -0
- package/runtime/xt_async.c +222 -0
- package/runtime/xt_bigint/helpers.inc +3 -3
- package/runtime/xt_builtins.c +59 -51
- package/runtime/xt_constructors.c +399 -0
- package/runtime/xt_containers/access.inc +195 -14
- package/runtime/xt_containers/arrays.inc +26 -2
- package/runtime/xt_containers/objects.inc +226 -5
- package/runtime/xt_containers/shapes.inc +71 -0
- package/runtime/xt_containers.c +1 -0
- package/runtime/xt_coroutine.c +229 -0
- package/runtime/xt_generator.c +325 -167
- package/runtime/xt_io/inspect.inc +147 -2
- package/runtime/xt_loop.c +35 -4
- package/runtime/xt_performance.c +37 -0
- package/runtime/xt_promise.c +125 -18
- package/runtime/xt_stdlib/arrays.inc +1 -1
- package/runtime/xt_stdlib/dispatch.inc +64 -13
- package/runtime/xt_stdlib/strings.inc +74 -17
- package/runtime/xt_stdlib2/array-statics.inc +28 -3
- 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 +35 -0
- package/runtime/xt_stdlib2/json.inc +353 -33
- package/runtime/xt_stdlib2/number-string-statics.inc +24 -15
- package/runtime/xt_stdlib2/objects.inc +123 -1
- package/runtime/xt_stdlib2/regexp-match.inc +2 -2
- package/runtime/xt_stdlib2/set.inc +7 -1
- package/runtime/xt_stdlib2/strings.inc +70 -40
- 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 +78 -7
- package/runtime/xt_typed_array/elements.inc +159 -0
- package/runtime/xt_typed_array/methods.inc +21 -5
- package/runtime/xt_typed_array.c +11 -10
- package/runtime/xt_url.c +375 -0
- package/runtime/xt_values/arithmetic.inc +2 -2
- package/runtime/xt_values/constructors.inc +8 -0
- package/runtime/xt_values/conversions.inc +1 -1
- package/runtime/xt_values/strings.inc +19 -3
- package/runtime/xt_values/utf16.inc +340 -0
- package/runtime/xt_values.c +1 -0
- 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 +17 -4
- package/src/codegen/generator/calls/closures.ts +12 -1
- package/src/codegen/generator/calls/invocation.ts +4 -3
- package/src/codegen/generator/context.ts +23 -3
- package/src/codegen/generator/expressions/operators.ts +27 -13
- package/src/codegen/generator/expressions/primary.ts +10 -1
- package/src/codegen/generator/module.ts +10 -19
- package/src/codegen/generator/numeric.ts +85 -11
- package/src/codegen/generator/state.ts +27 -0
- package/src/codegen/generator/statements/control-flow.ts +2 -6
- package/src/codegen/generator/statements/loops.ts +50 -16
- package/src/codegen/generator/tables.ts +110 -3
- 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 +93 -324
- 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 +133 -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/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,71 @@
|
|
|
1
|
+
/* ------------------------------------------------------------------------- */
|
|
2
|
+
/* Hidden classes */
|
|
3
|
+
/* ------------------------------------------------------------------------- */
|
|
4
|
+
|
|
5
|
+
/* Shapes are interned by their (parent, property key) transition. They are
|
|
6
|
+
* immortal metadata, but their keys are ordinary strings/symbols, so a root
|
|
7
|
+
* provider keeps those keys alive. Pointer identity is enough to share a
|
|
8
|
+
* transition between the same interned literal; dynamically built keys simply
|
|
9
|
+
* get their own shape, which is still a correct layout identity for the IC. */
|
|
10
|
+
#define XT_SHAPE_BUCKETS 256
|
|
11
|
+
/* Interned shapes are immortal metadata. A program that creates property names
|
|
12
|
+
* dynamically would otherwise leak one shape per name forever, so stop
|
|
13
|
+
* interning after a bounded number; those objects simply fall back to the
|
|
14
|
+
* uncached lookup (a NULL shape). */
|
|
15
|
+
#define XT_SHAPE_LIMIT 16384
|
|
16
|
+
static xt_shape *g_shapes[XT_SHAPE_BUCKETS];
|
|
17
|
+
static xt_shape *g_shape_all = NULL;
|
|
18
|
+
static xt_shape *g_shape_root = NULL;
|
|
19
|
+
static uint32_t g_shape_count = 0;
|
|
20
|
+
|
|
21
|
+
static size_t xt_shape_bucket(xt_shape *parent, xt_value key) {
|
|
22
|
+
uintptr_t mixed = ((uintptr_t)parent >> 4) ^ ((uintptr_t)XT_GET_PTR(key) >> 4);
|
|
23
|
+
return (size_t)mixed & (XT_SHAPE_BUCKETS - 1);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static void xt_shape_gc_roots(void) {
|
|
27
|
+
for (xt_shape *shape = g_shape_all; shape; shape = shape->all_next) xt_gc_mark_value(shape->key);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static xt_shape *xt_shape_empty(void) {
|
|
31
|
+
if (g_shape_root) return g_shape_root;
|
|
32
|
+
xt_shape *shape = (xt_shape *)calloc(1, sizeof(xt_shape));
|
|
33
|
+
if (!shape) abort();
|
|
34
|
+
shape->key = XT_UNDEFINED;
|
|
35
|
+
g_shape_root = shape;
|
|
36
|
+
g_shape_all = shape;
|
|
37
|
+
xt_gc_register_root_provider(xt_shape_gc_roots);
|
|
38
|
+
return shape;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
xt_shape *xt_shape_transition(xt_shape *parent, xt_value key) {
|
|
42
|
+
if (!parent) parent = xt_shape_empty();
|
|
43
|
+
size_t bucket = xt_shape_bucket(parent, key);
|
|
44
|
+
for (xt_shape *shape = g_shapes[bucket]; shape; shape = shape->next) {
|
|
45
|
+
if (shape->parent == parent && shape->key == key) return shape;
|
|
46
|
+
}
|
|
47
|
+
if (g_shape_count >= XT_SHAPE_LIMIT) return NULL;
|
|
48
|
+
xt_shape *shape = (xt_shape *)calloc(1, sizeof(xt_shape));
|
|
49
|
+
if (!shape) abort();
|
|
50
|
+
shape->key = key;
|
|
51
|
+
shape->count = parent->count + 1;
|
|
52
|
+
shape->parent = parent;
|
|
53
|
+
shape->next = g_shapes[bucket];
|
|
54
|
+
g_shapes[bucket] = shape;
|
|
55
|
+
shape->all_next = g_shape_all;
|
|
56
|
+
g_shape_all = shape;
|
|
57
|
+
g_shape_count++;
|
|
58
|
+
return shape;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void xt_object_shape_changed(xt_object *obj) {
|
|
62
|
+
xt_shape *shape = xt_shape_empty();
|
|
63
|
+
for (uint32_t i = 0; i < obj->count; i++) {
|
|
64
|
+
shape = xt_shape_transition(shape, obj->properties[i].key);
|
|
65
|
+
if (!shape) {
|
|
66
|
+
obj->shape = NULL;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
obj->shape = shape;
|
|
71
|
+
}
|
package/runtime/xt_containers.c
CHANGED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* xbintsc runtime — stackful coroutines.
|
|
3
|
+
*
|
|
4
|
+
* A coroutine owns a private C stack and switches to it with `ucontext`
|
|
5
|
+
* (POSIX) or fibers (Windows). Because the body keeps a real call stack,
|
|
6
|
+
* `try`/`finally`, nested loops and ordinary locals work across suspension
|
|
7
|
+
* points without a state-machine transform. Generators (`xt_generator.c`) and
|
|
8
|
+
* `async` functions (`xt_async.c`) are both built on this module.
|
|
9
|
+
*
|
|
10
|
+
* The coroutine's exception stack is swapped alongside its C stack, so a
|
|
11
|
+
* `throw` inside the body still targets the body's own `try` frames. Its stack
|
|
12
|
+
* is registered as an active GC region while it runs and scanned while it is
|
|
13
|
+
* suspended (through the owner's trace hook).
|
|
14
|
+
*
|
|
15
|
+
* The owner object decides *when* to enter/leave; this module only performs
|
|
16
|
+
* the switch, the exception-stack hand-off and the GC region bookkeeping.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#define _XOPEN_SOURCE 700
|
|
20
|
+
|
|
21
|
+
#include "rt_internal.h"
|
|
22
|
+
|
|
23
|
+
#include <stdlib.h>
|
|
24
|
+
#include <string.h>
|
|
25
|
+
|
|
26
|
+
#if defined(__APPLE__)
|
|
27
|
+
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#ifdef _WIN32
|
|
31
|
+
#include <windows.h>
|
|
32
|
+
#else
|
|
33
|
+
#include <ucontext.h>
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
/* Generous enough for deep JavaScript recursion on top of a coroutine. The
|
|
37
|
+
* pages are committed lazily by the OS, so a suspended coroutine is cheap. */
|
|
38
|
+
#define XT_COROUTINE_STACK_SIZE ((size_t)1 << 20)
|
|
39
|
+
|
|
40
|
+
struct xt_coroutine {
|
|
41
|
+
void (*entry)(void *);
|
|
42
|
+
void *arg;
|
|
43
|
+
/* Private stack bounds, registered as an active stack region while the
|
|
44
|
+
* coroutine runs and scanned conservatively while it is suspended. */
|
|
45
|
+
char *stack;
|
|
46
|
+
size_t stack_size;
|
|
47
|
+
int stack_pushed;
|
|
48
|
+
int booted;
|
|
49
|
+
int started;
|
|
50
|
+
void *saved_try_top;
|
|
51
|
+
/* Coroutine that was current when this one was entered. Used to answer
|
|
52
|
+
* "which JavaScript execution context is running?" so a nested async
|
|
53
|
+
* function inside an async generator (or vice versa) does not mistake the
|
|
54
|
+
* outer coroutine for its own. */
|
|
55
|
+
xt_coroutine *previous;
|
|
56
|
+
#ifdef _WIN32
|
|
57
|
+
void *fiber;
|
|
58
|
+
void *caller_fiber;
|
|
59
|
+
/* `SwitchToFiber` keeps the resumer's callee-saved registers in an opaque
|
|
60
|
+
* fiber context (POSIX stores them in `caller`), so snapshot them for the
|
|
61
|
+
* collector before switching away. */
|
|
62
|
+
jmp_buf caller_regs;
|
|
63
|
+
int has_caller_regs;
|
|
64
|
+
#else
|
|
65
|
+
ucontext_t ctx;
|
|
66
|
+
ucontext_t caller;
|
|
67
|
+
#endif
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/* Filled in just before a coroutine is first entered (POSIX has no portable
|
|
71
|
+
* way to pass a pointer to `makecontext`). */
|
|
72
|
+
static xt_coroutine *g_boot_coroutine = NULL;
|
|
73
|
+
/* The coroutine whose body is executing right now (NULL on the main stack). */
|
|
74
|
+
static xt_coroutine *g_current_coroutine = NULL;
|
|
75
|
+
|
|
76
|
+
xt_coroutine *xt_coroutine_current(void) { return g_current_coroutine; }
|
|
77
|
+
|
|
78
|
+
int xt_coroutine_is_current(xt_coroutine *co) {
|
|
79
|
+
return co != NULL && g_current_coroutine == co;
|
|
80
|
+
}
|
|
81
|
+
#ifdef _WIN32
|
|
82
|
+
static void *g_main_fiber = NULL;
|
|
83
|
+
#else
|
|
84
|
+
/* Async functions are frequently short-lived, so keep a few private stacks
|
|
85
|
+
* around instead of asking the OS for a fresh 1 MiB mapping every call. The
|
|
86
|
+
* cached stacks hold no live values and are not part of the GC scan. */
|
|
87
|
+
#define XT_COROUTINE_STACK_CACHE 8
|
|
88
|
+
static char *g_stack_cache[XT_COROUTINE_STACK_CACHE];
|
|
89
|
+
static int g_stack_cache_count = 0;
|
|
90
|
+
#endif
|
|
91
|
+
|
|
92
|
+
xt_coroutine *xt_coroutine_create(void (*entry)(void *), void *arg) {
|
|
93
|
+
xt_coroutine *co = (xt_coroutine *)calloc(1, sizeof(xt_coroutine));
|
|
94
|
+
if (!co) abort();
|
|
95
|
+
co->entry = entry;
|
|
96
|
+
co->arg = arg;
|
|
97
|
+
return co;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
#ifndef _WIN32
|
|
101
|
+
static void xt_coroutine_entry(void) {
|
|
102
|
+
xt_coroutine *co = g_boot_coroutine;
|
|
103
|
+
g_boot_coroutine = NULL;
|
|
104
|
+
co->entry(co->arg);
|
|
105
|
+
}
|
|
106
|
+
#else
|
|
107
|
+
static void CALLBACK xt_coroutine_entry(void *param) {
|
|
108
|
+
xt_coroutine *co = (xt_coroutine *)param;
|
|
109
|
+
/* The fiber stack is not observable from the outside; capture its bounds
|
|
110
|
+
* here (before the body allocates anything) so a collection during the body
|
|
111
|
+
* has a valid scan region. */
|
|
112
|
+
MEMORY_BASIC_INFORMATION info;
|
|
113
|
+
uintptr_t here = (uintptr_t)&info;
|
|
114
|
+
if (VirtualQuery((LPCVOID)here, &info, sizeof(info))) {
|
|
115
|
+
/* Use the *committed* region containing the current frame: a Windows
|
|
116
|
+
* stack reserves more than it commits, and `AllocationBase + RegionSize`
|
|
117
|
+
* can fall in uncommitted memory. `BaseAddress + RegionSize` is the
|
|
118
|
+
* stack top. */
|
|
119
|
+
co->stack = (char *)info.BaseAddress;
|
|
120
|
+
co->stack_size = info.RegionSize;
|
|
121
|
+
}
|
|
122
|
+
if (co->stack && co->stack_size && !co->stack_pushed) {
|
|
123
|
+
xt_gc_push_stack((uintptr_t)co->stack, (uintptr_t)co->stack + co->stack_size);
|
|
124
|
+
co->stack_pushed = 1;
|
|
125
|
+
}
|
|
126
|
+
co->entry(co->arg);
|
|
127
|
+
}
|
|
128
|
+
#endif
|
|
129
|
+
|
|
130
|
+
static void xt_coroutine_boot(xt_coroutine *co) {
|
|
131
|
+
#ifdef _WIN32
|
|
132
|
+
if (!g_main_fiber) g_main_fiber = ConvertThreadToFiber(NULL);
|
|
133
|
+
co->fiber = CreateFiber(XT_COROUTINE_STACK_SIZE, xt_coroutine_entry, co);
|
|
134
|
+
if (!co->fiber) abort();
|
|
135
|
+
#else
|
|
136
|
+
size_t size = XT_COROUTINE_STACK_SIZE;
|
|
137
|
+
char *stack = NULL;
|
|
138
|
+
if (g_stack_cache_count > 0) stack = g_stack_cache[--g_stack_cache_count];
|
|
139
|
+
if (!stack) stack = (char *)malloc(size);
|
|
140
|
+
if (!stack) abort();
|
|
141
|
+
co->stack = stack;
|
|
142
|
+
co->stack_size = size;
|
|
143
|
+
if (getcontext(&co->ctx) != 0) abort();
|
|
144
|
+
co->ctx.uc_stack.ss_sp = co->stack;
|
|
145
|
+
co->ctx.uc_stack.ss_size = size;
|
|
146
|
+
co->ctx.uc_link = NULL;
|
|
147
|
+
g_boot_coroutine = co;
|
|
148
|
+
makecontext(&co->ctx, xt_coroutine_entry, 0);
|
|
149
|
+
#endif
|
|
150
|
+
co->booted = 1;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
void xt_coroutine_enter(xt_coroutine *co) {
|
|
154
|
+
if (!co->booted) xt_coroutine_boot(co);
|
|
155
|
+
/* Record where the current (calling) stack suspends before switching away.
|
|
156
|
+
* On Windows the first push happens inside the fiber once its stack bounds
|
|
157
|
+
* are known, so the caller's region must be marked suspended here, on the
|
|
158
|
+
* caller's own stack. */
|
|
159
|
+
xt_gc_suspend((uintptr_t)&co);
|
|
160
|
+
if (co->stack && co->stack_size && !co->stack_pushed) {
|
|
161
|
+
xt_gc_push_stack((uintptr_t)co->stack, (uintptr_t)co->stack + co->stack_size);
|
|
162
|
+
co->stack_pushed = 1;
|
|
163
|
+
}
|
|
164
|
+
void *caller_try = xt_try_mark();
|
|
165
|
+
xt_try_restore(co->saved_try_top);
|
|
166
|
+
co->previous = g_current_coroutine;
|
|
167
|
+
g_current_coroutine = co;
|
|
168
|
+
#ifdef _WIN32
|
|
169
|
+
_setjmp(co->caller_regs);
|
|
170
|
+
co->has_caller_regs = 1;
|
|
171
|
+
co->caller_fiber = GetCurrentFiber();
|
|
172
|
+
SwitchToFiber(co->fiber);
|
|
173
|
+
#else
|
|
174
|
+
swapcontext(&co->caller, &co->ctx);
|
|
175
|
+
#endif
|
|
176
|
+
g_current_coroutine = co->previous;
|
|
177
|
+
co->saved_try_top = xt_try_mark();
|
|
178
|
+
xt_try_restore(caller_try);
|
|
179
|
+
if (co->stack_pushed) {
|
|
180
|
+
xt_gc_pop_stack();
|
|
181
|
+
co->stack_pushed = 0;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
void xt_coroutine_leave(xt_coroutine *co) {
|
|
186
|
+
co->saved_try_top = xt_try_mark();
|
|
187
|
+
g_current_coroutine = co->previous;
|
|
188
|
+
#ifdef _WIN32
|
|
189
|
+
SwitchToFiber(co->caller_fiber);
|
|
190
|
+
#else
|
|
191
|
+
swapcontext(&co->ctx, &co->caller);
|
|
192
|
+
#endif
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
void xt_coroutine_gc_trace(xt_coroutine *co) {
|
|
196
|
+
if (!co) return;
|
|
197
|
+
if (co->stack && co->stack_size) xt_gc_scan_region(co->stack, co->stack_size);
|
|
198
|
+
#ifndef _WIN32
|
|
199
|
+
/* Registers saved by `swapcontext` at the last suspension are not on the
|
|
200
|
+
* stack. */
|
|
201
|
+
xt_gc_scan_region(&co->ctx, sizeof(co->ctx));
|
|
202
|
+
#else
|
|
203
|
+
if (co->has_caller_regs) xt_gc_scan_region(&co->caller_regs, sizeof(co->caller_regs));
|
|
204
|
+
#endif
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
void xt_coroutine_release(xt_coroutine *co) {
|
|
208
|
+
if (!co) return;
|
|
209
|
+
#ifdef _WIN32
|
|
210
|
+
if (co->fiber) {
|
|
211
|
+
DeleteFiber(co->fiber);
|
|
212
|
+
co->fiber = NULL;
|
|
213
|
+
}
|
|
214
|
+
co->caller_fiber = NULL;
|
|
215
|
+
/* `DeleteFiber` releases the stack: never scan it again. */
|
|
216
|
+
co->stack = NULL;
|
|
217
|
+
co->stack_size = 0;
|
|
218
|
+
#else
|
|
219
|
+
if (co->stack && co->stack_size == XT_COROUTINE_STACK_SIZE &&
|
|
220
|
+
g_stack_cache_count < XT_COROUTINE_STACK_CACHE) {
|
|
221
|
+
g_stack_cache[g_stack_cache_count++] = co->stack;
|
|
222
|
+
} else {
|
|
223
|
+
free(co->stack);
|
|
224
|
+
}
|
|
225
|
+
co->stack = NULL;
|
|
226
|
+
co->stack_size = 0;
|
|
227
|
+
#endif
|
|
228
|
+
free(co);
|
|
229
|
+
}
|