xbintsc 0.5.6 → 0.5.21

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 (490) hide show
  1. package/AGENTS.md +20 -10
  2. package/README.md +8 -7
  3. package/README.zh-CN.md +6 -6
  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 +11 -2
  14. package/dist/src/codegen/generator/calls/access.js.map +1 -1
  15. package/dist/src/codegen/generator/calls/closures.js +12 -4
  16. package/dist/src/codegen/generator/calls/closures.js.map +1 -1
  17. package/dist/src/codegen/generator/context.d.ts +8 -0
  18. package/dist/src/codegen/generator/context.js +22 -3
  19. package/dist/src/codegen/generator/context.js.map +1 -1
  20. package/dist/src/codegen/generator/expressions/operators.js +17 -15
  21. package/dist/src/codegen/generator/expressions/operators.js.map +1 -1
  22. package/dist/src/codegen/generator/expressions/primary.js +5 -0
  23. package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
  24. package/dist/src/codegen/generator/module.js +0 -7
  25. package/dist/src/codegen/generator/module.js.map +1 -1
  26. package/dist/src/codegen/generator/numeric.d.ts +6 -3
  27. package/dist/src/codegen/generator/numeric.js +54 -11
  28. package/dist/src/codegen/generator/numeric.js.map +1 -1
  29. package/dist/src/codegen/generator/state.js +23 -0
  30. package/dist/src/codegen/generator/state.js.map +1 -1
  31. package/dist/src/codegen/generator/statements/control-flow.js +1 -4
  32. package/dist/src/codegen/generator/statements/control-flow.js.map +1 -1
  33. package/dist/src/codegen/generator/statements/loops.js +48 -16
  34. package/dist/src/codegen/generator/statements/loops.js.map +1 -1
  35. package/dist/src/codegen/generator/tables.js +26 -1
  36. package/dist/src/codegen/generator/tables.js.map +1 -1
  37. package/dist/src/diagnostics/diagnostic.d.ts +3 -1
  38. package/dist/src/diagnostics/diagnostic.js +23 -3
  39. package/dist/src/diagnostics/diagnostic.js.map +1 -1
  40. package/dist/src/driver/app-artifacts.d.ts +42 -0
  41. package/dist/src/driver/app-artifacts.js +53 -0
  42. package/dist/src/driver/app-artifacts.js.map +1 -0
  43. package/dist/src/driver/build-key.d.ts +29 -0
  44. package/dist/src/driver/build-key.js +35 -0
  45. package/dist/src/driver/build-key.js.map +1 -0
  46. package/dist/src/driver/bundler/graph.js +61 -12
  47. package/dist/src/driver/bundler/graph.js.map +1 -1
  48. package/dist/src/driver/bundler/merge.js +7 -1
  49. package/dist/src/driver/bundler/merge.js.map +1 -1
  50. package/dist/src/driver/compiler.d.ts +10 -67
  51. package/dist/src/driver/compiler.js +95 -234
  52. package/dist/src/driver/compiler.js.map +1 -1
  53. package/dist/src/driver/config.d.ts +3 -0
  54. package/dist/src/driver/config.js +8 -0
  55. package/dist/src/driver/config.js.map +1 -1
  56. package/dist/src/driver/frontend.d.ts +37 -0
  57. package/dist/src/driver/frontend.js +92 -0
  58. package/dist/src/driver/frontend.js.map +1 -0
  59. package/dist/src/driver/index.d.ts +1 -1
  60. package/dist/src/driver/index.js.map +1 -1
  61. package/dist/src/driver/options.d.ts +64 -0
  62. package/dist/src/driver/options.js +9 -0
  63. package/dist/src/driver/options.js.map +1 -0
  64. package/dist/src/driver/runtime-objects.d.ts +38 -0
  65. package/dist/src/driver/runtime-objects.js +112 -0
  66. package/dist/src/driver/runtime-objects.js.map +1 -0
  67. package/dist/src/driver/toolchain-provider.d.ts +4 -0
  68. package/dist/src/driver/toolchain-provider.js +4 -0
  69. package/dist/src/driver/toolchain-provider.js.map +1 -1
  70. package/dist/src/driver/toolchain.d.ts +32 -1
  71. package/dist/src/driver/toolchain.js +115 -11
  72. package/dist/src/driver/toolchain.js.map +1 -1
  73. package/dist/src/driver/version.d.ts +12 -0
  74. package/dist/src/driver/version.js +13 -0
  75. package/dist/src/driver/version.js.map +1 -0
  76. package/dist/src/driver/win-icon.d.ts +7 -9
  77. package/dist/src/driver/win-icon.js +37 -35
  78. package/dist/src/driver/win-icon.js.map +1 -1
  79. package/dist/src/extensions/node/fs/index.d.ts +4 -3
  80. package/dist/src/extensions/node/fs/index.js +12 -3
  81. package/dist/src/extensions/node/fs/index.js.map +1 -1
  82. package/dist/src/extensions/node/fs-promises/index.d.ts +5 -5
  83. package/dist/src/extensions/node/fs-promises/index.js +15 -6
  84. package/dist/src/extensions/node/fs-promises/index.js.map +1 -1
  85. package/dist/src/parser/declarations/classes.js +5 -0
  86. package/dist/src/parser/declarations/classes.js.map +1 -1
  87. package/dist/src/parser/declarations/functions.js +13 -1
  88. package/dist/src/parser/declarations/functions.js.map +1 -1
  89. package/dist/src/parser/modules.js +8 -3
  90. package/dist/src/parser/modules.js.map +1 -1
  91. package/dist/src/parser/parser.d.ts +1 -0
  92. package/dist/src/parser/parser.js +23 -0
  93. package/dist/src/parser/parser.js.map +1 -1
  94. package/dist/tests/cli/check.test.d.ts +6 -0
  95. package/dist/tests/cli/check.test.js +68 -0
  96. package/dist/tests/cli/check.test.js.map +1 -0
  97. package/dist/tests/cli/main.test.js +19 -0
  98. package/dist/tests/cli/main.test.js.map +1 -1
  99. package/dist/tests/cli/watch.test.d.ts +6 -0
  100. package/dist/tests/cli/watch.test.js +72 -0
  101. package/dist/tests/cli/watch.test.js.map +1 -0
  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.js +1 -1
  136. package/dist/tests/e2e/async-fs.test.d.ts +9 -0
  137. package/dist/tests/e2e/async-fs.test.js +119 -0
  138. package/dist/tests/e2e/async-fs.test.js.map +1 -0
  139. package/dist/tests/e2e/async-generators.test.d.ts +1 -0
  140. package/dist/tests/e2e/async-generators.test.js +154 -0
  141. package/dist/tests/e2e/async-generators.test.js.map +1 -0
  142. package/dist/tests/e2e/await-ordering.test.d.ts +5 -0
  143. package/dist/tests/e2e/await-ordering.test.js +37 -0
  144. package/dist/tests/e2e/await-ordering.test.js.map +1 -0
  145. package/dist/tests/e2e/compile-builtins.test.js +1 -1
  146. package/dist/tests/e2e/compile-modules.test.js +7 -0
  147. package/dist/tests/e2e/compile-modules.test.js.map +1 -1
  148. package/dist/tests/e2e/date-parse.test.d.ts +8 -0
  149. package/dist/tests/e2e/date-parse.test.js +38 -0
  150. package/dist/tests/e2e/date-parse.test.js.map +1 -0
  151. package/dist/tests/e2e/default-anonymous-exports.test.d.ts +7 -0
  152. package/dist/tests/e2e/default-anonymous-exports.test.js +23 -0
  153. package/dist/tests/e2e/default-anonymous-exports.test.js.map +1 -0
  154. package/dist/tests/e2e/fetch.test.js +24 -0
  155. package/dist/tests/e2e/fetch.test.js.map +1 -1
  156. package/dist/tests/e2e/globals-microtask.test.d.ts +9 -0
  157. package/dist/tests/e2e/globals-microtask.test.js +37 -0
  158. package/dist/tests/e2e/globals-microtask.test.js.map +1 -0
  159. package/dist/tests/e2e/gui-inline-svg.test.d.ts +11 -0
  160. package/dist/tests/e2e/gui-inline-svg.test.js +160 -0
  161. package/dist/tests/e2e/gui-inline-svg.test.js.map +1 -0
  162. package/dist/tests/e2e/gui-media.test.js +8 -1
  163. package/dist/tests/e2e/gui-media.test.js.map +1 -1
  164. package/dist/tests/e2e/inspect-builtins.test.d.ts +10 -0
  165. package/dist/tests/e2e/inspect-builtins.test.js +43 -0
  166. package/dist/tests/e2e/inspect-builtins.test.js.map +1 -0
  167. package/dist/tests/e2e/json-builtin-objects.test.d.ts +9 -0
  168. package/dist/tests/e2e/json-builtin-objects.test.js +23 -0
  169. package/dist/tests/e2e/json-builtin-objects.test.js.map +1 -0
  170. package/dist/tests/e2e/json-circular.test.d.ts +6 -0
  171. package/dist/tests/e2e/json-circular.test.js +43 -0
  172. package/dist/tests/e2e/json-circular.test.js.map +1 -0
  173. package/dist/tests/e2e/json-parse-reviver.test.d.ts +6 -0
  174. package/dist/tests/e2e/json-parse-reviver.test.js +29 -0
  175. package/dist/tests/e2e/json-parse-reviver.test.js.map +1 -0
  176. package/dist/tests/e2e/json-stringify-replacer.test.d.ts +6 -0
  177. package/dist/tests/e2e/json-stringify-replacer.test.js +27 -0
  178. package/dist/tests/e2e/json-stringify-replacer.test.js.map +1 -0
  179. package/dist/tests/e2e/json-stringify-space.test.d.ts +6 -0
  180. package/dist/tests/e2e/json-stringify-space.test.js +23 -0
  181. package/dist/tests/e2e/json-stringify-space.test.js.map +1 -0
  182. package/dist/tests/e2e/method-dispatch-errors.test.d.ts +9 -0
  183. package/dist/tests/e2e/method-dispatch-errors.test.js +38 -0
  184. package/dist/tests/e2e/method-dispatch-errors.test.js.map +1 -0
  185. package/dist/tests/e2e/native-extensions.test.js +1 -1
  186. package/dist/tests/e2e/native-extensions.test.js.map +1 -1
  187. package/dist/tests/e2e/promise-with-resolvers.test.d.ts +5 -0
  188. package/dist/tests/e2e/promise-with-resolvers.test.js +20 -0
  189. package/dist/tests/e2e/promise-with-resolvers.test.js.map +1 -0
  190. package/dist/tests/e2e/property-descriptors.test.d.ts +5 -0
  191. package/dist/tests/e2e/property-descriptors.test.js +25 -0
  192. package/dist/tests/e2e/property-descriptors.test.js.map +1 -0
  193. package/dist/tests/e2e/property-ic.test.d.ts +1 -0
  194. package/dist/tests/e2e/property-ic.test.js +55 -0
  195. package/dist/tests/e2e/property-ic.test.js.map +1 -0
  196. package/dist/tests/e2e/runtime-errors.test.d.ts +10 -0
  197. package/dist/tests/e2e/runtime-errors.test.js +52 -0
  198. package/dist/tests/e2e/runtime-errors.test.js.map +1 -0
  199. package/dist/tests/e2e/structured-clone.test.d.ts +6 -0
  200. package/dist/tests/e2e/structured-clone.test.js +49 -0
  201. package/dist/tests/e2e/structured-clone.test.js.map +1 -0
  202. package/dist/tests/e2e/text-codec.test.d.ts +6 -0
  203. package/dist/tests/e2e/text-codec.test.js +24 -0
  204. package/dist/tests/e2e/text-codec.test.js.map +1 -0
  205. package/dist/tests/e2e/typed-array-views.test.d.ts +6 -0
  206. package/dist/tests/e2e/typed-array-views.test.js +39 -0
  207. package/dist/tests/e2e/typed-array-views.test.js.map +1 -0
  208. package/dist/tests/e2e/url-search-params.test.d.ts +5 -0
  209. package/dist/tests/e2e/url-search-params.test.js +30 -0
  210. package/dist/tests/e2e/url-search-params.test.js.map +1 -0
  211. package/dist/tests/e2e/weak-collections.test.d.ts +1 -0
  212. package/dist/tests/e2e/weak-collections.test.js +88 -0
  213. package/dist/tests/e2e/weak-collections.test.js.map +1 -0
  214. package/dist/tests/parser/declarations.test.js +12 -0
  215. package/dist/tests/parser/declarations.test.js.map +1 -1
  216. package/dist/tests/parser/module-syntax.test.js +9 -0
  217. package/dist/tests/parser/module-syntax.test.js.map +1 -1
  218. package/dist/tests/parser/parser.test.js +7 -0
  219. package/dist/tests/parser/parser.test.js.map +1 -1
  220. package/dist/tests/version.test.js +5 -1
  221. package/dist/tests/version.test.js.map +1 -1
  222. package/doc/ai/README.md +4 -3
  223. package/doc/ai/cli.md +41 -0
  224. package/doc/ai/contributing.md +20 -16
  225. package/doc/ai/extensions.md +13 -10
  226. package/doc/ai/language-support.md +19 -14
  227. package/doc/ai/troubleshooting.md +11 -9
  228. package/doc/ai/zh-CN/README.md +3 -2
  229. package/doc/ai/zh-CN/cli.md +35 -0
  230. package/doc/ai/zh-CN/contributing.md +16 -15
  231. package/doc/ai/zh-CN/extensions.md +12 -9
  232. package/doc/ai/zh-CN/language-support.md +19 -15
  233. package/doc/ai/zh-CN/troubleshooting.md +9 -8
  234. package/doc/gui/api.md +8 -0
  235. package/doc/gui/build.md +13 -4
  236. package/doc/gui/known-issues.md +19 -14
  237. package/doc/gui/media.md +32 -3
  238. package/doc/gui/rendering.md +3 -1
  239. package/doc/gui.md +28 -5
  240. package/doc/icon.md +5 -4
  241. package/doc/implemented/async.md +51 -0
  242. package/doc/implemented/binder.md +13 -0
  243. package/doc/implemented/cli.md +47 -0
  244. package/doc/implemented/codegen.md +33 -0
  245. package/doc/implemented/collections.md +26 -0
  246. package/doc/implemented/driver.md +19 -0
  247. package/doc/implemented/extensions.md +19 -0
  248. package/doc/implemented/fetch.md +44 -0
  249. package/doc/implemented/lexer.md +23 -0
  250. package/doc/implemented/modules.md +28 -0
  251. package/doc/implemented/node/assert.md +17 -0
  252. package/doc/implemented/node/buffer.md +29 -0
  253. package/doc/implemented/node/child-process.md +29 -0
  254. package/doc/implemented/node/crypto.md +9 -0
  255. package/doc/implemented/node/dgram.md +15 -0
  256. package/doc/implemented/node/events.md +37 -0
  257. package/doc/implemented/node/fs-promises.md +49 -0
  258. package/doc/implemented/node/fs.md +112 -0
  259. package/doc/implemented/node/http.md +21 -0
  260. package/doc/implemented/node/net.md +17 -0
  261. package/doc/implemented/node/os.md +22 -0
  262. package/doc/implemented/node/path.md +33 -0
  263. package/doc/implemented/node/process.md +23 -0
  264. package/doc/implemented/node/querystring.md +20 -0
  265. package/doc/implemented/node/stream-promises.md +8 -0
  266. package/doc/implemented/node/stream.md +19 -0
  267. package/doc/implemented/node/test.md +10 -0
  268. package/doc/implemented/node/url.md +8 -0
  269. package/doc/implemented/node/util.md +25 -0
  270. package/doc/implemented/node/worker-threads.md +10 -0
  271. package/doc/implemented/node/zlib.md +8 -0
  272. package/doc/implemented/node.md +48 -0
  273. package/doc/implemented/operators.md +38 -0
  274. package/doc/implemented/parser.md +58 -0
  275. package/doc/implemented/pipeline.md +28 -0
  276. package/doc/implemented/runtime-core.md +32 -0
  277. package/doc/implemented/stdlib.md +78 -0
  278. package/doc/implemented/strings.md +27 -0
  279. package/doc/implemented/tests.md +10 -0
  280. package/doc/implemented/typed-arrays.md +26 -0
  281. package/doc/implemented/value-model.md +18 -0
  282. package/doc/implemented.md +54 -355
  283. package/doc/node-implemented.md +3 -585
  284. package/doc/node-unimplemented.md +3 -164
  285. package/doc/requirements.md +23 -8
  286. package/doc/unimplemented/classes.md +22 -0
  287. package/doc/unimplemented/deviations.md +27 -0
  288. package/doc/unimplemented/expressions.md +26 -0
  289. package/doc/unimplemented/functions.md +21 -0
  290. package/doc/unimplemented/modules.md +22 -0
  291. package/doc/unimplemented/node/async.md +20 -0
  292. package/doc/unimplemented/node/bun.md +9 -0
  293. package/doc/unimplemented/node/fs-promises.md +20 -0
  294. package/doc/unimplemented/node/fs.md +30 -0
  295. package/doc/unimplemented/node/globals.md +23 -0
  296. package/doc/unimplemented/node/modules.md +21 -0
  297. package/doc/unimplemented/node.md +21 -0
  298. package/doc/unimplemented/statements.md +18 -0
  299. package/doc/unimplemented/stdlib.md +54 -0
  300. package/doc/unimplemented/toolchain.md +14 -0
  301. package/doc/unimplemented/types.md +12 -0
  302. package/doc/unimplemented.md +18 -275
  303. package/doc/xbintsc.config.schema.json +12 -0
  304. package/doc/zh-CN/gui/api.md +7 -0
  305. package/doc/zh-CN/gui/build.md +11 -3
  306. package/doc/zh-CN/gui/known-issues.md +17 -11
  307. package/doc/zh-CN/gui/media.md +26 -2
  308. package/doc/zh-CN/gui/rendering.md +2 -1
  309. package/doc/zh-CN/gui.md +21 -3
  310. package/doc/zh-CN/icon.md +5 -4
  311. package/doc/zh-CN/implemented/async.md +49 -0
  312. package/doc/zh-CN/implemented/binder.md +13 -0
  313. package/doc/zh-CN/implemented/cli.md +46 -0
  314. package/doc/zh-CN/implemented/codegen.md +33 -0
  315. package/doc/zh-CN/implemented/collections.md +26 -0
  316. package/doc/zh-CN/implemented/driver.md +19 -0
  317. package/doc/zh-CN/implemented/extensions.md +19 -0
  318. package/doc/zh-CN/implemented/fetch.md +31 -0
  319. package/doc/zh-CN/implemented/lexer.md +23 -0
  320. package/doc/zh-CN/implemented/modules.md +28 -0
  321. package/doc/zh-CN/implemented/node/assert.md +17 -0
  322. package/doc/zh-CN/implemented/node/buffer.md +25 -0
  323. package/doc/zh-CN/implemented/node/child-process.md +27 -0
  324. package/doc/zh-CN/implemented/node/crypto.md +9 -0
  325. package/doc/zh-CN/implemented/node/dgram.md +15 -0
  326. package/doc/zh-CN/implemented/node/events.md +36 -0
  327. package/doc/zh-CN/implemented/node/fs-promises.md +30 -0
  328. package/doc/zh-CN/implemented/node/fs.md +105 -0
  329. package/doc/zh-CN/implemented/node/http.md +17 -0
  330. package/doc/zh-CN/implemented/node/net.md +17 -0
  331. package/doc/zh-CN/implemented/node/os.md +21 -0
  332. package/doc/zh-CN/implemented/node/path.md +26 -0
  333. package/doc/zh-CN/implemented/node/process.md +23 -0
  334. package/doc/zh-CN/implemented/node/querystring.md +20 -0
  335. package/doc/zh-CN/implemented/node/stream-promises.md +8 -0
  336. package/doc/zh-CN/implemented/node/stream.md +15 -0
  337. package/doc/zh-CN/implemented/node/test.md +10 -0
  338. package/doc/zh-CN/implemented/node/url.md +8 -0
  339. package/doc/zh-CN/implemented/node/util.md +25 -0
  340. package/doc/zh-CN/implemented/node/worker-threads.md +9 -0
  341. package/doc/zh-CN/implemented/node/zlib.md +8 -0
  342. package/doc/zh-CN/implemented/node.md +45 -0
  343. package/doc/zh-CN/implemented/operators.md +38 -0
  344. package/doc/zh-CN/implemented/parser.md +58 -0
  345. package/doc/zh-CN/implemented/pipeline.md +25 -0
  346. package/doc/zh-CN/implemented/runtime-core.md +31 -0
  347. package/doc/zh-CN/implemented/stdlib.md +76 -0
  348. package/doc/zh-CN/implemented/strings.md +27 -0
  349. package/doc/zh-CN/implemented/tests.md +10 -0
  350. package/doc/zh-CN/implemented/typed-arrays.md +26 -0
  351. package/doc/zh-CN/implemented/value-model.md +18 -0
  352. package/doc/zh-CN/implemented.md +50 -350
  353. package/doc/zh-CN/node-implemented.md +4 -531
  354. package/doc/zh-CN/node-unimplemented.md +4 -139
  355. package/doc/zh-CN/plan-require-node-modules.md +4 -4
  356. package/doc/zh-CN/requirements.md +20 -6
  357. package/doc/zh-CN/unimplemented/classes.md +22 -0
  358. package/doc/zh-CN/unimplemented/deviations.md +24 -0
  359. package/doc/zh-CN/unimplemented/expressions.md +24 -0
  360. package/doc/zh-CN/unimplemented/functions.md +21 -0
  361. package/doc/zh-CN/unimplemented/modules.md +19 -0
  362. package/doc/zh-CN/unimplemented/node/async.md +20 -0
  363. package/doc/zh-CN/unimplemented/node/bun.md +8 -0
  364. package/doc/zh-CN/unimplemented/node/fs-promises.md +12 -0
  365. package/doc/zh-CN/unimplemented/node/fs.md +24 -0
  366. package/doc/zh-CN/unimplemented/node/globals.md +14 -0
  367. package/doc/zh-CN/unimplemented/node/modules.md +15 -0
  368. package/doc/zh-CN/unimplemented/node.md +18 -0
  369. package/doc/zh-CN/unimplemented/statements.md +15 -0
  370. package/doc/zh-CN/unimplemented/stdlib.md +54 -0
  371. package/doc/zh-CN/unimplemented/toolchain.md +14 -0
  372. package/doc/zh-CN/unimplemented/types.md +11 -0
  373. package/doc/zh-CN/unimplemented.md +14 -237
  374. package/llms.txt +32 -4
  375. package/package.json +1 -1
  376. package/runtime/ext_gui/inline_svg.cpp +219 -0
  377. package/runtime/ext_gui/inline_svg.h +41 -0
  378. package/runtime/ext_gui/layout.cpp +18 -0
  379. package/runtime/ext_gui/layout.h +7 -0
  380. package/runtime/ext_gui/layout_flow.cpp +4 -3
  381. package/runtime/ext_gui/paint.cpp +14 -0
  382. package/runtime/ext_gui/paint.h +5 -1
  383. package/runtime/ext_gui/renderer_image.cpp +53 -25
  384. package/runtime/ext_gui/renderer_shaders.h +2 -2
  385. package/runtime/ext_gui/stb_image.h +1 -17
  386. package/runtime/ext_gui/style_ua.cpp +3 -0
  387. package/runtime/ext_gui/svg.cpp +122 -39
  388. package/runtime/ext_gui/svg.h +14 -3
  389. package/runtime/ext_gui/window.cpp +28 -0
  390. package/runtime/ext_node/child_process/child_process.c +173 -73
  391. package/runtime/ext_node/fs/async_api.c +314 -0
  392. package/runtime/ext_node/fs/async_complete.c +99 -0
  393. package/runtime/ext_node/fs/async_fh.c +206 -0
  394. package/runtime/ext_node/fs/async_job.c +81 -0
  395. package/runtime/ext_node/fs/async_job.h +132 -0
  396. package/runtime/ext_node/fs/async_worker.c +534 -0
  397. package/runtime/ext_node/fs/async_worker_dir.c +439 -0
  398. package/runtime/ext_node/fs/async_worker_dir.h +33 -0
  399. package/runtime/ext_node/fs/async_worker_fd.c +74 -0
  400. package/runtime/ext_node/fs/dir.c +60 -15
  401. package/runtime/ext_node/fs/fs_common.h +9 -0
  402. package/runtime/ext_node/fs/fs_ops.c +18 -29
  403. package/runtime/ext_node/fs/parts/builtins.inc +34 -0
  404. package/runtime/ext_node/fs/parts/platform.inc +66 -0
  405. package/runtime/ext_node/fs/promises.c +44 -234
  406. package/runtime/rt.h +15 -0
  407. package/runtime/rt_internal.h +108 -0
  408. package/runtime/xt_alloc.c +43 -7
  409. package/runtime/xt_array_buffer.c +284 -0
  410. package/runtime/xt_async.c +46 -21
  411. package/runtime/xt_async_io.c +333 -0
  412. package/runtime/xt_async_io.h +47 -0
  413. package/runtime/xt_bigint/helpers.inc +3 -3
  414. package/runtime/xt_builtins.c +21 -17
  415. package/runtime/xt_constructors.c +12 -2
  416. package/runtime/xt_containers/access.inc +148 -3
  417. package/runtime/xt_containers/objects.inc +26 -2
  418. package/runtime/xt_containers/shapes.inc +71 -0
  419. package/runtime/xt_containers.c +1 -0
  420. package/runtime/xt_coroutine.c +17 -0
  421. package/runtime/xt_fetch/async.inc +295 -0
  422. package/runtime/xt_fetch/request.inc +6 -183
  423. package/runtime/xt_fetch/socket.inc +5 -4
  424. package/runtime/xt_fetch.c +6 -4
  425. package/runtime/xt_generator.c +299 -10
  426. package/runtime/xt_io/inspect.inc +112 -0
  427. package/runtime/xt_loop.c +79 -7
  428. package/runtime/xt_performance.c +37 -0
  429. package/runtime/xt_promise.c +63 -1
  430. package/runtime/xt_stdlib/arrays.inc +1 -1
  431. package/runtime/xt_stdlib/dispatch.inc +46 -11
  432. package/runtime/xt_stdlib/strings.inc +1 -1
  433. package/runtime/xt_stdlib2/array-statics.inc +25 -0
  434. package/runtime/xt_stdlib2/arrays.inc +5 -3
  435. package/runtime/xt_stdlib2/container.inc +5 -0
  436. package/runtime/xt_stdlib2/date.inc +111 -3
  437. package/runtime/xt_stdlib2/error.inc +24 -0
  438. package/runtime/xt_stdlib2/json.inc +310 -19
  439. package/runtime/xt_stdlib2/number-string-statics.inc +1 -1
  440. package/runtime/xt_stdlib2/objects.inc +122 -0
  441. package/runtime/xt_stdlib2/set.inc +1 -1
  442. package/runtime/xt_structured_clone.c +159 -0
  443. package/runtime/xt_symbol.c +2 -2
  444. package/runtime/xt_text_codec.c +69 -0
  445. package/runtime/xt_typed_array/construction.inc +35 -5
  446. package/runtime/xt_typed_array/elements.inc +159 -0
  447. package/runtime/xt_typed_array/methods.inc +21 -5
  448. package/runtime/xt_typed_array.c +7 -10
  449. package/runtime/xt_url.c +375 -0
  450. package/runtime/xt_values/arithmetic.inc +2 -2
  451. package/runtime/xt_values/conversions.inc +1 -1
  452. package/runtime/xt_weak.c +281 -0
  453. package/scripts/build-gui.ts +133 -60
  454. package/scripts/check-version.ts +3 -3
  455. package/src/binder/declarations.ts +14 -3
  456. package/src/cli/hints.ts +8 -1
  457. package/src/cli/main.ts +119 -18
  458. package/src/cli/watch.ts +101 -0
  459. package/src/codegen/generator/calls/access.ts +10 -2
  460. package/src/codegen/generator/calls/closures.ts +12 -4
  461. package/src/codegen/generator/context.ts +23 -3
  462. package/src/codegen/generator/expressions/operators.ts +27 -13
  463. package/src/codegen/generator/expressions/primary.ts +4 -0
  464. package/src/codegen/generator/module.ts +0 -7
  465. package/src/codegen/generator/numeric.ts +85 -11
  466. package/src/codegen/generator/state.ts +23 -0
  467. package/src/codegen/generator/statements/control-flow.ts +1 -4
  468. package/src/codegen/generator/statements/loops.ts +50 -16
  469. package/src/codegen/generator/tables.ts +26 -1
  470. package/src/diagnostics/diagnostic.ts +23 -3
  471. package/src/driver/app-artifacts.ts +77 -0
  472. package/src/driver/build-key.ts +55 -0
  473. package/src/driver/bundler/graph.ts +63 -13
  474. package/src/driver/bundler/merge.ts +4 -1
  475. package/src/driver/compiler.ts +94 -328
  476. package/src/driver/config.ts +11 -0
  477. package/src/driver/frontend.ts +120 -0
  478. package/src/driver/index.ts +0 -1
  479. package/src/driver/options.ts +70 -0
  480. package/src/driver/runtime-objects.ts +134 -0
  481. package/src/driver/toolchain-provider.ts +4 -0
  482. package/src/driver/toolchain.ts +154 -10
  483. package/src/driver/version.ts +12 -0
  484. package/src/driver/win-icon.ts +36 -36
  485. package/src/extensions/node/fs/index.ts +12 -3
  486. package/src/extensions/node/fs-promises/index.ts +15 -6
  487. package/src/parser/declarations/classes.ts +4 -0
  488. package/src/parser/declarations/functions.ts +12 -1
  489. package/src/parser/modules.ts +8 -4
  490. package/src/parser/parser.ts +28 -0
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Front end: source text in, LLVM IR out (no toolchain involved).
3
+ *
4
+ * `compileString` compiles one in-memory source text; `compileEntry` reads a
5
+ * file and first bundles every reachable module. `build` reuses the same
6
+ * `parseEntry` step so the module graph is resolved identically for `emit`,
7
+ * `run` and `build`.
8
+ */
9
+ import { DiagnosticBag } from "../diagnostics/diagnostic.js";
10
+ import { type SourceFileNode } from "../ast/nodes.js";
11
+ import { type ExtensionRegistry } from "../extensions/registry.js";
12
+ import type { CompileStringResult } from "./options.js";
13
+ /** A parsed (and, for module entries, already bundled) entry file. */
14
+ export interface ParsedEntry {
15
+ readonly absoluteEntry: string;
16
+ readonly sourceText: string;
17
+ readonly sourceFile: SourceFileNode;
18
+ /** The text the incremental cache hashes (the bundled text for modules). */
19
+ readonly cacheText: string;
20
+ }
21
+ /**
22
+ * Parse an entry file, bundling its module graph first when it uses
23
+ * `import`/`export`. The caller owns `diagnostics` and must not run code
24
+ * generation when it has errors (the tree would be missing nodes).
25
+ */
26
+ export declare function parseEntry(entryPath: string, registry: ExtensionRegistry, diagnostics: DiagnosticBag): ParsedEntry;
27
+ /** Compile TypeScript source text to LLVM IR without touching the toolchain. */
28
+ export declare function compileString(source: string, fileName?: string, extensions?: ExtensionRegistry, options?: {
29
+ readonly debug?: boolean;
30
+ }): CompileStringResult;
31
+ /**
32
+ * Compile a file to LLVM IR, bundling every reachable relative module first so
33
+ * that imports from other TypeScript sources resolve exactly like `build`.
34
+ */
35
+ export declare function compileEntry(entryPath: string, extensions?: ExtensionRegistry, options?: {
36
+ readonly debug?: boolean;
37
+ }): CompileStringResult;
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Front end: source text in, LLVM IR out (no toolchain involved).
3
+ *
4
+ * `compileString` compiles one in-memory source text; `compileEntry` reads a
5
+ * file and first bundles every reachable module. `build` reuses the same
6
+ * `parseEntry` step so the module graph is resolved identically for `emit`,
7
+ * `run` and `build`.
8
+ */
9
+ import { readFileSync } from "node:fs";
10
+ import { resolve } from "node:path";
11
+ import { DiagnosticBag } from "../diagnostics/diagnostic.js";
12
+ import { SourceFile } from "../diagnostics/source.js";
13
+ import { sourceTextBytes } from "../diagnostics/source-text.js";
14
+ import { Parser } from "../parser/parser.js";
15
+ import { generate } from "../codegen/llvm.js";
16
+ import { SyntaxKind } from "../ast/nodes.js";
17
+ import { bundleModules } from "./modules.js";
18
+ import { createDefaultRegistry } from "../extensions/registry.js";
19
+ /**
20
+ * Every module specifier the registry can resolve at code generation time (the
21
+ * registered platform modules plus the hints for known-but-disabled
22
+ * extensions). Bare imports outside this set are looked up in `node_modules`
23
+ * and bundled as source.
24
+ */
25
+ function externalModuleSpecifiers(registry) {
26
+ return new Set([
27
+ ...Object.keys(registry.modules()),
28
+ ...Object.keys(registry.moduleHints()),
29
+ ]);
30
+ }
31
+ /**
32
+ * Parse an entry file, bundling its module graph first when it uses
33
+ * `import`/`export`. The caller owns `diagnostics` and must not run code
34
+ * generation when it has errors (the tree would be missing nodes).
35
+ */
36
+ export function parseEntry(entryPath, registry, diagnostics) {
37
+ const absoluteEntry = resolve(entryPath);
38
+ const sourceText = sourceTextBytes(readFileSync(absoluteEntry, "utf8"));
39
+ const file = new SourceFile(absoluteEntry, sourceText);
40
+ const parser = new Parser(file, diagnostics);
41
+ let sourceFile = parser.parseSourceFile();
42
+ const isModule = sourceFile.statements.some((statement) => statement.kind === SyntaxKind.ImportDeclaration ||
43
+ statement.kind === SyntaxKind.ExportDeclaration ||
44
+ statement.kind === SyntaxKind.ExportAssignment);
45
+ let cacheText = sourceText;
46
+ if (isModule) {
47
+ const bundled = bundleModules(absoluteEntry, diagnostics, externalModuleSpecifiers(registry), registry.assetLoaders());
48
+ if (bundled) {
49
+ sourceFile = bundled.sourceFile;
50
+ cacheText = bundled.text;
51
+ }
52
+ }
53
+ return { absoluteEntry, sourceText, sourceFile, cacheText };
54
+ }
55
+ /** Compile TypeScript source text to LLVM IR without touching the toolchain. */
56
+ export function compileString(source, fileName = "input.ts", extensions, options = {}) {
57
+ const file = new SourceFile(fileName, source);
58
+ const diagnostics = new DiagnosticBag();
59
+ const parser = new Parser(file, diagnostics);
60
+ const sourceFile = parser.parseSourceFile();
61
+ const registry = extensions ?? createDefaultRegistry();
62
+ /* Code generation assumes a well-formed tree (binder and codegen both read
63
+ * required children), so never lower a file that already failed to parse. */
64
+ if (diagnostics.hasErrors)
65
+ return { ir: "", diagnostics: diagnostics.diagnostics };
66
+ const { ir } = generate(sourceFile, diagnostics, {
67
+ builtins: registry.builtins(),
68
+ modules: registry.modules(),
69
+ moduleHints: registry.moduleHints(),
70
+ debug: options.debug === true,
71
+ });
72
+ return { ir, diagnostics: diagnostics.diagnostics };
73
+ }
74
+ /**
75
+ * Compile a file to LLVM IR, bundling every reachable relative module first so
76
+ * that imports from other TypeScript sources resolve exactly like `build`.
77
+ */
78
+ export function compileEntry(entryPath, extensions, options = {}) {
79
+ const registry = extensions ?? createDefaultRegistry();
80
+ const diagnostics = new DiagnosticBag();
81
+ const parsed = parseEntry(entryPath, registry, diagnostics);
82
+ if (diagnostics.hasErrors)
83
+ return { ir: "", diagnostics: diagnostics.diagnostics };
84
+ const { ir } = generate(parsed.sourceFile, diagnostics, {
85
+ builtins: registry.builtins(),
86
+ modules: registry.modules(),
87
+ moduleHints: registry.moduleHints(),
88
+ debug: options.debug === true,
89
+ });
90
+ return { ir, diagnostics: diagnostics.diagnostics };
91
+ }
92
+ //# sourceMappingURL=frontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../../src/driver/frontend.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAA0B,MAAM,2BAA2B,CAAC;AAG1F;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,QAA2B;IAC3D,OAAO,IAAI,GAAG,CAAC;QACb,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,SAAiB,EACjB,QAA2B,EAC3B,WAA0B;IAE1B,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,IAAI,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CACzC,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,iBAAiB;QAC/C,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,iBAAiB;QAC/C,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,gBAAgB,CACjD,CAAC;IACF,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,EAAE,WAAW,EAAE,wBAAwB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QACvH,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAChC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,QAAQ,GAAG,UAAU,EACrB,UAA8B,EAC9B,UAAwC,EAAE;IAE1C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,UAAU,IAAI,qBAAqB,EAAE,CAAC;IACvD;iFAC6E;IAC7E,IAAI,WAAW,CAAC,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;IACnF,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE;QAC/C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;QAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI;KAC9B,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,UAA8B,EAC9B,UAAwC,EAAE;IAE1C,MAAM,QAAQ,GAAG,UAAU,IAAI,qBAAqB,EAAE,CAAC;IACvD,MAAM,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5D,IAAI,WAAW,CAAC,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;IACnF,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE;QACtD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;QAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI;KAC9B,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;AACtD,CAAC"}
@@ -6,5 +6,5 @@ export { findClang, realRunner, ToolchainError, type Runner, } from "./toolchain
6
6
  export { resolveToolchain, type ResolvedToolchain, type ToolchainSource } from "./toolchain-provider.js";
