xbintsc 0.3.87 → 0.5.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. package/AGENTS.md +23 -11
  2. package/README.md +11 -9
  3. package/README.zh-CN.md +7 -7
  4. package/dist/src/binder/declarations.js +14 -3
  5. package/dist/src/binder/declarations.js.map +1 -1
  6. package/dist/src/cli/hints.js +7 -1
  7. package/dist/src/cli/hints.js.map +1 -1
  8. package/dist/src/cli/main.js +115 -15
  9. package/dist/src/cli/main.js.map +1 -1
  10. package/dist/src/cli/watch.d.ts +25 -0
  11. package/dist/src/cli/watch.js +93 -0
  12. package/dist/src/cli/watch.js.map +1 -0
  13. package/dist/src/codegen/generator/calls/access.js +17 -4
  14. package/dist/src/codegen/generator/calls/access.js.map +1 -1
  15. package/dist/src/codegen/generator/calls/closures.js +13 -1
  16. package/dist/src/codegen/generator/calls/closures.js.map +1 -1
  17. package/dist/src/codegen/generator/calls/invocation.js +4 -3
  18. package/dist/src/codegen/generator/calls/invocation.js.map +1 -1
  19. package/dist/src/codegen/generator/context.d.ts +8 -0
  20. package/dist/src/codegen/generator/context.js +22 -3
  21. package/dist/src/codegen/generator/context.js.map +1 -1
  22. package/dist/src/codegen/generator/expressions/operators.js +17 -15
  23. package/dist/src/codegen/generator/expressions/operators.js.map +1 -1
  24. package/dist/src/codegen/generator/expressions/primary.js +11 -1
  25. package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
  26. package/dist/src/codegen/generator/module.d.ts +0 -1
  27. package/dist/src/codegen/generator/module.js +10 -17
  28. package/dist/src/codegen/generator/module.js.map +1 -1
  29. package/dist/src/codegen/generator/numeric.d.ts +6 -3
  30. package/dist/src/codegen/generator/numeric.js +54 -11
  31. package/dist/src/codegen/generator/numeric.js.map +1 -1
  32. package/dist/src/codegen/generator/state.js +27 -0
  33. package/dist/src/codegen/generator/state.js.map +1 -1
  34. package/dist/src/codegen/generator/statements/control-flow.js +2 -7
  35. package/dist/src/codegen/generator/statements/control-flow.js.map +1 -1
  36. package/dist/src/codegen/generator/statements/loops.js +48 -16
  37. package/dist/src/codegen/generator/statements/loops.js.map +1 -1
  38. package/dist/src/codegen/generator/tables.d.ts +9 -0
  39. package/dist/src/codegen/generator/tables.js +100 -3
  40. package/dist/src/codegen/generator/tables.js.map +1 -1
  41. package/dist/src/diagnostics/diagnostic.d.ts +3 -1
  42. package/dist/src/diagnostics/diagnostic.js +23 -3
  43. package/dist/src/diagnostics/diagnostic.js.map +1 -1
  44. package/dist/src/driver/app-artifacts.d.ts +42 -0
  45. package/dist/src/driver/app-artifacts.js +53 -0
  46. package/dist/src/driver/app-artifacts.js.map +1 -0
  47. package/dist/src/driver/build-key.d.ts +29 -0
  48. package/dist/src/driver/build-key.js +35 -0
  49. package/dist/src/driver/build-key.js.map +1 -0
  50. package/dist/src/driver/bundler/graph.js +61 -12
  51. package/dist/src/driver/bundler/graph.js.map +1 -1
  52. package/dist/src/driver/bundler/merge.js +7 -1
  53. package/dist/src/driver/bundler/merge.js.map +1 -1
  54. package/dist/src/driver/compiler.d.ts +10 -67
  55. package/dist/src/driver/compiler.js +94 -230
  56. package/dist/src/driver/compiler.js.map +1 -1
  57. package/dist/src/driver/config.d.ts +3 -0
  58. package/dist/src/driver/config.js +8 -0
  59. package/dist/src/driver/config.js.map +1 -1
  60. package/dist/src/driver/frontend.d.ts +37 -0
  61. package/dist/src/driver/frontend.js +92 -0
  62. package/dist/src/driver/frontend.js.map +1 -0
  63. package/dist/src/driver/index.d.ts +1 -1
  64. package/dist/src/driver/index.js.map +1 -1
  65. package/dist/src/driver/options.d.ts +64 -0
  66. package/dist/src/driver/options.js +9 -0
  67. package/dist/src/driver/options.js.map +1 -0
  68. package/dist/src/driver/runtime-objects.d.ts +38 -0
  69. package/dist/src/driver/runtime-objects.js +111 -0
  70. package/dist/src/driver/runtime-objects.js.map +1 -0
  71. package/dist/src/driver/toolchain-provider.d.ts +4 -0
  72. package/dist/src/driver/toolchain-provider.js +4 -0
  73. package/dist/src/driver/toolchain-provider.js.map +1 -1
  74. package/dist/src/driver/toolchain.d.ts +32 -1
  75. package/dist/src/driver/toolchain.js +115 -11
  76. package/dist/src/driver/toolchain.js.map +1 -1
  77. package/dist/src/driver/version.d.ts +12 -0
  78. package/dist/src/driver/version.js +13 -0
  79. package/dist/src/driver/version.js.map +1 -0
  80. package/dist/src/driver/win-icon.d.ts +7 -9
  81. package/dist/src/driver/win-icon.js +37 -35
  82. package/dist/src/driver/win-icon.js.map +1 -1
  83. package/dist/src/parser/declarations/classes.js +5 -0
  84. package/dist/src/parser/declarations/classes.js.map +1 -1
  85. package/dist/src/parser/declarations/functions.js +13 -1
  86. package/dist/src/parser/declarations/functions.js.map +1 -1
  87. package/dist/src/parser/modules.js +8 -3
  88. package/dist/src/parser/modules.js.map +1 -1
  89. package/dist/src/parser/parser.d.ts +1 -0
  90. package/dist/src/parser/parser.js +23 -0
  91. package/dist/src/parser/parser.js.map +1 -1
  92. package/dist/tests/cli/check.test.d.ts +6 -0
  93. package/dist/tests/cli/check.test.js +68 -0
  94. package/dist/tests/cli/check.test.js.map +1 -0
  95. package/dist/tests/cli/main.test.js +19 -0
  96. package/dist/tests/cli/main.test.js.map +1 -1
  97. package/dist/tests/cli/watch.test.d.ts +6 -0
  98. package/dist/tests/cli/watch.test.js +72 -0
  99. package/dist/tests/cli/watch.test.js.map +1 -0
  100. package/dist/tests/codegen/closures.test.js +8 -0
  101. package/dist/tests/codegen/closures.test.js.map +1 -1
  102. package/dist/tests/codegen/expressions.test.js +15 -3
  103. package/dist/tests/codegen/expressions.test.js.map +1 -1
  104. package/dist/tests/codegen/llvm.test.js +16 -0
  105. package/dist/tests/codegen/llvm.test.js.map +1 -1
  106. package/dist/tests/diagnostics/diagnostic.test.js +8 -0
  107. package/dist/tests/diagnostics/diagnostic.test.js.map +1 -1
  108. package/dist/tests/docs/structure.test.d.ts +1 -0
  109. package/dist/tests/docs/structure.test.js +92 -0
  110. package/dist/tests/docs/structure.test.js.map +1 -0
  111. package/dist/tests/driver/compiler.test.js +6 -0
  112. package/dist/tests/driver/compiler.test.js.map +1 -1
  113. package/dist/tests/driver/config.test.js +9 -0
  114. package/dist/tests/driver/config.test.js.map +1 -1
  115. package/dist/tests/driver/icon.test.js +19 -32
  116. package/dist/tests/driver/icon.test.js.map +1 -1
  117. package/dist/tests/driver/invalid-input.test.d.ts +10 -0
  118. package/dist/tests/driver/invalid-input.test.js +29 -0
  119. package/dist/tests/driver/invalid-input.test.js.map +1 -0
  120. package/dist/tests/driver/modules.test.js +42 -3
  121. package/dist/tests/driver/modules.test.js.map +1 -1
  122. package/dist/tests/driver/toolchain-provider.test.js +27 -1
  123. package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
  124. package/dist/tests/driver/toolchain.test.js +60 -2
  125. package/dist/tests/driver/toolchain.test.js.map +1 -1
  126. package/dist/tests/e2e/array-buffer.test.d.ts +5 -0
  127. package/dist/tests/e2e/array-buffer.test.js +38 -0
  128. package/dist/tests/e2e/array-buffer.test.js.map +1 -0
  129. package/dist/tests/e2e/array-from-iterables.test.d.ts +7 -0
  130. package/dist/tests/e2e/array-from-iterables.test.js +34 -0
  131. package/dist/tests/e2e/array-from-iterables.test.js.map +1 -0
  132. package/dist/tests/e2e/array-symbol-iterator.test.d.ts +8 -0
  133. package/dist/tests/e2e/array-symbol-iterator.test.js +42 -0
  134. package/dist/tests/e2e/array-symbol-iterator.test.js.map +1 -0
  135. package/dist/tests/e2e/async-await.test.d.ts +10 -0
  136. package/dist/tests/e2e/async-await.test.js +247 -0
  137. package/dist/tests/e2e/async-await.test.js.map +1 -0
  138. package/dist/tests/e2e/async-generators.test.d.ts +1 -0
  139. package/dist/tests/e2e/async-generators.test.js +154 -0
  140. package/dist/tests/e2e/async-generators.test.js.map +1 -0
  141. package/dist/tests/e2e/await-ordering.test.d.ts +5 -0
  142. package/dist/tests/e2e/await-ordering.test.js +37 -0
  143. package/dist/tests/e2e/await-ordering.test.js.map +1 -0
  144. package/dist/tests/e2e/compile-builtins.test.js +1 -1
  145. package/dist/tests/e2e/compile-modules.test.js +7 -0
  146. package/dist/tests/e2e/compile-modules.test.js.map +1 -1
  147. package/dist/tests/e2e/date-parse.test.d.ts +8 -0
  148. package/dist/tests/e2e/date-parse.test.js +38 -0
  149. package/dist/tests/e2e/date-parse.test.js.map +1 -0
  150. package/dist/tests/e2e/default-anonymous-exports.test.d.ts +7 -0
  151. package/dist/tests/e2e/default-anonymous-exports.test.js +23 -0
  152. package/dist/tests/e2e/default-anonymous-exports.test.js.map +1 -0
  153. package/dist/tests/e2e/globals-microtask.test.d.ts +9 -0
  154. package/dist/tests/e2e/globals-microtask.test.js +37 -0
  155. package/dist/tests/e2e/globals-microtask.test.js.map +1 -0
  156. package/dist/tests/e2e/gui-media.test.js +8 -1
  157. package/dist/tests/e2e/gui-media.test.js.map +1 -1
  158. package/dist/tests/e2e/inspect-builtins.test.d.ts +10 -0
  159. package/dist/tests/e2e/inspect-builtins.test.js +43 -0
  160. package/dist/tests/e2e/inspect-builtins.test.js.map +1 -0
  161. package/dist/tests/e2e/json-builtin-objects.test.d.ts +9 -0
  162. package/dist/tests/e2e/json-builtin-objects.test.js +23 -0
  163. package/dist/tests/e2e/json-builtin-objects.test.js.map +1 -0
  164. package/dist/tests/e2e/json-circular.test.d.ts +6 -0
  165. package/dist/tests/e2e/json-circular.test.js +43 -0
  166. package/dist/tests/e2e/json-circular.test.js.map +1 -0
  167. package/dist/tests/e2e/json-parse-reviver.test.d.ts +6 -0
  168. package/dist/tests/e2e/json-parse-reviver.test.js +29 -0
  169. package/dist/tests/e2e/json-parse-reviver.test.js.map +1 -0
  170. package/dist/tests/e2e/json-stringify-replacer.test.d.ts +6 -0
  171. package/dist/tests/e2e/json-stringify-replacer.test.js +27 -0
  172. package/dist/tests/e2e/json-stringify-replacer.test.js.map +1 -0
  173. package/dist/tests/e2e/json-stringify-space.test.d.ts +6 -0
  174. package/dist/tests/e2e/json-stringify-space.test.js +23 -0
  175. package/dist/tests/e2e/json-stringify-space.test.js.map +1 -0
  176. package/dist/tests/e2e/method-dispatch-errors.test.d.ts +9 -0
  177. package/dist/tests/e2e/method-dispatch-errors.test.js +38 -0
  178. package/dist/tests/e2e/method-dispatch-errors.test.js.map +1 -0
  179. package/dist/tests/e2e/native-extensions.test.js +1 -1
  180. package/dist/tests/e2e/native-extensions.test.js.map +1 -1
  181. package/dist/tests/e2e/promise-with-resolvers.test.d.ts +5 -0
  182. package/dist/tests/e2e/promise-with-resolvers.test.js +20 -0
  183. package/dist/tests/e2e/promise-with-resolvers.test.js.map +1 -0
  184. package/dist/tests/e2e/property-descriptors.test.d.ts +5 -0
  185. package/dist/tests/e2e/property-descriptors.test.js +25 -0
  186. package/dist/tests/e2e/property-descriptors.test.js.map +1 -0
  187. package/dist/tests/e2e/property-ic.test.d.ts +1 -0
  188. package/dist/tests/e2e/property-ic.test.js +55 -0
  189. package/dist/tests/e2e/property-ic.test.js.map +1 -0
  190. package/dist/tests/e2e/runtime-coverage-globals.test.js +46 -0
  191. package/dist/tests/e2e/runtime-coverage-globals.test.js.map +1 -1
  192. package/dist/tests/e2e/runtime-errors.test.d.ts +10 -0
  193. package/dist/tests/e2e/runtime-errors.test.js +52 -0
  194. package/dist/tests/e2e/runtime-errors.test.js.map +1 -0
  195. package/dist/tests/e2e/string-utf16.test.d.ts +6 -0
  196. package/dist/tests/e2e/string-utf16.test.js +133 -0
  197. package/dist/tests/e2e/string-utf16.test.js.map +1 -0
  198. package/dist/tests/e2e/structured-clone.test.d.ts +6 -0
  199. package/dist/tests/e2e/structured-clone.test.js +49 -0
  200. package/dist/tests/e2e/structured-clone.test.js.map +1 -0
  201. package/dist/tests/e2e/text-codec.test.d.ts +6 -0
  202. package/dist/tests/e2e/text-codec.test.js +24 -0
  203. package/dist/tests/e2e/text-codec.test.js.map +1 -0
  204. package/dist/tests/e2e/typed-array-views.test.d.ts +6 -0
  205. package/dist/tests/e2e/typed-array-views.test.js +39 -0
  206. package/dist/tests/e2e/typed-array-views.test.js.map +1 -0
  207. package/dist/tests/e2e/url-search-params.test.d.ts +5 -0
  208. package/dist/tests/e2e/url-search-params.test.js +30 -0
  209. package/dist/tests/e2e/url-search-params.test.js.map +1 -0
  210. package/dist/tests/e2e/weak-collections.test.d.ts +1 -0
  211. package/dist/tests/e2e/weak-collections.test.js +88 -0
  212. package/dist/tests/e2e/weak-collections.test.js.map +1 -0
  213. package/dist/tests/parser/declarations.test.js +12 -0
  214. package/dist/tests/parser/declarations.test.js.map +1 -1
  215. package/dist/tests/parser/module-syntax.test.js +9 -0
  216. package/dist/tests/parser/module-syntax.test.js.map +1 -1
  217. package/dist/tests/parser/parser.test.js +7 -0
  218. package/dist/tests/parser/parser.test.js.map +1 -1
  219. package/dist/tests/version.test.js +5 -1
  220. package/dist/tests/version.test.js.map +1 -1
  221. package/doc/ai/README.md +4 -3
  222. package/doc/ai/cli.md +41 -0
  223. package/doc/ai/contributing.md +26 -21
  224. package/doc/ai/extensions.md +12 -9
  225. package/doc/ai/language-support.md +26 -19
  226. package/doc/ai/troubleshooting.md +15 -12
  227. package/doc/ai/zh-CN/README.md +3 -2
  228. package/doc/ai/zh-CN/cli.md +35 -0
  229. package/doc/ai/zh-CN/contributing.md +19 -18
  230. package/doc/ai/zh-CN/extensions.md +10 -7
  231. package/doc/ai/zh-CN/language-support.md +26 -20
  232. package/doc/ai/zh-CN/troubleshooting.md +12 -10
  233. package/doc/gui/build.md +13 -4
  234. package/doc/gui/known-issues.md +9 -5
  235. package/doc/gui/rendering.md +3 -1
  236. package/doc/gui.md +4 -3
  237. package/doc/icon.md +5 -4
  238. package/doc/implemented/async.md +38 -0
  239. package/doc/implemented/binder.md +13 -0
  240. package/doc/implemented/cli.md +47 -0
  241. package/doc/implemented/codegen.md +33 -0
  242. package/doc/implemented/collections.md +26 -0
  243. package/doc/implemented/driver.md +19 -0
  244. package/doc/implemented/extensions.md +19 -0
  245. package/doc/implemented/fetch.md +12 -0
  246. package/doc/implemented/lexer.md +23 -0
  247. package/doc/implemented/modules.md +28 -0
  248. package/doc/implemented/node/assert.md +17 -0
  249. package/doc/implemented/node/buffer.md +29 -0
  250. package/doc/implemented/node/child-process.md +29 -0
  251. package/doc/implemented/node/crypto.md +9 -0
  252. package/doc/implemented/node/dgram.md +15 -0
  253. package/doc/implemented/node/events.md +37 -0
  254. package/doc/implemented/node/fs-promises.md +38 -0
  255. package/doc/implemented/node/fs.md +112 -0
  256. package/doc/implemented/node/http.md +21 -0
  257. package/doc/implemented/node/net.md +17 -0
  258. package/doc/implemented/node/os.md +22 -0
  259. package/doc/implemented/node/path.md +33 -0
  260. package/doc/implemented/node/process.md +23 -0
  261. package/doc/implemented/node/querystring.md +20 -0
  262. package/doc/implemented/node/stream-promises.md +8 -0
  263. package/doc/implemented/node/stream.md +19 -0
  264. package/doc/implemented/node/test.md +10 -0
  265. package/doc/implemented/node/url.md +8 -0
  266. package/doc/implemented/node/util.md +25 -0
  267. package/doc/implemented/node/worker-threads.md +10 -0
  268. package/doc/implemented/node/zlib.md +8 -0
  269. package/doc/implemented/node.md +48 -0
  270. package/doc/implemented/operators.md +38 -0
  271. package/doc/implemented/parser.md +58 -0
  272. package/doc/implemented/pipeline.md +28 -0
  273. package/doc/implemented/runtime-core.md +32 -0
  274. package/doc/implemented/stdlib.md +78 -0
  275. package/doc/implemented/strings.md +27 -0
  276. package/doc/implemented/tests.md +10 -0
  277. package/doc/implemented/typed-arrays.md +26 -0
  278. package/doc/implemented/value-model.md +18 -0
  279. package/doc/implemented.md +54 -352
  280. package/doc/node-implemented.md +3 -585
  281. package/doc/node-unimplemented.md +3 -164
  282. package/doc/requirements.md +23 -8
  283. package/doc/unimplemented/classes.md +22 -0
  284. package/doc/unimplemented/deviations.md +27 -0
  285. package/doc/unimplemented/expressions.md +26 -0
  286. package/doc/unimplemented/functions.md +21 -0
  287. package/doc/unimplemented/modules.md +22 -0
  288. package/doc/unimplemented/node/async.md +17 -0
  289. package/doc/unimplemented/node/bun.md +9 -0
  290. package/doc/unimplemented/node/fs-promises.md +16 -0
  291. package/doc/unimplemented/node/fs.md +31 -0
  292. package/doc/unimplemented/node/globals.md +23 -0
  293. package/doc/unimplemented/node/modules.md +21 -0
  294. package/doc/unimplemented/node.md +21 -0
  295. package/doc/unimplemented/statements.md +18 -0
  296. package/doc/unimplemented/stdlib.md +54 -0
  297. package/doc/unimplemented/toolchain.md +14 -0
  298. package/doc/unimplemented/types.md +12 -0
  299. package/doc/unimplemented.md +18 -274
  300. package/doc/xbintsc.config.schema.json +12 -0
  301. package/doc/zh-CN/gui/build.md +11 -3
  302. package/doc/zh-CN/gui/known-issues.md +9 -4
  303. package/doc/zh-CN/gui/rendering.md +2 -1
  304. package/doc/zh-CN/gui.md +3 -2
  305. package/doc/zh-CN/icon.md +5 -4
  306. package/doc/zh-CN/implemented/async.md +38 -0
  307. package/doc/zh-CN/implemented/binder.md +13 -0
  308. package/doc/zh-CN/implemented/cli.md +46 -0
  309. package/doc/zh-CN/implemented/codegen.md +33 -0
  310. package/doc/zh-CN/implemented/collections.md +26 -0
  311. package/doc/zh-CN/implemented/driver.md +19 -0
  312. package/doc/zh-CN/implemented/extensions.md +19 -0
  313. package/doc/zh-CN/implemented/fetch.md +12 -0
  314. package/doc/zh-CN/implemented/lexer.md +23 -0
  315. package/doc/zh-CN/implemented/modules.md +28 -0
  316. package/doc/zh-CN/implemented/node/assert.md +17 -0
  317. package/doc/zh-CN/implemented/node/buffer.md +25 -0
  318. package/doc/zh-CN/implemented/node/child-process.md +27 -0
  319. package/doc/zh-CN/implemented/node/crypto.md +9 -0
  320. package/doc/zh-CN/implemented/node/dgram.md +15 -0
  321. package/doc/zh-CN/implemented/node/events.md +36 -0
  322. package/doc/zh-CN/implemented/node/fs-promises.md +27 -0
  323. package/doc/zh-CN/implemented/node/fs.md +105 -0
  324. package/doc/zh-CN/implemented/node/http.md +17 -0
  325. package/doc/zh-CN/implemented/node/net.md +17 -0
  326. package/doc/zh-CN/implemented/node/os.md +21 -0
  327. package/doc/zh-CN/implemented/node/path.md +26 -0
  328. package/doc/zh-CN/implemented/node/process.md +23 -0
  329. package/doc/zh-CN/implemented/node/querystring.md +20 -0
  330. package/doc/zh-CN/implemented/node/stream-promises.md +8 -0
  331. package/doc/zh-CN/implemented/node/stream.md +15 -0
  332. package/doc/zh-CN/implemented/node/test.md +10 -0
  333. package/doc/zh-CN/implemented/node/url.md +8 -0
  334. package/doc/zh-CN/implemented/node/util.md +25 -0
  335. package/doc/zh-CN/implemented/node/worker-threads.md +9 -0
  336. package/doc/zh-CN/implemented/node/zlib.md +8 -0
  337. package/doc/zh-CN/implemented/node.md +45 -0
  338. package/doc/zh-CN/implemented/operators.md +38 -0
  339. package/doc/zh-CN/implemented/parser.md +58 -0
  340. package/doc/zh-CN/implemented/pipeline.md +25 -0
  341. package/doc/zh-CN/implemented/runtime-core.md +31 -0
  342. package/doc/zh-CN/implemented/stdlib.md +76 -0
  343. package/doc/zh-CN/implemented/strings.md +27 -0
  344. package/doc/zh-CN/implemented/tests.md +10 -0
  345. package/doc/zh-CN/implemented/typed-arrays.md +26 -0
  346. package/doc/zh-CN/implemented/value-model.md +18 -0
  347. package/doc/zh-CN/implemented.md +50 -347
  348. package/doc/zh-CN/node-implemented.md +4 -531
  349. package/doc/zh-CN/node-unimplemented.md +4 -139
  350. package/doc/zh-CN/plan-require-node-modules.md +4 -4
  351. package/doc/zh-CN/requirements.md +20 -6
  352. package/doc/zh-CN/unimplemented/classes.md +22 -0
  353. package/doc/zh-CN/unimplemented/deviations.md +24 -0
  354. package/doc/zh-CN/unimplemented/expressions.md +24 -0
  355. package/doc/zh-CN/unimplemented/functions.md +21 -0
  356. package/doc/zh-CN/unimplemented/modules.md +19 -0
  357. package/doc/zh-CN/unimplemented/node/async.md +17 -0
  358. package/doc/zh-CN/unimplemented/node/bun.md +8 -0
  359. package/doc/zh-CN/unimplemented/node/fs-promises.md +12 -0
  360. package/doc/zh-CN/unimplemented/node/fs.md +24 -0
  361. package/doc/zh-CN/unimplemented/node/globals.md +14 -0
  362. package/doc/zh-CN/unimplemented/node/modules.md +15 -0
  363. package/doc/zh-CN/unimplemented/node.md +18 -0
  364. package/doc/zh-CN/unimplemented/statements.md +15 -0
  365. package/doc/zh-CN/unimplemented/stdlib.md +54 -0
  366. package/doc/zh-CN/unimplemented/toolchain.md +14 -0
  367. package/doc/zh-CN/unimplemented/types.md +11 -0
  368. package/doc/zh-CN/unimplemented.md +14 -236
  369. package/llms.txt +32 -4
  370. package/package.json +1 -1
  371. package/runtime/ext_gui/renderer_shaders.h +2 -2
  372. package/runtime/ext_gui/stb_image.h +1 -17
  373. package/runtime/ext_node/child_process/child_process.c +173 -73
  374. package/runtime/rt.h +47 -0
  375. package/runtime/rt_internal.h +205 -10
  376. package/runtime/xt_alloc.c +49 -7
  377. package/runtime/xt_array_buffer.c +284 -0
  378. package/runtime/xt_async.c +222 -0
  379. package/runtime/xt_bigint/helpers.inc +3 -3
  380. package/runtime/xt_builtins.c +59 -51
  381. package/runtime/xt_constructors.c +399 -0
  382. package/runtime/xt_containers/access.inc +195 -14
  383. package/runtime/xt_containers/arrays.inc +26 -2
  384. package/runtime/xt_containers/objects.inc +226 -5
  385. package/runtime/xt_containers/shapes.inc +71 -0
  386. package/runtime/xt_containers.c +1 -0
  387. package/runtime/xt_coroutine.c +229 -0
  388. package/runtime/xt_generator.c +325 -167
  389. package/runtime/xt_io/inspect.inc +147 -2
  390. package/runtime/xt_loop.c +35 -4
  391. package/runtime/xt_performance.c +37 -0
  392. package/runtime/xt_promise.c +125 -18
  393. package/runtime/xt_stdlib/arrays.inc +1 -1
  394. package/runtime/xt_stdlib/dispatch.inc +64 -13
  395. package/runtime/xt_stdlib/strings.inc +74 -17
  396. package/runtime/xt_stdlib2/array-statics.inc +28 -3
  397. package/runtime/xt_stdlib2/arrays.inc +5 -3
  398. package/runtime/xt_stdlib2/container.inc +5 -0
  399. package/runtime/xt_stdlib2/date.inc +111 -3
  400. package/runtime/xt_stdlib2/error.inc +35 -0
  401. package/runtime/xt_stdlib2/json.inc +353 -33
  402. package/runtime/xt_stdlib2/number-string-statics.inc +24 -15
  403. package/runtime/xt_stdlib2/objects.inc +123 -1
  404. package/runtime/xt_stdlib2/regexp-match.inc +2 -2
  405. package/runtime/xt_stdlib2/set.inc +7 -1
  406. package/runtime/xt_stdlib2/strings.inc +70 -40
  407. package/runtime/xt_structured_clone.c +159 -0
  408. package/runtime/xt_symbol.c +2 -2
  409. package/runtime/xt_text_codec.c +69 -0
  410. package/runtime/xt_typed_array/construction.inc +78 -7
  411. package/runtime/xt_typed_array/elements.inc +159 -0
  412. package/runtime/xt_typed_array/methods.inc +21 -5
  413. package/runtime/xt_typed_array.c +11 -10
  414. package/runtime/xt_url.c +375 -0
  415. package/runtime/xt_values/arithmetic.inc +2 -2
  416. package/runtime/xt_values/constructors.inc +8 -0
  417. package/runtime/xt_values/conversions.inc +1 -1
  418. package/runtime/xt_values/strings.inc +19 -3
  419. package/runtime/xt_values/utf16.inc +340 -0
  420. package/runtime/xt_values.c +1 -0
  421. package/runtime/xt_weak.c +281 -0
  422. package/scripts/build-gui.ts +133 -60
  423. package/scripts/check-version.ts +3 -3
  424. package/src/binder/declarations.ts +14 -3
  425. package/src/cli/hints.ts +8 -1
  426. package/src/cli/main.ts +119 -18
  427. package/src/cli/watch.ts +101 -0
  428. package/src/codegen/generator/calls/access.ts +17 -4
  429. package/src/codegen/generator/calls/closures.ts +12 -1
  430. package/src/codegen/generator/calls/invocation.ts +4 -3
  431. package/src/codegen/generator/context.ts +23 -3
  432. package/src/codegen/generator/expressions/operators.ts +27 -13
  433. package/src/codegen/generator/expressions/primary.ts +10 -1
  434. package/src/codegen/generator/module.ts +10 -19
  435. package/src/codegen/generator/numeric.ts +85 -11
  436. package/src/codegen/generator/state.ts +27 -0
  437. package/src/codegen/generator/statements/control-flow.ts +2 -6
  438. package/src/codegen/generator/statements/loops.ts +50 -16
  439. package/src/codegen/generator/tables.ts +110 -3
  440. package/src/diagnostics/diagnostic.ts +23 -3
  441. package/src/driver/app-artifacts.ts +77 -0
  442. package/src/driver/build-key.ts +55 -0
  443. package/src/driver/bundler/graph.ts +63 -13
  444. package/src/driver/bundler/merge.ts +4 -1
  445. package/src/driver/compiler.ts +93 -324
  446. package/src/driver/config.ts +11 -0
  447. package/src/driver/frontend.ts +120 -0
  448. package/src/driver/index.ts +0 -1
  449. package/src/driver/options.ts +70 -0
  450. package/src/driver/runtime-objects.ts +133 -0
  451. package/src/driver/toolchain-provider.ts +4 -0
  452. package/src/driver/toolchain.ts +154 -10
  453. package/src/driver/version.ts +12 -0
  454. package/src/driver/win-icon.ts +36 -36
  455. package/src/parser/declarations/classes.ts +4 -0
  456. package/src/parser/declarations/functions.ts +12 -1
  457. package/src/parser/modules.ts +8 -4
  458. package/src/parser/parser.ts +28 -0
