xbintsc 0.5.23 → 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 +11 -2
- package/README.md +31 -6
- package/README.zh-CN.md +21 -2
- 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 +2 -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 +3 -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/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/registry.d.ts +38 -0
- package/dist/src/extensions/registry.js +10 -0
- package/dist/src/extensions/registry.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -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/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 +5 -4
- 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.js +4 -3
- package/dist/tests/e2e/gui-helpers.js.map +1 -1
- package/dist/tests/e2e/gui-media.test.js +5 -4
- 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.js +5 -3
- package/dist/tests/e2e/unicode-output.test.js.map +1 -1
- package/dist/tests/e2e/weak-collections.test.js +16 -2
- package/dist/tests/e2e/weak-collections.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/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 +17 -5
- package/doc/ai/contributing.md +59 -2
- package/doc/ai/extensions.md +11 -0
- package/doc/ai/language-support.md +25 -16
- 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 +13 -3
- package/doc/ai/zh-CN/contributing.md +49 -3
- package/doc/ai/zh-CN/extensions.md +9 -0
- package/doc/ai/zh-CN/language-support.md +23 -14
- package/doc/gui/api.md +45 -0
- package/doc/gui/known-issues.md +10 -0
- package/doc/gui/runtime.md +18 -0
- package/doc/gui-scripts.md +7 -0
- 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/known-issues.md +7 -0
- package/doc/zh-CN/gui/runtime.md +16 -0
- package/doc/zh-CN/gui-scripts.md +5 -0
- 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 +2 -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/window.cpp +9 -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/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 +2 -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 +4 -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/gui/html.ts +23 -10
- package/src/extensions/gui/index.ts +65 -0
- package/src/extensions/registry.ts +48 -0
- package/src/index.ts +1 -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,6 +85,7 @@ 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
91
|
src/extensions optional compile modules (node/, gui/, media/, native C++/Rust)
|
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
|
|
@@ -419,7 +439,8 @@ skips with a warning when they are missing.
|
|
|
419
439
|
|
|
420
440
|
See [Requirements](./doc/requirements.md) for the full, per-platform list.
|
|
421
441
|
|
|
422
|
-
- Node.js 22+ —
|
|
442
|
+
- Node.js 22+ — to run the compiler from npm or from source; released binaries
|
|
443
|
+
are standalone
|
|
423
444
|
- macOS: the Xcode Command Line Tools (`xcode-select --install`)
|
|
424
445
|
- Windows: LLVM + the Visual Studio C++ build tools (MSVC ABI)
|
|
425
446
|
- Linux: `clang` and `lld` from your distribution
|
|
@@ -432,15 +453,19 @@ Check your environment with `xbintsc doctor`.
|
|
|
432
453
|
|
|
433
454
|
- [Implemented features](./doc/implemented.md)
|
|
434
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)
|
|
435
458
|
- [Application icons & project config](./doc/icon.md)
|
|
436
459
|
|
|
437
460
|
## Using xbintsc with an AI agent
|
|
438
461
|
|
|
439
|
-
The compiler is strict about its language subset — types are
|
|
440
|
-
checked
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
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
|
|
444
469
|
Node accepts" will write code that does not compile, so the documentation is
|
|
445
470
|
layered for exactly that reader:
|
|
446
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
|
### 编程接口
|
|
@@ -356,7 +373,7 @@ V8 只能看到编译器自身的源码,因此 `npm run coverage:runtime` 改
|
|
|
356
373
|
独立二进制,见
|
|
357
374
|
[使用前置要求](./doc/zh-CN/requirements.md)。
|
|
358
375
|
|
|
359
|
-
- Node.js 22+ ——
|
|
376
|
+
- Node.js 22+ —— 从 npm 或源码运行编译器时需要;发布版二进制是独立的
|
|
360
377
|
- macOS:Xcode Command Line Tools(`xcode-select --install`)
|
|
361
378
|
- Windows:LLVM + Visual Studio C++ 生成工具(MSVC ABI)
|
|
362
379
|
- Linux:发行版提供的 `clang` 与 `lld`
|
|
@@ -368,10 +385,12 @@ V8 只能看到编译器自身的源码,因此 `npm run coverage:runtime` 改
|
|
|
368
385
|
|
|
369
386
|
- [已实现特性](./doc/zh-CN/implemented.md)
|
|
370
387
|
- [未实现特性](./doc/zh-CN/unimplemented.md)
|
|
388
|
+
- [支持矩阵](./doc/zh-CN/support-matrix.md)(由可执行语料生成)
|
|
371
389
|
|
|
372
390
|
## 让 AI 使用 xbintsc
|
|
373
391
|
|
|
374
|
-
|
|
392
|
+
这个编译器对语言子集很严格——类型会先被默认检查器做结构化检查,然后擦除
|
|
393
|
+
(确定不匹配、缺失属性和不可调用会被拒绝,但没有完整推断与 strict-null)、Node 内置模块需要
|
|
375
394
|
`--ext node`、`node_modules` 里的 npm 包在构建期打包进二进制、字符串在 UTF-8 存储上按 UTF-16 语义计数、`await`
|
|
376
395
|
只在 Promise 未 settle 时才真正挂起。如果 AI 把"TypeScript"当成"Node 能跑的 TypeScript",写出来的
|
|
377
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;
|
|
@@ -5,6 +5,65 @@
|
|
|
5
5
|
import { SyntaxKind, } from "../ast/nodes.js";
|
|
6
6
|
import { SymbolKind } from "./types.js";
|
|
7
7
|
import { childNodes } from "./helpers.js";
|
|
8
|
+
/** Kinds that only introduce a type name, never a runtime binding. */
|
|
9
|
+
const TYPE_ONLY_KINDS = new Set([
|
|
10
|
+
SymbolKind.Interface,
|
|
11
|
+
SymbolKind.TypeAlias,
|
|
12
|
+
]);
|
|
13
|
+
function isVarLike(kind) {
|
|
14
|
+
return kind === SymbolKind.Var || kind === SymbolKind.Function;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Whether a declaration of `next` may legally share a scope with `existing`.
|
|
18
|
+
*
|
|
19
|
+
* This is JavaScript's redeclaration rules plus TypeScript's declaration
|
|
20
|
+
* merging, kept deliberately explicit: a wrong `true` would hide a real bug, a
|
|
21
|
+
* wrong `false` would make valid code fail to compile. Only the cases this
|
|
22
|
+
* compiler can actually see are covered; anything unknown is treated as legal.
|
|
23
|
+
*/
|
|
24
|
+
export function declarationsCanMerge(existing, next) {
|
|
25
|
+
if (existing === next) {
|
|
26
|
+
/* Repeated `var` / `function` / `interface` / `enum` declarations merge.
|
|
27
|
+
* Two imports may also share a name: bundling merges every module into one
|
|
28
|
+
* scope, and separate modules routinely import the same builtin
|
|
29
|
+
* (`readFileSync` from `node:fs`, `dirname` from `node:path`). The import
|
|
30
|
+
* map is keyed by symbol id, so keeping the first declaration is enough.
|
|
31
|
+
* `let`, `const`, `class` and parameters do not merge. */
|
|
32
|
+
return (existing === SymbolKind.Var ||
|
|
33
|
+
existing === SymbolKind.Function ||
|
|
34
|
+
existing === SymbolKind.Interface ||
|
|
35
|
+
existing === SymbolKind.Namespace ||
|
|
36
|
+
existing === SymbolKind.Enum ||
|
|
37
|
+
existing === SymbolKind.Import);
|
|
38
|
+
}
|
|
39
|
+
// `var` and `function` are both function-scoped and may coexist in any order.
|
|
40
|
+
if (isVarLike(existing) && isVarLike(next))
|
|
41
|
+
return true;
|
|
42
|
+
// `var` may redeclare a parameter; `let`/`const` may not.
|
|
43
|
+
if ((existing === SymbolKind.Parameter && next === SymbolKind.Var) ||
|
|
44
|
+
(existing === SymbolKind.Var && next === SymbolKind.Parameter)) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
// Namespaces merge with classes, functions, enums and each other.
|
|
48
|
+
if (existing === SymbolKind.Namespace || next === SymbolKind.Namespace)
|
|
49
|
+
return true;
|
|
50
|
+
// A class and an interface merge their instance shape.
|
|
51
|
+
if ((existing === SymbolKind.Class && next === SymbolKind.Interface) ||
|
|
52
|
+
(existing === SymbolKind.Interface && next === SymbolKind.Class)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
// An import binds both a value and a type name, so it conflicts with any
|
|
56
|
+
// same-name local declaration.
|
|
57
|
+
if (existing === SymbolKind.Import || next === SymbolKind.Import)
|
|
58
|
+
return false;
|
|
59
|
+
// Value and type names live in separate declaration spaces, except classes
|
|
60
|
+
// and enums, which declare a type as well as a value.
|
|
61
|
+
if (TYPE_ONLY_KINDS.has(existing) !== TYPE_ONLY_KINDS.has(next)) {
|
|
62
|
+
const valueKind = TYPE_ONLY_KINDS.has(existing) ? next : existing;
|
|
63
|
+
return valueKind !== SymbolKind.Class && valueKind !== SymbolKind.Enum;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
8
67
|
export const declarationMethods = {
|
|
9
68
|
/** Declare every identifier introduced by a (possibly destructured) binding. */
|
|
10
69
|
declareBinding(name, kind, declaration, scope, mutable) {
|
|
@@ -25,6 +84,11 @@ export const declarationMethods = {
|
|
|
25
84
|
declare(name, kind, node, scope, mutable) {
|
|
26
85
|
const existing = scope.symbols.get(name);
|
|
27
86
|
if (existing) {
|
|
87
|
+
// `(anonymous)` is the binder's placeholder for `export default
|
|
88
|
+
// function () {}`; those have no user-visible name to collide.
|
|
89
|
+
if (name !== "(anonymous)" && !declarationsCanMerge(existing.kind, kind)) {
|
|
90
|
+
this.conflicts.push({ name, existing, kind, node });
|
|
91
|
+
}
|
|
28
92
|
// `var` redeclarations and duplicate functions merge into one symbol.
|
|
29
93
|
if ((kind === SymbolKind.Var && existing.kind === SymbolKind.Var) ||
|
|
30
94
|
(kind === SymbolKind.Function && existing.kind === SymbolKind.Function)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/binder/declarations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,GAUX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAqD,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/binder/declarations.ts"],"names":[],"mappings":"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"}
|