7
7
  export { CONFIG_FILE_NAME, findProjectConfig, loadProjectConfig, parseProjectConfig, resolveConfigPaths, ProjectConfigError, type AppConfig, type LoadedProjectConfig, type ProjectConfig, } from "./config.js";
8
8
  export { ensureIconObject, iconSource, readIcon, toIcoBytes, pngToIco, ICON_SYMBOLS, EMPTY_ICON, IconError, type IconFormat, type IconInfo, } from "./icon.js";
9
- export { ensureWindowsIconResource, resolveResourceCompiler, type ResourceCompiler, type ResourceCompilerKind, } from "./win-icon.js";
9
+ export { ensureWindowsIconResource, resolveResourceCompiler, type ResourceCompiler, } from "./win-icon.js";
10
10
  export { bundlePathFor, infoPlist, packageMacApp, type MacBundleOptions } from "./mac-bundle.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAsD,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC/H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,SAAS,EACT,UAAU,EACV,cAAc,GAEf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAgD,MAAM,yBAAyB,CAAC;AACzG,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GAInB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,GAGV,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GAGxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAyB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAsD,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC/H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,SAAS,EACT,UAAU,EACV,cAAc,GAEf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAgD,MAAM,yBAAyB,CAAC;AACzG,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GAInB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,GAGV,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAyB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Public option and result types for the build driver.
