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
@@ -24,7 +24,7 @@ static xt_value xt_ta_method_set(xt_value self, xt_value env, int32_t argc, xt_v
24
24
  if (!xt_ta_length_of(source, &sourceLength)) return XT_UNDEFINED;
25
25
  int32_t offset = argc > 1 ? xt_to_int32(argv[1]) : 0;
26
26
  if (offset < 0 || offset + (int32_t)sourceLength > (int32_t)xt_ta_length(self)) {
27
- xt_throw(xt_string_from_cstr("RangeError: offset is out of bounds"));
27
+ xt_throw(xt_error_from_message("RangeError: offset is out of bounds"));
28
28
  return XT_UNDEFINED;
29
29
  }
30
30
  for (uint32_t i = 0; i < sourceLength; i++) {
@@ -47,6 +47,20 @@ static xt_value xt_ta_method_slice(xt_value self, xt_value env, int32_t argc, xt
47
47
  return out;
48
48
  }
49
49
 
50
+ static xt_value xt_ta_method_subarray(xt_value self, xt_value env, int32_t argc, xt_value *argv) {
51
+ (void)env;
52
+ int kind = xt_typed_array_kind_of(self);
53
+ if (kind < 0) return XT_UNDEFINED;
54
+ xt_value buffer = xt_typed_array_buffer_of(self);
55
+ if (!xt_is_array_buffer(buffer)) return xt_ta_method_slice(self, env, argc, argv);
56
+ int32_t length = (int32_t)xt_ta_length(self);
57
+ int32_t start = xt_ta_relative(argc > 0 && argv[0] != XT_UNDEFINED ? xt_to_int32(argv[0]) : 0, length);
58
+ int32_t end = xt_ta_relative(argc > 1 && argv[1] != XT_UNDEFINED ? xt_to_int32(argv[1]) : length, length);
59
+ if (end < start) end = start;
60
+ uint32_t offset = xt_typed_array_byte_offset_of(self) + (uint32_t)start * (uint32_t)xt_ta_bytes[kind];
61
+ return xt_ta_view(kind, buffer, offset, (uint32_t)(end - start));
62
+ }
63
+
50
64
  static xt_value xt_ta_method_join(xt_value self, xt_value env, int32_t argc, xt_value *argv) {
51
65
  (void)env;
52
66
  xt_value separator = argc > 0 && argv[0] != XT_UNDEFINED ? xt_to_string(argv[0]) : xt_string_from_cstr(",");
@@ -137,14 +151,16 @@ static xt_value xt_ta_method_filter(xt_value self, xt_value env, int32_t argc, x
137
151
  xt_value callback = xt_arg_at(argc, argv, 0);
138
152
  xt_value thisArg = xt_arg_at(argc, argv, 1);
139
153
  int32_t length = (int32_t)xt_ta_length(self);
140
- xt_value out = xt_ta_new(kind, 0);
154
+ /* A fixed-length buffer cannot grow, so collect matches first and build the
155
+ * result typed array from that array. */
156
+ xt_value matches = xt_array_new(0, NULL);
141
157
  for (int32_t i = 0; i < length; i++) {
142
158
  xt_value args[3] = {xt_ta_element(self, (uint32_t)i), xt_number((double)i), self};
143
159
  if (xt_truthy(xt_call_with_this(callback, thisArg, 3, args))) {
144
- xt_ta_append(out, kind, xt_ta_element(self, (uint32_t)i));
160
+ xt_array_push(matches, xt_ta_element(self, (uint32_t)i));
145
161
  }
146
162
  }
147
- return out;
163
+ return xt_ta_from_value(kind, matches, XT_UNDEFINED, XT_UNDEFINED, 0);
148
164
  }
149
165
 
150
166
  static xt_value xt_ta_method_every(xt_value self, xt_value env, int32_t argc, xt_value *argv) {
@@ -208,7 +224,7 @@ static xt_value xt_ta_method_reduce(xt_value self, xt_value env, int32_t argc, x
208
224
  accumulator = xt_ta_element(self, 0);
209
225
  index = 1;
210
226
  } else {
211
- xt_throw(xt_string_from_cstr("TypeError: Reduce of empty array with no initial value"));
227
+ xt_throw(xt_error_from_message("TypeError: Reduce of empty array with no initial value"));
212
228
  return XT_UNDEFINED;
213
229
  }
214
230
  for (; index < length; index++) {
@@ -1,16 +1,12 @@
1
1
  /*
2
2
  * xbintsc runtime - typed arrays.
3
3
  *
4
- * JavaScript TypedArrays are modelled as plain property-bag objects with one
5
- * numbered property per element plus `length`, `byteLength` and `byteOffset`.
6
- * Every write is coerced to the array's element type, so
7
- * `new Uint8Array(2)[0] = 300` stores 44 exactly like ECMAScript and a
8
- * `Float32Array` round-trips through single precision.
9
- *
10
- * There is no shared `ArrayBuffer` backing store: `slice` / `subarray` return
11
- * independent copies and the `.buffer` property is not exposed. That matches
12
- * xbintsc's runtime, which has no distinct binary value type (strings are
13
- * UTF-8 byte arrays and `Buffer` is likewise a property bag).
4
+ * A TypedArray is a view over an `ArrayBuffer`: its elements live in the
5
+ * buffer's bytes at `byteOffset`, and `length` / `byteLength` describe the
6
+ * window. `subarray` shares that buffer; `slice` copies into a new one.
7
+ * Every write is coerced to the element type, so `new Uint8Array(2)[0] = 300`
8
+ * stores 44 exactly like ECMAScript and a `Float32Array` round-trips through
9
+ * single precision.
14
10
  */
15
11
 
16
12
  #include "rt_internal.h"
@@ -46,6 +42,7 @@ static xt_value xt_ta_protos[XT_TA_KIND_COUNT];
46
42
  static xt_value xt_ta_method_fill(xt_value, xt_value, int32_t, xt_value *);
47
43
  static xt_value xt_ta_method_set(xt_value, xt_value, int32_t, xt_value *);
48
44
  static xt_value xt_ta_method_slice(xt_value, xt_value, int32_t, xt_value *);
45
+ static xt_value xt_ta_method_subarray(xt_value, xt_value, int32_t, xt_value *);
49
46
  static xt_value xt_ta_method_join(xt_value, xt_value, int32_t, xt_value *);
50
47
  static xt_value xt_ta_method_to_string(xt_value, xt_value, int32_t, xt_value *);
51
48
  static xt_value xt_ta_method_index_of(xt_value, xt_value, int32_t, xt_value *);
@@ -0,0 +1,375 @@
1
+ /*
2
+ * xbintsc runtime — URLSearchParams.
3
+ *
4
+ * The query string is stored as an array of [key, value] pairs under an
5
+ * internal `__entries` property. Methods are closures on the instance, so the
6
+ * same object model as the rest of the runtime applies. Values are stored
7
+ * decoded and encoded with application/x-www-form-urlencoded rules when
8
+ * serialized (`+` for spaces, percent escapes for everything else).
9
+ */
10
+
11
+ #include "rt_internal.h"
12
+
13
+ #include <ctype.h>
14
+ #include <stdlib.h>
15
+ #include <string.h>
16
+
17
+ static int xt_url_unreserved(unsigned char c) {
18
+ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') ||
19
+ c == '*' || c == '-' || c == '.' || c == '_';
20
+ }
21
+
22
+ static xt_value xt_url_encode(xt_value value) {
23
+ xt_value text = xt_to_string(value);
24
+ xt_string *string = xt_as_string(text);
25
+ const char *bytes = xt_string_bytes(string);
26
+ size_t capacity = string->length * 3 + 1;
27
+ char *out = (char *)malloc(capacity);
28
+ if (!out) abort();
29
+ size_t written = 0;
30
+ for (uint32_t i = 0; i < string->length; i++) {
31
+ unsigned char c = (unsigned char)bytes[i];
32
+ if (c == ' ') {
33
+ out[written++] = '+';
34
+ } else if (xt_url_unreserved(c)) {
35
+ out[written++] = (char)c;
36
+ } else {
37
+ static const char hex[] = "0123456789ABCDEF";
38
+ out[written++] = '%';
39
+ out[written++] = hex[c >> 4];
40
+ out[written++] = hex[c & 0x0f];
41
+ }
42
+ }
43
+ xt_value result = xt_string_new(out, written);
44
+ free(out);
45
+ return result;
46
+ }
47
+
48
+ static int xt_url_hex(char c) {
49
+ if (c >= '0' && c <= '9') return c - '0';
50
+ if (c >= 'a' && c <= 'f') return c - 'a' + 10;
51
+ if (c >= 'A' && c <= 'F') return c - 'A' + 10;
52
+ return -1;
53
+ }
54
+
55
+ static xt_value xt_url_decode(const char *data, size_t length) {
56
+ char *out = (char *)malloc(length == 0 ? 1 : length);
57
+ if (!out) abort();
58
+ size_t written = 0;
59
+ for (size_t i = 0; i < length; i++) {
60
+ char c = data[i];
61
+ if (c == '+') {
62
+ out[written++] = ' ';
63
+ } else if (c == '%' && i + 2 < length) {
64
+ int high = xt_url_hex(data[i + 1]);
65
+ int low = xt_url_hex(data[i + 2]);
66
+ if (high >= 0 && low >= 0) {
67
+ out[written++] = (char)((high << 4) | low);
68
+ i += 2;
69
+ } else {
70
+ out[written++] = c;
71
+ }
72
+ } else {
73
+ out[written++] = c;
74
+ }
75
+ }
76
+ xt_value result = xt_string_new(out, written);
77
+ free(out);
78
+ return result;
79
+ }
80
+
81
+ static xt_value xt_url_entries(xt_value params) {
82
+ xt_value entries = xt_get(params, xt_string_from_cstr("__entries"));
83
+ if (!XT_IS_ARRAY(entries)) {
84
+ entries = xt_array_new(0, NULL);
85
+ xt_object_set(params, xt_string_from_cstr("__entries"), entries);
86
+ }
87
+ return entries;
88
+ }
89
+
90
+ static void xt_url_set_size(xt_value params) {
91
+ xt_array *entries = xt_as_array(xt_url_entries(params));
92
+ xt_object_set(params, xt_string_from_cstr("size"), xt_number((double)entries->length));
93
+ }
94
+
95
+ static void xt_url_append_pair(xt_value entries, xt_value key, xt_value value) {
96
+ xt_value pair = xt_array_new(0, NULL);
97
+ xt_array_push(pair, key);
98
+ xt_array_push(pair, value);
99
+ xt_array_push(entries, pair);
100
+ }
101
+
102
+ static xt_value xt_url_string_at(xt_value text, size_t start, size_t length) {
103
+ xt_string *string = xt_as_string(text);
104
+ const char *bytes = xt_string_bytes(string);
105
+ return xt_string_new(bytes + start, length);
106
+ }
107
+
108
+ /* Split a query string on `&`, then each item on the first `=`; decode both
109
+ * halves and append them. A leading `?` is ignored. */
110
+ static void xt_url_parse_into(xt_value params, xt_value input) {
111
+ xt_value text = xt_to_string(input);
112
+ xt_string *string = xt_as_string(text);
113
+ const char *bytes = xt_string_bytes(string);
114
+ size_t length = string->length;
115
+ size_t start = (length > 0 && bytes[0] == '?') ? 1 : 0;
116
+ xt_value entries = xt_url_entries(params);
117
+ while (start <= length) {
118
+ size_t end = start;
119
+ while (end < length && bytes[end] != '&') end++;
120
+ if (end > start) {
121
+ size_t equals = start;
122
+ while (equals < end && bytes[equals] != '=') equals++;
123
+ xt_value key = xt_url_decode(bytes + start, equals - start);
124
+ xt_value value = equals < end ? xt_url_decode(bytes + equals + 1, end - equals - 1)
125
+ : xt_string_from_cstr("");
126
+ xt_url_append_pair(entries, key, value);
127
+ }
128
+ if (end >= length) break;
129
+ start = end + 1;
130
+ }
131
+ xt_url_set_size(params);
132
+ }
133
+
134
+ static void xt_url_ctor_from_value(xt_value params, xt_value source) {
135
+ if (source == XT_UNDEFINED) return;
136
+ if (XT_IS_STRING(source)) {
137
+ xt_url_parse_into(params, source);
138
+ return;
139
+ }
140
+ if (XT_IS_ARRAY(source)) {
141
+ xt_value entries = xt_url_entries(params);
142
+ xt_array *pairs = xt_as_array(source);
143
+ for (uint32_t i = 0; i < pairs->length; i++) {
144
+ xt_array *pair = xt_as_array(pairs->items[i]);
145
+ if (pair && pair->length >= 1) {
146
+ xt_value value = pair->length >= 2 ? pair->items[1] : xt_string_from_cstr("");
147
+ xt_url_append_pair(entries, xt_to_string(pair->items[0]), xt_to_string(value));
148
+ }
149
+ }
150
+ xt_url_set_size(params);
151
+ return;
152
+ }
153
+ if (XT_IS_OBJECT(source)) {
154
+ xt_value existing = xt_get(source, xt_string_from_cstr("__entries"));
155
+ if (XT_IS_ARRAY(existing)) {
156
+ xt_value entries = xt_url_entries(params);
157
+ xt_array *pairs = xt_as_array(existing);
158
+ for (uint32_t i = 0; i < pairs->length; i++) {
159
+ xt_array *pair = xt_as_array(pairs->items[i]);
160
+ if (pair && pair->length >= 2) xt_url_append_pair(entries, pair->items[0], pair->items[1]);
161
+ }
162
+ xt_url_set_size(params);
163
+ return;
164
+ }
165
+ xt_value keys = xt_object_keys(source);
166
+ xt_array *list = xt_as_array(keys);
167
+ if (!list) return;
168
+ xt_value entries = xt_url_entries(params);
169
+ for (uint32_t i = 0; i < list->length; i++) {
170
+ xt_value key = list->items[i];
171
+ xt_url_append_pair(entries, xt_to_string(key), xt_to_string(xt_object_get(source, key)));
172
+ }
173
+ xt_url_set_size(params);
174
+ }
175
+ }
176
+
177
+ /* -- methods -------------------------------------------------------------- */
178
+
179
+ static xt_value xt_url_method_append(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
180
+ (void)env;
181
+ xt_value entries = xt_url_entries(thisValue);
182
+ xt_url_append_pair(entries, xt_to_string(xt_arg_at(argc, argv, 0)),
183
+ xt_to_string(xt_arg_at(argc, argv, 1)));
184
+ xt_url_set_size(thisValue);
185
+ return XT_UNDEFINED;
186
+ }
187
+
188
+ static int xt_url_key_equals(xt_value pair, xt_value key) {
189
+ xt_array *items = xt_as_array(pair);
190
+ return items && items->length >= 2 && xt_value_equals(items->items[0], key);
191
+ }
192
+
193
+ static xt_value xt_url_method_get(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
194
+ (void)env;
195
+ xt_value key = xt_to_string(xt_arg_at(argc, argv, 0));
196
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
197
+ for (uint32_t i = 0; i < entries->length; i++) {
198
+ if (xt_url_key_equals(entries->items[i], key)) return ((xt_array *)XT_GET_PTR(entries->items[i]))->items[1];
199
+ }
200
+ return XT_NULL;
201
+ }
202
+
203
+ static xt_value xt_url_method_get_all(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
204
+ (void)env;
205
+ xt_value key = xt_to_string(xt_arg_at(argc, argv, 0));
206
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
207
+ xt_value result = xt_array_new(0, NULL);
208
+ for (uint32_t i = 0; i < entries->length; i++) {
209
+ if (xt_url_key_equals(entries->items[i], key)) {
210
+ xt_array_push(result, ((xt_array *)XT_GET_PTR(entries->items[i]))->items[1]);
211
+ }
212
+ }
213
+ return result;
214
+ }
215
+
216
+ static xt_value xt_url_method_has(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
217
+ (void)env;
218
+ xt_value key = xt_to_string(xt_arg_at(argc, argv, 0));
219
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
220
+ for (uint32_t i = 0; i < entries->length; i++) {
221
+ if (xt_url_key_equals(entries->items[i], key)) return XT_TRUE;
222
+ }
223
+ return XT_FALSE;
224
+ }
225
+
226
+ static xt_value xt_url_method_delete(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
227
+ (void)env;
228
+ xt_value key = xt_to_string(xt_arg_at(argc, argv, 0));
229
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
230
+ uint32_t write = 0;
231
+ for (uint32_t read = 0; read < entries->length; read++) {
232
+ if (!xt_url_key_equals(entries->items[read], key)) entries->items[write++] = entries->items[read];
233
+ }
234
+ entries->length = write;
235
+ xt_url_set_size(thisValue);
236
+ return XT_UNDEFINED;
237
+ }
238
+
239
+ static xt_value xt_url_method_set(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
240
+ (void)env;
241
+ xt_value key = xt_to_string(xt_arg_at(argc, argv, 0));
242
+ xt_value value = xt_to_string(xt_arg_at(argc, argv, 1));
243
+ xt_value entriesValue = xt_url_entries(thisValue);
244
+ xt_array *entries = xt_as_array(entriesValue);
245
+ uint32_t write = 0;
246
+ int replaced = 0;
247
+ for (uint32_t read = 0; read < entries->length; read++) {
248
+ if (xt_url_key_equals(entries->items[read], key)) {
249
+ if (!replaced) {
250
+ ((xt_array *)XT_GET_PTR(entries->items[read]))->items[1] = value;
251
+ entries->items[write++] = entries->items[read];
252
+ replaced = 1;
253
+ }
254
+ continue;
255
+ }
256
+ entries->items[write++] = entries->items[read];
257
+ }
258
+ entries->length = write;
259
+ if (!replaced) xt_url_append_pair(entriesValue, key, value);
260
+ xt_url_set_size(thisValue);
261
+ return XT_UNDEFINED;
262
+ }
263
+
264
+ static xt_value xt_url_method_sort(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
265
+ (void)env;
266
+ (void)argc;
267
+ (void)argv;
268
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
269
+ for (uint32_t i = 1; i < entries->length; i++) {
270
+ xt_value current = entries->items[i];
271
+ xt_array *currentPair = xt_as_array(current);
272
+ uint32_t j = i;
273
+ while (j > 0) {
274
+ xt_array *previousPair = xt_as_array(entries->items[j - 1]);
275
+ if (strcmp(xt_string_bytes(xt_as_string(previousPair->items[0])),
276
+ xt_string_bytes(xt_as_string(currentPair->items[0]))) <= 0)
277
+ break;
278
+ entries->items[j] = entries->items[j - 1];
279
+ j--;
280
+ }
281
+ entries->items[j] = current;
282
+ }
283
+ return XT_UNDEFINED;
284
+ }
285
+
286
+ static xt_value xt_url_method_to_string(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
287
+ (void)env;
288
+ (void)argc;
289
+ (void)argv;
290
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
291
+ xt_value out = xt_string_from_cstr("");
292
+ for (uint32_t i = 0; i < entries->length; i++) {
293
+ xt_array *pair = xt_as_array(entries->items[i]);
294
+ if (!pair || pair->length < 2) continue;
295
+ if (i > 0) out = xt_add(out, xt_string_from_cstr("&"));
296
+ out = xt_add(out, xt_url_encode(pair->items[0]));
297
+ out = xt_add(out, xt_string_from_cstr("="));
298
+ out = xt_add(out, xt_url_encode(pair->items[1]));
299
+ }
300
+ return out;
301
+ }
302
+
303
+ static xt_value xt_url_method_for_each(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
304
+ (void)env;
305
+ xt_value callback = xt_arg_at(argc, argv, 0);
306
+ if (!XT_IS_FUNCTION(callback)) return XT_UNDEFINED;
307
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
308
+ for (uint32_t i = 0; i < entries->length; i++) {
309
+ xt_array *pair = xt_as_array(entries->items[i]);
310
+ if (!pair || pair->length < 2) continue;
311
+ xt_value args[3] = {pair->items[1], pair->items[0], thisValue};
312
+ xt_closure_call(callback, 3, args);
313
+ }
314
+ return XT_UNDEFINED;
315
+ }
316
+
317
+ static xt_value xt_url_method_keys(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
318
+ (void)env;
319
+ (void)argc;
320
+ (void)argv;
321
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
322
+ xt_value result = xt_array_new(0, NULL);
323
+ for (uint32_t i = 0; i < entries->length; i++) {
324
+ xt_array *pair = xt_as_array(entries->items[i]);
325
+ if (pair && pair->length >= 1) xt_array_push(result, pair->items[0]);
326
+ }
327
+ return result;
328
+ }
329
+
330
+ static xt_value xt_url_method_values(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
331
+ (void)env;
332
+ (void)argc;
333
+ (void)argv;
334
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
335
+ xt_value result = xt_array_new(0, NULL);
336
+ for (uint32_t i = 0; i < entries->length; i++) {
337
+ xt_array *pair = xt_as_array(entries->items[i]);
338
+ if (pair && pair->length >= 2) xt_array_push(result, pair->items[1]);
339
+ }
340
+ return result;
341
+ }
342
+
343
+ static xt_value xt_url_method_entries(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv) {
344
+ (void)env;
345
+ (void)argc;
346
+ (void)argv;
347
+ xt_value result = xt_array_new(0, NULL);
348
+ xt_array *entries = xt_as_array(xt_url_entries(thisValue));
349
+ for (uint32_t i = 0; i < entries->length; i++) xt_array_push(result, entries->items[i]);
350
+ return result;
351
+ }
352
+
353
+ static void xt_url_install(xt_value params, const char *name, void *fn) {
354
+ xt_object_set(params, xt_string_from_cstr(name), xt_closure_new(fn, 0, NULL));
355
+ }
356
+
357
+ xt_value xt_url_search_params_ctor(int32_t argc, xt_value *argv) {
358
+ xt_value params = xt_object_new();
359
+ xt_object_set(params, xt_string_from_cstr("__entries"), xt_array_new(0, NULL));
360
+ xt_object_set(params, xt_string_from_cstr("size"), xt_number(0));
361
+ xt_url_install(params, "append", (void *)xt_url_method_append);
362
+ xt_url_install(params, "delete", (void *)xt_url_method_delete);
363
+ xt_url_install(params, "get", (void *)xt_url_method_get);
364
+ xt_url_install(params, "getAll", (void *)xt_url_method_get_all);
365
+ xt_url_install(params, "has", (void *)xt_url_method_has);
366
+ xt_url_install(params, "set", (void *)xt_url_method_set);
367
+ xt_url_install(params, "sort", (void *)xt_url_method_sort);
368
+ xt_url_install(params, "toString", (void *)xt_url_method_to_string);
369
+ xt_url_install(params, "forEach", (void *)xt_url_method_for_each);
370
+ xt_url_install(params, "keys", (void *)xt_url_method_keys);
371
+ xt_url_install(params, "values", (void *)xt_url_method_values);
372
+ xt_url_install(params, "entries", (void *)xt_url_method_entries);
373
+ xt_url_ctor_from_value(params, xt_arg_at(argc, argv, 0));
374
+ return params;
375
+ }
@@ -3,7 +3,7 @@
3
3
  /* ------------------------------------------------------------------------- */
4
4
 
5
5
  static void xt_throw_mixed_bigint(void) {
6
- xt_throw(xt_string_from_cstr("TypeError: Cannot mix BigInt and other types, use explicit conversions"));
6
+ xt_throw(xt_error_from_message("TypeError: Cannot mix BigInt and other types, use explicit conversions"));
7
7
  }
8
8
 
9
9
  /* ToPrimitive for the operators: arrays/objects/functions stringify (their
@@ -143,7 +143,7 @@ xt_value xt_shr(xt_value a, xt_value b) {
143
143
 
144
144
  xt_value xt_ushr(xt_value a, xt_value b) {
145
145
  if (XT_IS_BIGINT(a) || XT_IS_BIGINT(b)) {
146
- xt_throw(xt_string_from_cstr("TypeError: BigInts have no unsigned right shift, use >> instead"));
146
+ xt_throw(xt_error_from_message("TypeError: BigInts have no unsigned right shift, use >> instead"));
147
147
  return XT_UNDEFINED;
148
148
  }
149
149
  return xt_number((double)(uint32_t)((uint32_t)xt_to_int32(a) >> (xt_to_int32(b) & 31)));
@@ -94,7 +94,7 @@ xt_value xt_to_string(xt_value v) {
94
94
  }
95
95
  if (XT_IS_FUNCTION(v)) return xt_string_from_cstr("function () { [native code] }");
96
96
  if (xt_is_symbol(v)) {
97
- xt_throw(xt_string_from_cstr("TypeError: Cannot convert a Symbol value to a string"));
97
+ xt_throw(xt_error_from_message("TypeError: Cannot convert a Symbol value to a string"));
98
98
  }
99
99
  if (XT_IS_OBJECT(v) &&
100
100
  ((xt_object *)XT_GET_PTR(v))->header.kind == XT_OBJECT_KIND_ERROR) {