xbintsc 0.5.22 → 0.5.31
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 +12 -3
- package/README.md +46 -11
- package/README.zh-CN.md +32 -6
- package/dist/scripts/support-matrix.d.ts +18 -0
- package/dist/scripts/support-matrix.js +141 -0
- package/dist/scripts/support-matrix.js.map +1 -0
- package/dist/src/ast/common.d.ts +2 -2
- package/dist/src/ast/declarations.d.ts +7 -1
- package/dist/src/ast/expressions.d.ts +5 -0
- package/dist/src/ast/kinds.d.ts +2 -0
- package/dist/src/ast/kinds.js +2 -0
- package/dist/src/ast/kinds.js.map +1 -1
- package/dist/src/binder/binder.d.ts +2 -1
- package/dist/src/binder/binder.js +2 -0
- package/dist/src/binder/binder.js.map +1 -1
- package/dist/src/binder/declarations.d.ts +9 -0
- package/dist/src/binder/declarations.js +64 -0
- package/dist/src/binder/declarations.js.map +1 -1
- package/dist/src/binder/references.js +85 -3
- package/dist/src/binder/references.js.map +1 -1
- package/dist/src/binder/types.d.ts +32 -0
- package/dist/src/binder/types.js.map +1 -1
- package/dist/src/canonical.d.ts +29 -0
- package/dist/src/canonical.js +35 -0
- package/dist/src/canonical.js.map +1 -0
- package/dist/src/checker/assignability.d.ts +13 -0
- package/dist/src/checker/assignability.js +146 -0
- package/dist/src/checker/assignability.js.map +1 -0
- package/dist/src/checker/calls.d.ts +13 -0
- package/dist/src/checker/calls.js +127 -0
- package/dist/src/checker/calls.js.map +1 -0
- package/dist/src/checker/checker.d.ts +26 -0
- package/dist/src/checker/checker.js +31 -0
- package/dist/src/checker/checker.js.map +1 -0
- package/dist/src/checker/declarations.d.ts +9 -0
- package/dist/src/checker/declarations.js +15 -0
- package/dist/src/checker/declarations.js.map +1 -0
- package/dist/src/checker/flow.d.ts +21 -0
- package/dist/src/checker/flow.js +241 -0
- package/dist/src/checker/flow.js.map +1 -0
- package/dist/src/checker/globals.d.ts +9 -0
- package/dist/src/checker/globals.js +29 -0
- package/dist/src/checker/globals.js.map +1 -0
- package/dist/src/checker/source.d.ts +38 -0
- package/dist/src/checker/source.js +48 -0
- package/dist/src/checker/source.js.map +1 -0
- package/dist/src/checker/type-infer.d.ts +18 -0
- package/dist/src/checker/type-infer.js +173 -0
- package/dist/src/checker/type-infer.js.map +1 -0
- package/dist/src/checker/type-model.d.ts +73 -0
- package/dist/src/checker/type-model.js +151 -0
- package/dist/src/checker/type-model.js.map +1 -0
- package/dist/src/checker/type-system.d.ts +58 -0
- package/dist/src/checker/type-system.js +569 -0
- package/dist/src/checker/type-system.js.map +1 -0
- package/dist/src/checker/typecheck-types.d.ts +22 -0
- package/dist/src/checker/typecheck-types.js +109 -0
- package/dist/src/checker/typecheck-types.js.map +1 -0
- package/dist/src/checker/typecheck.d.ts +62 -0
- package/dist/src/checker/typecheck.js +574 -0
- package/dist/src/checker/typecheck.js.map +1 -0
- package/dist/src/checker/undefined.d.ts +14 -0
- package/dist/src/checker/undefined.js +32 -0
- package/dist/src/checker/undefined.js.map +1 -0
- package/dist/src/checker/walk.d.ts +10 -0
- package/dist/src/checker/walk.js +15 -0
- package/dist/src/checker/walk.js.map +1 -0
- package/dist/src/cli/help.d.ts +7 -0
- package/dist/src/cli/help.js +64 -0
- package/dist/src/cli/help.js.map +1 -0
- package/dist/src/cli/hints.js +13 -1
- package/dist/src/cli/hints.js.map +1 -1
- package/dist/src/cli/main.js +12 -48
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/codegen/generator/calls/access.js +8 -8
- package/dist/src/codegen/generator/calls/access.js.map +1 -1
- package/dist/src/codegen/generator/calls/invocation.js +9 -4
- package/dist/src/codegen/generator/calls/invocation.js.map +1 -1
- package/dist/src/codegen/generator/calls/super.d.ts +9 -1
- package/dist/src/codegen/generator/calls/super.js +56 -5
- package/dist/src/codegen/generator/calls/super.js.map +1 -1
- package/dist/src/codegen/generator/context.d.ts +13 -2
- package/dist/src/codegen/generator/context.js +25 -19
- package/dist/src/codegen/generator/context.js.map +1 -1
- package/dist/src/codegen/generator/debug.js +2 -1
- package/dist/src/codegen/generator/debug.js.map +1 -1
- package/dist/src/codegen/generator/expressions/primary.d.ts +4 -1
- package/dist/src/codegen/generator/expressions/primary.js +68 -8
- package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
- package/dist/src/codegen/generator/generator.js +11 -1
- package/dist/src/codegen/generator/generator.js.map +1 -1
- package/dist/src/codegen/generator/module.d.ts +2 -0
- package/dist/src/codegen/generator/module.js +62 -26
- package/dist/src/codegen/generator/module.js.map +1 -1
- package/dist/src/codegen/generator/state.d.ts +11 -1
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/statements/variables.js +20 -3
- package/dist/src/codegen/generator/statements/variables.js.map +1 -1
- package/dist/src/codegen/generator/tables.d.ts +2 -0
- package/dist/src/codegen/generator/tables.js +4 -0
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/driver/build-key.d.ts +2 -0
- package/dist/src/driver/build-key.js +1 -0
- package/dist/src/driver/build-key.js.map +1 -1
- package/dist/src/driver/bundler/graph.js +5 -1
- package/dist/src/driver/bundler/graph.js.map +1 -1
- package/dist/src/driver/bundler/merge.js +16 -1
- package/dist/src/driver/bundler/merge.js.map +1 -1
- package/dist/src/driver/bundler/types.d.ts +12 -0
- package/dist/src/driver/compiler.d.ts +1 -1
- package/dist/src/driver/compiler.js +4 -0
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/driver/fingerprint.js +2 -1
- package/dist/src/driver/fingerprint.js.map +1 -1
- package/dist/src/driver/frontend.d.ts +8 -6
- package/dist/src/driver/frontend.js +4 -0
- package/dist/src/driver/frontend.js.map +1 -1
- package/dist/src/driver/options.d.ts +6 -0
- package/dist/src/driver/version.d.ts +1 -1
- package/dist/src/driver/version.js +1 -1
- package/dist/src/extensions/catalog.js +2 -1
- package/dist/src/extensions/catalog.js.map +1 -1
- package/dist/src/extensions/gui/html.js +20 -6
- package/dist/src/extensions/gui/html.js.map +1 -1
- package/dist/src/extensions/gui/index.js +63 -0
- package/dist/src/extensions/gui/index.js.map +1 -1
- package/dist/src/extensions/media/index.d.ts +27 -0
- package/dist/src/extensions/media/index.js +60 -0
- package/dist/src/extensions/media/index.js.map +1 -0
- package/dist/src/extensions/registry.d.ts +50 -0
- package/dist/src/extensions/registry.js +26 -0
- package/dist/src/extensions/registry.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/declarations/classes.js +7 -0
- package/dist/src/parser/declarations/classes.js.map +1 -1
- package/dist/src/parser/expressions.js +14 -1
- package/dist/src/parser/expressions.js.map +1 -1
- package/dist/src/parser/literals.js +6 -2
- package/dist/src/parser/literals.js.map +1 -1
- package/dist/tests/binder/binder.test.js +29 -0
- package/dist/tests/binder/binder.test.js.map +1 -1
- package/dist/tests/canonical.test.d.ts +1 -0
- package/dist/tests/canonical.test.js +19 -0
- package/dist/tests/canonical.test.js.map +1 -0
- package/dist/tests/checker/checker.test.d.ts +1 -0
- package/dist/tests/checker/checker.test.js +245 -0
- package/dist/tests/checker/checker.test.js.map +1 -0
- package/dist/tests/cli/check.test.js +20 -0
- package/dist/tests/cli/check.test.js.map +1 -1
- package/dist/tests/cli/hints.test.js +15 -0
- package/dist/tests/cli/hints.test.js.map +1 -1
- package/dist/tests/cli/process.test.js +12 -0
- package/dist/tests/cli/process.test.js.map +1 -1
- package/dist/tests/conformance/matrix.test.d.ts +6 -0
- package/dist/tests/conformance/matrix.test.js +23 -0
- package/dist/tests/conformance/matrix.test.js.map +1 -0
- package/dist/tests/conformance/test262/manifest.d.ts +115 -0
- package/dist/tests/conformance/test262/manifest.js +257 -0
- package/dist/tests/conformance/test262/manifest.js.map +1 -0
- package/dist/tests/conformance/test262.test.d.ts +11 -0
- package/dist/tests/conformance/test262.test.js +74 -0
- package/dist/tests/conformance/test262.test.js.map +1 -0
- package/dist/tests/docs/structure.test.js +9 -11
- package/dist/tests/docs/structure.test.js.map +1 -1
- package/dist/tests/e2e/child-process.test.js +3 -2
- package/dist/tests/e2e/child-process.test.js.map +1 -1
- package/dist/tests/e2e/compile-builtins.test.js +21 -0
- package/dist/tests/e2e/compile-builtins.test.js.map +1 -1
- package/dist/tests/e2e/compile-objects-classes.test.js +54 -0
- package/dist/tests/e2e/compile-objects-classes.test.js.map +1 -1
- package/dist/tests/e2e/differential-syntax.test.d.ts +5 -0
- package/dist/tests/e2e/differential-syntax.test.js +95 -0
- package/dist/tests/e2e/differential-syntax.test.js.map +1 -0
- package/dist/tests/e2e/differential-values.test.js +15 -0
- package/dist/tests/e2e/differential-values.test.js.map +1 -1
- package/dist/tests/e2e/gui-browser.test.d.ts +13 -0
- package/dist/tests/e2e/gui-browser.test.js +163 -0
- package/dist/tests/e2e/gui-browser.test.js.map +1 -0
- package/dist/tests/e2e/gui-example-browser.test.js +2 -2
- package/dist/tests/e2e/gui-example-browser.test.js.map +1 -1
- package/dist/tests/e2e/gui-example-canvas.test.js +8 -5
- package/dist/tests/e2e/gui-example-canvas.test.js.map +1 -1
- package/dist/tests/e2e/gui-example-svg.test.js +4 -3
- package/dist/tests/e2e/gui-example-svg.test.js.map +1 -1
- package/dist/tests/e2e/gui-example.test.js +4 -3
- package/dist/tests/e2e/gui-example.test.js.map +1 -1
- package/dist/tests/e2e/gui-helpers.d.ts +3 -0
- package/dist/tests/e2e/gui-helpers.js +6 -3
- package/dist/tests/e2e/gui-helpers.js.map +1 -1
- package/dist/tests/e2e/gui-media-disabled.test.d.ts +9 -0
- package/dist/tests/e2e/gui-media-disabled.test.js +42 -0
- package/dist/tests/e2e/gui-media-disabled.test.js.map +1 -0
- package/dist/tests/e2e/gui-media.test.d.ts +6 -4
- package/dist/tests/e2e/gui-media.test.js +20 -16
- package/dist/tests/e2e/gui-media.test.js.map +1 -1
- package/dist/tests/e2e/harness.d.ts +9 -0
- package/dist/tests/e2e/harness.js +14 -2
- package/dist/tests/e2e/harness.js.map +1 -1
- package/dist/tests/e2e/native-extensions.test.js +2 -1
- package/dist/tests/e2e/native-extensions.test.js.map +1 -1
- package/dist/tests/e2e/property-descriptors.test.js +20 -0
- package/dist/tests/e2e/property-descriptors.test.js.map +1 -1
- package/dist/tests/e2e/unicode-output.test.d.ts +16 -0
- package/dist/tests/e2e/unicode-output.test.js +67 -0
- package/dist/tests/e2e/unicode-output.test.js.map +1 -0
- package/dist/tests/e2e/weak-collections.test.js +16 -2
- package/dist/tests/e2e/weak-collections.test.js.map +1 -1
- package/dist/tests/extensions/media.test.d.ts +1 -0
- package/dist/tests/extensions/media.test.js +58 -0
- package/dist/tests/extensions/media.test.js.map +1 -0
- package/dist/tests/extensions/registry.test.js +8 -0
- package/dist/tests/extensions/registry.test.js.map +1 -1
- package/dist/tests/helpers.d.ts +1 -0
- package/dist/tests/helpers.js +1 -0
- package/dist/tests/helpers.js.map +1 -1
- package/dist/tests/lexer/identifiers.test.js +12 -0
- package/dist/tests/lexer/identifiers.test.js.map +1 -1
- package/dist/tests/lexer/scanner.test.js +8 -0
- package/dist/tests/lexer/scanner.test.js.map +1 -1
- package/dist/tests/lexer/strings.test.js +30 -0
- package/dist/tests/lexer/strings.test.js.map +1 -1
- package/dist/tests/parser/declarations.test.js +20 -0
- package/dist/tests/parser/declarations.test.js.map +1 -1
- package/dist/tests/parser/expressions.test.js +36 -0
- package/dist/tests/parser/expressions.test.js.map +1 -1
- package/dist/tests/platform.d.ts +32 -0
- package/dist/tests/platform.js +40 -0
- package/dist/tests/platform.js.map +1 -0
- package/dist/tests/platform.test.d.ts +12 -0
- package/dist/tests/platform.test.js +51 -0
- package/dist/tests/platform.test.js.map +1 -0
- package/dist/tests/version.test.js +4 -4
- package/dist/tests/version.test.js.map +1 -1
- package/doc/ai/README.md +10 -4
- package/doc/ai/build-recipe.md +1 -0
- package/doc/ai/cli.md +18 -6
- package/doc/ai/contributing.md +59 -2
- package/doc/ai/extensions.md +46 -23
- package/doc/ai/language-support.md +25 -16
- package/doc/ai/troubleshooting.md +9 -0
- package/doc/ai/zh-CN/README.md +9 -4
- package/doc/ai/zh-CN/build-recipe.md +1 -0
- package/doc/ai/zh-CN/cli.md +14 -4
- package/doc/ai/zh-CN/contributing.md +49 -3
- package/doc/ai/zh-CN/extensions.md +29 -8
- package/doc/ai/zh-CN/language-support.md +23 -14
- package/doc/ai/zh-CN/troubleshooting.md +8 -0
- package/doc/gui/api.md +45 -0
- package/doc/gui/build.md +37 -21
- package/doc/gui/known-issues.md +17 -6
- package/doc/gui/media.md +26 -11
- package/doc/gui/runtime.md +18 -0
- package/doc/gui-scripts.md +7 -0
- package/doc/gui.md +43 -33
- package/doc/implemented/binder.md +2 -0
- package/doc/implemented/checker.md +117 -0
- package/doc/implemented/cli.md +13 -1
- package/doc/implemented/codegen.md +3 -2
- package/doc/implemented/driver.md +2 -2
- package/doc/implemented/operators.md +2 -1
- package/doc/implemented/parser.md +3 -2
- package/doc/implemented/pipeline.md +8 -1
- package/doc/implemented/stdlib.md +2 -1
- package/doc/implemented/tests.md +3 -1
- package/doc/implemented.md +2 -0
- package/doc/npm-package.md +417 -0
- package/doc/requirements.md +4 -1
- package/doc/support-matrix.md +83 -0
- package/doc/unimplemented/classes.md +3 -0
- package/doc/unimplemented/deviations.md +3 -2
- package/doc/unimplemented/toolchain.md +1 -1
- package/doc/unimplemented/types.md +24 -8
- package/doc/unimplemented.md +1 -1
- package/doc/zh-CN/gui/api.md +41 -0
- package/doc/zh-CN/gui/build.md +28 -16
- package/doc/zh-CN/gui/known-issues.md +13 -5
- package/doc/zh-CN/gui/media.md +21 -10
- package/doc/zh-CN/gui/runtime.md +16 -0
- package/doc/zh-CN/gui-scripts.md +5 -0
- package/doc/zh-CN/gui.md +37 -32
- package/doc/zh-CN/implemented/binder.md +2 -0
- package/doc/zh-CN/implemented/checker.md +99 -0
- package/doc/zh-CN/implemented/cli.md +12 -1
- package/doc/zh-CN/implemented/codegen.md +3 -2
- package/doc/zh-CN/implemented/driver.md +2 -2
- package/doc/zh-CN/implemented/operators.md +1 -1
- package/doc/zh-CN/implemented/parser.md +3 -2
- package/doc/zh-CN/implemented/pipeline.md +3 -1
- package/doc/zh-CN/implemented/stdlib.md +2 -1
- package/doc/zh-CN/implemented/tests.md +3 -1
- package/doc/zh-CN/implemented.md +2 -0
- package/doc/zh-CN/npm-package.md +391 -0
- package/doc/zh-CN/post/announce.md +47 -47
- package/doc/zh-CN/requirements.md +4 -1
- package/doc/zh-CN/support-matrix.md +82 -0
- package/doc/zh-CN/unimplemented/classes.md +3 -0
- package/doc/zh-CN/unimplemented/deviations.md +3 -2
- package/doc/zh-CN/unimplemented/toolchain.md +1 -1
- package/doc/zh-CN/unimplemented/types.md +16 -6
- package/doc/zh-CN/unimplemented.md +1 -1
- package/llms.txt +4 -1
- package/package.json +3 -1
- package/runtime/ext_gui/audio.cpp +316 -0
- package/runtime/ext_gui/browser.cpp +547 -0
- package/runtime/ext_gui/browser_escape.cpp +85 -0
- package/runtime/ext_gui/browser_loop.cpp +83 -0
- package/runtime/ext_gui/canvas.cpp +9 -3
- package/runtime/ext_gui/canvas_raster.cpp +19 -1
- package/runtime/ext_gui/dom_api.cpp +36 -0
- package/runtime/ext_gui/dom_api_document.cpp +96 -5
- package/runtime/ext_gui/dom_api_events.cpp +20 -0
- package/runtime/ext_gui/dom_api_internal.h +19 -0
- package/runtime/ext_gui/dom_api_proto.cpp +6 -0
- package/runtime/ext_gui/gui.cpp +90 -23
- package/runtime/ext_gui/gui_engine.h +44 -0
- package/runtime/ext_gui/gui_media.cpp +69 -2
- package/runtime/ext_gui/media.cpp +34 -488
- package/runtime/ext_gui/media.h +54 -19
- package/runtime/ext_gui/media_api.h +65 -0
- package/runtime/ext_gui/window.cpp +9 -0
- package/runtime/ext_media/media.cpp +507 -0
- package/runtime/ext_media/media_bridge.c +35 -0
- package/runtime/ext_node/path/path.c +7 -7
- package/runtime/ext_node/url/url.c +4 -2
- package/runtime/rt.h +15 -0
- package/runtime/xt_constructors.c +2 -1
- package/runtime/xt_containers/objects.inc +22 -2
- package/runtime/xt_io/exception.inc +4 -2
- package/runtime/xt_stdlib/math.inc +62 -0
- package/runtime/xt_stdlib2/date.inc +7 -1
- package/runtime/xt_stdlib2/objects.inc +14 -0
- package/scripts/build-gui.ts +6 -72
- package/scripts/build-media.ts +245 -0
- package/scripts/support-matrix.ts +167 -0
- package/src/ast/common.ts +2 -0
- package/src/ast/declarations.ts +12 -1
- package/src/ast/expressions.ts +6 -0
- package/src/ast/kinds.ts +2 -0
- package/src/binder/binder.ts +3 -0
- package/src/binder/declarations.ts +70 -0
- package/src/binder/references.ts +84 -3
- package/src/binder/types.ts +30 -0
- package/src/canonical.ts +37 -0
- package/src/checker/assignability.ts +134 -0
- package/src/checker/calls.ts +135 -0
- package/src/checker/checker.ts +47 -0
- package/src/checker/declarations.ts +26 -0
- package/src/checker/flow.ts +236 -0
- package/src/checker/globals.ts +40 -0
- package/src/checker/source.ts +53 -0
- package/src/checker/type-infer.ts +185 -0
- package/src/checker/type-model.ts +212 -0
- package/src/checker/type-system.ts +578 -0
- package/src/checker/typecheck-types.ts +112 -0
- package/src/checker/typecheck.ts +586 -0
- package/src/checker/undefined.ts +43 -0
- package/src/checker/walk.ts +16 -0
- package/src/cli/help.ts +65 -0
- package/src/cli/hints.ts +13 -1
- package/src/cli/main.ts +12 -49
- package/src/codegen/generator/calls/access.ts +8 -8
- package/src/codegen/generator/calls/invocation.ts +8 -5
- package/src/codegen/generator/calls/super.ts +67 -5
- package/src/codegen/generator/context.ts +31 -19
- package/src/codegen/generator/debug.ts +2 -1
- package/src/codegen/generator/expressions/primary.ts +84 -13
- package/src/codegen/generator/generator.ts +11 -1
- package/src/codegen/generator/module.ts +65 -24
- package/src/codegen/generator/state.ts +11 -1
- package/src/codegen/generator/statements/variables.ts +20 -3
- package/src/codegen/generator/tables.ts +5 -0
- package/src/driver/build-key.ts +3 -0
- package/src/driver/bundler/graph.ts +6 -2
- package/src/driver/bundler/merge.ts +14 -1
- package/src/driver/bundler/types.ts +13 -0
- package/src/driver/compiler.ts +5 -1
- package/src/driver/fingerprint.ts +2 -1
- package/src/driver/frontend.ts +13 -2
- package/src/driver/options.ts +6 -0
- package/src/driver/version.ts +1 -1
- package/src/extensions/catalog.ts +2 -1
- package/src/extensions/gui/html.ts +23 -10
- package/src/extensions/gui/index.ts +65 -0
- package/src/extensions/media/index.ts +67 -0
- package/src/extensions/registry.ts +72 -0
- package/src/index.ts +2 -0
- package/src/parser/declarations/classes.ts +7 -0
- package/src/parser/expressions.ts +13 -1
- package/src/parser/literals.ts +6 -2
package/AGENTS.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# AGENTS.md — working in the xbintsc repository
|
|
2
2
|
|
|
3
|
+
> **Using the installed npm package in another project?** This file is for
|
|
4
|
+
> working *in* this repository. Read the project guide instead:
|
|
5
|
+
> [doc/npm-package.md](./doc/npm-package.md) — the installed copy is at
|
|
6
|
+
> `node_modules/xbintsc/doc/npm-package.md`.
|
|
7
|
+
|
|
3
8
|
**xbintsc is a compiler: it turns a subset of TypeScript into standalone native
|
|
4
9
|
binaries.** It lexes and parses TypeScript itself, binds names, lowers the
|
|
5
10
|
program to **LLVM IR text**, and hands that text to **clang**, which produces an
|
|
@@ -49,8 +54,11 @@ in [doc/ai/language-support.md](./doc/ai/language-support.md).
|
|
|
49
54
|
|
|
50
55
|
- **It is a subset.** Syntax outside the subset fails with `UnsupportedFeature`
|
|
51
56
|
or a parse error. Never assume "TypeScript" means "what Node accepts".
|
|
52
|
-
- **Types are erased,
|
|
53
|
-
|
|
57
|
+
- **Types are erased, but structurally checked first.** The default checker
|
|
58
|
+
resolves annotations, interfaces, classes and simple generics, and rejects
|
|
59
|
+
definite mismatches (`const x: number = "hello"`), missing properties on known
|
|
60
|
+
shapes and obviously wrong calls. Anything it cannot model is `any`; there is
|
|
61
|
+
no full inference or strict-null mode. `--no-check` disables it.
|
|
54
62
|
- **Node built-ins need `--ext node`; npm packages are bundled at build time.**
|
|
55
63
|
A bare import is resolved from `node_modules` and its sources (ESM or
|
|
56
64
|
CommonJS) are merged into the binary. There is no runtime package lookup, and
|
|
@@ -77,9 +85,10 @@ in [doc/ai/language-support.md](./doc/ai/language-support.md).
|
|
|
77
85
|
```
|
|
78
86
|
src/lexer, src/parser, src/ast source text -> tokens -> AST
|
|
79
87
|
src/binder scopes, symbols, closures
|
|
88
|
+
src/checker opt-out names, redeclarations, arity, structural types
|
|
80
89
|
src/codegen AST -> LLVM IR text (values.ts defines the value model)
|
|
81
90
|
src/driver build orchestration, clang invocation, incremental cache
|
|
82
|
-
src/extensions optional compile modules (node/, gui/, native C++/Rust)
|
|
91
|
+
src/extensions optional compile modules (node/, gui/, media/, native C++/Rust)
|
|
83
92
|
src/diagnostics diagnostic codes and rendering
|
|
84
93
|
src/cli/main.ts the CLI (`build` / `run` / `emit` / `doctor`)
|
|
85
94
|
runtime/ the C runtime: values, containers, stdlib, GC, event loop
|
package/README.md
CHANGED
|
@@ -159,6 +159,24 @@ console.log("Hello from xbintsc!");
|
|
|
159
159
|
|
|
160
160
|
Tip: add `xbintsc-win32-x64\bin` to `PATH` to call `xbintsc` instead of the full path.
|
|
161
161
|
|
|
162
|
+
### From npm
|
|
163
|
+
|
|
164
|
+
The compiler is also published as the `xbintsc` npm package. This is the
|
|
165
|
+
shortest path for a Node project: install it as a dev dependency, then run it
|
|
166
|
+
through `npx` or an npm script.
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
npm install --save-dev --save-exact xbintsc
|
|
170
|
+
npx xbintsc doctor
|
|
171
|
+
npx xbintsc build src/main.ts --out build
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
It needs Node.js 22+ and a clang 16+ toolchain. The npm package compiles the C
|
|
175
|
+
runtime from source on the first build (later builds reuse `.xbintsc/`), and it
|
|
176
|
+
does not include the GUI/media archives. See
|
|
177
|
+
[Using xbintsc from npm](./doc/npm-package.md) for a complete guide, CI setup
|
|
178
|
+
and caveats.
|
|
179
|
+
|
|
162
180
|
### As a developer (from source)
|
|
163
181
|
|
|
164
182
|
In a source checkout, run the TypeScript sources directly through `tsx` (or use
|
|
@@ -204,6 +222,8 @@ CLI options:
|
|
|
204
222
|
--verbose Print progress information
|
|
205
223
|
--time Print per-phase build timings
|
|
206
224
|
--debug Emit debug info (DWARF/CodeView) and keep frame pointers
|
|
225
|
+
--check Run the semantic checker (default)
|
|
226
|
+
--no-check Skip the semantic checker; only erase type syntax
|
|
207
227
|
```
|
|
208
228
|
|
|
209
229
|
### Project config & application icon
|
|
@@ -269,6 +289,11 @@ npx tsx src/cli/main.ts run examples/gui/hello.ts --ext gui
|
|
|
269
289
|
|
|
270
290
|
# A prebuilt Linux/macOS release archive already ships the engine:
|
|
271
291
|
xbintsc run app.ts --ext gui
|
|
292
|
+
|
|
293
|
+
# <video>/<audio> playback is a separate opt-in archive, so GUI-only binaries
|
|
294
|
+
# stay FFmpeg-free:
|
|
295
|
+
npm run media
|
|
296
|
+
xbintsc run examples/gui/media.ts --ext gui,media
|
|
272
297
|
```
|
|
273
298
|
|
|
274
299
|
A document's `<script>` bodies are **AOT-compiled** by xbintsc into the binary —
|
|
@@ -289,9 +314,12 @@ Platforms and full details: [doc/gui.md](./doc/gui.md) is the engine overview
|
|
|
289
314
|
(architecture and roadmap); the per-function documents live under
|
|
290
315
|
[doc/gui/](./doc/gui) — API, DOM/CSS, layout, rendering, media, input, animation,
|
|
291
316
|
runtime, build and known issues. Linux and macOS are built and exercised in CI
|
|
292
|
-
and their release archives ship the engine (`gui.a`)
|
|
317
|
+
and their release archives ship the engine (`gui.a`) plus the optional media
|
|
318
|
+
archive (`media.a`); the Windows archive
|
|
293
319
|
(`gui.lib`, rendered through SDL_GPU's Vulkan backend) is produced by the same
|
|
294
|
-
script but is still provisional and is not shipped in the release yet.
|
|
320
|
+
script but is still provisional and is not shipped in the release yet. Media
|
|
321
|
+
playback is POSIX-only for now: without `media.a`, or on Windows, `<video>` and
|
|
322
|
+
`<audio>` fire `error`.
|
|
295
323
|
|
|
296
324
|
## Incremental compilation
|
|
297
325
|
|
|
@@ -302,10 +330,12 @@ sources are compiled once and cached on the same principle.
|
|
|
302
330
|
|
|
303
331
|
## Extensions
|
|
304
332
|
|
|
305
|
-
An extension is a plain object (`src/extensions/registry.ts`).
|
|
333
|
+
An extension is a plain object (`src/extensions/registry.ts`). Three are bundled:
|
|
306
334
|
[`gui`](#gui-applications-htmlcss), a GPU HTML/CSS renderer
|
|
307
|
-
(see [doc/gui.md](./doc/gui.md))
|
|
308
|
-
|
|
335
|
+
(see [doc/gui.md](./doc/gui.md)); `media`, the optional FFmpeg-backed
|
|
336
|
+
`<video>`/`<audio>` decoder that requires `gui`; and `node`, itself split into
|
|
337
|
+
one folder per Node module, each pairing its exports with the C sources that
|
|
338
|
+
implement them:
|
|
309
339
|
|
|
310
340
|
```
|
|
311
341
|
src/extensions/node/ runtime/ext_node/
|
|
@@ -409,7 +439,8 @@ skips with a warning when they are missing.
|
|
|
409
439
|
|
|
410
440
|
See [Requirements](./doc/requirements.md) for the full, per-platform list.
|
|
411
441
|
|
|
412
|
-
- Node.js 22+ —
|
|
442
|
+
- Node.js 22+ — to run the compiler from npm or from source; released binaries
|
|
443
|
+
are standalone
|
|
413
444
|
- macOS: the Xcode Command Line Tools (`xcode-select --install`)
|
|
414
445
|
- Windows: LLVM + the Visual Studio C++ build tools (MSVC ABI)
|
|
415
446
|
- Linux: `clang` and `lld` from your distribution
|
|
@@ -422,15 +453,19 @@ Check your environment with `xbintsc doctor`.
|
|
|
422
453
|
|
|
423
454
|
- [Implemented features](./doc/implemented.md)
|
|
424
455
|
- [Unimplemented features](./doc/unimplemented.md)
|
|
456
|
+
- [Support matrix](./doc/support-matrix.md) — generated from the executable
|
|
457
|
+
test262 corpus (unmodified test262 cases, compiled and run)
|
|
425
458
|
- [Application icons & project config](./doc/icon.md)
|
|
426
459
|
|
|
427
460
|
## Using xbintsc with an AI agent
|
|
428
461
|
|
|
429
|
-
The compiler is strict about its language subset — types are
|
|
430
|
-
checked
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
462
|
+
The compiler is strict about its language subset — types are structurally
|
|
463
|
+
checked by a default checker and then erased (definite mismatches, missing
|
|
464
|
+
properties and non-callable calls are rejected, but there is no full inference
|
|
465
|
+
or strict-null mode), Node built-ins need `--ext node`, packages from
|
|
466
|
+
`node_modules` are bundled at build time, strings follow UTF-16
|
|
467
|
+
length/indexing over UTF-8 storage, and `await` only suspends on a pending
|
|
468
|
+
promise. An agent that assumes "TypeScript" means "what
|
|
434
469
|
Node accepts" will write code that does not compile, so the documentation is
|
|
435
470
|
layered for exactly that reader:
|
|
436
471
|
|
package/README.zh-CN.md
CHANGED
|
@@ -142,6 +142,21 @@ console.log("Hello from xbintsc!");
|
|
|
142
142
|
|
|
143
143
|
提示:把 `xbintsc-win32-x64\bin` 加入 `PATH`,即可直接用 `xbintsc` 命令。
|
|
144
144
|
|
|
145
|
+
### 通过 npm 使用
|
|
146
|
+
|
|
147
|
+
编译器也发布为 npm 包 `xbintsc`。对 Node 项目来说这是最短的路径:装成开发依赖,
|
|
148
|
+
然后通过 `npx` 或 npm 脚本调用。
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
npm install --save-dev --save-exact xbintsc
|
|
152
|
+
npx xbintsc doctor
|
|
153
|
+
npx xbintsc build src/main.ts --out build
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
它需要 Node.js 22+ 与 clang 16+ 工具链。npm 包在首次构建时会从源码编译 C 运行时
|
|
157
|
+
(后续构建复用 `.xbintsc/`),并且不包含 GUI/media 归档。完整指南、CI 配置与注意
|
|
158
|
+
事项见[通过 npm 包使用 xbintsc](./doc/zh-CN/npm-package.md)。
|
|
159
|
+
|
|
145
160
|
### 作为开发者(从源码)
|
|
146
161
|
|
|
147
162
|
在源码检出中,通过 `tsx` 直接运行 TypeScript 源码(或使用 `npm run xbintsc`)。
|
|
@@ -180,6 +195,8 @@ CLI 选项:
|
|
|
180
195
|
--verbose 打印进度信息
|
|
181
196
|
--time 打印各构建阶段耗时
|
|
182
197
|
--debug 生成调试信息(DWARF/CodeView)并保留帧指针
|
|
198
|
+
--check 运行语义检查(默认)
|
|
199
|
+
--no-check 跳过语义检查,只擦除类型语法
|
|
183
200
|
```
|
|
184
201
|
|
|
185
202
|
### 编程接口
|
|
@@ -218,6 +235,10 @@ npx tsx src/cli/main.ts run examples/gui/hello.ts --ext gui
|
|
|
218
235
|
|
|
219
236
|
# 预编译的 Linux/macOS 发布包已经内含该引擎:
|
|
220
237
|
xbintsc run app.ts --ext gui
|
|
238
|
+
|
|
239
|
+
# <video>/<audio> 播放是单独的可选归档,因此只做界面的二进制不会链接 FFmpeg:
|
|
240
|
+
npm run media
|
|
241
|
+
xbintsc run examples/gui/media.ts --ext gui,media
|
|
221
242
|
```
|
|
222
243
|
|
|
223
244
|
文档里的 `<script>` 脚本会被 xbintsc **提前编译(AOT)**进二进制——内联脚本
|
|
@@ -235,8 +256,10 @@ xbintsc run app.ts --ext gui
|
|
|
235
256
|
平台与完整说明:[doc/zh-CN/gui.md](./doc/zh-CN/gui.md) 是引擎总览(架构与
|
|
236
257
|
路线图);按功能拆分的文档位于 [doc/zh-CN/gui/](./doc/zh-CN/gui) —— API、
|
|
237
258
|
DOM/CSS、布局、绘制、媒体、输入、动画、运行时、构建与已知问题。Linux 与 macOS 已在 CI 中构建
|
|
238
|
-
并实际运行,其发布包内含引擎(`gui.a`);Windows 的
|
|
239
|
-
Vulkan
|
|
259
|
+
并实际运行,其发布包内含引擎(`gui.a`)与可选的媒体归档(`media.a`);Windows 的
|
|
260
|
+
`gui.lib`(通过 SDL_GPU 的 Vulkan 后端渲染)由同一脚本产出,但仍是暂定状态,尚未
|
|
261
|
+
随发布包提供。媒体播放目前仅支持 POSIX:没有 `media.a` 或在 Windows 上,
|
|
262
|
+
`<video>` 与 `<audio>` 会触发 `error`。
|
|
240
263
|
|
|
241
264
|
## 增量编译
|
|
242
265
|
|
|
@@ -246,9 +269,10 @@ Vulkan 后端渲染)由同一脚本产出,但仍是暂定状态,尚未随
|
|
|
246
269
|
|
|
247
270
|
## 扩展
|
|
248
271
|
|
|
249
|
-
扩展是一个普通对象(`src/extensions/registry.ts
|
|
272
|
+
扩展是一个普通对象(`src/extensions/registry.ts`)。内置扩展有三个:`gui`,
|
|
250
273
|
它贡献的是一个 GPU HTML/CSS 渲染器(见下文「GUI 应用(HTML/CSS)」一节与
|
|
251
|
-
[doc/zh-CN/gui.md](./doc/zh-CN/gui.md)
|
|
274
|
+
[doc/zh-CN/gui.md](./doc/zh-CN/gui.md));`media`,基于 FFmpeg 的可选
|
|
275
|
+
`<video>`/`<audio>` 解码器,依赖 `gui`;以及 `node`,它本身按每个 Node
|
|
252
276
|
模块拆分目录,每个模块把它对外导出的绑定与实现它们的 C 源配对:
|
|
253
277
|
|
|
254
278
|
```
|
|
@@ -349,7 +373,7 @@ V8 只能看到编译器自身的源码,因此 `npm run coverage:runtime` 改
|
|
|
349
373
|
独立二进制,见
|
|
350
374
|
[使用前置要求](./doc/zh-CN/requirements.md)。
|
|
351
375
|
|
|
352
|
-
- Node.js 22+ ——
|
|
376
|
+
- Node.js 22+ —— 从 npm 或源码运行编译器时需要;发布版二进制是独立的
|
|
353
377
|
- macOS:Xcode Command Line Tools(`xcode-select --install`)
|
|
354
378
|
- Windows:LLVM + Visual Studio C++ 生成工具(MSVC ABI)
|
|
355
379
|
- Linux:发行版提供的 `clang` 与 `lld`
|
|
@@ -361,10 +385,12 @@ V8 只能看到编译器自身的源码,因此 `npm run coverage:runtime` 改
|
|
|
361
385
|
|
|
362
386
|
- [已实现特性](./doc/zh-CN/implemented.md)
|
|
363
387
|
- [未实现特性](./doc/zh-CN/unimplemented.md)
|
|
388
|
+
- [支持矩阵](./doc/zh-CN/support-matrix.md)(由可执行语料生成)
|
|
364
389
|
|
|
365
390
|
## 让 AI 使用 xbintsc
|
|
366
391
|
|
|
367
|
-
|
|
392
|
+
这个编译器对语言子集很严格——类型会先被默认检查器做结构化检查,然后擦除
|
|
393
|
+
(确定不匹配、缺失属性和不可调用会被拒绝,但没有完整推断与 strict-null)、Node 内置模块需要
|
|
368
394
|
`--ext node`、`node_modules` 里的 npm 包在构建期打包进二进制、字符串在 UTF-8 存储上按 UTF-16 语义计数、`await`
|
|
369
395
|
只在 Promise 未 settle 时才真正挂起。如果 AI 把"TypeScript"当成"Node 能跑的 TypeScript",写出来的
|
|
370
396
|
代码就编译不过,因此文档正是按这类读者分层组织的:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Render `doc/support-matrix.md` and its Chinese mirror from the vendored
|
|
4
|
+
* test262 catalogue.
|
|
5
|
+
*
|
|
6
|
+
* The catalogue is executable evidence: `tests/conformance/test262.test.ts`
|
|
7
|
+
* compiles and runs every supported case (unmodified test262 files) and
|
|
8
|
+
* requires every unsupported case to fail with the listed diagnostic code.
|
|
9
|
+
* This script turns the same catalogue into the human-readable table, so the
|
|
10
|
+
* document cannot claim a feature the compiler does not exercise.
|
|
11
|
+
*
|
|
12
|
+
* Usage: npm run docs:matrix
|
|
13
|
+
*/
|
|
14
|
+
type Language = "en" | "zh";
|
|
15
|
+
export declare const MATRIX_FILES: Readonly<Record<Language, string>>;
|
|
16
|
+
export declare const TEST262_COMMIT = "d53ebc8b1931d9f1541e43d59650776e4b766248";
|
|
17
|
+
export declare function renderSupportMatrix(language: Language): string;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Render `doc/support-matrix.md` and its Chinese mirror from the vendored
|
|
4
|
+
* test262 catalogue.
|
|
5
|
+
*
|
|
6
|
+
* The catalogue is executable evidence: `tests/conformance/test262.test.ts`
|
|
7
|
+
* compiles and runs every supported case (unmodified test262 files) and
|
|
8
|
+
* requires every unsupported case to fail with the listed diagnostic code.
|
|
9
|
+
* This script turns the same catalogue into the human-readable table, so the
|
|
10
|
+
* document cannot claim a feature the compiler does not exercise.
|
|
11
|
+
*
|
|
12
|
+
* Usage: npm run docs:matrix
|
|
13
|
+
*/
|
|
14
|
+
import { writeFileSync } from "node:fs";
|
|
15
|
+
import { dirname, resolve } from "node:path";
|
|
16
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
17
|
+
import { SUPPORT_AREAS, SUPPORTED_CASES, UNSUPPORTED_CASES, } from "../tests/conformance/test262/manifest.js";
|
|
18
|
+
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
19
|
+
export const MATRIX_FILES = {
|
|
20
|
+
en: "doc/support-matrix.md",
|
|
21
|
+
zh: "doc/zh-CN/support-matrix.md",
|
|
22
|
+
};
|
|
23
|
+
export const TEST262_COMMIT = "d53ebc8b1931d9f1541e43d59650776e4b766248";
|
|
24
|
+
function docLink(area, language) {
|
|
25
|
+
const relative = area.doc.startsWith("doc/") ? area.doc.slice("doc/".length) : area.doc;
|
|
26
|
+
return language === "en" ? relative : `../${relative}`;
|
|
27
|
+
}
|
|
28
|
+
function areaTitle(area, language) {
|
|
29
|
+
return language === "en" ? area.title : area.titleZh;
|
|
30
|
+
}
|
|
31
|
+
function count(area, cases) {
|
|
32
|
+
return cases.filter((testCase) => testCase.area === area.id).length;
|
|
33
|
+
}
|
|
34
|
+
function rowsFor(language) {
|
|
35
|
+
return SUPPORT_AREAS.map((area) => {
|
|
36
|
+
const supported = count(area, SUPPORTED_CASES);
|
|
37
|
+
const unsupported = count(area, UNSUPPORTED_CASES);
|
|
38
|
+
return `| ${areaTitle(area, language)} | ${supported} | ${unsupported} | [${language === "en" ? "reference" : "参考"}](${docLink(area, language)}) |`;
|
|
39
|
+
}).join("\n");
|
|
40
|
+
}
|
|
41
|
+
function supportedTable(language) {
|
|
42
|
+
const header = language === "en"
|
|
43
|
+
? "| test262 case | Area | What it pins down |\n| --- | --- | --- |"
|
|
44
|
+
: "| test262 用例 | 领域 | 固化的行为 |\n| --- | --- | --- |";
|
|
45
|
+
const rows = SUPPORTED_CASES.map((testCase) => {
|
|
46
|
+
const area = SUPPORT_AREAS.find((candidate) => candidate.id === testCase.area);
|
|
47
|
+
const claim = language === "en" ? testCase.claim : testCase.claimZh;
|
|
48
|
+
return `| \`${testCase.path}\` | ${areaTitle(area, language)} | ${claim} |`;
|
|
49
|
+
});
|
|
50
|
+
return [header, ...rows].join("\n");
|
|
51
|
+
}
|
|
52
|
+
function unsupportedTable(language) {
|
|
53
|
+
const header = language === "en"
|
|
54
|
+
? "| test262 case | Area | Diagnostic | Why |\n| --- | --- | ---: | --- |"
|
|
55
|
+
: "| test262 用例 | 领域 | 诊断码 | 原因 |\n| --- | --- | ---: | --- |";
|
|
56
|
+
const rows = UNSUPPORTED_CASES.map((testCase) => {
|
|
57
|
+
const area = SUPPORT_AREAS.find((candidate) => candidate.id === testCase.area);
|
|
58
|
+
const claim = language === "en" ? testCase.claim : testCase.claimZh;
|
|
59
|
+
return `| \`${testCase.path}\` | ${areaTitle(area, language)} | TS${testCase.code} | ${claim} |`;
|
|
60
|
+
});
|
|
61
|
+
return [header, ...rows].join("\n");
|
|
62
|
+
}
|
|
63
|
+
export function renderSupportMatrix(language) {
|
|
64
|
+
const corpusLink = language === "en" ? "../tests/conformance/test262/manifest.ts" : "../../tests/conformance/test262/manifest.ts";
|
|
65
|
+
const testLink = language === "en" ? "../tests/conformance/test262.test.ts" : "../../tests/conformance/test262.test.ts";
|
|
66
|
+
const sourceLink = language === "en" ? "../tests/conformance/test262/SOURCE.md" : "../../tests/conformance/test262/SOURCE.md";
|
|
67
|
+
if (language === "en") {
|
|
68
|
+
return `# Support matrix
|
|
69
|
+
|
|
70
|
+
> Language: **English** | [简体中文](./zh-CN/support-matrix.md)
|
|
71
|
+
|
|
72
|
+
> **Generated** by \`npm run docs:matrix\` from the executable catalogue in
|
|
73
|
+
> [\`tests/conformance/test262/manifest.ts\`](${corpusLink}). Do not edit this
|
|
74
|
+
> file by hand: change a case and regenerate.
|
|
75
|
+
|
|
76
|
+
Every supported case is an unmodified [test262](https://github.com/tc39/test262)
|
|
77
|
+
file (pinned at \`${TEST262_COMMIT}\`) that xbintsc compiles **and runs**; the
|
|
78
|
+
[test262 suite](${testLink}) fails if one stops passing. The corpus is a
|
|
79
|
+
representative subset, not a full test262 run. Every unsupported case
|
|
80
|
+
is valid JavaScript that xbintsc currently rejects, pinned with the diagnostic
|
|
81
|
+
code it produces. See [\`SOURCE.md\`](${sourceLink}) for the harness adaptation.
|
|
82
|
+
Because the suite runs on every CI platform, this table cannot claim more than
|
|
83
|
+
the compiler does.
|
|
84
|
+
|
|
85
|
+
## Coverage by area
|
|
86
|
+
|
|
87
|
+
| Area | Supported | Unsupported | Reference |
|
|
88
|
+
| --- | ---: | ---: | --- |
|
|
89
|
+
${rowsFor(language)}
|
|
90
|
+
|
|
91
|
+
## Supported cases (test262, compiled and executed)
|
|
92
|
+
|
|
93
|
+
${supportedTable(language)}
|
|
94
|
+
|
|
95
|
+
## Unsupported cases (valid JavaScript, expected diagnostics)
|
|
96
|
+
|
|
97
|
+
${unsupportedTable(language)}
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
return `# 支持矩阵
|
|
101
|
+
|
|
102
|
+
> 语言:[English](../support-matrix.md) | **简体中文**
|
|
103
|
+
|
|
104
|
+
> 本文件由 \`npm run docs:matrix\` 根据可执行语料
|
|
105
|
+
> [\`tests/conformance/test262/manifest.ts\`](${corpusLink}) 生成,请勿手工编辑:
|
|
106
|
+
> 修改用例后重新生成。
|
|
107
|
+
|
|
108
|
+
每个“支持”用例都是 [test262](https://github.com/tc39/test262) 的原始文件
|
|
109
|
+
(固定版本 \`${TEST262_COMMIT}\`),由 xbintsc 编译**并执行**;
|
|
110
|
+
[test262 测试套件](${testLink}) 会在用例回归时失败。该语料是代表性
|
|
111
|
+
子集,不是完整的 test262 全量运行。每个“不支持”用例都是
|
|
112
|
+
xbintsc 目前会拒绝的合法 JavaScript,并以实际产生的诊断码固定下来。
|
|
113
|
+
harness 的适配说明见 [\`SOURCE.md\`](${sourceLink})。该套件在 CI 的每个平台
|
|
114
|
+
运行,因此本表不会声称编译器做不到的能力。
|
|
115
|
+
|
|
116
|
+
## 各领域覆盖
|
|
117
|
+
|
|
118
|
+
| 领域 | 支持 | 不支持 | 参考 |
|
|
119
|
+
| --- | ---: | ---: | --- |
|
|
120
|
+
${rowsFor(language)}
|
|
121
|
+
|
|
122
|
+
## 支持的用例(test262,编译并执行)
|
|
123
|
+
|
|
124
|
+
${supportedTable(language)}
|
|
125
|
+
|
|
126
|
+
## 不支持的用例(合法 JavaScript,预期诊断)
|
|
127
|
+
|
|
128
|
+
${unsupportedTable(language)}
|
|
129
|
+
`;
|
|
130
|
+
}
|
|
131
|
+
function main() {
|
|
132
|
+
for (const language of ["en", "zh"]) {
|
|
133
|
+
const path = resolve(root, MATRIX_FILES[language]);
|
|
134
|
+
writeFileSync(path, renderSupportMatrix(language));
|
|
135
|
+
process.stdout.write(`xbintsc: wrote ${MATRIX_FILES[language]}\n`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (process.argv[1] !== undefined && pathToFileURL(resolve(process.argv[1])).href === import.meta.url) {
|
|
139
|
+
main();
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=support-matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-matrix.js","sourceRoot":"","sources":["../../scripts/support-matrix.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ast/common.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* `TypeNode` discriminated unions.
|
|
5
5
|
*/
|
|
6
6
|
import { SyntaxKind, type ModifierKind } from "./kinds.js";
|
|
7
|
-
import type { ArrayLiteralExpression, ArrowFunction, AsExpression, AwaitExpression, BigIntLiteral, BinaryExpression, BooleanLiteral, CallExpression, ClassExpression, ConditionalExpression, DeleteExpression, ElementAccessExpression, FunctionExpression, Identifier, NewExpression, NoSubstitutionTemplateLiteral, NonNullExpression, NullLiteral, NumericLiteral, ObjectLiteralExpression, ParenthesizedExpression, PostfixUnaryExpression, PrefixUnaryExpression, PrivateIdentifier, PropertyAccessExpression, RegularExpressionLiteral, SatisfiesExpression, SpreadElement, StringLiteral, TaggedTemplateExpression, TemplateLiteral, ThisExpression, TypeOfExpression, UndefinedLiteral, VoidExpression, YieldExpression } from "./expressions.js";
|
|
7
|
+
import type { ArrayLiteralExpression, ArrowFunction, AsExpression, AwaitExpression, BigIntLiteral, BinaryExpression, BooleanLiteral, CallExpression, ClassExpression, ConditionalExpression, DeleteExpression, ElementAccessExpression, FunctionExpression, Identifier, NewExpression, NoSubstitutionTemplateLiteral, NonNullExpression, NullLiteral, NumericLiteral, ObjectLiteralExpression, ParenthesizedExpression, PostfixUnaryExpression, PrefixUnaryExpression, PrivateIdentifier, PropertyAccessExpression, RegularExpressionLiteral, SatisfiesExpression, SequenceExpression, SpreadElement, StringLiteral, TaggedTemplateExpression, TemplateLiteral, ThisExpression, TypeOfExpression, UndefinedLiteral, VoidExpression, YieldExpression } from "./expressions.js";
|
|
8
8
|
import type { Block, BreakStatement, ContinueStatement, DebuggerStatement, DoStatement, EmptyStatement, ExpressionStatement, ForInStatement, ForOfStatement, ForStatement, IfStatement, LabeledStatement, ReturnStatement, SwitchStatement, ThrowStatement, TryStatement, VariableStatement, WhileStatement } from "./statements.js";
|
|
9
9
|
import type { ClassDeclaration, EnumDeclaration, FunctionDeclaration, InterfaceDeclaration, ModuleDeclaration, TypeAliasDeclaration } from "./declarations.js";
|
|
10
10
|
import type { ExportAssignment, ExportDeclaration, ImportDeclaration } from "./modules.js";
|
|
@@ -22,7 +22,7 @@ export interface Modifier extends Node {
|
|
|
22
22
|
readonly kind: SyntaxKind.Unknown;
|
|
23
23
|
readonly modifierKind: ModifierKind;
|
|
24
24
|
}
|
|
25
|
-
export type Expression = Identifier | PrivateIdentifier | NumericLiteral | BigIntLiteral | StringLiteral | NoSubstitutionTemplateLiteral | TemplateLiteral | RegularExpressionLiteral | BooleanLiteral | NullLiteral | UndefinedLiteral | ThisExpression | ArrayLiteralExpression | ObjectLiteralExpression | FunctionExpression | ArrowFunction | ClassExpression | CallExpression | NewExpression | PropertyAccessExpression | ElementAccessExpression | ParenthesizedExpression | PrefixUnaryExpression | PostfixUnaryExpression | BinaryExpression | ConditionalExpression | AsExpression | SatisfiesExpression | NonNullExpression | TypeOfExpression | VoidExpression | DeleteExpression | AwaitExpression | YieldExpression | TaggedTemplateExpression | SpreadElement;
|
|
25
|
+
export type Expression = Identifier | PrivateIdentifier | NumericLiteral | BigIntLiteral | StringLiteral | NoSubstitutionTemplateLiteral | TemplateLiteral | RegularExpressionLiteral | BooleanLiteral | NullLiteral | UndefinedLiteral | ThisExpression | ArrayLiteralExpression | ObjectLiteralExpression | FunctionExpression | ArrowFunction | ClassExpression | CallExpression | NewExpression | PropertyAccessExpression | ElementAccessExpression | ParenthesizedExpression | PrefixUnaryExpression | PostfixUnaryExpression | BinaryExpression | ConditionalExpression | AsExpression | SatisfiesExpression | SequenceExpression | NonNullExpression | TypeOfExpression | VoidExpression | DeleteExpression | AwaitExpression | YieldExpression | TaggedTemplateExpression | SpreadElement;
|
|
26
26
|
export type Statement = ExpressionStatement | Block | EmptyStatement | DebuggerStatement | VariableStatement | IfStatement | WhileStatement | DoStatement | ForStatement | ForOfStatement | ForInStatement | ReturnStatement | BreakStatement | ContinueStatement | ThrowStatement | TryStatement | SwitchStatement | LabeledStatement | FunctionDeclaration | ClassDeclaration | InterfaceDeclaration | TypeAliasDeclaration | EnumDeclaration | ModuleDeclaration | ImportDeclaration | ExportDeclaration | ExportAssignment;
|
|
27
27
|
export type TypeNode = TypeReference | TypePredicate | KeywordTypeNode | LiteralTypeNode | ArrayTypeNode | TupleTypeNode | UnionTypeNode | IntersectionTypeNode | FunctionTypeNode | TypeLiteralNode | ParenthesizedTypeNode | TypeQueryNode | IndexedAccessTypeNode | TypeOperatorNode | MappedTypeNode | ConditionalTypeNode | InferTypeNode | OptionalTypeNode | RestTypeNode;
|
|
28
28
|
export interface SourceFileNode extends Node {
|
|
@@ -58,7 +58,7 @@ export interface ExpressionWithTypeArguments extends Node {
|
|
|
58
58
|
readonly expression: Expression;
|
|
59
59
|
readonly typeArguments: TypeNode[];
|
|
60
60
|
}
|
|
61
|
-
export type ClassElement = PropertyDeclaration | MethodDeclaration | ConstructorDeclaration;
|
|
61
|
+
export type ClassElement = PropertyDeclaration | MethodDeclaration | ConstructorDeclaration | ClassStaticBlockDeclaration;
|
|
62
62
|
export interface PropertyDeclaration extends Node {
|
|
63
63
|
readonly kind: SyntaxKind.PropertyDeclaration;
|
|
64
64
|
readonly name: PropertyName;
|
|
@@ -87,6 +87,12 @@ export interface ConstructorDeclaration extends Node {
|
|
|
87
87
|
readonly parameters: Parameter[];
|
|
88
88
|
readonly body?: Block;
|
|
89
89
|
}
|
|
90
|
+
/** `static { ... }`: runs once, while the class is being defined. */
|
|
91
|
+
export interface ClassStaticBlockDeclaration extends Node {
|
|
92
|
+
readonly kind: SyntaxKind.ClassStaticBlockDeclaration;
|
|
93
|
+
readonly modifiers: Modifier[];
|
|
94
|
+
readonly body: Block;
|
|
95
|
+
}
|
|
90
96
|
export interface ClassDeclaration extends Node {
|
|
91
97
|
readonly kind: SyntaxKind.ClassDeclaration;
|
|
92
98
|
readonly name?: Identifier;
|
|
@@ -162,6 +162,11 @@ export interface ParenthesizedExpression extends Node {
|
|
|
162
162
|
readonly kind: SyntaxKind.ParenthesizedExpression;
|
|
163
163
|
readonly expression: Expression;
|
|
164
164
|
}
|
|
165
|
+
/** `a, b, c`: evaluates every operand left to right, yields the last value. */
|
|
166
|
+
export interface SequenceExpression extends Node {
|
|
167
|
+
readonly kind: SyntaxKind.SequenceExpression;
|
|
168
|
+
readonly expressions: Expression[];
|
|
169
|
+
}
|
|
165
170
|
export interface PrefixUnaryExpression extends Node {
|
|
166
171
|
readonly kind: SyntaxKind.PrefixUnaryExpression;
|
|
167
172
|
readonly operator: PrefixUnaryOperator;
|
package/dist/src/ast/kinds.d.ts
CHANGED
|
@@ -55,6 +55,7 @@ export declare const enum SyntaxKind {
|
|
|
55
55
|
ObjectBindingPattern = 47,
|
|
56
56
|
BindingElement = 48,
|
|
57
57
|
ComputedPropertyName = 49,
|
|
58
|
+
SequenceExpression = 50,
|
|
58
59
|
ExpressionStatement = 60,
|
|
59
60
|
Block = 61,
|
|
60
61
|
EmptyStatement = 62,
|
|
@@ -100,6 +101,7 @@ export declare const enum SyntaxKind {
|
|
|
100
101
|
ExportAssignment = 119,
|
|
101
102
|
NamedExports = 120,
|
|
102
103
|
ExportSpecifier = 121,
|
|
104
|
+
ClassStaticBlockDeclaration = 122,
|
|
103
105
|
TypeReference = 200,
|
|
104
106
|
TypePredicate = 201,
|
|
105
107
|
AnyKeywordType = 202,
|
package/dist/src/ast/kinds.js
CHANGED
|
@@ -60,6 +60,7 @@ export var SyntaxKind;
|
|
|
60
60
|
SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 47] = "ObjectBindingPattern";
|
|
61
61
|
SyntaxKind[SyntaxKind["BindingElement"] = 48] = "BindingElement";
|
|
62
62
|
SyntaxKind[SyntaxKind["ComputedPropertyName"] = 49] = "ComputedPropertyName";
|
|
63
|
+
SyntaxKind[SyntaxKind["SequenceExpression"] = 50] = "SequenceExpression";
|
|
63
64
|
// Statements
|
|
64
65
|
SyntaxKind[SyntaxKind["ExpressionStatement"] = 60] = "ExpressionStatement";
|
|
65
66
|
SyntaxKind[SyntaxKind["Block"] = 61] = "Block";
|
|
@@ -107,6 +108,7 @@ export var SyntaxKind;
|
|
|
107
108
|
SyntaxKind[SyntaxKind["ExportAssignment"] = 119] = "ExportAssignment";
|
|
108
109
|
SyntaxKind[SyntaxKind["NamedExports"] = 120] = "NamedExports";
|
|
109
110
|
SyntaxKind[SyntaxKind["ExportSpecifier"] = 121] = "ExportSpecifier";
|
|
111
|
+
SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 122] = "ClassStaticBlockDeclaration";
|
|
110
112
|
// Types
|
|
111
113
|
SyntaxKind[SyntaxKind["TypeReference"] = 200] = "TypeReference";
|
|
112
114
|
SyntaxKind[SyntaxKind["TypePredicate"] = 201] = "TypePredicate";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kinds.js","sourceRoot":"","sources":["../../../src/ast/kinds.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAN,IAAkB,
|
|
1
|
+
{"version":3,"file":"kinds.js","sourceRoot":"","sources":["../../../src/ast/kinds.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - `helpers` — small AST utilities
|
|
16
16
|
*/
|
|
17
17
|
import type { Identifier, Node, SourceFileNode } from "../ast/nodes.js";
|
|
18
|
-
import { ScopeKind, type ClassInfo, type FunctionInfo, type MutableFunction, type Scope, type SymbolInfo, type BindResult, type FunctionNode } from "./types.js";
|
|
18
|
+
import { ScopeKind, type ClassInfo, type DeclarationConflict, type FunctionInfo, type MutableFunction, type Scope, type SymbolInfo, type BindResult, type FunctionNode } from "./types.js";
|
|
19
19
|
import { type DeclarationMethods } from "./declarations.js";
|
|
20
20
|
import { type ReferenceMethods } from "./references.js";
|
|
21
21
|
export * from "./types.js";
|
|
@@ -29,6 +29,7 @@ export declare class Binder {
|
|
|
29
29
|
readonly symbolOfIdentifier: Map<Identifier, SymbolInfo>;
|
|
30
30
|
readonly scopes: Map<Node, Scope>;
|
|
31
31
|
readonly unresolved: Identifier[];
|
|
32
|
+
readonly conflicts: DeclarationConflict[];
|
|
32
33
|
nextSymbolId: number;
|
|
33
34
|
nextFunctionId: number;
|
|
34
35
|
nextClassId: number;
|
|
@@ -32,6 +32,7 @@ export class Binder {
|
|
|
32
32
|
symbolOfIdentifier = new Map();
|
|
33
33
|
scopes = new Map();
|
|
34
34
|
unresolved = [];
|
|
35
|
+
conflicts = [];
|
|
35
36
|
nextSymbolId = 1;
|
|
36
37
|
nextFunctionId = 1;
|
|
37
38
|
nextClassId = 1;
|
|
@@ -68,6 +69,7 @@ export class Binder {
|
|
|
68
69
|
symbolOfIdentifier: this.symbolOfIdentifier,
|
|
69
70
|
scopes: this.scopes,
|
|
70
71
|
unresolved: this.unresolved,
|
|
72
|
+
conflicts: this.conflicts,
|
|
71
73
|
};
|
|
72
74
|
}
|
|
73
75
|
// -- construction helpers ------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binder.js","sourceRoot":"","sources":["../../../src/binder/binder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,SAAS,
|
|
1
|
+
{"version":3,"file":"binder.js","sourceRoot":"","sources":["../../../src/binder/binder.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
import { type BindingName, type ImportDeclaration, type Node, type Statement, type VariableDeclarationList } from "../ast/nodes.js";
|
|
6
6
|
import { SymbolKind, type MutableFunction, type Scope, type SymbolInfo } from "./types.js";
|
|
7
7
|
import type { Binder } from "./binder.js";
|
|
8
|
+
/**
|
|
9
|
+
* Whether a declaration of `next` may legally share a scope with `existing`.
|
|
10
|
+
*
|
|
11
|
+
* This is JavaScript's redeclaration rules plus TypeScript's declaration
|
|
12
|
+
* merging, kept deliberately explicit: a wrong `true` would hide a real bug, a
|
|
13
|
+
* wrong `false` would make valid code fail to compile. Only the cases this
|
|
14
|
+
* compiler can actually see are covered; anything unknown is treated as legal.
|
|
15
|
+
*/
|
|
16
|
+
export declare function declarationsCanMerge(existing: SymbolKind, next: SymbolKind): boolean;
|
|
8
17
|
export interface DeclarationMethods {
|
|
9
18
|
declareBinding(this: Binder, name: BindingName, kind: SymbolKind, declaration: Node, scope: Scope, mutable: boolean): SymbolInfo | undefined;
|
|
10
19
|
declare(this: Binder, name: string, kind: SymbolKind, node: Node, scope: Scope, mutable: boolean): SymbolInfo;
|