3
+ *
4
+ * They live apart from the orchestration in `compiler.ts` so a feature that
5
+ * adds one option touches this file (and the phase that consumes it) without
6
+ * colliding with unrelated driver work.
7
+ */
8
+ import type { Diagnostic } from "../diagnostics/diagnostic.js";
9
+ import type { ExtensionRegistry } from "../extensions/registry.js";
10
+ import type { AppConfig } from "./config.js";
11
+ import type { PgoMode, Runner } from "./toolchain.js";
12
+ /** What `build` produces: an executable, an object file or LLVM IR only. */
13
+ export type EmitKind = "exe" | "obj" | "ir";
14
+ export interface BuildOptions {
15
+ /** Explicit output path (defaults to the source base name in `outDir`). */
16
+ readonly output?: string;
17
+ readonly outDir?: string;
18
+ readonly optimize?: "0" | "1" | "2" | "3";
19
+ readonly emit?: EmitKind;
20
+ readonly force?: boolean;
21
+ readonly verbose?: boolean;
22
+ readonly cacheDir?: string;
23
+ readonly extensions?: ExtensionRegistry;
24
+ readonly runner?: Runner;
25
+ readonly clang?: string;
26
+ /** Prefer a prebuilt `runtime/lib/<os>-<arch>/*.a` archive when present (default true). */
27
+ readonly preferPrebuilt?: boolean;
28
+ readonly write?: boolean;
29
+ /** Application icon embedded into the binary (shorthand for `app.icon`). */
30
+ readonly icon?: string;
31
+ /** Application metadata: name, icon and macOS bundle settings. */
32
+ readonly app?: AppConfig;
33
+ /** Emit LLVM debug metadata so `-g` produces DWARF/CodeView (default false). */
34
+ readonly debug?: boolean;
35
+ /** Compile the program and runtime to LTO bitcode and link with lld. */
36
+ readonly lto?: boolean;
37
+ /**
38
+ * Profile-guided optimization. `generate` builds an instrumented binary that
39
+ * writes `.profraw` files into `pgoDir`; `use` consumes them.
40
+ */
41
+ readonly pgo?: PgoMode;
42
+ /** Profile directory (default: `<outDir>/pgo`). */
43
+ readonly pgoDir?: string;
44
+ }
45
+ /** One phase of a build, in milliseconds (reported by `--time`). */
46
+ export interface PhaseTiming {
47
+ readonly phase: "frontend" | "codegen" | "runtime" | "clang" | "link";
48
+ readonly ms: number;
49
+ }
50
+ export interface BuildResult {
51
+ readonly outputPath: string;
52
+ readonly irPath?: string;
53
+ readonly cached: boolean;
54
+ readonly diagnostics: readonly Diagnostic[];
55
+ readonly ir?: string;
56
+ /** macOS `.app` bundle produced by `app.bundle` (darwin only). */
57
+ readonly bundlePath?: string;
58
+ /** Per-phase timings, collected for `xbintsc build --time`. */
59
+ readonly timings?: readonly PhaseTiming[];
60
+ }
61
+ export interface CompileStringResult {
62
+ readonly ir: string;
63
+ readonly diagnostics: readonly Diagnostic[];
64
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Public option and result types for the build driver.
3
+ *
4
+ * They live apart from the orchestration in `compiler.ts` so a feature that
5
+ * adds one option touches this file (and the phase that consumes it) without
6
+ * colliding with unrelated driver work.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/driver/options.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Compiling the C runtime (and every extension's C sources) into linkable
3
+ * objects, reusing cached objects keyed by the source/header content hash.
4
+ *
5
+ * `RUNTIME_SOURCES` is the list of core translation units. A feature that adds
6
+ * a runtime file adds one line here and nowhere else.
7
+ */
8
+ import type { ExtensionRegistry } from "../extensions/registry.js";
9
+ import { type PgoMode, type Runner } from "./toolchain.js";
10
+ /** Core runtime translation units (each compiled and cached independently). */
11
+ export declare const RUNTIME_SOURCES: readonly ["xt_alloc.c", "xt_values.c", "xt_bigint.c", "xt_containers.c", "xt_weak.c", "xt_typed_array.c", "xt_stdlib.c", "xt_stdlib2.c", "xt_promise.c", "xt_async.c", "xt_loop.c", "xt_async_io.c", "xt_generator.c", "xt_coroutine.c", "xt_fetch.c", "xt_symbol.c", "xt_builtins.c", "xt_constructors.c", "xt_structured_clone.c", "xt_performance.c", "xt_text_codec.c", "xt_url.c", "xt_array_buffer.c", "xt_io.c"];
12
+ export interface RuntimeObjects {
13
+ readonly runtimeObjects: readonly string[];
14
+ readonly extensionObjects: readonly string[];
15
+ /** Pre-built C++/Rust objects and archives contributed by native extensions. */
16
+ readonly nativeObjects: readonly string[];
17
+ }
18
+ export interface RuntimeObjectsOptions {
19
+ readonly runner: Runner;
20
+ readonly clang: string;
21
+ readonly runtimeDir: string;
22
+ readonly cacheDir: string;
23
+ readonly registry: ExtensionRegistry;
24
+ readonly preferPrebuilt: boolean;
25
+ readonly env: Record<string, string>;
26
+ readonly lto: boolean;
27
+ readonly pgo: PgoMode | undefined;
28
+ readonly pgoDir: string;
29
+ }
30
+ /**
31
+ * Compile the core runtime and every extension source, reusing cached object
32
+ * files keyed on the C source hash. Returns the object paths to link.
33
+ *
34
+ * When `preferPrebuilt` is set, a shipped static archive
35
+ * (`runtime/lib/<os>-<arch>/{core,ext_<name>}.a`) is used instead of compiling
36
+ * that group's C sources. Missing archives fall back to compiling the sources.
37
+ */
38
+ export declare function ensureRuntimeObjects(options: RuntimeObjectsOptions): RuntimeObjects;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Compiling the C runtime (and every extension's C sources) into linkable
3
+ * objects, reusing cached objects keyed by the source/header content hash.
4
+ *
5
+ * `RUNTIME_SOURCES` is the list of core translation units. A feature that adds
6
+ * a runtime file adds one line here and nowhere else.
7
+ */
8
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
9
+ import { basename, join, resolve } from "node:path";
10
+ import { hashParts } from "./cache.js";
11
+ import { findRuntimeLibrary } from "./runtime-lib.js";
12
+ import { compileC, optimizationFlags, RUNTIME_CFLAGS } from "./toolchain.js";
13
+ import { COMPILER_VERSION } from "./version.js";
14
+ /** Core runtime translation units (each compiled and cached independently). */
15
+ export const RUNTIME_SOURCES = [
16
+ "xt_alloc.c",
17
+ "xt_values.c",
18
+ "xt_bigint.c",
19
+ "xt_containers.c",
20
+ "xt_weak.c",
21
+ "xt_typed_array.c",
22
+ "xt_stdlib.c",
23
+ "xt_stdlib2.c",
24
+ "xt_promise.c",
25
+ "xt_async.c",
26
+ "xt_loop.c",
27
+ "xt_async_io.c",
28
+ "xt_generator.c",
29
+ "xt_coroutine.c",
30
+ "xt_fetch.c",
31
+ "xt_symbol.c",
32
+ "xt_builtins.c",
33
+ "xt_constructors.c",
34
+ "xt_structured_clone.c",
35
+ "xt_performance.c",
36
+ "xt_text_codec.c",
37
+ "xt_url.c",
38
+ "xt_array_buffer.c",
39
+ "xt_io.c",
40
+ ];
41
+ /**
42
+ * Compile the core runtime and every extension source, reusing cached object
43
+ * files keyed on the C source hash. Returns the object paths to link.
44
+ *
45
+ * When `preferPrebuilt` is set, a shipped static archive
46
+ * (`runtime/lib/<os>-<arch>/{core,ext_<name>}.a`) is used instead of compiling
47
+ * that group's C sources. Missing archives fall back to compiling the sources.
48
+ */
49
+ export function ensureRuntimeObjects(options) {
50
+ const { runner, clang, runtimeDir, cacheDir, registry, preferPrebuilt, env, lto, pgo, pgoDir } = options;
51
+ const optimization = optimizationFlags(lto, pgo, pgoDir);
52
+ /* Runtime objects depend on the shared headers (rt.h/rt_internal.h/...) and
53
+ the `#include`d implementation fragments (`.inc`), so any change to them
54
+ must invalidate every cached object. Hash them all. */
55
+ const headerParts = [];
56
+ const collectHeaders = (dir) => {
57
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
58
+ const full = join(dir, entry.name);
59
+ if (entry.isDirectory())
60
+ collectHeaders(full);
61
+ else if (entry.name.endsWith(".h") || entry.name.endsWith(".inc"))
62
+ headerParts.push(readFileSync(full, "utf8"));
63
+ }
64
+ };
65
+ collectHeaders(runtimeDir);
66
+ const headerStamp = hashParts(headerParts);
67
+ const compileOne = (sourcePath, tag) => {
68
+ const body = readFileSync(sourcePath, "utf8");
69
+ const key = hashParts([
70
+ "runtime",
71
+ COMPILER_VERSION,
72
+ RUNTIME_CFLAGS.join(" "),
73
+ optimization.join(" "),
74
+ tag,
75
+ headerStamp,
76
+ body,
77
+ clang,
78
+ process.platform,
79
+ ]);
80
+ const objectPath = join(cacheDir, `${tag}-${key}.o`);
81
+ if (!existsSync(objectPath)) {
82
+ compileC(runner, clang, sourcePath, objectPath, runtimeDir, env, optimization);
83
+ }
84
+ return objectPath;
85
+ };
86
+ const coreArchive = preferPrebuilt ? findRuntimeLibrary("core") : undefined;
87
+ const runtimeObjects = coreArchive
88
+ ? [coreArchive]
89
+ : RUNTIME_SOURCES.map((source) => compileOne(join(runtimeDir, source), basename(source, ".c")));
90
+ const extensionObjects = [];
91
+ const seen = new Set();
92
+ for (const extension of registry.all()) {
93
+ const sources = extension.runtimeSources ? extension.runtimeSources() : [];
94
+ if (sources.length === 0)
95
+ continue;
96
+ const archive = preferPrebuilt ? findRuntimeLibrary(`ext_${extension.name}`) : undefined;
97
+ if (archive) {
98
+ extensionObjects.push(archive);
99
+ continue;
100
+ }
101
+ for (const sourcePath of sources) {
102
+ const dedupeKey = resolve(sourcePath);
103
+ if (seen.has(dedupeKey))
104
+ continue;
105
+ seen.add(dedupeKey);
106
+ extensionObjects.push(compileOne(sourcePath, `ext_${extensionObjects.length}_${basename(sourcePath, ".c")}`));
107
+ }
108
+ }
109
+ // A native archive may be shared by several manifests; link each once.
110
+ return { runtimeObjects, extensionObjects, nativeObjects: [...new Set(registry.nativeObjects())] };
111
+ }
112
+ //# sourceMappingURL=runtime-objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-objects.js","sourceRoot":"","sources":["../../../src/driver/runtime-objects.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AACxG,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,aAAa;IACb,aAAa;IACb,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,cAAc;IACd,YAAY;IACZ,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;IAClB,iBAAiB;IACjB,UAAU;IACV,mBAAmB;IACnB,SAAS;CACD,CAAC;AAsBX;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzG,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACzD;;6DAEyD;IACzD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAQ,EAAE;QAC3C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,cAAc,CAAC,IAAI,CAAC,CAAC;iBACzC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAClH,CAAC;IACH,CAAC,CAAC;IACF,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3B,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAE,GAAW,EAAU,EAAE;QAC7D,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,SAAS,CAAC;YACpB,SAAS;YACT,gBAAgB;YAChB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YACtB,GAAG;YACH,WAAW;YACX,IAAI;YACJ,KAAK;YACL,OAAO,CAAC,QAAQ;SACjB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,cAAc,GAAG,WAAW;QAChC,CAAC,CAAC,CAAC,WAAW,CAAC;QACf,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAElG,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YAClC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpB,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,gBAAgB,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChH,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC;AACrG,CAAC"}
@@ -17,6 +17,10 @@
17
17
  * The version is checked here, not left to the first failed C compile: the
18
18
  * emitted IR needs LLVM 16+ (opaque pointers), and a "clang 15 is too old"
19
19
  * error up front is far more actionable than a wall of IR type errors later.
20
+ * On Windows the target is checked as well: only an MSVC-targeting clang can
21
+ * link against the runtime, so a compiler built for another Windows ABI is
22
+ * skipped (or rejected, when named explicitly) instead of producing objects
23
+ * the linker cannot mix.
20
24
  *
21
25
  * Extra linker arguments (for example `-fuse-ld=lld`) can be supplied through
22
26
  * `xbintsc_LINKER_ARGS`.
@@ -17,6 +17,10 @@
17
17
  * The version is checked here, not left to the first failed C compile: the
18
18
  * emitted IR needs LLVM 16+ (opaque pointers), and a "clang 15 is too old"
19
19
  * error up front is far more actionable than a wall of IR type errors later.
20
+ * On Windows the target is checked as well: only an MSVC-targeting clang can
21
+ * link against the runtime, so a compiler built for another Windows ABI is
22
+ * skipped (or rejected, when named explicitly) instead of producing objects
23
+ * the linker cannot mix.
20
24
  *
21
25
  * Extra linker arguments (for example `-fuse-ld=lld`) can be supplied through
22
26
  * `xbintsc_LINKER_ARGS`.
@@ -1 +1 @@
1
- {"version":3,"file":"toolchain-provider.js","sourceRoot":"","sources":["../../../src/driver/toolchain-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAkC,MAAM,gBAAgB,CAAC;AAkBzF,SAAS,UAAU,CAAC,QAA2B;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,SAAiB,UAAU;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,OAAO;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;QAC1B,GAAG,EAAE,EAAE;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"toolchain-provider.js","sourceRoot":"","sources":["../../../src/driver/toolchain-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAkC,MAAM,gBAAgB,CAAC;AAkBzF,SAAS,UAAU,CAAC,QAA2B;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,SAAiB,UAAU;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,OAAO;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;QAC1B,GAAG,EAAE,EAAE;KACR,CAAC;AACJ,CAAC"}
@@ -42,6 +42,8 @@ export interface ClangProbe {
42
42
  /** True when the command ran and exited 0. */
43
43
  readonly responds: boolean;
44
44
  readonly version?: ClangVersion;
45
+ /** The `Target:` triple clang was built for, when it prints one. */
46
+ readonly target?: string;
45
47
  /** First line of the version output, for diagnostics. */
46
48
  readonly summary: string;
47
49
  }
@@ -58,6 +60,15 @@ export interface ClangLocation {
58
60
  * gcc, which `cc` may resolve to).
59
61
  */
60
62
  export declare function parseClangVersion(output: string): ClangVersion | undefined;
63
+ /**
64
+ * Extract the `Target:` triple from `clang --version` output. Windows builds
65
+ * must target the MSVC ABI; clang built for a GNU/Windows or other triple emits
66
+ * objects that cannot be linked into an xbintsc executable (see
67
+ * {@link isMsvcTarget}).
68
+ */
69
+ export declare function parseClangTarget(output: string): string | undefined;
70
+ /** True when a clang target triple uses the MSVC ABI on Windows. */
71
+ export declare function isMsvcTarget(target: string): boolean;
61
72
  /** Run `<command> --version` and classify the result. Never throws. */
62
73
  export declare function probeClang(runner: Runner, command: string, env?: Record<string, string>): ClangProbe;
63
74
  /** Commands probed for a system compiler, in preference order. */
@@ -75,6 +86,10 @@ export declare function systemClangCandidates(): string[];
75
86
  export declare function locateClang(runner?: Runner): ClangLocation;
76
87
  /** Locate a supported clang-compatible C compiler, or throw a clear error. */
77
88
  export declare function findClang(runner?: Runner): string;
89
+ /** Profile-guided optimization stage (`--pgo-generate` / `--pgo-use`). */
90
+ export type PgoMode = "generate" | "use";
91
+ /** clang flags for LTO and the selected PGO stage. */
92
+ export declare function optimizationFlags(lto: boolean | undefined, pgo: PgoMode | undefined, pgoDir: string | undefined): string[];
78
93
  export interface CompileIrOptions {
79
94
  readonly clang: string;
80
95
  readonly irPath: string;
@@ -83,6 +98,11 @@ export interface CompileIrOptions {
83
98
  readonly env?: Record<string, string>;
84
99
  /** Emit debug info (`-g`) and keep frame pointers for crash backtraces. */
85
100
  readonly debug?: boolean;
101
+ /** Compile to LTO bitcode and let the linker optimize across units. */
102
+ readonly lto?: boolean;
103
+ /** Instrument (`generate`) or consume (`use`) an LLVM profile. */
104
+ readonly pgo?: PgoMode;
105
+ readonly pgoDir?: string;
86
106
  }
87
107
  /** Compile an LLVM IR file to a native object file. */
88
108
  export declare function compileIr(runner: Runner, options: CompileIrOptions): void;
@@ -93,6 +113,9 @@ export interface LinkOptions {
93
113
  readonly linkerFlags: readonly string[];
94
114
  readonly optimize: string;
95
115
  readonly env?: Record<string, string>;
116
+ readonly lto?: boolean;
117
+ readonly pgo?: PgoMode;
118
+ readonly pgoDir?: string;
96
119
  }
97
120
  export declare function link(runner: Runner, options: LinkOptions): void;
98
121
  /**
@@ -102,4 +125,12 @@ export declare function link(runner: Runner, options: LinkOptions): void;
102
125
  */
103
126
  export declare const RUNTIME_CFLAGS: readonly ["-O2", "-Wall", "-Wextra", "-D_CRT_SECURE_NO_WARNINGS", ...string[]];
104
127
  /** Compile a C source to an object file (used for the runtime and extensions). */
105
- export declare function compileC(runner: Runner, clang: string, sourcePath: string, objectPath: string, includeDir: string, env?: Record<string, string>): void;
128
+ export declare function compileC(runner: Runner, clang: string, sourcePath: string, objectPath: string, includeDir: string, env?: Record<string, string>, extraFlags?: readonly string[]): void;
129
+ /**
130
+ * Merge the `.profraw` files written by an instrumented binary into the
131
+ * `default.profdata` that `-fprofile-use=<dir>` expects. Clang's `-fprofile-use`
132
+ * does not read raw profiles directly; this runs `llvm-profdata merge`.
133
+ *
134
+ * `xbintsc_LLVM_PROFDATA` selects the tool when it is not on `PATH`.
135
+ */
136
+ export declare function mergeProfileData(runner: Runner, directory: string, clang: string, env?: Record<string, string>): void;