xbintsc 0.5.22 → 0.5.31

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