@@ -1,7 +1,7 @@
1
1
  # xbintsc Unimplemented Syntax and Features
2
2
 
3
- This document was compiled by checking the source (`src/`, `runtime/`) and tests
4
- (`tests/`) file by file, and lists the syntax and features that are
3
+ This documentation was compiled by checking the source (`src/`, `runtime/`) and
4
+ tests (`tests/`) file by file, and lists the syntax and features that are
5
5
  **currently unimplemented / only partially implemented / semantically different
6
6
  from the standard**.
7
7
 
@@ -11,277 +11,21 @@ Criteria (ordered by severity):
11
11
  2. **Parsed but codegen errors**: the AST / binding can be built, but `codegen` reports `UnsupportedFeature`.
12
12
  3. **Parsed and compilable, but semantics are missing or differ**: a binary is produced, but the runtime result does not match ECMAScript / TypeScript semantics.
13
13
 
14
- > Language: **English** | [简体中文](./zh-CN/unimplemented.md)
15
-
16
- > Recently completed: **ECMAScript semantics + differential testing** — number
17
- > formatting / coercion (`toFixed` / `toPrecision` / `toExponential`, hex / octal
18
- > / binary parsing, full `+` and relational `ToPrimitive`), `JSON.stringify`
19
- > omission rules, default `Array.prototype.sort` (stable, string order),
20
- > insertion-ordered integer keys, whole-chain optional chaining, `finally` on
21
- > early `return` / `break` / `continue`, object-key insertion order, UTF-8-aware
22
- > `console` inspection with circular references, `Array.prototype.splice`,
23
- > `String.prototype.match` / `lastIndexOf` / `split` with limit, RegExp capture
24
- > groups (`exec` / `match` / `replace` / `split` / `search`), immutable array
25
- > methods (`toReversed` / `toSorted` / `toSpliced` / `with`),
26
- > `Object.getOwnPropertyNames` / `groupBy`, global URI functions, labeled
27
- > statements, `#private` fields / methods / statics, tagged templates (with raw
28
- > strings and `String.raw`), and `import * as ns` for relative modules. The test
29
- > suite now includes a **differential harness** that runs every case through both
30
- > xbintsc and Node and compares output byte-for-byte.
31
-
32
- > Also completed: `class` declarations / class expressions, `new` / `this`,
33
- > inheritance `extends` / `super`, `instanceof`, methods / static members /
34
- > instance fields / getters and setters / constructor parameter properties,
35
- > `async` / `await` + `Promise`, multi-file `import` / `export` bundling
36
- > (including `.js` → `.ts` specifier resolution and namespace imports), `Map` /
37
- > `Set` / `Date` / `RegExp` / `JSON` / `BigInt`, destructuring bindings and
38
- > parameters, `enum` / `const enum`, and **self-hosting** (the emitted LLVM IR
39
- > reaches a byte-identical fixpoint).
40
-
41
- ---
42
-
43
- ## 1. Unimplemented at the statement level
44
-
45
- ### 1.1 Parsed but codegen reports `UnsupportedFeature`
46
-
47
- | Syntax | Status | Notes |
48
- | --- | --- | --- |
49
- | `namespace` / `module` declarations | parse ✓, codegen ✗ | → "does not yet support this statement (module declaration)" |
50
-
51
- > Labeled statements (`label: statement`, `break label`, `continue label`) are
52
- > implemented, including labels on non-loop statements.
53
-
54
- ### 1.2 Not supported by the parser (immediate syntax error)
55
-
56
- None known at the statement level. The parser is intentionally permissive and
57
- accepts most TypeScript statement syntax; unsupported forms are rejected later
58
- by code generation (see above).
59
-
60
- ---
61
-
62
- ## 2. Unimplemented at the expression level
63
-
64
- ### 2.1 Parsed but codegen reports `UnsupportedFeature`
65
-
66
- None — generators are implemented.
67
-
68
- > Tagged templates are implemented, including raw strings and `String.raw`.
69
- > Generators (`function*`, `yield`, `yield*`) are implemented with stackful
70
- > coroutines, including `next`/`throw`/`return`, `for...of`, spread and
71
- > delegation. `import.meta` exposes `url`, `dirname` and `filename`, resolved
72
- > from the running executable's path. `async function*` is **rejected with
73
- > `UnsupportedFeature`** instead of silently producing a synchronous generator.
74
-
75
- ### 2.2 Not supported by the parser
76
-
77
- None known at the expression level.
78
-
79
- ### 2.3 Unimplemented operators
80
-
81
- | Operator | Status | Notes |
82
- | --- | --- | --- |
83
- | `new.target` | ✗ | parsed, then rejected with `UnsupportedFeature` (no `new.target` semantics) |
84
- | `typeof` / `void` / `in` / `delete` / `instanceof` | ✓ | mapped to runtime helpers (`xt_typeof`, `xt_in`, `xt_delete`, `xt_instance_of`) |
85
-
86
- ---
87
-
88
- ## 3. Unimplemented standard library
89
-
90
- ### 3.1 Implemented (summary)
91
-
92
- - Arrays: `push` `pop` `shift` `unshift` `join` `slice` `splice` `indexOf` `lastIndexOf` `includes` `concat` `reverse` `forEach` `map` `filter` `reduce` `reduceRight` `find` `findIndex` `findLast` `findLastIndex` `some` `every` `sort` `flat` `flatMap` `fill` `copyWithin` `at` `keys` `values` `entries` and the immutable `toReversed` / `toSorted` / `toSpliced` / `with`
93
- - Strings: `charAt` `charCodeAt` `codePointAt` `indexOf` `lastIndexOf` `includes` `startsWith` `endsWith` `slice` `substring` `substr` `split` `match` `replace` `replaceAll` `search` `toUpperCase` `toLowerCase` `trim` `trimStart` `trimEnd` `padStart` `padEnd` `repeat` `concat` `at` `localeCompare` `valueOf`
94
- - `Math`: full set of functions and constants
95
- - `Object.keys` / `values` / `entries` / `assign` / `getOwnPropertyNames` / `groupBy`, object spread `{...obj}`
96
- - Global functions: `parseInt` `parseFloat` `isNaN` `isFinite` `Number` `String` `Boolean` `encodeURI` `decodeURI` `encodeURIComponent` `decodeURIComponent`
97
- - `console.log` / `info` / `warn` / `error` / `dir` / `trace` / `assert` / `count` / `group` / `table` / `time`
98
-
99
- ### 3.2 Completed
100
-
101
- - `JSON.parse` / `JSON.stringify`
102
- - `Date`, `RegExp` (POSIX ERE subset with capture groups), `Map`, `Set`, `Promise`, `BigInt`
103
- - `Array` statics (`isArray/of/from`), `Object` statics, `Number` statics, `String` statics (`fromCharCode` / `fromCodePoint` / `raw`)
104
- - `Error` family (`Error`, `TypeError`, `RangeError`, `SyntaxError`, `ReferenceError`, `EvalError`, `URIError`, `AggregateError`): `new`, `instanceof`, `extends`, `String(err)` / `err.toString()` and `.stack`
105
-
106
- ### 3.3 Still unimplemented
107
-
108
- | Category | Status |
109
- | --- | --- |
110
- | `Symbol` constructor and symbol primitives | ✓ `Symbol(description)`, well-known symbols, `Symbol.for` / `Symbol.keyFor`, symbol property keys and `Object.getOwnPropertySymbols` |
111
- | `String.prototype.normalize` | ✗ not implemented |
112
- | `structuredClone` | ✗ not implemented |
113
- | Built-in error subclasses (`TypeError`, `RangeError`, …) | ✓ first-class constructors and prototypes; `instanceof Error` holds for the whole family |
114
- | `AggregateError` constructor | ✓ `new AggregateError(errors, message)`; `Promise.any` now rejects with one |
115
- | Iterator protocol / `Symbol.iterator` / custom `for...of` iterables | ✓ arrays, strings, `Map`, `Set`, generators and any object exposing `[Symbol.iterator]()` are iterable in `for...of` / spread |
116
- | Generators (`function*`, `yield`, `yield*`, `next`/`throw`/`return`) | ✓ implemented with stackful coroutines; `for...of`, spread and delegation supported. `return()` completes without running `finally` |
117
- | Timers | ✓ `setTimeout` / `clearTimeout` / `setInterval` / `clearInterval` on the core event loop (numeric ids, no `Timeout` object; no `setImmediate` / `queueMicrotask`) |
118
- | I/O / process and other host APIs | only via extensions (e.g. Node `fs`) |
119
-
120
- ### 3.4 Typed arrays
121
-
122
- Implemented: `Uint8Array`, `Int8Array`, `Uint8ClampedArray`, `Uint16Array`,
123
- `Int16Array`, `Uint32Array`, `Int32Array`, `Float32Array`, `Float64Array` with
124
- `new X(n)` / `new X(arrayLike)`, `X.from` / `X.of`, `BYTES_PER_ELEMENT`, coerced
125
- element writes, and `fill` / `set` / `slice` / `subarray` / `join` / `toString` /
126
- `indexOf` / `lastIndexOf` / `includes` / `forEach` / `map` / `filter` / `every` /
127
- `some` / `find` / `findIndex` / `reduce` / `reverse` / `sort` / `copyWithin` /
128
- `at` / `keys` / `values` / `entries`. Known divergences:
129
-
130
- | Feature | Status |
131
- | --- | --- |
132
- | `subarray` | ~ returns a copy, not a view over a shared buffer |
133
- | `keys` / `values` / `entries` | ~ return arrays, not iterator objects |
134
- | `ArrayBuffer` / `DataView` / `.buffer` / `.byteOffset` semantics | ✗ no backing buffer type; `.byteOffset` is always 0 |
135
- | `BigInt64Array` / `BigUint64Array` | ✗ not implemented |
136
- | `instanceof` built-in constructors | ✓ `instanceof Array` / `Object` / `Map` / `Set` / `Date` / `RegExp` / `Promise` / `Error` family / typed arrays are recognised by name; the constructors are still not first-class values (`const A = Array` fails) |
137
- | Typed-array views over a `Buffer` / `ArrayBuffer` | ✗ constructors copy from a length / array-like / typed array only |
138
-
139
- ---
14
+ The pages are split by area so a limitation for one feature is recorded in one
15
+ small file. When a limitation is lifted, move the entry to the matching page
16
+ under [implemented](./implemented.md); git history records when it changed.
140
17
 
