xbintsc 0.5.23 → 0.5.32
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 +47 -16
- 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 +99 -4
- 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 +3 -0
- package/dist/src/codegen/generator/module.js +116 -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 +26 -7
- 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/css.d.ts +26 -0
- package/dist/src/extensions/gui/css.js +100 -0
- package/dist/src/extensions/gui/css.js.map +1 -0
- package/dist/src/extensions/gui/html.js +28 -7
- package/dist/src/extensions/gui/html.js.map +1 -1
- package/dist/src/extensions/gui/index.js +79 -2
- package/dist/src/extensions/gui/index.js.map +1 -1
- package/dist/src/extensions/gui/three.d.ts +16 -0
- package/dist/src/extensions/gui/three.js +22 -0
- package/dist/src/extensions/gui/three.js.map +1 -0
- package/dist/src/extensions/media/index.d.ts +6 -5
- package/dist/src/extensions/media/index.js +12 -14
- package/dist/src/extensions/media/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 +45 -0
- package/dist/tests/e2e/compile-builtins.test.js.map +1 -1
- package/dist/tests/e2e/compile-objects-classes.test.js +77 -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-effects.test.d.ts +6 -0
- package/dist/tests/e2e/gui-effects.test.js +262 -0
- package/dist/tests/e2e/gui-effects.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-webgl.test.d.ts +10 -0
- package/dist/tests/e2e/gui-example-webgl.test.js +75 -0
- package/dist/tests/e2e/gui-example-webgl.test.js.map +1 -0
- package/dist/tests/e2e/gui-example-webgl2.test.d.ts +8 -0
- package/dist/tests/e2e/gui-example-webgl2.test.js +72 -0
- package/dist/tests/e2e/gui-example-webgl2.test.js.map +1 -0
- 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-layout.test.js +48 -0
- package/dist/tests/e2e/gui-layout.test.js.map +1 -1
- package/dist/tests/e2e/gui-media.test.js +10 -8
- package/dist/tests/e2e/gui-media.test.js.map +1 -1
- package/dist/tests/e2e/gui-webgl.test.d.ts +11 -0
- package/dist/tests/e2e/gui-webgl.test.js +179 -0
- package/dist/tests/e2e/gui-webgl.test.js.map +1 -0
- package/dist/tests/e2e/gui-webgl2.test.d.ts +10 -0
- package/dist/tests/e2e/gui-webgl2.test.js +238 -0
- package/dist/tests/e2e/gui-webgl2.test.js.map +1 -0
- 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/extensions/gui.test.js +41 -0
- package/dist/tests/extensions/gui.test.js.map +1 -1
- package/dist/tests/extensions/media.test.js +7 -3
- package/dist/tests/extensions/media.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 +38 -7
- package/doc/ai/language-support.md +25 -16
- package/doc/ai/troubleshooting.md +12 -8
- 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 +33 -6
- package/doc/ai/zh-CN/language-support.md +23 -14
- package/doc/ai/zh-CN/troubleshooting.md +10 -6
- package/doc/gui/api.md +47 -1
- package/doc/gui/build.md +72 -16
- package/doc/gui/canvas.md +11 -3
- package/doc/gui/dom.md +33 -18
- package/doc/gui/known-issues.md +58 -15
- package/doc/gui/layout.md +18 -0
- package/doc/gui/media.md +17 -13
- package/doc/gui/rendering.md +50 -3
- package/doc/gui/runtime.md +18 -0
- package/doc/gui/webgl.md +256 -0
- package/doc/gui-scripts.md +7 -0
- package/doc/gui.md +108 -17
- 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 +419 -0
- package/doc/requirements.md +22 -10
- 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 +43 -1
- package/doc/zh-CN/gui/build.md +64 -15
- package/doc/zh-CN/gui/canvas.md +9 -2
- package/doc/zh-CN/gui/dom.md +20 -7
- package/doc/zh-CN/gui/known-issues.md +46 -13
- package/doc/zh-CN/gui/layout.md +14 -0
- package/doc/zh-CN/gui/media.md +15 -11
- package/doc/zh-CN/gui/rendering.md +41 -4
- package/doc/zh-CN/gui/runtime.md +16 -0
- package/doc/zh-CN/gui/webgl.md +115 -0
- package/doc/zh-CN/gui-scripts.md +5 -0
- package/doc/zh-CN/gui.md +89 -14
- 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 +394 -0
- package/doc/zh-CN/post/announce.md +47 -47
- package/doc/zh-CN/requirements.md +16 -7
- 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 +6 -1
- package/package.json +2 -1
- package/runtime/ext_gui/audio.cpp +316 -0
- package/runtime/ext_gui/browser.cpp +573 -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 +12 -21
- package/runtime/ext_gui/canvas_internal.h +10 -0
- package/runtime/ext_gui/canvas_raster.cpp +79 -1
- package/runtime/ext_gui/clip_values.cpp +246 -0
- package/runtime/ext_gui/css.cpp +94 -0
- package/runtime/ext_gui/css.h +22 -1
- package/runtime/ext_gui/css_match.cpp +3 -0
- package/runtime/ext_gui/css_selector.cpp +9 -0
- package/runtime/ext_gui/css_sheet.cpp +89 -45
- package/runtime/ext_gui/document.cpp +4 -1
- package/runtime/ext_gui/document.h +2 -0
- package/runtime/ext_gui/dom.h +16 -0
- package/runtime/ext_gui/dom_api.cpp +37 -0
- package/runtime/ext_gui/dom_api_canvas.cpp +17 -80
- package/runtime/ext_gui/dom_api_canvas_extra.cpp +130 -1
- package/runtime/ext_gui/dom_api_canvas_pending.cpp +41 -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 +278 -0
- package/runtime/ext_gui/dom_api_proto.cpp +6 -0
- package/runtime/ext_gui/dom_api_webgl.cpp +376 -0
- package/runtime/ext_gui/dom_api_webgl2.cpp +434 -0
- package/runtime/ext_gui/dom_api_webgl2_draw.cpp +269 -0
- package/runtime/ext_gui/dom_api_webgl_buffer.cpp +212 -0
- package/runtime/ext_gui/dom_api_webgl_rt.h +30 -0
- package/runtime/ext_gui/dom_api_webgl_shader.cpp +443 -0
- package/runtime/ext_gui/dom_api_webgl_state.cpp +444 -0
- package/runtime/ext_gui/dom_api_webgl_texture.cpp +445 -0
- package/runtime/ext_gui/effect_values.cpp +312 -0
- package/runtime/ext_gui/gradient_values.cpp +476 -0
- package/runtime/ext_gui/grid_values.cpp +230 -0
- package/runtime/ext_gui/gui.cpp +90 -23
- package/runtime/ext_gui/gui_canvas.cpp +50 -2
- package/runtime/ext_gui/gui_engine.h +71 -0
- package/runtime/ext_gui/gui_events.cpp +4 -1
- package/runtime/ext_gui/gui_media.cpp +1 -1
- package/runtime/ext_gui/gui_webgl.cpp +83 -0
- package/runtime/ext_gui/layout.cpp +21 -0
- package/runtime/ext_gui/layout_flow.cpp +81 -4
- package/runtime/ext_gui/layout_flow_internal.h +31 -0
- package/runtime/ext_gui/layout_grid.cpp +374 -0
- package/runtime/ext_gui/media.h +1 -1
- package/runtime/ext_gui/media_api.h +2 -2
- package/runtime/ext_gui/media_query.cpp +211 -0
- package/runtime/ext_gui/paint.cpp +111 -77
- package/runtime/ext_gui/paint.h +33 -3
- package/runtime/ext_gui/paint_background.cpp +229 -0
- package/runtime/ext_gui/paint_clip.cpp +268 -0
- package/runtime/ext_gui/paint_effects.cpp +324 -0
- package/runtime/ext_gui/paint_internal.h +85 -0
- package/runtime/ext_gui/renderer.cpp +8 -31
- package/runtime/ext_gui/renderer_clip.cpp +196 -0
- package/runtime/ext_gui/renderer_image.cpp +13 -8
- package/runtime/ext_gui/renderer_internal.h +15 -8
- package/runtime/ext_gui/renderer_text.cpp +6 -31
- package/runtime/ext_gui/style.cpp +343 -20
- package/runtime/ext_gui/style.h +144 -3
- package/runtime/ext_gui/style_print.cpp +134 -1
- package/runtime/ext_gui/style_values.cpp +152 -126
- package/runtime/ext_gui/style_values_internal.h +35 -0
- package/runtime/ext_gui/webgl.h +466 -0
- package/runtime/ext_gui/webgl2_constants.h +274 -0
- package/runtime/ext_gui/webgl_buffer.cpp +565 -0
- package/runtime/ext_gui/webgl_constants.h +317 -0
- package/runtime/ext_gui/webgl_context.cpp +466 -0
- package/runtime/ext_gui/webgl_draw.cpp +495 -0
- package/runtime/ext_gui/webgl_glsl.h +125 -0
- package/runtime/ext_gui/webgl_glsl_compile.cpp +431 -0
- package/runtime/ext_gui/webgl_glsl_rewrite.cpp +349 -0
- package/runtime/ext_gui/webgl_glsl_scan.cpp +581 -0
- package/runtime/ext_gui/webgl_msl.cpp +62 -0
- package/runtime/ext_gui/webgl_msl.h +33 -0
- package/runtime/ext_gui/webgl_pipeline.cpp +274 -0
- package/runtime/ext_gui/webgl_program_internal.h +18 -0
- package/runtime/ext_gui/webgl_shader.cpp +582 -0
- package/runtime/ext_gui/webgl_texture.cpp +293 -0
- package/runtime/ext_gui/webgl_uniform.cpp +167 -0
- package/runtime/ext_gui/webgl_webgl2.cpp +224 -0
- package/runtime/ext_gui/window.cpp +9 -0
- package/runtime/ext_media/media.cpp +1 -1
- package/runtime/ext_media/media_bridge.c +9 -3
- 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/rt_internal.h +1 -0
- package/runtime/xt_constructors.c +2 -1
- package/runtime/xt_containers/access.inc +8 -0
- package/runtime/xt_containers/objects.inc +22 -2
- package/runtime/xt_io/exception.inc +4 -2
- package/runtime/xt_regex/api.inc +2 -0
- package/runtime/xt_regex/matcher.inc +16 -3
- package/runtime/xt_regex/parser.inc +8 -2
- package/runtime/xt_regex/types.inc +3 -0
- 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/runtime/xt_stdlib2/regexp-match.inc +60 -21
- package/runtime/xt_stdlib2/regexp.inc +1 -0
- package/runtime/xt_typed_array.c +1 -1
- package/scripts/build-gui.ts +90 -3
- package/scripts/build-media.ts +323 -58
- package/scripts/setup-vs-toolchain.ps1 +152 -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 +97 -4
- 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 +115 -24
- package/src/codegen/generator/state.ts +11 -1
- package/src/codegen/generator/statements/variables.ts +26 -6
- 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/css.ts +113 -0
- package/src/extensions/gui/html.ts +31 -11
- package/src/extensions/gui/index.ts +81 -2
- package/src/extensions/gui/three.ts +25 -0
- package/src/extensions/media/index.ts +13 -16
- 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
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inference from expressions into the checker's type model.
|
|
3
|
+
*
|
|
4
|
+
* It is deliberately shallow: literals, object/array literals, `new`, function
|
|
5
|
+
* expressions and the obvious operators are inferred; calls, property reads and
|
|
6
|
+
* everything else are `any` here (the type-check walk refines them with flow).
|
|
7
|
+
*/
|
|
8
|
+
import { type ClassDeclaration, type Expression, type Parameter, type TypeNode } from "../ast/nodes.js";
|
|
9
|
+
import { type BindResult, type SymbolInfo } from "../binder/binder.js";
|
|
10
|
+
import { type ParameterInfo, type Type } from "./type-model.js";
|
|
11
|
+
export interface InferenceContext {
|
|
12
|
+
readonly binding: BindResult;
|
|
13
|
+
resolve(node: TypeNode | undefined, typeParams?: ReadonlyMap<string, Type>): Type;
|
|
14
|
+
typeOfSymbol(symbol: SymbolInfo): Type;
|
|
15
|
+
classInstanceType(node: ClassDeclaration): Type;
|
|
16
|
+
parameterInfo(parameter: Parameter, typeParams: ReadonlyMap<string, Type>): ParameterInfo;
|
|
17
|
+
}
|
|
18
|
+
export declare function inferTypeOfExpression(context: InferenceContext, expression: Expression, lookup?: (symbol: SymbolInfo) => Type | undefined): Type;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inference from expressions into the checker's type model.
|
|
3
|
+
*
|
|
4
|
+
* It is deliberately shallow: literals, object/array literals, `new`, function
|
|
5
|
+
* expressions and the obvious operators are inferred; calls, property reads and
|
|
6
|
+
* everything else are `any` here (the type-check walk refines them with flow).
|
|
7
|
+
*/
|
|
8
|
+
import { SyntaxKind, } from "../ast/nodes.js";
|
|
9
|
+
import { SymbolKind } from "../binder/binder.js";
|
|
10
|
+
import { classMemberName } from "../binder/helpers.js";
|
|
11
|
+
import { ASSIGNMENT_OPERATORS } from "../codegen/generator/tables.js";
|
|
12
|
+
import { ANY, isAny, isThisParameter, primitive, unionOf, widenType } from "./type-model.js";
|
|
13
|
+
export function inferTypeOfExpression(context, expression, lookup) {
|
|
14
|
+
switch (expression.kind) {
|
|
15
|
+
case SyntaxKind.NumericLiteral:
|
|
16
|
+
return { kind: "literal", value: expression.value, primitive: "number" };
|
|
17
|
+
case SyntaxKind.StringLiteral:
|
|
18
|
+
case SyntaxKind.NoSubstitutionTemplateLiteral:
|
|
19
|
+
return { kind: "literal", value: expression.value, primitive: "string" };
|
|
20
|
+
case SyntaxKind.TrueKeyword:
|
|
21
|
+
return { kind: "literal", value: true, primitive: "boolean" };
|
|
22
|
+
case SyntaxKind.FalseKeyword:
|
|
23
|
+
return { kind: "literal", value: false, primitive: "boolean" };
|
|
24
|
+
case SyntaxKind.NullKeyword:
|
|
25
|
+
return primitive("null");
|
|
26
|
+
case SyntaxKind.UndefinedKeyword:
|
|
27
|
+
return primitive("undefined");
|
|
28
|
+
case SyntaxKind.BigIntLiteral:
|
|
29
|
+
return primitive("bigint");
|
|
30
|
+
case SyntaxKind.Identifier: {
|
|
31
|
+
const symbol = context.binding.symbolOfIdentifier.get(expression);
|
|
32
|
+
if (!symbol)
|
|
33
|
+
return ANY;
|
|
34
|
+
return lookup?.(symbol) ?? context.typeOfSymbol(symbol);
|
|
35
|
+
}
|
|
36
|
+
case SyntaxKind.ObjectLiteralExpression:
|
|
37
|
+
return objectLiteralType(context, expression);
|
|
38
|
+
case SyntaxKind.ArrayLiteralExpression: {
|
|
39
|
+
const elements = expression.elements.map((element) => {
|
|
40
|
+
if (element.kind !== SyntaxKind.SpreadElement)
|
|
41
|
+
return inferTypeOfExpression(context, element, lookup);
|
|
42
|
+
const spread = inferTypeOfExpression(context, element.expression, lookup);
|
|
43
|
+
return spread.kind === "array" ? spread.element : ANY;
|
|
44
|
+
});
|
|
45
|
+
return { kind: "array", element: widenType(unionOf(elements)) };
|
|
46
|
+
}
|
|
47
|
+
case SyntaxKind.NewExpression: {
|
|
48
|
+
const call = expression;
|
|
49
|
+
if (call.expression.kind !== SyntaxKind.Identifier)
|
|
50
|
+
return ANY;
|
|
51
|
+
const symbol = context.binding.symbolOfIdentifier.get(call.expression);
|
|
52
|
+
if (!symbol || symbol.kind !== SymbolKind.Class || symbol.declarations.length !== 1)
|
|
53
|
+
return ANY;
|
|
54
|
+
const declaration = symbol.declarations[0];
|
|
55
|
+
if (declaration.kind !== SyntaxKind.ClassDeclaration)
|
|
56
|
+
return ANY;
|
|
57
|
+
return context.classInstanceType(declaration);
|
|
58
|
+
}
|
|
59
|
+
case SyntaxKind.ArrowFunction:
|
|
60
|
+
case SyntaxKind.FunctionExpression:
|
|
61
|
+
return functionExpressionType(context, expression);
|
|
62
|
+
case SyntaxKind.AsExpression:
|
|
63
|
+
return context.resolve(expression.type);
|
|
64
|
+
case SyntaxKind.SatisfiesExpression:
|
|
65
|
+
case SyntaxKind.ParenthesizedExpression:
|
|
66
|
+
case SyntaxKind.NonNullExpression:
|
|
67
|
+
return inferTypeOfExpression(context, expression.expression, lookup);
|
|
68
|
+
case SyntaxKind.TypeOfExpression:
|
|
69
|
+
return primitive("string");
|
|
70
|
+
case SyntaxKind.VoidExpression:
|
|
71
|
+
return primitive("undefined");
|
|
72
|
+
case SyntaxKind.TemplateLiteral:
|
|
73
|
+
return primitive("string");
|
|
74
|
+
case SyntaxKind.ConditionalExpression: {
|
|
75
|
+
const conditional = expression;
|
|
76
|
+
return unionOf([inferTypeOfExpression(context, conditional.whenTrue, lookup), inferTypeOfExpression(context, conditional.whenFalse, lookup)]);
|
|
77
|
+
}
|
|
78
|
+
case SyntaxKind.SequenceExpression: {
|
|
79
|
+
const expressions = expression.expressions;
|
|
80
|
+
return inferTypeOfExpression(context, expressions[expressions.length - 1], lookup);
|
|
81
|
+
}
|
|
82
|
+
case SyntaxKind.BinaryExpression: {
|
|
83
|
+
const binary = expression;
|
|
84
|
+
if (binary.operator === "+") {
|
|
85
|
+
const left = inferTypeOfExpression(context, binary.left, lookup);
|
|
86
|
+
const right = inferTypeOfExpression(context, binary.right, lookup);
|
|
87
|
+
if (isAny(left) || isAny(right))
|
|
88
|
+
return ANY;
|
|
89
|
+
if (isBigIntish(left) || isBigIntish(right))
|
|
90
|
+
return primitive("bigint");
|
|
91
|
+
if (isStringish(left) || isStringish(right))
|
|
92
|
+
return primitive("string");
|
|
93
|
+
return primitive("number");
|
|
94
|
+
}
|
|
95
|
+
if (ASSIGNMENT_OPERATORS.has(binary.operator))
|
|
96
|
+
return ANY;
|
|
97
|
+
if (["<", "<=", ">", ">=", "==", "!=", "===", "!==", "in", "instanceof"].includes(binary.operator))
|
|
98
|
+
return primitive("boolean");
|
|
99
|
+
if (binary.operator === "&&" || binary.operator === "||" || binary.operator === "??") {
|
|
100
|
+
return unionOf([inferTypeOfExpression(context, binary.left, lookup), inferTypeOfExpression(context, binary.right, lookup)]);
|
|
101
|
+
}
|
|
102
|
+
const left = inferTypeOfExpression(context, binary.left, lookup);
|
|
103
|
+
const right = inferTypeOfExpression(context, binary.right, lookup);
|
|
104
|
+
if (isAny(left) || isAny(right))
|
|
105
|
+
return ANY;
|
|
106
|
+
if (isBigIntish(left) || isBigIntish(right))
|
|
107
|
+
return primitive("bigint");
|
|
108
|
+
return primitive("number");
|
|
109
|
+
}
|
|
110
|
+
case SyntaxKind.PrefixUnaryExpression: {
|
|
111
|
+
const operator = expression.operator;
|
|
112
|
+
if (operator === "typeof")
|
|
113
|
+
return primitive("string");
|
|
114
|
+
if (operator === "!")
|
|
115
|
+
return primitive("boolean");
|
|
116
|
+
if (operator === "void")
|
|
117
|
+
return primitive("undefined");
|
|
118
|
+
return primitive("number");
|
|
119
|
+
}
|
|
120
|
+
case SyntaxKind.PostfixUnaryExpression:
|
|
121
|
+
return primitive("number");
|
|
122
|
+
case SyntaxKind.CallExpression:
|
|
123
|
+
return ANY;
|
|
124
|
+
case SyntaxKind.PropertyAccessExpression:
|
|
125
|
+
return ANY;
|
|
126
|
+
default:
|
|
127
|
+
return ANY;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function objectLiteralType(context, literal) {
|
|
131
|
+
const properties = new Map();
|
|
132
|
+
for (const element of literal.properties) {
|
|
133
|
+
if (element.kind === SyntaxKind.PropertyAssignment) {
|
|
134
|
+
const property = element;
|
|
135
|
+
const name = classMemberName(property.name);
|
|
136
|
+
if (!name)
|
|
137
|
+
return ANY;
|
|
138
|
+
// A getter/setter pair is a value property, not a function property;
|
|
139
|
+
// its exact type is not inferred here.
|
|
140
|
+
const type = property.accessor ? ANY : widenType(inferTypeOfExpression(context, property.initializer));
|
|
141
|
+
if (!(property.accessor === "set" && properties.has(name)))
|
|
142
|
+
properties.set(name, { type, optional: false });
|
|
143
|
+
}
|
|
144
|
+
else if (element.kind === SyntaxKind.ShorthandPropertyAssignment) {
|
|
145
|
+
const shorthand = element;
|
|
146
|
+
properties.set(shorthand.name.text, { type: inferTypeOfExpression(context, shorthand.name), optional: false });
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
return ANY; // spread: the shape is not static
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return { kind: "object", properties, closed: true };
|
|
153
|
+
}
|
|
154
|
+
function functionExpressionType(context, expression) {
|
|
155
|
+
const typeParams = new Map();
|
|
156
|
+
return {
|
|
157
|
+
kind: "function",
|
|
158
|
+
parameters: expression.parameters.filter((parameter) => !isThisParameter(parameter)).map((parameter) => context.parameterInfo(parameter, typeParams)),
|
|
159
|
+
returnType: context.resolve(expression.returnType, typeParams),
|
|
160
|
+
typeParameters: (expression.typeParameters ?? []).map((parameter) => ({ name: parameter.name.text })),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function isStringish(type) {
|
|
164
|
+
if (type.kind === "primitive")
|
|
165
|
+
return type.name === "string";
|
|
166
|
+
if (type.kind === "literal")
|
|
167
|
+
return type.primitive === "string";
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
function isBigIntish(type) {
|
|
171
|
+
return (type.kind === "primitive" && type.name === "bigint");
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=type-infer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-infer.js","sourceRoot":"","sources":["../../../src/checker/type-infer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The value model used by the checker: a deliberately small structural type
|
|
3
|
+
* union plus the helpers shared by resolution and assignability.
|
|
4
|
+
*/
|
|
5
|
+
import { type Expression, type Parameter } from "../ast/nodes.js";
|
|
6
|
+
export type PrimitiveName = "number" | "string" | "boolean" | "bigint" | "symbol" | "null" | "undefined" | "void" | "object";
|
|
7
|
+
export interface PropertyInfo {
|
|
8
|
+
readonly type: Type;
|
|
9
|
+
readonly optional: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ParameterInfo {
|
|
12
|
+
readonly type: Type;
|
|
13
|
+
readonly optional: boolean;
|
|
14
|
+
readonly rest: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface TypeParameterInfo {
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly constraint?: Type;
|
|
19
|
+
}
|
|
20
|
+
export type Type = {
|
|
21
|
+
readonly kind: "any";
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: "primitive";
|
|
24
|
+
readonly name: PrimitiveName;
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "literal";
|
|
27
|
+
readonly value: string | number | boolean;
|
|
28
|
+
readonly primitive: "string" | "number" | "boolean";
|
|
29
|
+
} | {
|
|
30
|
+
readonly kind: "array";
|
|
31
|
+
readonly element: Type;
|
|
32
|
+
} | {
|
|
33
|
+
readonly kind: "tuple";
|
|
34
|
+
readonly elements: readonly Type[];
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: "object";
|
|
37
|
+
readonly properties: ReadonlyMap<string, PropertyInfo>;
|
|
38
|
+
readonly index?: Type;
|
|
39
|
+
/** False when the shape is open (index signature, `object`, ...). */
|
|
40
|
+
readonly closed: boolean;
|
|
41
|
+
readonly label?: string;
|
|
42
|
+
} | {
|
|
43
|
+
readonly kind: "function";
|
|
44
|
+
readonly parameters: readonly ParameterInfo[];
|
|
45
|
+
readonly returnType: Type;
|
|
46
|
+
readonly typeParameters: readonly TypeParameterInfo[];
|
|
47
|
+
readonly label?: string;
|
|
48
|
+
} | {
|
|
49
|
+
readonly kind: "union";
|
|
50
|
+
readonly members: readonly Type[];
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: "typeParam";
|
|
53
|
+
readonly name: string;
|
|
54
|
+
};
|
|
55
|
+
export declare const ANY: Type;
|
|
56
|
+
export declare const UNKNOWN: Type;
|
|
57
|
+
/** Own properties every object inherits from `Object.prototype`. */
|
|
58
|
+
export declare const OBJECT_PROTOTYPE_NAMES: ReadonlySet<string>;
|
|
59
|
+
export declare function isAny(type: Type): boolean;
|
|
60
|
+
export declare function primitive(name: PrimitiveName): Type;
|
|
61
|
+
export declare function unionOf(members: readonly Type[]): Type;
|
|
62
|
+
export declare function unionMembers(type: Type): readonly Type[];
|
|
63
|
+
/**
|
|
64
|
+
* Widen the literal types TypeScript widens for a mutable position: `let x =
|
|
65
|
+
* 1` and object/array literal members are `number`, not the literal `1`.
|
|
66
|
+
* (`const x = 1` keeps the literal; the caller decides when to widen.)
|
|
67
|
+
*/
|
|
68
|
+
export declare function widenType(type: Type): Type;
|
|
69
|
+
export declare function printType(type: Type, depth?: number): string;
|
|
70
|
+
/** Shared unwrapping for erased expression wrappers. */
|
|
71
|
+
export declare function unwrap(expression: Expression): Expression;
|
|
72
|
+
export declare function isThisParameter(parameter: Parameter): boolean;
|
|
73
|
+
export declare function isParameterProperty(parameter: Parameter): boolean;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The value model used by the checker: a deliberately small structural type
|
|
3
|
+
* union plus the helpers shared by resolution and assignability.
|
|
4
|
+
*/
|
|
5
|
+
import { ModifierKind, SyntaxKind, } from "../ast/nodes.js";
|
|
6
|
+
export const ANY = { kind: "any" };
|
|
7
|
+
export const UNKNOWN = { kind: "any" }; // no strict unknown mode: treat like any
|
|
8
|
+
/** Own properties every object inherits from `Object.prototype`. */
|
|
9
|
+
export const OBJECT_PROTOTYPE_NAMES = new Set([
|
|
10
|
+
"constructor",
|
|
11
|
+
"hasOwnProperty",
|
|
12
|
+
"isPrototypeOf",
|
|
13
|
+
"propertyIsEnumerable",
|
|
14
|
+
"toLocaleString",
|
|
15
|
+
"toString",
|
|
16
|
+
"valueOf",
|
|
17
|
+
"__defineGetter__",
|
|
18
|
+
"__defineSetter__",
|
|
19
|
+
"__lookupGetter__",
|
|
20
|
+
"__lookupSetter__",
|
|
21
|
+
"__proto__",
|
|
22
|
+
]);
|
|
23
|
+
export function isAny(type) {
|
|
24
|
+
return type.kind === "any" || type.kind === "typeParam";
|
|
25
|
+
}
|
|
26
|
+
export function primitive(name) {
|
|
27
|
+
return { kind: "primitive", name };
|
|
28
|
+
}
|
|
29
|
+
export function unionOf(members) {
|
|
30
|
+
const flattened = [];
|
|
31
|
+
for (const member of members) {
|
|
32
|
+
if (member.kind === "any" || member.kind === "typeParam")
|
|
33
|
+
return ANY;
|
|
34
|
+
if (member.kind === "union")
|
|
35
|
+
flattened.push(...member.members);
|
|
36
|
+
else
|
|
37
|
+
flattened.push(member);
|
|
38
|
+
}
|
|
39
|
+
const unique = [];
|
|
40
|
+
for (const member of flattened) {
|
|
41
|
+
if (!unique.some((other) => sameType(member, other)))
|
|
42
|
+
unique.push(member);
|
|
43
|
+
}
|
|
44
|
+
if (unique.length === 0)
|
|
45
|
+
return ANY;
|
|
46
|
+
if (unique.length === 1)
|
|
47
|
+
return unique[0];
|
|
48
|
+
return { kind: "union", members: unique };
|
|
49
|
+
}
|
|
50
|
+
export function unionMembers(type) {
|
|
51
|
+
return type.kind === "union" ? type.members : [type];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Widen the literal types TypeScript widens for a mutable position: `let x =
|
|
55
|
+
* 1` and object/array literal members are `number`, not the literal `1`.
|
|
56
|
+
* (`const x = 1` keeps the literal; the caller decides when to widen.)
|
|
57
|
+
*/
|
|
58
|
+
export function widenType(type) {
|
|
59
|
+
switch (type.kind) {
|
|
60
|
+
case "literal":
|
|
61
|
+
return primitive(type.primitive);
|
|
62
|
+
case "array":
|
|
63
|
+
return { kind: "array", element: widenType(type.element) };
|
|
64
|
+
case "tuple":
|
|
65
|
+
return { kind: "tuple", elements: type.elements.map((element) => widenType(element)) };
|
|
66
|
+
case "union":
|
|
67
|
+
return unionOf(type.members.map((member) => widenType(member)));
|
|
68
|
+
case "object": {
|
|
69
|
+
const properties = new Map();
|
|
70
|
+
for (const [name, property] of type.properties) {
|
|
71
|
+
properties.set(name, { type: widenType(property.type), optional: property.optional });
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
kind: "object",
|
|
75
|
+
properties,
|
|
76
|
+
...(type.index ? { index: widenType(type.index) } : {}),
|
|
77
|
+
closed: type.closed,
|
|
78
|
+
...(type.label ? { label: type.label } : {}),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
default:
|
|
82
|
+
return type;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function sameType(a, b) {
|
|
86
|
+
if (a.kind !== b.kind)
|
|
87
|
+
return false;
|
|
88
|
+
if (a.kind === "primitive" && b.kind === "primitive")
|
|
89
|
+
return a.name === b.name;
|
|
90
|
+
if (a.kind === "literal" && b.kind === "literal")
|
|
91
|
+
return a.value === b.value;
|
|
92
|
+
if (a.kind === "typeParam" && b.kind === "typeParam")
|
|
93
|
+
return a.name === b.name;
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
export function printType(type, depth = 0) {
|
|
97
|
+
if (depth > 3)
|
|
98
|
+
return "...";
|
|
99
|
+
switch (type.kind) {
|
|
100
|
+
case "any":
|
|
101
|
+
return "any";
|
|
102
|
+
case "primitive":
|
|
103
|
+
return type.name;
|
|
104
|
+
case "literal":
|
|
105
|
+
return typeof type.value === "string" ? JSON.stringify(type.value) : String(type.value);
|
|
106
|
+
case "array":
|
|
107
|
+
return `${printType(type.element, depth + 1)}[]`;
|
|
108
|
+
case "tuple":
|
|
109
|
+
return `[${type.elements.map((element) => printType(element, depth + 1)).join(", ")}]`;
|
|
110
|
+
case "union":
|
|
111
|
+
return type.members.map((member) => printType(member, depth + 1)).join(" | ");
|
|
112
|
+
case "function": {
|
|
113
|
+
const params = type.parameters.map((parameter) => `${parameter.rest ? "..." : ""}${printType(parameter.type, depth + 1)}${parameter.optional ? "?" : ""}`);
|
|
114
|
+
return `(${params.join(", ")}) => ${printType(type.returnType, depth + 1)}`;
|
|
115
|
+
}
|
|
116
|
+
case "typeParam":
|
|
117
|
+
return type.name;
|
|
118
|
+
case "object": {
|
|
119
|
+
if (type.label)
|
|
120
|
+
return type.label;
|
|
121
|
+
const entries = [...type.properties.entries()].slice(0, 6).map(([name, property]) => `${name}${property.optional ? "?" : ""}: ${printType(property.type, depth + 1)}`);
|
|
122
|
+
if (type.properties.size > 6)
|
|
123
|
+
entries.push("...");
|
|
124
|
+
return `{ ${entries.join("; ")} }`;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Shared unwrapping for erased expression wrappers. */
|
|
129
|
+
export function unwrap(expression) {
|
|
130
|
+
let current = expression;
|
|
131
|
+
for (;;) {
|
|
132
|
+
if (current.kind === SyntaxKind.AsExpression ||
|
|
133
|
+
current.kind === SyntaxKind.SatisfiesExpression ||
|
|
134
|
+
current.kind === SyntaxKind.NonNullExpression ||
|
|
135
|
+
current.kind === SyntaxKind.ParenthesizedExpression) {
|
|
136
|
+
current = current.expression;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
return current;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function isThisParameter(parameter) {
|
|
143
|
+
return parameter.name.kind === SyntaxKind.Identifier && parameter.name.text === "this";
|
|
144
|
+
}
|
|
145
|
+
export function isParameterProperty(parameter) {
|
|
146
|
+
return parameter.modifiers.some((modifier) => modifier.modifierKind === ModifierKind.Public ||
|
|
147
|
+
modifier.modifierKind === ModifierKind.Private ||
|
|
148
|
+
modifier.modifierKind === ModifierKind.Protected ||
|
|
149
|
+
modifier.modifierKind === ModifierKind.Readonly);
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=type-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-model.js","sourceRoot":"","sources":["../../../src/checker/type-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A deliberately small structural type model for the checker.
|
|
3
|
+
*
|
|
4
|
+
* The goal is not to reimplement TypeScript's type system. It is to know
|
|
5
|
+
* enough about annotations, interfaces, classes, arrays, functions and simple
|
|
6
|
+
* generics to answer "is this value definitely the wrong shape?" without
|
|
7
|
+
* guessing. Anything the model does not understand becomes `any`, and `any` is
|
|
8
|
+
* compatible with everything — so unsupported syntax can only hide a bug, never
|
|
9
|
+
* reject working code.
|
|
10
|
+
*/
|
|
11
|
+
import { type ClassDeclaration, type Expression, type Parameter, type SourceFileNode, type TypeNode } from "../ast/nodes.js";
|
|
12
|
+
import { type BindResult, type SymbolInfo } from "../binder/binder.js";
|
|
13
|
+
import { type ParameterInfo, type Type } from "./type-model.js";
|
|
14
|
+
/** Resolve type syntax and symbol annotations into the small model above. */
|
|
15
|
+
export declare class TypeResolver {
|
|
16
|
+
readonly sourceFile: SourceFileNode;
|
|
17
|
+
readonly binding: BindResult;
|
|
18
|
+
private readonly declarations;
|
|
19
|
+
private readonly symbolTypes;
|
|
20
|
+
private readonly resolvingSymbols;
|
|
21
|
+
private readonly resolvingAliases;
|
|
22
|
+
private readonly resolvingInterfaces;
|
|
23
|
+
private readonly resolvingClasses;
|
|
24
|
+
private readonly classCache;
|
|
25
|
+
private readonly dynamicClasses;
|
|
26
|
+
private readonly symbolsById;
|
|
27
|
+
constructor(sourceFile: SourceFileNode, binding: BindResult);
|
|
28
|
+
typeOfSymbolId(id: number): Type | undefined;
|
|
29
|
+
/** The instance type of the class an `instanceof` right-hand side names. */
|
|
30
|
+
classInstanceFromIdentifier(expression: Expression): Type | undefined;
|
|
31
|
+
private collectDeclarations;
|
|
32
|
+
private addDeclaration;
|
|
33
|
+
private collectDynamicClasses;
|
|
34
|
+
private classHasDynamicMembers;
|
|
35
|
+
/** `this.x = ...` members, typed `any` because the assignment is the only source. */
|
|
36
|
+
private collectThisProperties;
|
|
37
|
+
private classOfPrototypeExpression;
|
|
38
|
+
private classOfIdentifier;
|
|
39
|
+
resolve(node: TypeNode | undefined, typeParams?: ReadonlyMap<string, Type>): Type;
|
|
40
|
+
private functionType;
|
|
41
|
+
parameterInfo(parameter: Parameter, typeParams: ReadonlyMap<string, Type>): ParameterInfo;
|
|
42
|
+
private typeLiteral;
|
|
43
|
+
private addProperty;
|
|
44
|
+
private typeReference;
|
|
45
|
+
private builtinType;
|
|
46
|
+
private bindTypeParameters;
|
|
47
|
+
private aliasType;
|
|
48
|
+
private interfaceType;
|
|
49
|
+
private buildInterfaceType;
|
|
50
|
+
private classType;
|
|
51
|
+
private buildClassType;
|
|
52
|
+
/** The instance shape of a class declaration (`this` inside its methods). */
|
|
53
|
+
classInstanceType(node: ClassDeclaration): Type;
|
|
54
|
+
setSymbolType(symbolId: number, type: Type): void;
|
|
55
|
+
typeOfSymbol(symbol: SymbolInfo): Type;
|
|
56
|
+
private computeSymbolType;
|
|
57
|
+
inferExpression(expression: Expression, lookup?: (symbol: SymbolInfo) => Type | undefined): Type;
|
|
58
|
+
}
|