@scriptc/compiler 0.0.35 → 0.0.36

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 (418) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +7 -6
  2. package/dist/backend/build-cache.d.ts +44 -0
  3. package/dist/backend/build-cache.js +241 -0
  4. package/dist/backend/build-cache.js.map +1 -0
  5. package/dist/backend/{emission/emit-async.d.ts → c/async.d.ts} +21 -30
  6. package/dist/backend/{emission/emit-async.js → c/async.js} +270 -286
  7. package/dist/backend/c/async.js.map +1 -0
  8. package/dist/backend/{emission/emitter.d.ts → c/c-emitter.d.ts} +6 -23
  9. package/dist/backend/{emission/emitter.js → c/c-emitter.js} +53 -107
  10. package/dist/backend/c/c-emitter.js.map +1 -0
  11. package/dist/backend/c/exprs.d.ts +8 -0
  12. package/dist/backend/c/exprs.js +7913 -0
  13. package/dist/backend/c/exprs.js.map +1 -0
  14. package/dist/backend/{emission/emit-island.d.ts → c/island.d.ts} +5 -5
  15. package/dist/backend/{emission/emit-island.js → c/island.js} +24 -22
  16. package/dist/backend/c/island.js.map +1 -0
  17. package/dist/backend/{emission → c}/may-throw.d.ts +1 -1
  18. package/dist/backend/{emission → c}/may-throw.js +1 -1
  19. package/dist/backend/c/may-throw.js.map +1 -0
  20. package/dist/backend/{emission/emit-shapes.d.ts → c/shapes.d.ts} +19 -19
  21. package/dist/backend/{emission/emit-shapes.js → c/shapes.js} +78 -87
  22. package/dist/backend/c/shapes.js.map +1 -0
  23. package/dist/backend/{emission/emit-stmts.d.ts → c/stmts.d.ts} +12 -12
  24. package/dist/backend/{emission/emit-stmts.js → c/stmts.js} +377 -343
  25. package/dist/backend/c/stmts.js.map +1 -0
  26. package/dist/backend/{emission/emit-types.d.ts → c/types.d.ts} +1 -1
  27. package/dist/backend/{emission/emit-types.js → c/types.js} +42 -286
  28. package/dist/backend/c/types.js.map +1 -0
  29. package/dist/backend/c/types.test.js +25 -0
  30. package/dist/backend/c/types.test.js.map +1 -0
  31. package/dist/backend/{emission/emit-walkers.d.ts → c/walkers.d.ts} +19 -41
  32. package/dist/backend/{emission/emit-walkers.js → c/walkers.js} +238 -298
  33. package/dist/backend/c/walkers.js.map +1 -0
  34. package/dist/backend/ffi-callbacks.d.ts +1 -1
  35. package/dist/backend/ffi-callbacks.js +4 -3
  36. package/dist/backend/ffi-callbacks.js.map +1 -1
  37. package/dist/backend/{library-identity.d.ts → library-identity-markers.d.ts} +0 -4
  38. package/dist/backend/{library-identity.js → library-identity-markers.js} +10 -9
  39. package/dist/backend/library-identity-markers.js.map +1 -0
  40. package/dist/backend/llvm/blocks.d.ts +4 -0
  41. package/dist/backend/llvm/blocks.js +29 -0
  42. package/dist/backend/llvm/blocks.js.map +1 -1
  43. package/dist/backend/llvm/classes.d.ts +2 -19
  44. package/dist/backend/llvm/classes.js +20 -52
  45. package/dist/backend/llvm/classes.js.map +1 -1
  46. package/dist/backend/llvm/common.d.ts +4 -0
  47. package/dist/backend/llvm/common.js +27 -0
  48. package/dist/backend/llvm/common.js.map +1 -0
  49. package/dist/backend/llvm/dyn.d.ts +3 -8
  50. package/dist/backend/llvm/dyn.js +152 -224
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emitter.d.ts +4 -1
  53. package/dist/backend/llvm/emitter.js +514 -9981
  54. package/dist/backend/llvm/emitter.js.map +1 -1
  55. package/dist/backend/llvm/expr-async.d.ts +4 -0
  56. package/dist/backend/llvm/expr-async.js +726 -0
  57. package/dist/backend/llvm/expr-async.js.map +1 -0
  58. package/dist/backend/llvm/expr-bytes.d.ts +13 -0
  59. package/dist/backend/llvm/expr-bytes.js +456 -0
  60. package/dist/backend/llvm/expr-bytes.js.map +1 -0
  61. package/dist/backend/llvm/expr-callbacks.d.ts +22 -0
  62. package/dist/backend/llvm/expr-callbacks.js +520 -0
  63. package/dist/backend/llvm/expr-callbacks.js.map +1 -0
  64. package/dist/backend/llvm/expr-calls.d.ts +2 -0
  65. package/dist/backend/llvm/expr-calls.js +618 -0
  66. package/dist/backend/llvm/expr-calls.js.map +1 -0
  67. package/dist/backend/llvm/expr-containers.d.ts +25 -0
  68. package/dist/backend/llvm/expr-containers.js +623 -0
  69. package/dist/backend/llvm/expr-containers.js.map +1 -0
  70. package/dist/backend/llvm/expr-context.d.ts +255 -0
  71. package/dist/backend/llvm/expr-context.js +2 -0
  72. package/dist/backend/llvm/expr-context.js.map +1 -0
  73. package/dist/backend/llvm/expr-control.d.ts +2 -0
  74. package/dist/backend/llvm/expr-control.js +473 -0
  75. package/dist/backend/llvm/expr-control.js.map +1 -0
  76. package/dist/backend/llvm/expr-dispatch.d.ts +4 -0
  77. package/dist/backend/llvm/expr-dispatch.js +151 -0
  78. package/dist/backend/llvm/expr-dispatch.js.map +1 -0
  79. package/dist/backend/llvm/expr-dynamic.d.ts +2 -0
  80. package/dist/backend/llvm/expr-dynamic.js +810 -0
  81. package/dist/backend/llvm/expr-dynamic.js.map +1 -0
  82. package/dist/backend/llvm/expr-island.d.ts +15 -0
  83. package/dist/backend/llvm/expr-island.js +690 -0
  84. package/dist/backend/llvm/expr-island.js.map +1 -0
  85. package/dist/backend/llvm/expr-primitives.d.ts +6 -0
  86. package/dist/backend/llvm/expr-primitives.js +622 -0
  87. package/dist/backend/llvm/expr-primitives.js.map +1 -0
  88. package/dist/backend/llvm/expr-records.d.ts +9 -0
  89. package/dist/backend/llvm/expr-records.js +299 -0
  90. package/dist/backend/llvm/expr-records.js.map +1 -0
  91. package/dist/backend/llvm/expr-stream-bridges.d.ts +13 -0
  92. package/dist/backend/llvm/expr-stream-bridges.js +396 -0
  93. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -0
  94. package/dist/backend/llvm/expr-stream-callbacks.d.ts +12 -0
  95. package/dist/backend/llvm/expr-stream-callbacks.js +360 -0
  96. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -0
  97. package/dist/backend/llvm/lib-dispatch.d.ts +5 -0
  98. package/dist/backend/llvm/lib-dispatch.js +267 -0
  99. package/dist/backend/llvm/lib-dispatch.js.map +1 -0
  100. package/dist/backend/llvm/lib-filesystem.d.ts +6 -0
  101. package/dist/backend/llvm/lib-filesystem.js +594 -0
  102. package/dist/backend/llvm/lib-filesystem.js.map +1 -0
  103. package/dist/backend/llvm/lib-network.d.ts +2 -0
  104. package/dist/backend/llvm/lib-network.js +429 -0
  105. package/dist/backend/llvm/lib-network.js.map +1 -0
  106. package/dist/backend/llvm/lib-process.d.ts +5 -0
  107. package/dist/backend/llvm/lib-process.js +585 -0
  108. package/dist/backend/llvm/lib-process.js.map +1 -0
  109. package/dist/backend/llvm/lib-shared.d.ts +6 -0
  110. package/dist/backend/llvm/lib-shared.js +687 -0
  111. package/dist/backend/llvm/lib-shared.js.map +1 -0
  112. package/dist/backend/llvm/lib-stream.d.ts +2 -0
  113. package/dist/backend/llvm/lib-stream.js +470 -0
  114. package/dist/backend/llvm/lib-stream.js.map +1 -0
  115. package/dist/backend/llvm/shapes.d.ts +12 -2
  116. package/dist/backend/llvm/shapes.js +66 -307
  117. package/dist/backend/llvm/shapes.js.map +1 -1
  118. package/dist/backend/llvm/shapes.test.js +52 -0
  119. package/dist/backend/llvm/shapes.test.js.map +1 -0
  120. package/dist/backend/llvm/unsupported.d.ts +1 -1
  121. package/dist/backend/llvm/walkers.d.ts +2 -3
  122. package/dist/backend/llvm/walkers.js +164 -218
  123. package/dist/backend/llvm/walkers.js.map +1 -1
  124. package/dist/backend/native-codegen.d.ts +38 -0
  125. package/dist/backend/native-codegen.js +261 -0
  126. package/dist/backend/native-codegen.js.map +1 -0
  127. package/dist/backend/native-codegen.test.js +188 -0
  128. package/dist/backend/native-codegen.test.js.map +1 -0
  129. package/dist/backend/native-link-info.d.ts +96 -0
  130. package/dist/backend/native-link-info.js +219 -0
  131. package/dist/backend/native-link-info.js.map +1 -0
  132. package/dist/backend/native-link-info.test.d.ts +1 -0
  133. package/dist/backend/native-link-info.test.js +134 -0
  134. package/dist/backend/native-link-info.test.js.map +1 -0
  135. package/dist/backend/{cc.d.ts → native-toolchain.d.ts} +54 -34
  136. package/dist/backend/{cc.js → native-toolchain.js} +231 -810
  137. package/dist/backend/native-toolchain.js.map +1 -0
  138. package/dist/backend/native-toolchain.test.d.ts +1 -0
  139. package/dist/backend/{cc-cache.test.js → native-toolchain.test.js} +214 -6
  140. package/dist/backend/native-toolchain.test.js.map +1 -0
  141. package/dist/backend/object-localize.js +1 -1
  142. package/dist/backend/runtime-abi.d.ts +10 -0
  143. package/dist/backend/runtime-abi.js +11 -0
  144. package/dist/backend/runtime-abi.js.map +1 -0
  145. package/dist/backend/runtime-pack.d.ts +137 -0
  146. package/dist/backend/runtime-pack.js +400 -0
  147. package/dist/backend/runtime-pack.js.map +1 -0
  148. package/dist/backend/runtime-pack.test.d.ts +1 -0
  149. package/dist/backend/runtime-pack.test.js +438 -0
  150. package/dist/backend/runtime-pack.test.js.map +1 -0
  151. package/dist/backend/targets.d.ts +30 -0
  152. package/dist/backend/targets.js +46 -0
  153. package/dist/backend/targets.js.map +1 -0
  154. package/dist/backend/targets.test.d.ts +1 -0
  155. package/dist/backend/targets.test.js +19 -0
  156. package/dist/backend/targets.test.js.map +1 -0
  157. package/dist/backend/vendor-archives.d.ts +41 -0
  158. package/dist/backend/vendor-archives.js +462 -0
  159. package/dist/backend/vendor-archives.js.map +1 -0
  160. package/dist/compat/fetch-profile.d.ts +0 -1
  161. package/dist/compat/fetch-profile.js +0 -1
  162. package/dist/compat/fetch-profile.js.map +1 -1
  163. package/dist/coverage/report.js +3 -3
  164. package/dist/coverage/report.js.map +1 -1
  165. package/dist/coverage/surface-manifest.js +25 -32
  166. package/dist/coverage/surface-manifest.js.map +1 -1
  167. package/dist/diagnostics/diagnostic.d.ts +11 -12
  168. package/dist/diagnostics/diagnostic.js +19 -17
  169. package/dist/diagnostics/diagnostic.js.map +1 -1
  170. package/dist/diagnostics/render.d.ts +1 -1
  171. package/dist/diagnostics/render.js +1 -1
  172. package/dist/diagnostics/render.js.map +1 -1
  173. package/dist/errors.d.ts +5 -0
  174. package/dist/errors.js +9 -0
  175. package/dist/errors.js.map +1 -0
  176. package/dist/executable/{early-cache.d.ts → executable-cache.d.ts} +2 -2
  177. package/dist/executable/{early-cache.js → executable-cache.js} +36 -98
  178. package/dist/executable/executable-cache.js.map +1 -0
  179. package/dist/executable/executable-cache.test.d.ts +1 -0
  180. package/dist/executable/{early-cache.test.js → executable-cache.test.js} +3 -3
  181. package/dist/executable/executable-cache.test.js.map +1 -0
  182. package/dist/ffi/{profile.js → ffi-manifest.js} +1 -1
  183. package/dist/ffi/ffi-manifest.js.map +1 -0
  184. package/dist/frontend/builtin-modules.d.ts +21 -0
  185. package/dist/frontend/builtin-modules.js +82 -0
  186. package/dist/frontend/builtin-modules.js.map +1 -0
  187. package/dist/frontend/cjs-lexer.d.ts +7 -0
  188. package/dist/frontend/cjs-lexer.js +15 -17
  189. package/dist/frontend/cjs-lexer.js.map +1 -1
  190. package/dist/frontend/dts-paths.d.ts +26 -0
  191. package/dist/frontend/dts-paths.js +41 -0
  192. package/dist/frontend/dts-paths.js.map +1 -0
  193. package/dist/frontend/input-tracker.d.ts +0 -2
  194. package/dist/frontend/input-tracker.js +1 -4
  195. package/dist/frontend/input-tracker.js.map +1 -1
  196. package/dist/frontend/lib-contract.d.ts +1 -5
  197. package/dist/frontend/lib-contract.js +1 -1
  198. package/dist/frontend/lib-contract.js.map +1 -1
  199. package/dist/frontend/lib-exports.d.ts +1 -1
  200. package/dist/frontend/lowering/call-position.d.ts +4 -0
  201. package/dist/frontend/lowering/call-position.js +7 -0
  202. package/dist/frontend/lowering/call-position.js.map +1 -0
  203. package/dist/frontend/lowering/callback-arg.d.ts +20 -0
  204. package/dist/frontend/lowering/callback-arg.js +44 -0
  205. package/dist/frontend/lowering/callback-arg.js.map +1 -0
  206. package/dist/frontend/lowering/lib-boundary.d.ts +1 -1
  207. package/dist/frontend/lowering/lib-boundary.js +34 -34
  208. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  209. package/dist/frontend/lowering/lower-assert.d.ts +3 -3
  210. package/dist/frontend/lowering/lower-assert.js +214 -241
  211. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  212. package/dist/frontend/lowering/lower-builtins.d.ts +74 -146
  213. package/dist/frontend/lowering/lower-builtins.js +1124 -1232
  214. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  215. package/dist/frontend/lowering/lower-calls.d.ts +56 -188
  216. package/dist/frontend/lowering/lower-calls.js +1397 -1492
  217. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  218. package/dist/frontend/lowering/lower-classes.d.ts +62 -125
  219. package/dist/frontend/lowering/lower-classes.js +832 -866
  220. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  221. package/dist/frontend/lowering/lower-comptime.d.ts +5 -12
  222. package/dist/frontend/lowering/lower-comptime.js +32 -31
  223. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  224. package/dist/frontend/lowering/lower-containers.d.ts +35 -135
  225. package/dist/frontend/lowering/lower-containers.js +1384 -1700
  226. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  227. package/dist/frontend/lowering/lower-dgram.d.ts +3 -7
  228. package/dist/frontend/lowering/lower-dgram.js +97 -111
  229. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  230. package/dist/frontend/lowering/lower-enums.d.ts +4 -4
  231. package/dist/frontend/lowering/lower-enums.js +30 -30
  232. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  233. package/dist/frontend/lowering/{lower-emitter.d.ts → lower-event-emitter.d.ts} +7 -18
  234. package/dist/frontend/lowering/{lower-emitter.js → lower-event-emitter.js} +172 -174
  235. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -0
  236. package/dist/frontend/lowering/lower-expando.d.ts +5 -5
  237. package/dist/frontend/lowering/lower-expando.js +40 -40
  238. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  239. package/dist/frontend/lowering/lower-exprs.d.ts +56 -264
  240. package/dist/frontend/lowering/lower-exprs.js +1624 -1696
  241. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  242. package/dist/frontend/lowering/lower-generators.d.ts +6 -6
  243. package/dist/frontend/lowering/lower-generators.js +73 -72
  244. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  245. package/dist/frontend/lowering/lower-inspect.d.ts +5 -17
  246. package/dist/frontend/lowering/lower-inspect.js +236 -238
  247. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  248. package/dist/frontend/lowering/lower-island.d.ts +34 -45
  249. package/dist/frontend/lowering/lower-island.js +437 -508
  250. package/dist/frontend/lowering/lower-island.js.map +1 -1
  251. package/dist/frontend/lowering/lower-mixins.d.ts +7 -10
  252. package/dist/frontend/lowering/lower-mixins.js +85 -85
  253. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  254. package/dist/frontend/lowering/lower-modules.d.ts +12 -18
  255. package/dist/frontend/lowering/lower-modules.js +284 -283
  256. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  257. package/dist/frontend/lowering/lower-namespaces.d.ts +23 -49
  258. package/dist/frontend/lowering/lower-namespaces.js +123 -115
  259. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  260. package/dist/frontend/lowering/lower-server.d.ts +18 -25
  261. package/dist/frontend/lowering/lower-server.js +899 -899
  262. package/dist/frontend/lowering/lower-server.js.map +1 -1
  263. package/dist/frontend/lowering/lower-stmts.d.ts +30 -149
  264. package/dist/frontend/lowering/lower-stmts.js +1175 -1228
  265. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  266. package/dist/frontend/lowering/lower-stream.d.ts +12 -12
  267. package/dist/frontend/lowering/lower-stream.js +300 -301
  268. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  269. package/dist/frontend/lowering/lower-test.d.ts +5 -5
  270. package/dist/frontend/lowering/lower-test.js +82 -82
  271. package/dist/frontend/lowering/lower-test.js.map +1 -1
  272. package/dist/frontend/lowering/lowerer.d.ts +60 -20
  273. package/dist/frontend/lowering/lowerer.js +191 -117
  274. package/dist/frontend/lowering/lowerer.js.map +1 -1
  275. package/dist/frontend/lowering/pairs-snapshot.d.ts +11 -0
  276. package/dist/frontend/lowering/pairs-snapshot.js +85 -0
  277. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -0
  278. package/dist/frontend/lowering/static-this.d.ts +6 -0
  279. package/dist/frontend/lowering/static-this.js +24 -0
  280. package/dist/frontend/lowering/static-this.js.map +1 -0
  281. package/dist/frontend/lowering/surfaces.d.ts +14 -33
  282. package/dist/frontend/lowering/surfaces.js +63 -63
  283. package/dist/frontend/lowering/surfaces.js.map +1 -1
  284. package/dist/frontend/npm-static-rewrite.js +6 -28
  285. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  286. package/dist/frontend/npm-static.d.ts +0 -10
  287. package/dist/frontend/npm-static.js +4 -7
  288. package/dist/frontend/npm-static.js.map +1 -1
  289. package/dist/frontend/npm.d.ts +0 -24
  290. package/dist/frontend/npm.js +11 -85
  291. package/dist/frontend/npm.js.map +1 -1
  292. package/dist/frontend/program.d.ts +3 -1
  293. package/dist/frontend/program.js +9 -4
  294. package/dist/frontend/program.js.map +1 -1
  295. package/dist/frontend/provenance-registry.d.ts +0 -2
  296. package/dist/frontend/provenance-registry.js +0 -10
  297. package/dist/frontend/provenance-registry.js.map +1 -1
  298. package/dist/frontend/provenance.js +4 -7
  299. package/dist/frontend/provenance.js.map +1 -1
  300. package/dist/frontend/resolve.d.ts +7 -2
  301. package/dist/frontend/resolve.js +12 -17
  302. package/dist/frontend/resolve.js.map +1 -1
  303. package/dist/frontend/resolve.test.d.ts +1 -0
  304. package/dist/frontend/resolve.test.js +29 -0
  305. package/dist/frontend/resolve.test.js.map +1 -0
  306. package/dist/frontend/ts7/adapter.d.ts +2 -2
  307. package/dist/frontend/ts7/adapter.js +1 -1
  308. package/dist/frontend/ts7/adapter.js.map +1 -1
  309. package/dist/frontend/ts7/checker.js +2 -36
  310. package/dist/frontend/ts7/checker.js.map +1 -1
  311. package/dist/frontend/ts7/enums.js +2 -1
  312. package/dist/frontend/ts7/enums.js.map +1 -1
  313. package/dist/frontend/ts7/{program.js → program-adapter.js} +7 -6
  314. package/dist/frontend/ts7/program-adapter.js.map +1 -0
  315. package/dist/frontend/ts7/world-check.d.ts +1 -3
  316. package/dist/frontend/ts7/world-check.js +3 -1
  317. package/dist/frontend/ts7/world-check.js.map +1 -1
  318. package/dist/frontend/tsc-codes.d.ts +8 -0
  319. package/dist/frontend/tsc-codes.js +109 -0
  320. package/dist/frontend/tsc-codes.js.map +1 -0
  321. package/dist/frontend/{types.d.ts → type-mapper.d.ts} +2 -25
  322. package/dist/frontend/{types.js → type-mapper.js} +12 -11
  323. package/dist/frontend/type-mapper.js.map +1 -0
  324. package/dist/frontend/workspace-registry.d.ts +26 -0
  325. package/dist/frontend/workspace-registry.js +71 -0
  326. package/dist/frontend/workspace-registry.js.map +1 -0
  327. package/dist/index.d.ts +112 -30
  328. package/dist/index.js +512 -126
  329. package/dist/index.js.map +1 -1
  330. package/dist/ir/analysis.d.ts +37 -0
  331. package/dist/ir/analysis.js +118 -0
  332. package/dist/ir/analysis.js.map +1 -0
  333. package/dist/ir/analysis.test.d.ts +1 -0
  334. package/dist/ir/analysis.test.js +21 -0
  335. package/dist/ir/analysis.test.js.map +1 -0
  336. package/dist/ir/build.d.ts +9 -0
  337. package/dist/ir/build.js +33 -0
  338. package/dist/ir/build.js.map +1 -0
  339. package/dist/ir/integer-loops.d.ts +1 -1
  340. package/dist/ir/{nodes.d.ts → ir.d.ts} +54 -26
  341. package/dist/ir/{nodes.js → ir.js} +145 -141
  342. package/dist/ir/ir.js.map +1 -0
  343. package/dist/ir/ir.test.d.ts +1 -0
  344. package/dist/ir/ir.test.js +17 -0
  345. package/dist/ir/ir.test.js.map +1 -0
  346. package/dist/ir/serialize.d.ts +1 -1
  347. package/dist/ir/serialize.js +2 -1
  348. package/dist/ir/serialize.js.map +1 -1
  349. package/dist/ir/validate.d.ts +1 -1
  350. package/dist/ir/validate.js +10 -5
  351. package/dist/ir/validate.js.map +1 -1
  352. package/dist/library/cache-primitives.d.ts +24 -0
  353. package/dist/library/cache-primitives.js +83 -0
  354. package/dist/library/cache-primitives.js.map +1 -0
  355. package/dist/library/cache-reset.test.d.ts +1 -0
  356. package/dist/library/cache-reset.test.js +47 -0
  357. package/dist/library/cache-reset.test.js.map +1 -0
  358. package/dist/library/{implementation-identity.js → compiler-self-identity.js} +1 -1
  359. package/dist/library/compiler-self-identity.js.map +1 -0
  360. package/dist/library/fence-eval.d.ts +3 -1
  361. package/dist/library/fence-eval.js +5 -1
  362. package/dist/library/fence-eval.js.map +1 -1
  363. package/dist/library/int-infer.d.ts +1 -36
  364. package/dist/library/int-infer.js +17 -17
  365. package/dist/library/int-infer.js.map +1 -1
  366. package/dist/library/{early-cache.d.ts → library-cache.d.ts} +1 -1
  367. package/dist/library/{early-cache.js → library-cache.js} +34 -89
  368. package/dist/library/library-cache.js.map +1 -0
  369. package/dist/library/library-cache.test.d.ts +1 -0
  370. package/dist/library/{early-cache.test.js → library-cache.test.js} +2 -2
  371. package/dist/library/library-cache.test.js.map +1 -0
  372. package/dist/library/{profile.d.ts → library-profile.d.ts} +4 -7
  373. package/dist/library/{profile.js → library-profile.js} +18 -11
  374. package/dist/library/library-profile.js.map +1 -0
  375. package/dist/library/semantic-source.js +2 -1
  376. package/dist/library/semantic-source.js.map +1 -1
  377. package/dist/library/sidecar.d.ts +5 -2
  378. package/dist/library/sidecar.js +11 -5
  379. package/dist/library/sidecar.js.map +1 -1
  380. package/dist/startup-cache.d.ts +3 -3
  381. package/dist/startup-cache.js +2 -2
  382. package/dist/startup-cache.js.map +1 -1
  383. package/package.json +6 -2
  384. package/surface-manifest.json +1 -1
  385. package/dist/backend/cc-cache.test.js.map +0 -1
  386. package/dist/backend/cc.js.map +0 -1
  387. package/dist/backend/emission/emit-async.js.map +0 -1
  388. package/dist/backend/emission/emit-exprs.d.ts +0 -13
  389. package/dist/backend/emission/emit-exprs.js +0 -7407
  390. package/dist/backend/emission/emit-exprs.js.map +0 -1
  391. package/dist/backend/emission/emit-island.js.map +0 -1
  392. package/dist/backend/emission/emit-shapes.js.map +0 -1
  393. package/dist/backend/emission/emit-stmts.js.map +0 -1
  394. package/dist/backend/emission/emit-types.js.map +0 -1
  395. package/dist/backend/emission/emit-walkers.js.map +0 -1
  396. package/dist/backend/emission/emitter.js.map +0 -1
  397. package/dist/backend/emission/may-throw.js.map +0 -1
  398. package/dist/backend/library-identity.js.map +0 -1
  399. package/dist/executable/early-cache.js.map +0 -1
  400. package/dist/executable/early-cache.test.js.map +0 -1
  401. package/dist/ffi/profile.js.map +0 -1
  402. package/dist/frontend/lowering/lower-emitter.js.map +0 -1
  403. package/dist/frontend/shared.d.ts +0 -82
  404. package/dist/frontend/shared.js +0 -308
  405. package/dist/frontend/shared.js.map +0 -1
  406. package/dist/frontend/ts7/program.js.map +0 -1
  407. package/dist/frontend/types.js.map +0 -1
  408. package/dist/ir/nodes.js.map +0 -1
  409. package/dist/library/early-cache.js.map +0 -1
  410. package/dist/library/early-cache.test.js.map +0 -1
  411. package/dist/library/implementation-identity.js.map +0 -1
  412. package/dist/library/profile.js.map +0 -1
  413. /package/dist/backend/{cc-cache.test.d.ts → c/types.test.d.ts} +0 -0
  414. /package/dist/{executable/early-cache.test.d.ts → backend/llvm/shapes.test.d.ts} +0 -0
  415. /package/dist/{library/early-cache.test.d.ts → backend/native-codegen.test.d.ts} +0 -0
  416. /package/dist/ffi/{profile.d.ts → ffi-manifest.d.ts} +0 -0
  417. /package/dist/frontend/ts7/{program.d.ts → program-adapter.d.ts} +0 -0
  418. /package/dist/library/{implementation-identity.d.ts → compiler-self-identity.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import type { SrcLoc } from "../../ir/nodes.js";
1
+ import type { SrcLoc } from "../../ir/ir.js";
2
2
  export declare class LlvmUnsupportedError extends Error {
3
3
  readonly kind: string;
4
4
  readonly loc?: SrcLoc | undefined;
@@ -1,4 +1,4 @@
1
- import type { IrType, IrUnionDef } from "../../ir/nodes.js";
1
+ import type { IrType, IrUnionDef } from "../../ir/ir.js";
2
2
  import { type ShapeHost } from "./shapes.js";
3
3
  /** What the walkers need from the emitter beyond the shape tables: union
4
4
  * defs, the undefined-arm probe, interned ScrStr literals (unit-arm
@@ -6,7 +6,6 @@ import { type ShapeHost } from "./shapes.js";
6
6
  * scr_error-style label texts). */
7
7
  export interface WalkerHost extends ShapeHost {
8
8
  readonly unionsById: Map<string, IrUnionDef>;
9
- undefinedArmTag(t: IrType): number;
10
9
  /** `@`-ref of an interned immortal ScrStr literal. */
11
10
  internLiteral(text: string): string;
12
11
  /** `@`-ref of an interned NUL-terminated byte-array constant. */
@@ -50,7 +49,7 @@ export declare class LlWalkers {
50
49
  private emitArrayWriter;
51
50
  private emitUnionWriter;
52
51
  /** `JSON.stringify(v, null, space)` as a REWRITE of the compact text —
53
- * Node's gap algorithm exactly (see emit-walkers.ts's sc_ji). The indent
52
+ * Node's gap algorithm exactly (see walkers.ts's sc_ji). The indent
54
53
  * rides as a NUL-terminated constant + byte length. */
55
54
  jsonIndentHelper(): string;
56
55
  /** The per-union ToString helper: unit arms return the interned
@@ -1,8 +1,10 @@
1
- import { isRefCounted, typeKey } from "../../ir/nodes.js";
1
+ import { InternalCompilerError } from "../../errors.js";
2
+ import { isRefCounted, typeKey } from "../../ir/ir.js";
2
3
  import { mangleRecordStruct } from "../mangle.js";
3
4
  import { BlockBuilder } from "./blocks.js";
4
5
  import { llFieldType, releaseSym, traceAdapter } from "./shapes.js";
5
6
  import { LlvmUnsupportedError } from "./unsupported.js";
7
+ import { undefinedArmTag } from "../../ir/analysis.js";
6
8
  /** Exact double literal (the emitter's f64Lit — duplicated to avoid a
7
9
  * cyclic import; both spell every bit pattern identically). */
8
10
  function f64Lit(n) {
@@ -180,11 +182,11 @@ export class LlWalkers {
180
182
  emitRecordWriter(B, shapeId) {
181
183
  const shape = this.host.recordsById.get(shapeId);
182
184
  if (!shape)
183
- throw new Error(`llvm emitter bug: jsonStringify of unknown shape ${shapeId}`);
185
+ throw new InternalCompilerError(`llvm emitter bug: jsonStringify of unknown shape ${shapeId}`);
184
186
  const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + 1]));
185
187
  // CYCLE-CAPABLE shapes bracket the walk with the circular-detection
186
188
  // stack; edge labels stamp before members whose walk can re-enter —
187
- // emit-walkers.ts's contract, ported.
189
+ // walkers.ts's contract, ported.
188
190
  const cyclic = traceAdapter(this.host, { kind: "record", shapeId }) !== null;
189
191
  const edgeable = (ft) => cyclic && traceAdapter(this.host, ft) !== null;
190
192
  if (cyclic)
@@ -213,11 +215,11 @@ export class LlWalkers {
213
215
  const order = shape.declaredOrder ?? shape.fields.map((f) => f.name);
214
216
  const inOrder = new Set(order);
215
217
  if (shape.fields.some((f) => !inOrder.has(f.name) && !f.name.startsWith("%"))) {
216
- throw new Error(`llvm emitter bug: declaredOrder of shape ${shapeId} omits a non-internal field`);
218
+ throw new InternalCompilerError(`llvm emitter bug: declaredOrder of shape ${shapeId} omits a non-internal field`);
217
219
  }
218
220
  const byName = new Map(shape.fields.map((f) => [f.name, f]));
219
221
  const emitFields = order.map((n) => byName.get(n)).filter((f) => f !== undefined);
220
- const droppable = emitFields.some((f) => this.host.undefinedArmTag(f.type) >= 0) || !!shape.indexValue;
222
+ const droppable = emitFields.some((f) => undefinedArmTag(f.type, this.host.unionsById) >= 0) || !!shape.indexValue;
221
223
  this.putc(B, "%b", "123"); // '{'
222
224
  if (!droppable) {
223
225
  emitFields.forEach((f, i) => {
@@ -245,7 +247,7 @@ export class LlWalkers {
245
247
  B.line(`store i1 false, ptr ${first}`);
246
248
  };
247
249
  for (const f of emitFields) {
248
- const utag = this.host.undefinedArmTag(f.type);
250
+ const utag = undefinedArmTag(f.type, this.host.unionsById);
249
251
  const v = this.loadField(B, "%v", shapeId, fieldIndex.get(f.name), f.type);
250
252
  let skip = null;
251
253
  if (utag >= 0) {
@@ -293,110 +295,90 @@ export class LlWalkers {
293
295
  const len = B.tmp();
294
296
  B.line(`${ks} = call ptr @scr_map_keys_js_order(ptr ${ovf})`);
295
297
  B.line(`${len} = call double @scr_arr_len(ptr ${ks})`);
296
- const iSlot = B.slot();
297
- B.entryAllocas.push(`${iSlot} = alloca double`);
298
- B.line(`store double ${f64Lit(0)}, ptr ${iSlot}`);
299
- const lc = B.newLabel("ovf.c");
300
- const lb = B.newLabel("ovf.b");
301
- const ln = B.newLabel("ovf.n");
302
- const le = B.newLabel("ovf.e");
303
- B.br(lc);
304
- B.startBlock(lc);
305
- const i = B.tmp();
306
- const cont = B.tmp();
307
- B.line(`${i} = load double, ptr ${iSlot}`);
308
- B.line(`${cont} = fcmp olt double ${i}, ${len}`);
309
- B.condBr(cont, lb, le);
310
- B.startBlock(lb);
311
- const k = B.tmp();
312
- B.line(`${k} = call ptr @scr_arr_get_ref(ptr ${ks}, double ${i}) ; key (+1)`);
313
- // The entry value, type-directed off the overflow VALUE type.
314
- let val;
315
- if (iv.kind === "f64" || iv.kind === "bool") {
316
- const outTy = iv.kind === "f64" ? "double" : "i8";
317
- const outSlot = B.slot();
318
- B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
319
- B.line(`store ${outTy} ${iv.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
320
- host.declare(`declare zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr, ptr, ptr)`);
321
- const found = B.tmp();
322
- B.line(`${found} = call zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr ${ovf}, ptr ${k}, ptr ${outSlot})`);
323
- const raw = B.tmp();
324
- B.line(`${raw} = load ${outTy}, ptr ${outSlot}`);
325
- if (iv.kind === "bool") {
326
- val = B.tmp();
327
- B.line(`${val} = trunc i8 ${raw} to i1`);
298
+ B.countedLoop(len, (i, next) => {
299
+ const k = B.tmp();
300
+ B.line(`${k} = call ptr @scr_arr_get_ref(ptr ${ks}, double ${i}) ; key (+1)`);
301
+ // The entry value, type-directed off the overflow VALUE type.
302
+ let val;
303
+ if (iv.kind === "f64" || iv.kind === "bool") {
304
+ const outTy = iv.kind === "f64" ? "double" : "i8";
305
+ const outSlot = B.slot();
306
+ B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
307
+ B.line(`store ${outTy} ${iv.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
308
+ host.declare(`declare zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr, ptr, ptr)`);
309
+ const found = B.tmp();
310
+ B.line(`${found} = call zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr ${ovf}, ptr ${k}, ptr ${outSlot})`);
311
+ const raw = B.tmp();
312
+ B.line(`${raw} = load ${outTy}, ptr ${outSlot}`);
313
+ if (iv.kind === "bool") {
314
+ val = B.tmp();
315
+ B.line(`${val} = trunc i8 ${raw} to i1`);
316
+ }
317
+ else {
318
+ val = raw;
319
+ }
328
320
  }
329
321
  else {
330
- val = raw;
322
+ host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
323
+ val = B.tmp();
324
+ B.line(`${val} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k}) ; value (+1)`);
331
325
  }
332
- }
333
- else {
334
- host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
335
- val = B.tmp();
336
- B.line(`${val} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k}) ; value (+1)`);
337
- }
338
- // Undefined-valued entries drop, exactly the optional-field rule: a
339
- // dyn value whose dyn kind follows its size_t RC word (enum
340
- // member 6 — scr_runtime.h's ScrDynKind), or a union holding its
341
- // undefined arm.
342
- let skipUndef = null;
343
- if (iv.kind === "dyn") {
344
- const kp = B.tmp();
345
- const kd = B.tmp();
346
- const isu = B.tmp();
347
- B.line(`${kp} = getelementptr inbounds i8, ptr ${val}, i64 ${this.abiOffset(8, 4)} ; ->kind`);
348
- B.line(`${kd} = load i32, ptr ${kp}`);
349
- B.line(`${isu} = icmp eq i32 ${kd}, 6 ; SCR_DYN_UNDEF (NULL is 0 — null members DO serialize)`);
350
- skipUndef = isu;
351
- }
352
- else if (this.host.undefinedArmTag(iv) >= 0) {
353
- const tag = this.unionTag(B, val);
354
- const isu = B.tmp();
355
- B.line(`${isu} = icmp eq i32 ${tag}, ${this.host.undefinedArmTag(iv)}`);
356
- skipUndef = isu;
357
- }
358
- if (skipUndef !== null) {
359
- const ld = B.newLabel("ovf.d");
360
- const write = B.newLabel("ovf.w");
361
- B.condBr(skipUndef, ld, write);
362
- B.startBlock(ld);
326
+ // Undefined-valued entries drop, exactly the optional-field rule: a
327
+ // dyn value whose dyn kind follows its size_t RC word (enum
328
+ // member 6 — scr_runtime.h's ScrDynKind), or a union holding its
329
+ // undefined arm.
330
+ let skipUndef = null;
331
+ if (iv.kind === "dyn") {
332
+ const kp = B.tmp();
333
+ const kd = B.tmp();
334
+ const isu = B.tmp();
335
+ B.line(`${kp} = getelementptr inbounds i8, ptr ${val}, i64 ${this.abiOffset(8, 4)} ; ->kind`);
336
+ B.line(`${kd} = load i32, ptr ${kp}`);
337
+ B.line(`${isu} = icmp eq i32 ${kd}, 6 ; SCR_DYN_UNDEF (NULL is 0 — null members DO serialize)`);
338
+ skipUndef = isu;
339
+ }
340
+ else if (undefinedArmTag(iv, this.host.unionsById) >= 0) {
341
+ const tag = this.unionTag(B, val);
342
+ const isu = B.tmp();
343
+ B.line(`${isu} = icmp eq i32 ${tag}, ${undefinedArmTag(iv, this.host.unionsById)}`);
344
+ skipUndef = isu;
345
+ }
346
+ if (skipUndef !== null) {
347
+ const ld = B.newLabel("ovf.d");
348
+ const write = B.newLabel("ovf.w");
349
+ B.condBr(skipUndef, ld, write);
350
+ B.startBlock(ld);
351
+ if (isRefCounted(iv))
352
+ B.line(`call void ${releaseSym(host, iv)}(ptr ${val})`);
353
+ B.line(`call void @scr_str_release(ptr ${k})`);
354
+ B.br(next);
355
+ B.startBlock(write);
356
+ }
357
+ // The comma dance over the shared `first` flag.
358
+ {
359
+ const isf = B.tmp();
360
+ const lcm = B.newLabel("ovf.cm");
361
+ const lj = B.newLabel("ovf.cj");
362
+ B.line(`${isf} = load i1, ptr ${first}`);
363
+ B.condBr(isf, lj, lcm);
364
+ B.startBlock(lcm);
365
+ this.putc(B, "%b", "44"); // ','
366
+ B.br(lj);
367
+ B.startBlock(lj);
368
+ B.line(`store i1 false, ptr ${first}`);
369
+ }
370
+ host.declare(`declare void @scr_jb_put_json_str(ptr, ptr)`);
371
+ B.line(`call void @scr_jb_put_json_str(ptr %b, ptr ${k})`);
372
+ this.putc(B, "%b", "58"); // ':'
373
+ if (edgeKeys) {
374
+ this.host.declare(`declare void @scr_jb_edge_key(ptr, ptr)`);
375
+ B.line(`call void @scr_jb_edge_key(ptr %b, ptr ${k})`);
376
+ }
377
+ B.line(`call void @${this.jsonWriteHelper(iv)}(ptr %b, ${this.valTy(iv)} ${val})`);
378
+ B.line(`call void @scr_str_release(ptr ${k})`);
363
379
  if (isRefCounted(iv))
364
380
  B.line(`call void ${releaseSym(host, iv)}(ptr ${val})`);
365
- B.line(`call void @scr_str_release(ptr ${k})`);
366
- B.br(ln);
367
- B.startBlock(write);
368
- }
369
- // The comma dance over the shared `first` flag.
370
- {
371
- const isf = B.tmp();
372
- const lcm = B.newLabel("ovf.cm");
373
- const lj = B.newLabel("ovf.cj");
374
- B.line(`${isf} = load i1, ptr ${first}`);
375
- B.condBr(isf, lj, lcm);
376
- B.startBlock(lcm);
377
- this.putc(B, "%b", "44"); // ','
378
- B.br(lj);
379
- B.startBlock(lj);
380
- B.line(`store i1 false, ptr ${first}`);
381
- }
382
- host.declare(`declare void @scr_jb_put_json_str(ptr, ptr)`);
383
- B.line(`call void @scr_jb_put_json_str(ptr %b, ptr ${k})`);
384
- this.putc(B, "%b", "58"); // ':'
385
- if (edgeKeys) {
386
- this.host.declare(`declare void @scr_jb_edge_key(ptr, ptr)`);
387
- B.line(`call void @scr_jb_edge_key(ptr %b, ptr ${k})`);
388
- }
389
- B.line(`call void @${this.jsonWriteHelper(iv)}(ptr %b, ${this.valTy(iv)} ${val})`);
390
- B.line(`call void @scr_str_release(ptr ${k})`);
391
- if (isRefCounted(iv))
392
- B.line(`call void ${releaseSym(host, iv)}(ptr ${val})`);
393
- B.br(ln);
394
- B.startBlock(ln);
395
- const i2 = B.tmp();
396
- B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
397
- B.line(`store double ${i2}, ptr ${iSlot}`);
398
- B.br(lc);
399
- B.startBlock(le);
381
+ });
400
382
  host.declare(`declare void @scr_arr_release(ptr)`);
401
383
  B.line(`call void @scr_arr_release(ptr ${ks})`);
402
384
  }
@@ -411,55 +393,38 @@ export class LlWalkers {
411
393
  this.putc(B, "%b", "91"); // '['
412
394
  const len = B.tmp();
413
395
  B.line(`${len} = call double @scr_arr_len(ptr %v)`);
414
- const iSlot = B.slot();
415
- B.entryAllocas.push(`${iSlot} = alloca double`);
416
- B.line(`store double ${f64Lit(0)}, ptr ${iSlot}`);
417
- const lc = B.newLabel("jwa.c");
418
- const lb = B.newLabel("jwa.b");
419
- const le = B.newLabel("jwa.e");
420
- B.br(lc);
421
- B.startBlock(lc);
422
- const i = B.tmp();
423
- const cont = B.tmp();
424
- B.line(`${i} = load double, ptr ${iSlot}`);
425
- B.line(`${cont} = fcmp olt double ${i}, ${len}`);
426
- B.condBr(cont, lb, le);
427
- B.startBlock(lb);
428
- const nz = B.tmp();
429
- const lcm = B.newLabel("jwa.cm");
430
- const lj = B.newLabel("jwa.cj");
431
- B.line(`${nz} = fcmp ogt double ${i}, ${f64Lit(0)}`);
432
- B.condBr(nz, lcm, lj);
433
- B.startBlock(lcm);
434
- this.putc(B, "%b", "44"); // ','
435
- B.br(lj);
436
- B.startBlock(lj);
437
- if (cyclic) {
438
- const idx = B.tmp();
439
- B.line(`${idx} = fptoui double ${i} to ${this.S}`);
440
- this.jbEdgeIdx(B, idx);
441
- }
442
- if (elem.kind === "f64" || elem.kind === "bool") {
443
- const acc = elem.kind;
444
- const accTy = elem.kind === "f64" ? "double" : "i1";
445
- host.declare(`declare ${elem.kind === "bool" ? "zeroext i1" : accTy} @scr_arr_get_${acc}(ptr, double)`);
446
- const v = B.tmp();
447
- B.line(`${v} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
448
- B.line(`call void @${w}(ptr %b, ${accTy} ${v})`);
449
- }
450
- else {
451
- // _get_ref returns +1; release after writing.
452
- host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
453
- const v = B.tmp();
454
- B.line(`${v} = call ptr @scr_arr_get_ref(ptr %v, double ${i})`);
455
- B.line(`call void @${w}(ptr %b, ptr ${v})`);
456
- B.line(`call void ${releaseSym(host, elem)}(ptr ${v})`);
457
- }
458
- const i2 = B.tmp();
459
- B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
460
- B.line(`store double ${i2}, ptr ${iSlot}`);
461
- B.br(lc);
462
- B.startBlock(le);
396
+ B.countedLoop(len, (i) => {
397
+ const nz = B.tmp();
398
+ const lcm = B.newLabel("jwa.cm");
399
+ const lj = B.newLabel("jwa.cj");
400
+ B.line(`${nz} = fcmp ogt double ${i}, ${f64Lit(0)}`);
401
+ B.condBr(nz, lcm, lj);
402
+ B.startBlock(lcm);
403
+ this.putc(B, "%b", "44"); // ','
404
+ B.br(lj);
405
+ B.startBlock(lj);
406
+ if (cyclic) {
407
+ const idx = B.tmp();
408
+ B.line(`${idx} = fptoui double ${i} to ${this.S}`);
409
+ this.jbEdgeIdx(B, idx);
410
+ }
411
+ if (elem.kind === "f64" || elem.kind === "bool") {
412
+ const acc = elem.kind;
413
+ const accTy = elem.kind === "f64" ? "double" : "i1";
414
+ host.declare(`declare ${elem.kind === "bool" ? "zeroext i1" : accTy} @scr_arr_get_${acc}(ptr, double)`);
415
+ const v = B.tmp();
416
+ B.line(`${v} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
417
+ B.line(`call void @${w}(ptr %b, ${accTy} ${v})`);
418
+ }
419
+ else {
420
+ // _get_ref returns +1; release after writing.
421
+ host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
422
+ const v = B.tmp();
423
+ B.line(`${v} = call ptr @scr_arr_get_ref(ptr %v, double ${i})`);
424
+ B.line(`call void @${w}(ptr %b, ptr ${v})`);
425
+ B.line(`call void ${releaseSym(host, elem)}(ptr ${v})`);
426
+ }
427
+ });
463
428
  this.putc(B, "%b", "93"); // ']'
464
429
  if (cyclic)
465
430
  this.jbLeave(B);
@@ -467,7 +432,7 @@ export class LlWalkers {
467
432
  emitUnionWriter(B, unionId) {
468
433
  const def = this.host.unionsById.get(unionId);
469
434
  if (!def)
470
- throw new Error(`llvm emitter bug: jsonStringify of unknown union ${unionId}`);
435
+ throw new InternalCompilerError(`llvm emitter bug: jsonStringify of unknown union ${unionId}`);
471
436
  const tag = this.unionTag(B, "%v");
472
437
  const bad = B.newLabel("jwu.bad");
473
438
  const done = B.newLabel("jwu.d");
@@ -516,7 +481,7 @@ export class LlWalkers {
516
481
  }
517
482
  /* ── the pretty-print re-indenter (jsonIndentHelper, ported) ──────────── */
518
483
  /** `JSON.stringify(v, null, space)` as a REWRITE of the compact text —
519
- * Node's gap algorithm exactly (see emit-walkers.ts's sc_ji). The indent
484
+ * Node's gap algorithm exactly (see walkers.ts's sc_ji). The indent
520
485
  * rides as a NUL-terminated constant + byte length. */
521
486
  jsonIndentHelper() {
522
487
  if (this.indentFn)
@@ -698,7 +663,7 @@ export class LlWalkers {
698
663
  return existing;
699
664
  const def = this.host.unionsById.get(unionId);
700
665
  if (!def)
701
- throw new Error(`llvm emitter bug: ToString of unknown union ${unionId}`);
666
+ throw new InternalCompilerError(`llvm emitter bug: ToString of unknown union ${unionId}`);
702
667
  const name = `sc_us_${this.unionToStrFns.size}`;
703
668
  this.unionToStrFns.set(unionId, name);
704
669
  const host = this.host;
@@ -767,7 +732,7 @@ export class LlWalkers {
767
732
  return existing;
768
733
  const def = this.host.unionsById.get(unionId);
769
734
  if (!def)
770
- throw new Error(`llvm emitter bug: join of unknown union ${unionId}`);
735
+ throw new InternalCompilerError(`llvm emitter bug: join of unknown union ${unionId}`);
771
736
  const name = `sc_uj_${this.unionJoinFns.size}`;
772
737
  this.unionJoinFns.set(unionId, name);
773
738
  const toStr = this.unionToStrHelper(unionId);
@@ -781,72 +746,53 @@ export class LlWalkers {
781
746
  host.declare(`declare void @scr_str_release(ptr)`);
782
747
  const B = new BlockBuilder();
783
748
  const buf = "%jb";
784
- const iSlot = "%i";
785
- B.entryAllocas.push(`${buf} = alloca %ScrJsonBuf`, `${iSlot} = alloca double`);
749
+ B.entryAllocas.push(`${buf} = alloca %ScrJsonBuf`);
786
750
  B.line(`call void @scr_jb_init(ptr ${buf})`);
787
- B.line(`store double ${f64Lit(0)}, ptr ${iSlot}`);
788
751
  const len = B.tmp();
789
752
  B.line(`${len} = call double @scr_arr_len(ptr %a)`);
790
- const lc = B.newLabel("uj.c");
791
- const lb = B.newLabel("uj.b");
792
- const ln = B.newLabel("uj.n");
793
- const le = B.newLabel("uj.e");
794
- B.br(lc);
795
- B.startBlock(lc);
796
- const i = B.tmp();
797
- const cont = B.tmp();
798
- B.line(`${i} = load double, ptr ${iSlot}`);
799
- B.line(`${cont} = fcmp olt double ${i}, ${len}`);
800
- B.condBr(cont, lb, le);
801
- B.startBlock(lb);
802
- // `if (i) put sep bytes` — separators between elements only.
803
- const nz = B.tmp();
804
- const lsep = B.newLabel("uj.s");
805
- const lel = B.newLabel("uj.v");
806
- B.line(`${nz} = fcmp ogt double ${i}, ${f64Lit(0)}`);
807
- B.condBr(nz, lsep, lel);
808
- B.startBlock(lsep);
809
- this.putScrStr(B, buf, "%sep");
810
- B.br(lel);
811
- B.startBlock(lel);
812
- const u = B.tmp();
813
- B.line(`${u} = call ptr @scr_arr_get_ref(ptr %a, double ${i}) ; element (+1)`);
814
- if (unitTags.length > 0) {
815
- // Nullish arms print empty, exactly JS's join.
816
- const tag = this.unionTag(B, u);
817
- let acc = "";
818
- for (const t of unitTags) {
819
- const cnd = B.tmp();
820
- B.line(`${cnd} = icmp eq i32 ${tag}, ${t}`);
821
- if (acc === "") {
822
- acc = cnd;
823
- }
824
- else {
825
- const o = B.tmp();
826
- B.line(`${o} = or i1 ${acc}, ${cnd}`);
827
- acc = o;
753
+ B.countedLoop(len, (i, next) => {
754
+ // `if (i) put sep bytes` — separators between elements only.
755
+ const nz = B.tmp();
756
+ const lsep = B.newLabel("uj.s");
757
+ const lel = B.newLabel("uj.v");
758
+ B.line(`${nz} = fcmp ogt double ${i}, ${f64Lit(0)}`);
759
+ B.condBr(nz, lsep, lel);
760
+ B.startBlock(lsep);
761
+ this.putScrStr(B, buf, "%sep");
762
+ B.br(lel);
763
+ B.startBlock(lel);
764
+ const u = B.tmp();
765
+ B.line(`${u} = call ptr @scr_arr_get_ref(ptr %a, double ${i}) ; element (+1)`);
766
+ if (unitTags.length > 0) {
767
+ // Nullish arms print empty, exactly JS's join.
768
+ const tag = this.unionTag(B, u);
769
+ let acc = "";
770
+ for (const t of unitTags) {
771
+ const cnd = B.tmp();
772
+ B.line(`${cnd} = icmp eq i32 ${tag}, ${t}`);
773
+ if (acc === "") {
774
+ acc = cnd;
775
+ }
776
+ else {
777
+ const o = B.tmp();
778
+ B.line(`${o} = or i1 ${acc}, ${cnd}`);
779
+ acc = o;
780
+ }
828
781
  }
782
+ const lskip = B.newLabel("uj.k");
783
+ const lwrite = B.newLabel("uj.w");
784
+ B.condBr(acc, lskip, lwrite);
785
+ B.startBlock(lskip);
786
+ B.line(`call void @scr_union_release(ptr ${u})`);
787
+ B.br(next);
788
+ B.startBlock(lwrite);
829
789
  }
830
- const lskip = B.newLabel("uj.k");
831
- const lwrite = B.newLabel("uj.w");
832
- B.condBr(acc, lskip, lwrite);
833
- B.startBlock(lskip);
790
+ const s = B.tmp();
791
+ B.line(`${s} = call ptr @${toStr}(ptr ${u})`);
792
+ this.putScrStr(B, buf, s);
793
+ B.line(`call void @scr_str_release(ptr ${s})`);
834
794
  B.line(`call void @scr_union_release(ptr ${u})`);
835
- B.br(ln);
836
- B.startBlock(lwrite);
837
- }
838
- const s = B.tmp();
839
- B.line(`${s} = call ptr @${toStr}(ptr ${u})`);
840
- this.putScrStr(B, buf, s);
841
- B.line(`call void @scr_str_release(ptr ${s})`);
842
- B.line(`call void @scr_union_release(ptr ${u})`);
843
- B.br(ln);
844
- B.startBlock(ln);
845
- const i2 = B.tmp();
846
- B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
847
- B.line(`store double ${i2}, ptr ${iSlot}`);
848
- B.br(lc);
849
- B.startBlock(le);
795
+ });
850
796
  const r = B.tmp();
851
797
  B.line(`${r} = call ptr @scr_jb_finish(ptr ${buf})`);
852
798
  B.terminate(`ret ptr ${r}`);