141
- ## 4. Module system
142
-
143
- | Feature | Status |
144
- | --- | --- |
145
- | Multi-file / module resolution and linking | ✓ driver-layer AST bundling (`src/driver/modules.ts`): parse each module, rename top-level symbols by module prefix, rewrite references, merge into one file and rebind |
146
- | Named import/export | ✓ `import { a, b as c }` / `export { a as b }` / `export const/let/var/function/class` |
147
- | Default import/export | ✓ `export default` / `import d from` |
148
- | Re-export `export { x } from` / `export * from` | ✓ (`export *` copies the dependency's exports) |
149
- | Namespace import `import * as ns` | ✓ lowered to a synthetic object literal holding every export |
150
- | Circular dependencies | ✗ errors out (no circular initialization semantics) |
151
- | Live bindings | ✗ namespace objects and imported bindings are snapshots at module-evaluation time |
152
- | ESM `node_modules` packages | ✓ bare specifiers resolve up the tree through `exports` / `module` / `main`, including scoped packages and subpaths; the package sources are bundled like relative modules |
153
- | CommonJS `require` / `module.exports` | ✓ inside `node_modules` only: the bundler gives each CommonJS package a synthetic `module` / `exports` pair, lowers `require("x")` to the bundled dependency's exports, and hoists external/built-in `require`s into ESM imports. `require()` in user code (outside `node_modules`) is still rejected with a diagnostic pointing at the ESM `import` form. |
154
-
155
- > Extension modules (such as `fs`) are importable by bare or `node:`-prefixed
156
- > specifier — `import { readFileSync } from "fs"` / `import path from "path"` —
157
- > and resolve to their runtime entries (named, default and namespace forms).
158
- > Relative modules and ESM packages under `node_modules` are bundled at the driver layer.
159
-
160
- ---
161
-
162
- ## 5. Unimplemented function features (or missing semantics)
163
-
164
- | Feature | Parse | Semantics |
165
- | --- | --- | --- |
166
- | Default parameters `function f(a = 5)` | ✓ | ✓ implemented |
167
- | Rest parameters `function f(...args)` | ✓ | ✓ implemented |
168
- | Spread in call arguments `f(...args)` | ✓ | ✓ implemented |
169
- | Destructuring parameters / bindings | ✓ | ✓ implemented |
170
- | `arguments` object | ✓ (implicit) | ✓ implemented (arrow functions get their own parameters, not the outer function's `arguments`, unlike JS) |
171
- | `this` binding / method call semantics | ✓ | ✓ implemented (`this` is threaded as the first ABI parameter; arrow functions inherit lexically) |
172
- | `async` / `await` / Promise | ✓ | ✓ implemented (synchronous microtask model) |
173
- | `new.target` | ✗ | parsed, then rejected with `UnsupportedFeature` (no `new.target` semantics) |
174
- | Generators / iterators / `yield` | ✓ implemented | `function*`, `yield`, `yield*`, `.next/.throw/.return`; `async` generators are rejected with `UnsupportedFeature` |
175
- | Closure `arity` | — | `xt_closure_arity` is always -1, never filled in |
176
- | `fn.call` / `fn.apply` / `fn.bind` | ✓ | ✓ implemented (the bound closure does not track partial-argument `length`) |
177
- | `fn.name` / `fn.length` | ✓ | ✓ implemented (inferred from the declaration / assignment / property key; bound functions use `"bound ..."` and adjusted arity) |
178
- | First-class built-in methods (`typeof arr.map`, `const f = arr.push`, `obj.method?.()`) | ✓ | ✓ implemented as *unbound* method values: reading `arr.map` yields a function, `arr.map?.(cb)` and `obj.method?.()` bind the receiver as `this`, and a detached call (`const f = arr.map; f(cb)`) throws exactly like JavaScript. Method `name`/`length` are exposed |
179
- | `fn.toString()` | ~ | returns a native-style placeholder (`function name() { [native code] }`) instead of the original source text |
180
-
181
- ---
182
-
183
- ## 6. Classes and object orientation
184
-
185
- | Feature | Status |
186
- | --- | --- |
187
- | `class` declarations / class expressions | ✓ implemented |
188
- | `constructor` | ✓ |
189
- | Instance fields / property declarations | ✓ |
190
- | Methods | ✓ |
191
- | `static` fields / methods | ✓ |
192
- | Inheritance `extends` / `super` | ✓ (single level correct; `super` takes the prototype of `this`'s prototype — see section 8) |
193
- | Prototype chain / method lookup | ✓ |
194
- | `instanceof` | ✓ |
195
- | `new` / instantiation | ✓ |
196
- | `get` / `set` accessors | ✓ implemented |
197
- | Parameter properties `constructor(public x: T)` | ✓ implemented |
198
- | Private fields `#x` | ✓ implemented (stored under a literal `#x` key; no accessibility enforcement) |
199
- | `enum` / `const enum` | ✓ implemented (forward + reverse mapping) |
200
- | `private` / `protected` / `public` / `readonly` modifiers | ✗ no access control (erased) |
201
- | `abstract` / `implements` | ✗ (erased) |
202
- | Parent/child `#x` name collisions | ✗ may alias (same literal key) |
203
-
204
- ---
205
-
206
- ## 7. Unimplemented type system (parsed only, not checked)
207
-
208
- Type syntax is parsed into the AST and then **erased entirely** during binding /
209
- code generation; no type checking is performed:
210
-
211
- - Type annotations, return types, type parameters, type aliases, interfaces, generic constraints, etc.: parse ✓, check ✗.
212
- - Checker diagnostic codes (`TypeMismatch` `NotCallable` `PropertyNotFound` `ArgumentCountMismatch`) are defined but **unused**.
213
- - `as` / `satisfies` / non-null assertion `!`: erased directly, no assertion semantics.
214
- - Generics: no runtime instantiation; type parameters are ignored.
215
- - Optional chaining `?.` type narrowing: none (runtime short-circuit is implemented, but there is no type-level narrowing).
216
-
217
- ---
218
-
219
- ## 8. Runtime / semantics differing from the standard (known deviations)
220
-
221
- These features **compile and run**, but the result does not fully match ECMAScript:
222
-
223
- | Item | Deviation |
224
- | --- | --- |
225
- | String `length` | Counted in UTF-8 bytes, not UTF-16 code units (`"\u00e9".length` reports 1 instead of 2; `"\u{1F600}".length` reports 4 instead of 2; `codePointAt` likewise differs) |
226
- | `Object.getPrototypeOf({})` | Returns `undefined` instead of the `Object.prototype` object |
227
- | Global RegExp `lastIndex` | `test` / `exec` do not advance or honour a caller-set `lastIndex` for `/g` / `/y` regexes |
228
- | String `normalize` / `structuredClone` | Not implemented |
229
- | First-class built-in methods | Implemented as unbound method values (see section 5); `fn.toString()` returns a placeholder rather than source text |
230
- | `for...in` | Enumerates own keys of objects / arrays / strings; does not include prototype-chain properties |
231
- | Array out-of-bounds / sparse | Out-of-bounds access returns `undefined`; assigning `arr.length` truncates / extends, but sparse holes are not tracked distinctly |
232
- | Memory management | Non-moving mark-sweep collector behind `xt_alloc`: explicit roots, subsystem root providers and a conservative C-stack scan. Single-threaded and stop-the-world; no moving/compaction or generational mode |
233
- | Function `arity` / argument count | No argument count validation; `fn.length` reports the declared arity but calls are never checked against it |
234
- | `async` / `await` | **Synchronous microtask model**: `await` on an already-settled promise continues synchronously. Timers and sockets run on the event loop only after the program body, so a promise settled from a timer callback cannot be awaited |
235
- | `super` | `super.x` / `super(...)` takes the prototype of `this`'s prototype; single-level inheritance is correct, but depth > 1 may be inaccurate |
236
- | `Error.stack` | Function-level frames only: each frame is `at name (file:line)` with the function's declaration line (updated to the construction line for the innermost frame); no column numbers and no frames for generator bodies (they switch stacks) |
237
- | Module live bindings | Namespace imports and imported bindings are snapshots (see section 4) |
238
- | `import.meta` | ✓ `import.meta.url` / `.dirname` / `.filename`, resolved from the executable path |
239
-
240
- > Number formatting, loose equality, `+` / relational `ToPrimitive`, whole-chain
241
- > optional chaining, `finally` on early exit and object-key ordering have all
242
- > been brought in line with Node and are covered by the differential tests, so
243
- > they are no longer listed as deviations.
244
-
245
- ---
246
-
247
- ## 9. Unimplemented toolchain / platform / engineering
248
-
249
- | Item | Status |
250
- | --- | --- |
251
- | GC (garbage collection) | ✓ non-moving mark-sweep in `xt_alloc.c`, armed by a live-heap threshold (`XT_GC_THRESHOLD` pins it) or `xt_gc_collect()`; after each collection the threshold becomes twice the surviving heap (floor 1 MiB), so the resident set follows the live set instead of only growing. `XT_GC_TRACE=1` prints one line per collection to stderr. Explicit roots + root providers + conservative active-stack scan. No compaction, weak references or background collection — without weak references an extension must keep a strong reference to every value it caches (the GUI's element handles do) |
252
- | Self-hosting | ✓ the compiler compiles itself: `xbintsc build src/cli/main.ts` produces a working binary, and the emitted IR is stable from generation 1 onward. The runtime is still C |
253
- | Type checker | ✗ only diagnostic codes are defined; no checker |
254
- | Full standard library | partial: Math / JSON / Date / Map / Set / RegExp / `Error` / `BigInt` / `Symbol` implemented; String.normalize / structuredClone missing |
255
- | Multi-file module bundling | partial: relative-path `.ts` bundling, ESM `node_modules` packages, namespace imports and bare-specifier extension module imports implemented; circular dependencies / CommonJS / live bindings not implemented |
256
- | A real async runtime / event loop | ✗ (Promise is a synchronous microtask model) |
257
- | Windows binary artifact verification | adapted at the build layer (`.exe` suffix, link flag branch), verified in CI |
258
- | Precise ECMAScript number / string / comparison semantics | partial, see section 8 |
259
-
260
- ---
261
-
262
- ## 10. Quick reference: unimplemented / partially implemented list
263
-
264
- ```
265
- Unimplemented (statements): namespace/module declarations
266
-
267
- Unimplemented (expressions): new.target (clear UnsupportedFeature)
268
-
269
- Unimplemented (functions): `fn.toString()` source text, async generators (rejected)
270
-
271
- Unimplemented (classes/OO): abstract/implements, access control,
272
- parent/child #x collision
273
-
274
- Unimplemented (standard library): String.normalize, structuredClone
275
-
276
- Unimplemented (modules): circular dependencies, live bindings, dynamic
277
- `require(expr)`, `require.resolve` / `require.cache`,
278
- `__dirname` / `__filename`
279
-
280
- Unimplemented (type system): type checking, generic instantiation, assertion
281
- semantics, optional-chaining narrowing
282
-
283
- Unimplemented (runtime): a real async event loop, UTF-16 string length,
284
- Object.prototype identity, global-regex lastIndex
18
+ > Language: **English** | [简体中文](./zh-CN/unimplemented.md)
285
19
 
286
- Unimplemented (engineering): type checker
287
- ```
20
+ ## Contents
21
+
22
+ - [Statements](./unimplemented/statements.md) — statement forms that do not lower
23
+ - [Expressions and operators](./unimplemented/expressions.md) — expression forms and operators that do not lower
24
+ - [Standard library](./unimplemented/stdlib.md) — what the built-in objects are still missing, including typed arrays
25
+ - [Module system](./unimplemented/modules.md) — circular dependencies, live bindings, CommonJS boundaries
26
+ - [Functions](./unimplemented/functions.md) — missing function semantics
27
+ - [Classes and OO](./unimplemented/classes.md) — access control, `abstract`/`implements`, private-name collisions
28
+ - [Type system](./unimplemented/types.md) — parsed but never checked
29
+ - [Runtime deviations](./unimplemented/deviations.md) — compiles and runs, but differs from ECMAScript
30
+ - [Toolchain and platform](./unimplemented/toolchain.md) — type checker, async I/O, GC modes, platform gaps
31
+ - [Node extension](./unimplemented/node.md) — Node module gaps, one page per area
@@ -26,6 +26,18 @@
26
26
  "description": "Optimization level (default: 2).",
27
27
  "enum": ["0", "1", "2", "3"]
28
28
  },
29
+ "lto": {
30
+ "type": "boolean",
31
+ "description": "Compile program and runtime to LTO bitcode and link with lld."
32
+ },
33
+ "pgo": {
34
+ "enum": ["generate", "use"],
35
+ "description": "Profile-guided optimization stage."
36
+ },
37
+ "pgoDir": {
38
+ "type": "string",
39
+ "description": "Profile directory for pgo (default: <outDir>/pgo)."
40
+ },
29
41
  "extensions": {
30
42
  "type": "array",
31
43
  "items": { "type": "string" },
@@ -19,10 +19,17 @@
19
19
  - `src/extensions/gui/index.ts` 通过 `nativeObjects()` 暴露该归档(经由
20
20
  `findRuntimeLibrary`,因此 `.a`/`.lib` 都可用),并通过 `linkerFlags()`
21
21
  暴露操作系统框架。
22
+ - `scripts/build-gui.ts` 使用与驱动**相同**的 clang
23
+ (`src/driver/toolchain-provider.ts`);Windows 上就是 Visual Studio 自带的、
24
+ 面向 MSVC 的 LLVM,并配套使用其同目录下的 `clang++`/`llvm-ar` 来配置 CMake、
25
+ 编译引擎和合并归档。脚本不提供 `gcc`/`g++` 回退,Windows 上也始终使用
26
+ `llvm-ar`,因此归档不会混入其他目标文件格式或 C++ 运行时。Visual Studio
27
+ 工具链按绝对路径查找,无需开发者命令提示符。Windows 上 SDL_GPU 会选择 Vulkan
28
+ 后端,不需要 DXIL/`dxc` 工具链。
22
29
  - CI 在组装发布归档之前构建 `gui.a`,因此它会随 `runtime/lib/<slug>/` 一起
23
30
  发布(发布 tarball 会复制整个 `runtime/` 树)。归档在 Linux(Xvfb 下,
24
31
  使用 lavapipe 软件 Vulkan 驱动)与 macOS 上构建并运行示例;Windows 为
25
- 试验性。
32
+ 试验性,因为托管 runner 没有 GPU/Vulkan 驱动。
26
33
  - 现有的缓存指纹已经会对 `nativeObjects()` 的内容做哈希,因此重建 `gui.a`
27
34
  会自动使缓存二进制失效。
28
35
  - CMake 构建树位于其源码**旁边**(`vendor/sdl-build`、`vendor/freetype-build`、
@@ -55,8 +62,9 @@ xbintsc run examples/gui/hello.ts --ext gui
55
62
  `volume` 驱动播放。媒体 `src` 相对于进程工作目录解析,因此从仓库根目录运行:
56
63
  `xbintsc run examples/gui/media.ts --ext gui`。几何报告见该目录的 README。
57
64
 
58
- 这些测试套件在 Windows 上默认跳过(该平台会构建归档,但 CI 未验证运行)。
59
- 如果本机有 `gui.lib` 与可用的 GPU,可用 `xbintsc_GUI_TESTS=1` 选择启用:
65
+ 这些测试套件在 Windows 上默认跳过(归档可以在本机通过 Vulkan 运行,但 CI
66
+ runner 没有可用的 GPU 驱动)。如果本机有 `gui.lib` 与可用的 GPU,可用
67
+ `xbintsc_GUI_TESTS=1` 选择启用:
60
68
 
61
69
  ```bat
62
70
  set xbintsc_GUI_TESTS=1
@@ -43,12 +43,16 @@
43
43
  for 'RuntimeLibrary'`,外加满屏 `LNK2005: already defined`,最终表现为
44
44
  `clang: linker command failed with exit code 1169`。现在
45
45
  `src/extensions/gui/index.ts` 只列系统库(`user32`、`gdi32`、`d3d12` 等)。
46
- Windows 链接也是唯一需要 MSVC 环境的环节,请在 x64 Native Tools 命令行里构建。
46
+ Windows 链接不再需要手动准备 MSVC 环境:`scripts/build-gui.ts` 会解析与驱动
47
+ 相同的、面向 MSVC 的 clang(`PATH` 上没有更新版本时就是 Visual Studio 自带的
48
+ LLVM)。
47
49
  - Windows:`scripts/build-gui.ts` 会生成 MSVC 兼容的 `gui.lib`
48
50
  (COFF 对象 + `ar -M`/`llvm-ar`),但尚未在 CI 中验证,因此 Windows 步骤
49
51
  为试验性(job 保持绿色),`package` 会跳过它;在开发者机器上构建并运行
50
- `examples/gui/pelican-svg` 与 `examples/gui/pelican-bike` 是可以的。它还需要
51
- 一个带 D3D12/DXIL 后端的 SDL3 构建(DXIL 需要 `dxc`)。
52
+ `examples/gui/pelican-svg` 与 `examples/gui/pelican-bike` 是可以的。那里
53
+ SDL_GPU 会选择 **Vulkan** 后端(`win.driver()` 返回 `"vulkan"`),因此归档
54
+ 不需要 DXIL/`dxc` 工具链;托管 Windows runner 没有 GPU/Vulkan 驱动,这才是
55
+ CI 运行仍为试验性的原因。
52
56
  - **Windows 上的媒体:** 媒体解码器(FFmpeg)只构建并合并进 POSIX 的
53
57
  `gui.a`;Windows 的 `gui.lib` 不含它们,因此那里的 `<video>`/`<audio>` 为空
54
58
  操作(失败会触发 `error`)。启用它需要 MSVC 兼容的 FFmpeg 构建,推迟到
@@ -57,4 +61,5 @@
57
61
  - **D3D12 着色器:** SPIR-V(Vulkan)与 DXIL(Direct3D 12)二进制块均已构建并
58
62
  内嵌,非 Metal 路径不再跳过几何绘制。但在 **SDL 3.2.10** 上 DXIL 仍不可用:
59
63
  其 D3D12 后端会拒绝任何着色器中声明了 uniform buffer 的图形管线,而引擎正是
60
- 用这种方式传视口。SDL 升级后需重新确认。
64
+ 用这种方式传视口。Windows 实际会选择 Vulkan,因此不受影响;若将来强制走
65
+ D3D12,需在 SDL 升级后重新确认。
@@ -37,7 +37,8 @@
37
37
  各自的描述性名称。
38
38
  需注意:SDL 3.2.10 的 Direct3D 12 后端无法创建着色器中声明了 uniform buffer 的
39
39
  图形管线(返回 `E_INVALIDARG`);引擎正是用这种方式传视口,因此 DXIL 这条路已
40
- 构建但在上游修复前不可用。
40
+ 构建但在上游修复前不可用。Windows 不受影响:SDL_GPU 在那里会选择 Vulkan 后端
41
+ (由 `win.driver()` 确认),使用 SPIR-V 二进制块。
41
42
  - 图形片元着色器中的**圆角矩形距离场**提供抗锯齿填充;顶点携带
42
43
  `position`、`local`、`half extents`、`radius` 与颜色,一个视口尺寸的
43
44
  push constant 负责投影。启用 alpha 混合。
package/doc/zh-CN/gui.md CHANGED
@@ -143,8 +143,9 @@ FFmpeg `7.1`(可用 `SDL3_TAG` / `FREETYPE_VERSION` / `HARFBUZZ_VERSION` /
143
143
  一起发布(`package-release` 复制整个 `runtime/`)。
144
144
  - `vendor/`(SDL3/FreeType/HarfBuzz,缓慢的部分)按 OS/arch 缓存,以
145
145
  `scripts/build-gui.ts` 为键。
146
- - Windows(构建 + 运行)保持试验性,直到验证 MSVC 兼容的 `gui.lib` 与
147
- D3D12/DXIL 着色器路径;失败只记录日志而不标注运行(见[待决问题](./gui/known-issues.md))。
146
+ - Windows(构建 + 运行)在 CI 中保持试验性:MSVC 兼容的 `gui.lib` 可在本机
147
+ 通过 SDL_GPU 的 Vulkan 后端构建并运行,但托管 runner 没有 GPU/Vulkan
148
+ 驱动。失败只记录日志而不标注运行(见[待决问题](./gui/known-issues.md))。
148
149
  8. **M8 — 交互式 DOM** ✅
149
150
  - 具有稳定标识的元素/文档句柄、通过运行时访问器读写属性、遍历/特性/查询、
150
151
  带有延迟重算样式/重新布局的变更
package/doc/zh-CN/icon.md CHANGED
@@ -148,7 +148,8 @@ const unsigned int xt_app_icon_height;
148
148
 
149
149
  - `src/cli/main.ts`:新增 `--icon`、`--bundle`、`--app-name`、`--app-id`、
150
150
  `--config`、`--no-config`,并与配置合并(`mergeAppConfig`)。
151
- - `src/driver/compiler.ts`:`BuildOptions.icon` 与 `BuildOptions.app`。
151
+ - `src/driver/options.ts`:`BuildOptions.icon` 与 `BuildOptions.app`(由
152
+ `src/driver/build-key.ts` 计入缓存键)。
152
153
  - 图标的**内容哈希**与打包选项计入可执行文件 `cacheKey`,图标变化即重建。
153
154
  - 图标对象以及(win32 上)资源对象追加到链接输入。
154
155
  - 链接后生成 macOS `.app` bundle;`BuildResult.bundlePath` 返回其路径
@@ -161,8 +162,8 @@ const unsigned int xt_app_icon_height;
161
162
  1. PNG 输入被包进最小 ICO 容器(`ICONDIR` + 指向 PNG 载荷的 `ICONDIRENTRY`);
162
163
  Vista+ 接受 PNG-in-ICO。
163
164
  2. 在缓存中写入 `.rc`(`1 ICON "icon-<hash>.ico"`)。
164
- 3. 优先 `llvm-rc /fo app.res app.rc`(解析出的 clang 同目录或 `PATH`),
165
- 否则 MinGW `windres app.rc -O coff -o app_res.o`。可用 `xbintsc_RC` 覆盖。
165
+ 3. 运行 `llvm-rc /fo app.res app.rc`(解析出的 clang 同目录或 `PATH`)。
166
+ `llvm-rc` 用 `/?` 探测(它没有 `--version`)。可用 `xbintsc_RC` 覆盖。
166
167
  4. 找不到资源编译器时继续构建(仅运行时图标),装饰性功能绝不导致构建硬失败。
167
168
 
168
169
  #### macOS(`MyApp.app` bundle)—— `src/driver/mac-bundle.ts`
@@ -213,7 +214,7 @@ Wayland。
213
214
 
214
215
  - `tests/driver/config.test.ts` —— 解析/校验、发现、路径解析。
215
216
  - `tests/driver/icon.test.ts` —— 格式识别、生成的 C、ICO 转换、图标对象缓存、
216
- `llvm-rc`/`windres` 命令行、mac bundle 布局与退化路径,以及 `build()` 集成
217
+ `llvm-rc` 命令行、mac bundle 布局与退化路径,以及 `build()` 集成
217
218
  (链接图标对象;图标缺失 ⇒ `DiagnosticCode.IOError`)。
218
219
  - `tests/e2e/icon.test.ts` —— 用 `app.icon` 编译真实 GUI 程序,断言可执行文件中
219
220
  存在 PNG 字节,并在无头模式运行;darwin 上校验 `.app` bundle 与 `.icns`。
@@ -0,0 +1,38 @@
1
+ # 异步、Promise 与生成器
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/async.md)
4
+
5
+ 实现位置:`runtime/xt_async.c`、`runtime/xt_coroutine.c`、`runtime/xt_promise.c`、
6
+ `runtime/xt_generator.c`、`runtime/xt_loop.c`、`runtime/xt_performance.c`。
7
+
8
+ ## async / await
9
+
10
+ - `async` 闭包用 `xt_function_set_async` 标记;调用时在栈式协程(`xt_coroutine.c`、`xt_async.c`)上运行函数体并立即返回 promise。
11
+ - 函数体同步执行到第一个等待**未 settle** promise 的 `await` 后挂起;promise settle 时排入微任务恢复协程。
12
+ - 逃出函数体的异常会让该 promise reject,而不是同步抛出。
13
+ - `await` 非 promise 或已 settle 的值仍走同步快路径,rejection 触发异常。
14
+ - 每次 `async` 调用拥有私有栈,切换异常帧栈与 GC 栈区间,因此 `await` 可跨越 `try`/`finally`、循环与闭包。由定时器、套接字回调或另一个协程 settle 的 promise 会在微任务队列上恢复挂起的函数体。
15
+
16
+ ## 异步生成器
17
+
18
+ - `async function*` 闭包用 `xt_function_set_async_generator` 标记;每次 `.next()` / `.throw()` / `.return()` 入队一个请求并返回 promise。
19
+ - 函数体在生成器协程上运行,可在 `yield` 或 `await` 处挂起;`xt_generator_await` 将协程挂在被等待的 promise 上,并让当前请求保持 pending,直到下一次 yield 或函数体结束。
20
+ - `for await...of` 降级为 `xt_async_iter_open` / `xt_async_iter_next` + `xt_await`,因此同时支持异步可迭代对象与同步迭代协议。`Symbol.asyncIterator` 已支持。
21
+
22
+ ## 生成器
23
+
24
+ - `function*` / `yield` / `yield*`,以及 `.next()` / `.throw()` / `.return()`,基于同一套栈式协程运行时实现。
25
+ - 支持 `for...of`、展开与委托。
26
+
27
+ ## Promise
28
+
29
+ - 微任务队列(`xt_microtasks`);`xt_promise_ctor/resolve/reject/static`(含 `withResolvers`)、实例 `then` / `catch` / `finally`。
30
+ - `xt_drain_microtasks` 在程序结束时清空队列,事件循环也会在回调之间清空它。
31
+ - `xt_await` 对非 Promise / 已 settle 值排入一次微任务,对 pending promise 则挂起当前 async 协程直到 settle。
32
+
33
+ ## 定时器与事件循环
34
+
35
+ - `setTimeout` / `clearTimeout` / `setInterval` / `clearInterval` / `setImmediate` / `clearImmediate` / `queueMicrotask` 与 `performance.now`(单调递增的小数毫秒)。
36
+ - 定时器使用数字 id;未实现 `Timeout` / `Immediate` 对象。
37
+ - 定时器 settle 的 promise 可以被 await:async 函数体在 pending promise 上挂起,定时器触发时恢复。套接字与服务端(`net`、`http`、`dgram`)的回调在同一事件循环上投递。
38
+ - `fetch` 是阻塞的,`fs/promises` 在 settle 前同步完成 I/O —— 见[运行时偏差](../unimplemented/deviations.md)。异步生成器清理限制也在同一页列出。
@@ -0,0 +1,13 @@
1
+ # 名字绑定与作用域(Binder)
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/binder.md)
4
+
5
+ 实现位置:`src/binder/binder.ts`
6
+
7
+ - 作用域种类:模块、函数、块、`for`、`catch`
8
+ - 符号种类:`var` / `let` / `const` / `function` / `parameter` / `class` / `interface` / `type` / `enum` / `import` / `namespace`
9
+ - `var` 与函数声明提升到函数作用域;`let` / `const` 保持块作用域
10
+ - 标识符 → 声明 的解析;未解析标识符收集(`CannotFindName`)
11
+ - 闭包捕获分析:被内层函数引用的外部变量标记 `captured` / `boxed`,并穿过中间闭包传递捕获索引
12
+ - 参数登记为局部符号;命名函数表达式自名登记为 `const`
13
+ - 类型专用声明(interface / type alias)不参与值捕获
@@ -0,0 +1,46 @@
1
+ # CLI 与编程接口
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/cli.md)
4
+
5
+ 实现位置:`src/cli/main.ts`、`src/index.ts`、`bin/xbintsc.js`
6
+
7
+ ## CLI 命令
8
+
9
+ ```
10
+ xbintsc build <file.ts> [options] 编译为原生二进制
11
+ xbintsc run <file.ts> [-- args] 编译并执行
12
+ xbintsc emit <file.ts> 打印 LLVM IR
13
+ xbintsc version 打印版本
14
+ xbintsc help 帮助
15
+ ```
16
+
17
+ ## CLI 选项
18
+
19
+ ```
20
+ -o, --output <path> 输出路径
21
+ --out <dir> 输出目录(默认 build/)
22
+ --emit <kind> exe | obj | ir(默认 exe)
23
+ -O0..-O3 优化级别(默认 -O2)
24
+ --ext <names> 逗号分隔扩展(如 node)
25
+ --ext-native <m> 从 JSON manifest 注册 C++/Rust 扩展
26
+ --config <path> 使用项目配置(默认自动查找 xbintsc.config.json)
27
+ --no-config 不读取任何项目配置
28
+ --icon <path> 内嵌应用图标(PNG/ICO/ICNS)
29
+ --bundle macOS:同时生成 .app bundle
30
+ --app-name <name> bundle / 显示名称
31
+ --app-id <id> macOS bundle 标识符(如 com.example.demo)
32
+ --force 忽略增量缓存
33
+ --verbose 打印进度信息
34
+ ```
35
+
36
+ ## 编程接口
37
+
38
+ ```ts
39
+ import { build, compileString } from "xbintsc";
40
+
41
+ const { ir } = compileString("console.log(1 + 1);");
42
+ const result = build("program.ts", { emit: "exe", outDir: "build" });
43
+ ```
44
+
45
+ 选项与结果类型(`BuildOptions`、`BuildResult`、`EmitKind`、`PhaseTiming`)位于
46
+ `src/driver/options.ts`,并由 `src/driver/compiler.ts` / `xbintsc` 重新导出。
@@ -0,0 +1,33 @@
1
+ # LLVM IR 代码生成(Codegen)
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/codegen.md)
4
+
5
+ 实现位置:`src/codegen/llvm.ts`
6
+
7
+ - 生成 LLVM IR 文本(`.ll`),无需自建寄存器分配(依赖 `alloca` + mem2reg)。
8
+ - 语句 / 块边界值放在 `alloca`;条件与短路运算物化为临时槽,不使用 `phi`。
9
+ - 属性读取按源码位置生成内联缓存:每个访问点拥有一个零初始化的 `[2 x i64]` 全局(`@ic.N`),传给 `xt_get_ic`。普通对象带有驻留的隐藏类 shape(`xt_shape`,`(parent, key)` 转移树),缓存保存 `(shape, 属性下标)`,命中时只需比较 shape 指针并校验一次键,无需线性扫描属性表。插入/删除属性以及整数键重排会重建或转移 shape,从而使旧缓存失效;数组、函数与容器回退到 `xt_get`。
10
+ - 数值运算符保留内联双精度快路径;数值字面量操作数跳过标签检查。若条件表达式本身是比较、`in`、`instanceof` 或 `!`,其值已经是布尔标签,代码生成用 `icmp eq i64 value, XT_TRUE` 代替调用 `xt_truthy`(热循环条件因此少一次调用)。
11
+ - 控制流:`if` / `while` / `do` / `for` / `for...of` / `for...in`,`switch`,`try/catch/finally`,`break` / `continue` / `return`。
12
+ - `for...of` 与展开通过 `xt_iter_open` → `xt_iter_has` / `xt_iter_value` 迭代数组、字符串、类型化数组、`Map`、`Set`、生成器以及任何暴露 `[Symbol.iterator]()` 的对象(`Map` 产出 `[key, value]` 对);非可迭代值抛出 `TypeError`。数组还暴露稳定的 `Array.prototype[Symbol.iterator]`,调用后返回带 `next()` 且自身可迭代的迭代器对象。
13
+ - `switch` 以严格相等逐 `case` 测试,命中后执行并在 `break` 前穿透。
14
+ - `try/catch/finally` 通过运行时 `_setjmp` 帧实现:`xt_try_enter` 入栈、`_setjmp` 捕获、`xt_throw` 长跳转;IR 会把调用方的帧地址(`@llvm.frameaddress(0)`)作为 `_setjmp` 的第二个参数传入,与 clang 编译 MSVC 时的降级方式一致:Windows UCRT 的 `_setjmp` 会把这个帧存入 `_JUMP_BUFFER.Frame`,`longjmp` 再交给 `RtlUnwind` 执行栈展开;若不传该参数,`longjmp` 会展开到错误目标(`STATUS_BAD_FUNCTION_TABLE`)。使用 `_setjmp` 而非导出的 `setjmp` 符号,因为后者的 Windows ABI 是不兼容的双参数例程。含 `try` 的函数会强制局部变量驻留内存(内联汇编逃生点)以保证长跳转后值不丢失。
15
+ - `for...in` 复用 `xt_object_keys` 枚举键(数组 / 字符串得到字符串下标)。
16
+ - 表达式:
17
+ - 标识符、数字、BigInt(任意精度)、字符串、模板、布尔、`null`、`undefined`、`arguments`
18
+ - 算术 / 比较 / 逻辑 / 短路 / 条件 / 位运算 / 一元(含 `typeof` `void`)/ 前后缀增减 / 复合赋值 / 逻辑赋值
19
+ - 数组字面量(含展开 `[...]`)、对象字面量(含简写 / 方法 / 对象展开 `{...obj}`)
20
+ - 类型化数组、`ArrayBuffer`、`DataView`、`TextEncoder` / `TextDecoder`:见[类型化数组与二进制数据](./typed-arrays.md)与[字符串与文本](./strings.md)
21
+ - 属性访问(含 `length` 特判、`Math` 常量)、元素访问、调用
22
+ - 一等公民内建构造器(`const A = Array`、`const M = Map`、`const E = TypeError`、类型化数组):裸引用下降为 `xt_builtin_constructor`,得到带 `name` / `length`、`prototype` 与静态成员(`A.isArray`、`A.from`、`M.prototype` 等)的缓存函数。通过别名调用或 `new` 会分派到同一运行时构造器,`x instanceof A` 沿共享原型链判断。
23
+ - 可选链 `?.` / `?.[]` / `?.()`:以空值判断短路到 `undefined`
24
+ - `delete`、`in`、`instanceof`
25
+ - `this`(保存到函数 `%saved.this`;箭头函数从环境槽读)、`super`(`super.x` / `super(...)`)、`new`、`await`
26
+ - 闭包(箭头函数 / 函数表达式)与捕获环境构建
27
+ - 类:构造器闭包 + 原型对象,存入 LLVM 全局(`@class.<id>`);实例字段在构造器体前初始化;`static` 成员存于构造器属性包;`extends` 设置原型链;`super(...)` 通过原型上的隐藏 `__ctor` 调用。
28
+ - `async` / `async function*`:闭包分别用 `xt_function_set_async` / `xt_function_set_async_generator` 标记,并在栈式协程上运行——见[异步、Promise 与生成器](./async.md)。
29
+ - 标准库调用统一走 `xt_call_method` / `xt_math_call` / `xt_object_*` 与各构造器的 `xt_*` 入口;完整表面见[标准库](./stdlib.md)。
30
+ - 全局字符串池(`@.str.N` 私有常量,UTF-8 转义)。
31
+ - 内置调用:`console.log` / `info` / `warn` / `error`、`Math.*`、`Object.*`、数组 / 字符串方法、全局函数、扩展 builtins(统一 `(argc, argv)` ABI)。
32
+ - `main` 入口(返回 0,调用模块函数,并在返回前 `xt_drain_microtasks`)。
33
+ - 未支持节点统一报 `UnsupportedFeature`,不会崩溃。
@@ -0,0 +1,26 @@
1
+ # 集合
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/collections.md)
4
+
5
+ 实现位置:`runtime/xt_stdlib2/container.inc`(Map / Set)与
6
+ `runtime/xt_weak.c`(WeakMap / WeakSet / WeakRef)。
7
+
8
+ ## Map 与 Set
9
+
10
+ - `new Map()` / `new Map(iterable)`、`new Set()` / `new Set(iterable)`。
11
+ - `Map`:`size`、`get` / `set` / `has` / `delete` / `clear` / `forEach` / `keys` / `values` / `entries`。
12
+ - `Set`:`size`、`add` / `has` / `delete` / `clear` / `forEach` / `values` / `keys` / `entries`。
13
+ - `for...of` 与展开通过 `[Symbol.iterator]` 迭代;`Map` 产出 `[key, value]` 对,`keys` / `values` / `entries` 按插入序返回数组。
14
+ - `Object.keys` / `values` / `entries` 不会看到集合内部结构。
15
+ - `structuredClone` 支持 `Map` 与 `Set`,保留循环引用与共享引用。
16
+
17
+ ## WeakMap、WeakSet 与 WeakRef
18
+
19
+ - `WeakMap`:`get` / `set` / `has` / `delete`;`WeakSet`:`add` / `has` / `delete`;`WeakRef`:`deref()`。
20
+ - 键(以及 `WeakRef` 目标)不会让被引用对象存活:`WeakMap` / `WeakSet` 的键是 **ephemeron**(只有键可达时才保留值),`WeakRef` 目标不可达时会被清空。
21
+ - 栈扫描是保守的,残留的栈字可能延迟弱目标清空。完整 GC 描述见[运行时偏差](../unimplemented/deviations.md)与[未实现:工具链](../unimplemented/toolchain.md)。
22
+
23
+ ## 迭代
24
+
25
+ - 任何暴露 `[Symbol.iterator]()` 的对象都可在 `for...of` 与展开中使用。`Array.prototype[Symbol.iterator]` 稳定,调用后返回带 `next()` 且自身可迭代的迭代器对象。
26
+ - 迭代细节另见[代码生成](./codegen.md)与 [Symbol](./stdlib.md)。
@@ -0,0 +1,19 @@
1
+ # 驱动、增量编译与工具链
2
+
3
+ > 属于[已实现语法与功能](../implemented.md) · [English](../../implemented/driver.md)
4
+
5
+ 实现位置:`src/driver/compiler.ts`(编排)、`src/driver/frontend.ts`、
6
+ `src/driver/build-key.ts`、`src/driver/runtime-objects.ts`、
7
+ `src/driver/app-artifacts.ts`、`src/driver/cache.ts`、`src/driver/toolchain.ts`、
8
+ `src/driver/paths.ts`、`src/driver/version.ts`。
9
+
10
+ - 编译流水线:读源 → 模块打包(`src/driver/modules.ts`,当入口含 `import`/`export` 时)→ 解析 → 绑定/检查 → IR → 目标文件 → 链接。
11
+ - 增量缓存:以「编译器版本 + 源码哈希 + emit 类型 + 优化级别 + LTO/PGO 模式 + 平台 + 扩展指纹(名称、链接参数、原生对象内容)」为键,产物存在且新鲜则跳过构建。`--pgo-use` 总是重新构建,因为 profile 数据可能变化而源码不变。缓存键在 `src/driver/build-key.ts` 中组装。
12
+ - C 运行时与扩展源按内容哈希缓存目标文件,只编译一次(缓存键包含 LTO/PGO 参数)。核心翻译单元列表 `RUNTIME_SOURCES` 位于 `src/driver/runtime-objects.ts`。
13
+ - 工具链封装:查找 `clang`(可用 `xbintsc_CLANG` 覆盖)、编译 IR、编译 C、链接。
14
+ - LTO(`--lto` / `"lto": true`):程序与运行时都编译为 LLVM bitcode(`-flto`),并用 `-fuse-ld=lld` 链接;需要 lld。
15
+ - PGO(先 `--pgo-generate[=dir]`,再 `--pgo-use[=dir]`,或配置 `"pgo"` / `"pgoDir"`):生成 IR 与运行时 C 都用 `-fprofile-generate=<dir>` 插桩;运行插桩后的二进制,`--pgo-use` 会用 `llvm-profdata` 合并 `.profraw`(优先使用 clang 旁边的副本,可用 `xbintsc_LLVM_PROFDATA` 覆盖),再以 `-fprofile-use=<dir>` 重新构建。
16
+ - 链接参数:非 Windows 自动加 `-lm`;扩展可追加链接参数。
17
+ - 项目编译配置(`src/driver/config.ts`、`xbintsc.config.json`):`entry`、`outDir`、`output`、`optimize`、`lto`、`pgo`、`pgoDir`、`extensions`、`extNative`、`force` 与 `app`(`name`、`icon`、`bundle`、`bundleId`)。从入口/当前目录向上查找,可用 `--config` 指定、`--no-config` 关闭;所有路径以配置文件所在目录为基准;CLI 参数优先于配置。
18
+ - 应用图标(`src/driver/icon.ts`、`win-icon.ts`、`mac-bundle.ts`,`--icon`/`app.icon`):PNG/ICO/ICNS 以 `xt_app_icon_*` 符号内嵌;Windows 上通过 `llvm-rc` 合成 PE 资源;macOS 上打包为 `Foo.app`(用 `sips`/`iconutil` 生成 `AppIcon.icns`)。`gui` 扩展用内嵌字节调用 `SDL_SetWindowIcon`;`xbintsc_RC` 可覆盖资源编译器。
19
+ - 编译器版本:`COMPILER_VERSION` 位于 `src/driver/version.ts`,是缓存键的一部分。pre-commit 钩子只在 `main`/`master` 上(与 `package.json` 一起)提升它,因此功能分支不会改动版本文件。