@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,17 +1,19 @@
1
- import { DYN_HANDLE_KINDS, isRefCounted, typeKey } from "../../ir/nodes.js";
1
+ import { InternalCompilerError } from "../../errors.js";
2
+ import { DYN_HANDLE_KINDS, isRefCounted, typeKey } from "../../ir/ir.js";
3
+ import { dynDesc, undefinedArmTag } from "../../ir/analysis.js";
2
4
  import { mangleRecordNew, mangleRecordStruct } from "../mangle.js";
3
5
  import { BlockBuilder } from "./blocks.js";
4
6
  import { arrNewCall, elemAccess, llFieldType, releaseSym, traceAdapter, traceArg, vAdapters } from "./shapes.js";
5
7
  import { LlvmUnsupportedError } from "./unsupported.js";
6
8
  /** ScrDynKind values (scr_runtime.h). */
7
9
  /** ScrDynHandleTag numeric values (scr_runtime.h's enum order). */
8
- export const DYN_HANDLE_TAG_NUM = {
10
+ const DYN_HANDLE_TAG_NUM = {
9
11
  httpReq: 0,
10
12
  httpRes: 1,
11
13
  netSocket: 2,
12
14
  netServer: 3,
13
15
  };
14
- export const DK = {
16
+ export const DYN_KIND = {
15
17
  NULL: 0,
16
18
  BOOL: 1,
17
19
  NUM: 2,
@@ -237,47 +239,7 @@ export class LlDyn {
237
239
  B.terminate(`ret ${dummy}`);
238
240
  B.startBlock(lk);
239
241
  }
240
- /* ── dynDesc (ported verbatim — pure strings) ──────────────────────── */
241
- /** Short human description of a dynCheck target for error messages. */
242
- dynDesc(t) {
243
- switch (t.kind) {
244
- case "f64":
245
- return "number";
246
- case "string":
247
- return "string";
248
- case "bool":
249
- return "boolean";
250
- case "record":
251
- return this.host.recordsById.get(t.shapeId)?.tuple ? "array" : "object";
252
- case "array":
253
- return "array";
254
- case "nullT":
255
- return "null";
256
- case "undefinedT":
257
- return "undefined";
258
- case "dyn":
259
- return "unknown";
260
- case "bytes":
261
- return "Uint8Array";
262
- case "object":
263
- return t.className.replace(/^%/, "");
264
- case "union": {
265
- const def = this.host.unionsById.get(t.unionId);
266
- if (!def)
267
- throw new Error(`llvm emitter bug: dynDesc of unknown union ${t.unionId}`);
268
- return def.arms.map((a) => this.dynDesc(a)).join(" | ");
269
- }
270
- case "func":
271
- return "function";
272
- default: {
273
- const h = DYN_HANDLE_KINDS.get(t.kind);
274
- if (h)
275
- return h.cls;
276
- throw new Error(`llvm emitter bug: dynDesc of non-JSON type ${t.kind}`);
277
- }
278
- }
279
- }
280
- /* ── dynMatchHelper (emit-walkers.ts, ported) ──────────────────────── */
242
+ /* ── dynMatchHelper (walkers.ts, ported) ──────────────────────── */
281
243
  /** `sc_dm_<n>(ptr d) -> i1` — does this dyn fit T? Never throws. */
282
244
  dynMatchHelper(t) {
283
245
  const key = typeKey(t);
@@ -303,7 +265,7 @@ export class LlDyn {
303
265
  this.host.declare(`declare void @scr_dyn_release_v(ptr)`);
304
266
  const kind = this.kindOf(B, "%d");
305
267
  const capsule = B.tmp();
306
- B.line(`${capsule} = icmp eq i32 ${kind}, ${DK.TYPED_REF}`);
268
+ B.line(`${capsule} = icmp eq i32 ${kind}, ${DYN_KIND.TYPED_REF}`);
307
269
  const lCapsule = B.newLabel("dm.tr.mat");
308
270
  const lPlain = B.newLabel("dm.tr.plain");
309
271
  B.condBr(capsule, lCapsule, lPlain);
@@ -324,19 +286,19 @@ export class LlDyn {
324
286
  };
325
287
  switch (t.kind) {
326
288
  case "f64":
327
- kindIs(DK.NUM);
289
+ kindIs(DYN_KIND.NUM);
328
290
  break;
329
291
  case "string":
330
- kindIs(DK.STR);
292
+ kindIs(DYN_KIND.STR);
331
293
  break;
332
294
  case "bool":
333
- kindIs(DK.BOOL);
295
+ kindIs(DYN_KIND.BOOL);
334
296
  break;
335
297
  case "nullT":
336
- kindIs(DK.NULL);
298
+ kindIs(DYN_KIND.NULL);
337
299
  break;
338
300
  case "undefinedT":
339
- kindIs(DK.UNDEF);
301
+ kindIs(DYN_KIND.UNDEF);
340
302
  break;
341
303
  case "dyn":
342
304
  // An `unknown` target: every dyn value fits, undefined included.
@@ -344,20 +306,20 @@ export class LlDyn {
344
306
  break;
345
307
  case "bytes":
346
308
  if (t.elem !== "u8")
347
- throw new Error(`llvm emitter bug: dynMatch of bytes<${t.elem}>`);
348
- kindIs(DK.BYTES);
309
+ throw new InternalCompilerError(`llvm emitter bug: dynMatch of bytes<${t.elem}>`);
310
+ kindIs(DYN_KIND.BYTES);
349
311
  break;
350
312
  case "record": {
351
313
  const shape = this.host.recordsById.get(t.shapeId);
352
314
  if (!shape)
353
- throw new Error(`llvm emitter bug: dynCheck of unknown shape ${t.shapeId}`);
315
+ throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown shape ${t.shapeId}`);
354
316
  const fail = B.newLabel("dm.f");
355
317
  const kd = this.kindOf(B, "%d");
356
318
  // A tuple matches a JSON ARRAY of EXACTLY its arity, positionally.
357
319
  if (shape.tuple) {
358
320
  const byIndex = [...shape.fields].sort((a, b) => Number(a.name) - Number(b.name));
359
321
  const isArr = B.tmp();
360
- B.line(`${isArr} = icmp eq i32 ${kd}, ${DK.ARR}`);
322
+ B.line(`${isArr} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
361
323
  const l1 = B.newLabel("dm.a");
362
324
  B.condBr(isArr, l1, fail);
363
325
  B.startBlock(l1);
@@ -382,7 +344,7 @@ export class LlDyn {
382
344
  break;
383
345
  }
384
346
  const isObj = B.tmp();
385
- B.line(`${isObj} = icmp eq i32 ${kd}, ${DK.OBJ}`);
347
+ B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
386
348
  const l0 = B.newLabel("dm.o");
387
349
  B.condBr(isObj, l0, fail);
388
350
  B.startBlock(l0);
@@ -395,7 +357,7 @@ export class LlDyn {
395
357
  B.line(`${has} = icmp ne ptr ${m}, null`);
396
358
  const lTest = B.newLabel("dm.t");
397
359
  const lNext = B.newLabel("dm.n");
398
- if (this.host.undefinedArmTag(f.type) >= 0) {
360
+ if (undefinedArmTag(f.type, this.host.unionsById) >= 0) {
399
361
  // Optional-flavored field: a MISSING key is the undefined arm
400
362
  // (a match); a PRESENT key must fit the union as usual.
401
363
  B.condBr(has, lTest, lNext);
@@ -456,7 +418,7 @@ export class LlDyn {
456
418
  const fail = B.newLabel("dm.f");
457
419
  const kd = this.kindOf(B, "%d");
458
420
  const isArr = B.tmp();
459
- B.line(`${isArr} = icmp eq i32 ${kd}, ${DK.ARR}`);
421
+ B.line(`${isArr} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
460
422
  const l0 = B.newLabel("dm.a");
461
423
  B.condBr(isArr, l0, fail);
462
424
  B.startBlock(l0);
@@ -478,7 +440,7 @@ export class LlDyn {
478
440
  case "union": {
479
441
  const def = this.host.unionsById.get(t.unionId);
480
442
  if (!def)
481
- throw new Error(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
443
+ throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
482
444
  // Arms in canonical order; any full match answers true.
483
445
  const yes = B.newLabel("dm.y");
484
446
  for (const arm of def.arms) {
@@ -499,7 +461,7 @@ export class LlDyn {
499
461
  this.defs.push(`define internal zeroext i1 @${name}(ptr %d) ${FN_ATTRS} { ; matches ${key}`, B.render(), `}`, ``);
500
462
  return name;
501
463
  }
502
- /* ── dynCheckHelper (emit-walkers.ts, ported) ──────────────────────── */
464
+ /* ── dynCheckHelper (walkers.ts, ported) ──────────────────────── */
503
465
  /** `sc_dc_<n>(ptr d, ptr path) -> T` — validate the checked-dynamic tree against T and
504
466
  * BUILD the typed value (+1), or throw the catchable path-annotated
505
467
  * TypeError and return a dummy with the pending flag set. */
@@ -514,7 +476,7 @@ export class LlDyn {
514
476
  const retTy = this.valTy(t);
515
477
  const dummy = retTy === "double" ? `double ${f64Lit(0)}` : retTy === "i1" ? "i1 false" : "ptr null";
516
478
  host.declare(`declare void @scr_dyn_check_fail(ptr, ptr, ptr)`);
517
- const want = host.cstr(this.dynDesc(t));
479
+ const want = host.cstr(dynDesc(t, this.host.recordsById, this.host.unionsById));
518
480
  const B = new BlockBuilder();
519
481
  if (isRefCounted(t) && t.kind !== "dyn") {
520
482
  host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${host.sizeType})`);
@@ -537,7 +499,7 @@ export class LlDyn {
537
499
  const rc = vAdapters(host, t);
538
500
  const kind = this.kindOf(B, "%d");
539
501
  const capsule = B.tmp();
540
- B.line(`${capsule} = icmp eq i32 ${kind}, ${DK.TYPED_REF}`);
502
+ B.line(`${capsule} = icmp eq i32 ${kind}, ${DYN_KIND.TYPED_REF}`);
541
503
  const lCapsule = B.newLabel("dc.tr.cap");
542
504
  const lPlain = B.newLabel("dc.tr.plain");
543
505
  B.condBr(capsule, lCapsule, lPlain);
@@ -566,7 +528,7 @@ export class LlDyn {
566
528
  ? host.recordsById.get(t.shapeId)
567
529
  : undefined;
568
530
  if (t.kind === "record" && !shape) {
569
- throw new Error(`llvm emitter bug: cached typed-ref cast of unknown shape ${t.shapeId}`);
531
+ throw new InternalCompilerError(`llvm emitter bug: cached typed-ref cast of unknown shape ${t.shapeId}`);
570
532
  }
571
533
  const lOk = B.newLabel("dc.tr.ok");
572
534
  const lBad = B.newLabel("dc.tr.bad");
@@ -654,19 +616,19 @@ export class LlDyn {
654
616
  };
655
617
  switch (t.kind) {
656
618
  case "f64": {
657
- requireKind(DK.NUM, "dc");
619
+ requireKind(DYN_KIND.NUM, "dc");
658
620
  const v = this.payloadOf(B, "%d", "double");
659
621
  B.terminate(`ret double ${v}`);
660
622
  break;
661
623
  }
662
624
  case "bool": {
663
- requireKind(DK.BOOL, "dc");
625
+ requireKind(DYN_KIND.BOOL, "dc");
664
626
  const v = this.boolOf(B, "%d");
665
627
  B.terminate(`ret i1 ${v}`);
666
628
  break;
667
629
  }
668
630
  case "string": {
669
- requireKind(DK.STR, "dc");
631
+ requireKind(DYN_KIND.STR, "dc");
670
632
  host.declare(`declare ptr @scr_str_retain_v(ptr)`);
671
633
  const s = this.payloadOf(B, "%d", "ptr");
672
634
  const r = B.tmp();
@@ -685,8 +647,8 @@ export class LlDyn {
685
647
  case "bytes": {
686
648
  // `u as Uint8Array`: kind check, then a fresh COPY out.
687
649
  if (t.elem !== "u8")
688
- throw new Error(`llvm emitter bug: dynCheck of bytes<${t.elem}>`);
689
- requireKind(DK.BYTES, "dc");
650
+ throw new InternalCompilerError(`llvm emitter bug: dynCheck of bytes<${t.elem}>`);
651
+ requireKind(DYN_KIND.BYTES, "dc");
690
652
  host.declare(`declare ptr @scr_dyn_bytes_copy_out(ptr)`);
691
653
  const r = B.tmp();
692
654
  B.line(`${r} = call ptr @scr_dyn_bytes_copy_out(ptr %d)`);
@@ -703,11 +665,11 @@ export class LlDyn {
703
665
  // %error objects rebuild once and cache the pair. The C walker's
704
666
  // arm exactly.
705
667
  if (t.className !== "%Error") {
706
- throw new Error(`llvm emitter bug: dynCheck of class ${t.className} (only %Error extracts from the checked-dynamic tree)`);
668
+ throw new InternalCompilerError(`llvm emitter bug: dynCheck of class ${t.className} (only %Error extracts from the checked-dynamic tree)`);
707
669
  }
708
670
  const kd = this.kindOf(B, "%d");
709
671
  const isObj = B.tmp();
710
- B.line(`${isObj} = icmp eq i32 ${kd}, ${DK.OBJ}`);
672
+ B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
711
673
  const lObj = B.newLabel("dce.o");
712
674
  const lFail = B.newLabel("dce.f");
713
675
  B.condBr(isObj, lObj, lFail);
@@ -730,7 +692,7 @@ export class LlDyn {
730
692
  case "record": {
731
693
  const shape = host.recordsById.get(t.shapeId);
732
694
  if (!shape)
733
- throw new Error(`llvm emitter bug: dynCheck of unknown shape ${t.shapeId}`);
695
+ throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown shape ${t.shapeId}`);
734
696
  const struct = mangleRecordStruct(t.shapeId);
735
697
  const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + 1]));
736
698
  const releaseR = () => {
@@ -779,7 +741,7 @@ export class LlDyn {
779
741
  if (shape.tuple) {
780
742
  const byIndex = [...shape.fields].sort((a, b) => Number(a.name) - Number(b.name));
781
743
  const arityWant = host.cstr(`array of length ${byIndex.length}`);
782
- requireKind(DK.ARR, "dct");
744
+ requireKind(DYN_KIND.ARR, "dct");
783
745
  const len = this.lenOf(B, "%d");
784
746
  const lenOk = B.tmp();
785
747
  B.line(`${lenOk} = icmp eq ${host.sizeType} ${len}, ${byIndex.length}`);
@@ -803,11 +765,11 @@ export class LlDyn {
803
765
  B.terminate(`ret ptr %r0`);
804
766
  break;
805
767
  }
806
- requireKind(DK.OBJ, "dcr");
768
+ requireKind(DYN_KIND.OBJ, "dcr");
807
769
  B.line(`%r0 = call ptr @${mangleRecordNew(t.shapeId)}()`);
808
770
  for (const f of shape.fields) {
809
- const fieldWant = host.cstr(this.dynDesc(f.type));
810
- const utag = f.type.kind === "union" ? host.undefinedArmTag(f.type) : -1;
771
+ const fieldWant = host.cstr(dynDesc(f.type, this.host.recordsById, this.host.unionsById));
772
+ const utag = f.type.kind === "union" ? undefinedArmTag(f.type, host.unionsById) : -1;
811
773
  const m = this.objGetLit(B, "%d", f.name);
812
774
  if (f.type.kind === "dyn") {
813
775
  // An `unknown` field: a present key passes through, a missing
@@ -931,7 +893,7 @@ export class LlDyn {
931
893
  case "array": {
932
894
  const elem = t.elem;
933
895
  const c = this.dynCheckHelper(elem);
934
- requireKind(DK.ARR, "dca");
896
+ requireKind(DYN_KIND.ARR, "dca");
935
897
  const n = this.lenOf(B, "%d");
936
898
  const a = B.tmp();
937
899
  B.line(`${a} = ${arrNewCall(host, elem, n)}`);
@@ -967,7 +929,7 @@ export class LlDyn {
967
929
  case "union": {
968
930
  const def = host.unionsById.get(t.unionId);
969
931
  if (!def)
970
- throw new Error(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
932
+ throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
971
933
  // Arms in CANONICAL order, first FULL match wins. The matched
972
934
  // arm's builder can no longer fail.
973
935
  def.arms.forEach((arm, i) => {
@@ -1022,7 +984,7 @@ export class LlDyn {
1022
984
  const rc = vAdapters(host, t);
1023
985
  const kind = this.kindOf(B, "%d");
1024
986
  const capsule = B.tmp();
1025
- B.line(`${capsule} = icmp eq i32 ${kind}, ${DK.TYPED_REF}`);
987
+ B.line(`${capsule} = icmp eq i32 ${kind}, ${DYN_KIND.TYPED_REF}`);
1026
988
  const lCapsule = B.newLabel("dcu.cap");
1027
989
  const lFail = B.newLabel("dcu.fail");
1028
990
  B.condBr(capsule, lCapsule, lFail);
@@ -1090,7 +1052,7 @@ export class LlDyn {
1090
1052
  // caps[0] obj-box owns the dyn value (untraced).
1091
1053
  const adapter = this.dynFuncAdapterHelper(t);
1092
1054
  const sigLit = host.cstr(key);
1093
- requireKind(DK.FUNC, "dcf");
1055
+ requireKind(DYN_KIND.FUNC, "dcf");
1094
1056
  host.declare(`declare i32 @strcmp(ptr, ptr)`);
1095
1057
  const sigp = B.tmp();
1096
1058
  const sig = B.tmp();
@@ -1148,7 +1110,7 @@ export class LlDyn {
1148
1110
  this.defs.push(`define internal ${retTy === "i1" ? "zeroext i1" : retTy} @${name}(ptr %d, ptr %path) ${FN_ATTRS} { ; check ${key}`, B.render(), `}`, ``);
1149
1111
  return name;
1150
1112
  }
1151
- /* ── toDynHelper (emit-walkers.ts, ported) ─────────────────────────── */
1113
+ /* ── toDynHelper (walkers.ts, ported) ─────────────────────────── */
1152
1114
  /** `sc_td_<n>(<T> v) -> ptr` — build a fresh dyn value from a
1153
1115
  * static one (+1), DEEP-COPYING composites. Borrows the operand.
1154
1116
  * Never throws. */
@@ -1187,7 +1149,7 @@ export class LlDyn {
1187
1149
  case "object": {
1188
1150
  // %Error only (canConvertToDyn's gate): the checked-dynamic tree's error encoding.
1189
1151
  if (t.className !== "%Error") {
1190
- throw new Error(`llvm emitter bug: to-dyn of class ${t.className}`);
1152
+ throw new InternalCompilerError(`llvm emitter bug: to-dyn of class ${t.className}`);
1191
1153
  }
1192
1154
  host.declare(`declare ptr @scr_dyn_from_error(ptr)`);
1193
1155
  const r = B.tmp();
@@ -1208,7 +1170,7 @@ export class LlDyn {
1208
1170
  }
1209
1171
  case "bytes": {
1210
1172
  if (t.elem !== "u8")
1211
- throw new Error(`llvm emitter bug: to-dyn of bytes<${t.elem}>`);
1173
+ throw new InternalCompilerError(`llvm emitter bug: to-dyn of bytes<${t.elem}>`);
1212
1174
  host.declare(`declare ptr @scr_dyn_new_bytes_copy(ptr)`);
1213
1175
  const r = B.tmp();
1214
1176
  B.line(`${r} = call ptr @scr_dyn_new_bytes_copy(ptr %v)`);
@@ -1218,7 +1180,7 @@ export class LlDyn {
1218
1180
  case "record": {
1219
1181
  const shape = host.recordsById.get(t.shapeId);
1220
1182
  if (!shape)
1221
- throw new Error(`llvm emitter bug: to-dyn of unknown shape ${t.shapeId}`);
1183
+ throw new InternalCompilerError(`llvm emitter bug: to-dyn of unknown shape ${t.shapeId}`);
1222
1184
  const struct = mangleRecordStruct(t.shapeId);
1223
1185
  const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + 1]));
1224
1186
  const loadFieldOf = (fname, ft) => {
@@ -1306,71 +1268,54 @@ export class LlDyn {
1306
1268
  const len = B.tmp();
1307
1269
  B.line(`${ks} = call ptr @scr_map_keys_js_order(ptr ${ovf})`);
1308
1270
  B.line(`${len} = call double @scr_arr_len(ptr ${ks})`);
1309
- const iSlot = B.slot();
1310
- B.entryAllocas.push(`${iSlot} = alloca double`);
1311
- B.line(`store double ${f64Lit(0)}, ptr ${iSlot}`);
1312
- const lc = B.newLabel("tdo.c");
1313
- const lb = B.newLabel("tdo.b");
1314
- const le = B.newLabel("tdo.e");
1315
- B.br(lc);
1316
- B.startBlock(lc);
1317
- const i = B.tmp();
1318
- const cont = B.tmp();
1319
- B.line(`${i} = load double, ptr ${iSlot}`);
1320
- B.line(`${cont} = fcmp olt double ${i}, ${len}`);
1321
- B.condBr(cont, lb, le);
1322
- B.startBlock(lb);
1323
- const k = B.tmp();
1324
- B.line(`${k} = call ptr @scr_arr_get_ref(ptr ${ks}, double ${i}) ; key (+1)`);
1325
- const { len: klen, data: kdata } = this.strParts(B, k);
1326
- if (iv.kind === "f64" || iv.kind === "bool") {
1327
- const outTy = iv.kind === "f64" ? "double" : "i8";
1328
- const outSlot = B.slot();
1329
- B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
1330
- B.line(`store ${outTy} ${iv.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
1331
- host.declare(`declare zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr, ptr, ptr)`);
1332
- const found = B.tmp();
1333
- B.line(`${found} = call zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr ${ovf}, ptr ${k}, ptr ${outSlot})`);
1334
- const raw = B.tmp();
1335
- B.line(`${raw} = load ${outTy}, ptr ${outSlot}`);
1336
- let val = raw;
1337
- if (iv.kind === "bool") {
1338
- val = B.tmp();
1339
- B.line(`${val} = trunc i8 ${raw} to i1`);
1271
+ B.countedLoop(len, (i) => {
1272
+ const k = B.tmp();
1273
+ B.line(`${k} = call ptr @scr_arr_get_ref(ptr ${ks}, double ${i}) ; key (+1)`);
1274
+ const { len: klen, data: kdata } = this.strParts(B, k);
1275
+ if (iv.kind === "f64" || iv.kind === "bool") {
1276
+ const outTy = iv.kind === "f64" ? "double" : "i8";
1277
+ const outSlot = B.slot();
1278
+ B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
1279
+ B.line(`store ${outTy} ${iv.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
1280
+ host.declare(`declare zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr, ptr, ptr)`);
1281
+ const found = B.tmp();
1282
+ B.line(`${found} = call zeroext i1 @scr_map_get_str_${iv.kind === "f64" ? "f64" : "bool"}(ptr ${ovf}, ptr ${k}, ptr ${outSlot})`);
1283
+ const raw = B.tmp();
1284
+ B.line(`${raw} = load ${outTy}, ptr ${outSlot}`);
1285
+ let val = raw;
1286
+ if (iv.kind === "bool") {
1287
+ val = B.tmp();
1288
+ B.line(`${val} = trunc i8 ${raw} to i1`);
1289
+ }
1290
+ const boxed = B.tmp();
1291
+ if (iv.kind === "f64") {
1292
+ host.declare(`declare ptr @scr_dyn_new_num(double)`);
1293
+ B.line(`${boxed} = call ptr @scr_dyn_new_num(double ${val})`);
1294
+ }
1295
+ else {
1296
+ host.declare(`declare ptr @scr_dyn_new_bool(i1 zeroext)`);
1297
+ B.line(`${boxed} = call ptr @scr_dyn_new_bool(i1 ${val})`);
1298
+ }
1299
+ B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${boxed})`);
1340
1300
  }
1341
- const boxed = B.tmp();
1342
- if (iv.kind === "f64") {
1343
- host.declare(`declare ptr @scr_dyn_new_num(double)`);
1344
- B.line(`${boxed} = call ptr @scr_dyn_new_num(double ${val})`);
1301
+ else if (iv.kind === "dyn") {
1302
+ // get_str_ref returns +1 — exactly the ownership obj_set takes.
1303
+ host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
1304
+ const hit = B.tmp();
1305
+ B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
1306
+ B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${hit})`);
1345
1307
  }
1346
1308
  else {
1347
- host.declare(`declare ptr @scr_dyn_new_bool(i1 zeroext)`);
1348
- B.line(`${boxed} = call ptr @scr_dyn_new_bool(i1 ${val})`);
1309
+ host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
1310
+ const hit = B.tmp();
1311
+ B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
1312
+ const conv = B.tmp();
1313
+ B.line(`${conv} = call ptr @${this.toDynHelper(iv)}(ptr ${hit})`);
1314
+ B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${conv})`);
1315
+ B.line(`call void ${releaseSym(host, iv)}(ptr ${hit})`);
1349
1316
  }
1350
- B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${boxed})`);
1351
- }
1352
- else if (iv.kind === "dyn") {
1353
- // get_str_ref returns +1 — exactly the ownership obj_set takes.
1354
- host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
1355
- const hit = B.tmp();
1356
- B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
1357
- B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${hit})`);
1358
- }
1359
- else {
1360
- host.declare(`declare ptr @scr_map_get_str_ref(ptr, ptr)`);
1361
- const hit = B.tmp();
1362
- B.line(`${hit} = call ptr @scr_map_get_str_ref(ptr ${ovf}, ptr ${k})`);
1363
- const conv = B.tmp();
1364
- B.line(`${conv} = call ptr @${this.toDynHelper(iv)}(ptr ${hit})`);
1365
- B.line(`call void @scr_dyn_obj_set(ptr ${d}, ptr ${kdata}, ${host.sizeType} ${klen}, ptr ${conv})`);
1366
- B.line(`call void ${releaseSym(host, iv)}(ptr ${hit})`);
1367
- }
1368
- B.line(`call void @scr_str_release(ptr ${k})`);
1369
- const i2 = B.tmp();
1370
- B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
1371
- B.line(`store double ${i2}, ptr ${iSlot}`);
1372
- B.br(lc);
1373
- B.startBlock(le);
1317
+ B.line(`call void @scr_str_release(ptr ${k})`);
1318
+ });
1374
1319
  B.line(`call void @scr_arr_release(ptr ${ks})`);
1375
1320
  }
1376
1321
  if (cyclicRec)
@@ -1394,51 +1339,34 @@ export class LlDyn {
1394
1339
  B.line(`${d} = call ptr @scr_dyn_new_arr()`);
1395
1340
  const len = B.tmp();
1396
1341
  B.line(`${len} = call double @scr_arr_len(ptr %v)`);
1397
- const iSlot = B.slot();
1398
- B.entryAllocas.push(`${iSlot} = alloca double`);
1399
- B.line(`store double ${f64Lit(0)}, ptr ${iSlot}`);
1400
- const lc = B.newLabel("tda.c");
1401
- const lb = B.newLabel("tda.b");
1402
- const le = B.newLabel("tda.e");
1403
- B.br(lc);
1404
- B.startBlock(lc);
1405
- const i = B.tmp();
1406
- const cont = B.tmp();
1407
- B.line(`${i} = load double, ptr ${iSlot}`);
1408
- B.line(`${cont} = fcmp olt double ${i}, ${len}`);
1409
- B.condBr(cont, lb, le);
1410
- B.startBlock(lb);
1411
- if (elem.kind === "f64" || elem.kind === "bool") {
1412
- const acc = elem.kind;
1413
- const accTy = elem.kind === "f64" ? "double" : "i1";
1414
- host.declare(`declare ${elem.kind === "bool" ? "zeroext i1" : accTy} @scr_arr_get_${acc}(ptr, double)`);
1415
- const e = B.tmp();
1416
- B.line(`${e} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
1417
- const boxed = B.tmp();
1418
- if (elem.kind === "f64") {
1419
- host.declare(`declare ptr @scr_dyn_new_num(double)`);
1420
- B.line(`${boxed} = call ptr @scr_dyn_new_num(double ${e})`);
1342
+ B.countedLoop(len, (i) => {
1343
+ if (elem.kind === "f64" || elem.kind === "bool") {
1344
+ const acc = elem.kind;
1345
+ const accTy = elem.kind === "f64" ? "double" : "i1";
1346
+ host.declare(`declare ${elem.kind === "bool" ? "zeroext i1" : accTy} @scr_arr_get_${acc}(ptr, double)`);
1347
+ const e = B.tmp();
1348
+ B.line(`${e} = call ${accTy} @scr_arr_get_${acc}(ptr %v, double ${i})`);
1349
+ const boxed = B.tmp();
1350
+ if (elem.kind === "f64") {
1351
+ host.declare(`declare ptr @scr_dyn_new_num(double)`);
1352
+ B.line(`${boxed} = call ptr @scr_dyn_new_num(double ${e})`);
1353
+ }
1354
+ else {
1355
+ host.declare(`declare ptr @scr_dyn_new_bool(i1 zeroext)`);
1356
+ B.line(`${boxed} = call ptr @scr_dyn_new_bool(i1 ${e})`);
1357
+ }
1358
+ B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${boxed})`);
1421
1359
  }
1422
1360
  else {
1423
- host.declare(`declare ptr @scr_dyn_new_bool(i1 zeroext)`);
1424
- B.line(`${boxed} = call ptr @scr_dyn_new_bool(i1 ${e})`);
1361
+ host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
1362
+ const e = B.tmp();
1363
+ B.line(`${e} = call ptr @scr_arr_get_ref(ptr %v, double ${i}) ; +1`);
1364
+ const conv = B.tmp();
1365
+ B.line(`${conv} = call ptr @${this.toDynHelper(elem)}(ptr ${e})`);
1366
+ B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${conv})`);
1367
+ B.line(`call void ${releaseSym(host, elem)}(ptr ${e})`);
1425
1368
  }
1426
- B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${boxed})`);
1427
- }
1428
- else {
1429
- host.declare(`declare ptr @scr_arr_get_ref(ptr, double)`);
1430
- const e = B.tmp();
1431
- B.line(`${e} = call ptr @scr_arr_get_ref(ptr %v, double ${i}) ; +1`);
1432
- const conv = B.tmp();
1433
- B.line(`${conv} = call ptr @${this.toDynHelper(elem)}(ptr ${e})`);
1434
- B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${conv})`);
1435
- B.line(`call void ${releaseSym(host, elem)}(ptr ${e})`);
1436
- }
1437
- const i2 = B.tmp();
1438
- B.line(`${i2} = fadd double ${i}, ${f64Lit(1)}`);
1439
- B.line(`store double ${i2}, ptr ${iSlot}`);
1440
- B.br(lc);
1441
- B.startBlock(le);
1369
+ });
1442
1370
  if (cyclicArr)
1443
1371
  B.line(`call void @scr_dyn_from_leave()`);
1444
1372
  B.terminate(`ret ptr ${d}`);
@@ -1447,7 +1375,7 @@ export class LlDyn {
1447
1375
  case "union": {
1448
1376
  const def = host.unionsById.get(t.unionId);
1449
1377
  if (!def)
1450
- throw new Error(`llvm emitter bug: to-dyn of unknown union ${t.unionId}`);
1378
+ throw new InternalCompilerError(`llvm emitter bug: to-dyn of unknown union ${t.unionId}`);
1451
1379
  const tagp = B.tmp();
1452
1380
  const tag = B.tmp();
1453
1381
  B.line(`${tagp} = getelementptr inbounds %ScrUnion, ptr %v, i64 0, i32 1`);
@@ -1555,7 +1483,7 @@ export class LlDyn {
1555
1483
  return name;
1556
1484
  }
1557
1485
  /** The checked-dynamic tree-promise settle adapter for one fulfillment payload type —
1558
- * promiseDynAdapterHelper (emit-walkers.ts), ported:
1486
+ * promiseDynAdapterHelper (walkers.ts), ported:
1559
1487
  * `void sc_pda_<n>(ptr %dst, ptr %src)` reads src's fulfilled payload
1560
1488
  * by its compile-time kind, converts it to a dyn value, and fulfills
1561
1489
  * dst with it (scr_dyn_new_promise_adapting's callback; rejections
@@ -1661,11 +1589,11 @@ export class LlDyn {
1661
1589
  const kd = this.kindOf(B, "%d");
1662
1590
  const done = B.newLabel("ds.d");
1663
1591
  const labels = new Map();
1664
- for (const k of [DK.NULL, DK.BOOL, DK.NUM, DK.STR, DK.ARR, DK.OBJ, DK.UNDEF, DK.BYTES, DK.FUNC, DK.HANDLE, DK.PROMISE, DK.JSVAL, DK.TYPED_REF]) {
1592
+ for (const k of [DYN_KIND.NULL, DYN_KIND.BOOL, DYN_KIND.NUM, DYN_KIND.STR, DYN_KIND.ARR, DYN_KIND.OBJ, DYN_KIND.UNDEF, DYN_KIND.BYTES, DYN_KIND.FUNC, DYN_KIND.HANDLE, DYN_KIND.PROMISE, DYN_KIND.JSVAL, DYN_KIND.TYPED_REF]) {
1665
1593
  labels.set(k, B.newLabel(`ds.k${k}`));
1666
1594
  }
1667
1595
  B.terminate(`switch i32 ${kd}, label %${done} [ ${[...labels].map(([k, l]) => `i32 ${k}, label %${l}`).join(" ")} ]`);
1668
- B.startBlock(labels.get(DK.JSVAL));
1596
+ B.startBlock(labels.get(DYN_KIND.JSVAL));
1669
1597
  {
1670
1598
  // Island-held: the engine's own ToString (a bridged failure
1671
1599
  // leaves the exception pending and appends nothing).
@@ -1673,7 +1601,7 @@ export class LlDyn {
1673
1601
  B.line(`call void @scr_dyn_isl_tostr_buf(ptr %b, ptr %d)`);
1674
1602
  B.br(done);
1675
1603
  }
1676
- B.startBlock(labels.get(DK.TYPED_REF));
1604
+ B.startBlock(labels.get(DYN_KIND.TYPED_REF));
1677
1605
  {
1678
1606
  host.declare(`declare ptr @scr_dyn_typed_ref_materialize(ptr)`);
1679
1607
  host.declare(`declare void @scr_dyn_release_v(ptr)`);
@@ -1683,13 +1611,13 @@ export class LlDyn {
1683
1611
  B.line(`call void @scr_dyn_release_v(ptr ${materialized})`);
1684
1612
  B.br(done);
1685
1613
  }
1686
- B.startBlock(labels.get(DK.UNDEF));
1614
+ B.startBlock(labels.get(DYN_KIND.UNDEF));
1687
1615
  this.puts(B, "%b", "undefined");
1688
1616
  B.br(done);
1689
- B.startBlock(labels.get(DK.NULL));
1617
+ B.startBlock(labels.get(DYN_KIND.NULL));
1690
1618
  this.puts(B, "%b", "null");
1691
1619
  B.br(done);
1692
- B.startBlock(labels.get(DK.BOOL));
1620
+ B.startBlock(labels.get(DYN_KIND.BOOL));
1693
1621
  {
1694
1622
  const bv = this.boolOf(B, "%d");
1695
1623
  const s = B.tmp();
@@ -1697,7 +1625,7 @@ export class LlDyn {
1697
1625
  B.line(`call void @scr_jb_puts(ptr %b, ptr ${s})`);
1698
1626
  B.br(done);
1699
1627
  }
1700
- B.startBlock(labels.get(DK.NUM));
1628
+ B.startBlock(labels.get(DYN_KIND.NUM));
1701
1629
  {
1702
1630
  // String(n): NaN/Infinity spelled out, not the JSON null.
1703
1631
  const x = this.payloadOf(B, "%d", "double");
@@ -1707,13 +1635,13 @@ export class LlDyn {
1707
1635
  B.line(`call void @scr_str_release(ptr ${s})`);
1708
1636
  B.br(done);
1709
1637
  }
1710
- B.startBlock(labels.get(DK.STR));
1638
+ B.startBlock(labels.get(DYN_KIND.STR));
1711
1639
  {
1712
1640
  const s = this.payloadOf(B, "%d", "ptr");
1713
1641
  this.putScrStr(B, "%b", s);
1714
1642
  B.br(done);
1715
1643
  }
1716
- B.startBlock(labels.get(DK.ARR));
1644
+ B.startBlock(labels.get(DYN_KIND.ARR));
1717
1645
  {
1718
1646
  // Array.prototype.toString: join(",") — null/undefined ELEMENTS
1719
1647
  // print empty (unlike top level), nested arrays flatten.
@@ -1734,8 +1662,8 @@ export class LlDyn {
1734
1662
  const isU = B.tmp();
1735
1663
  const isN = B.tmp();
1736
1664
  const unit = B.tmp();
1737
- B.line(`${isU} = icmp eq i32 ${ek}, ${DK.UNDEF}`);
1738
- B.line(`${isN} = icmp eq i32 ${ek}, ${DK.NULL}`);
1665
+ B.line(`${isU} = icmp eq i32 ${ek}, ${DYN_KIND.UNDEF}`);
1666
+ B.line(`${isN} = icmp eq i32 ${ek}, ${DYN_KIND.NULL}`);
1739
1667
  B.line(`${unit} = or i1 ${isU}, ${isN}`);
1740
1668
  const lSkip = B.newLabel("ds.sk");
1741
1669
  const lRec = B.newLabel("ds.rc");
@@ -1747,7 +1675,7 @@ export class LlDyn {
1747
1675
  });
1748
1676
  B.br(done);
1749
1677
  }
1750
- B.startBlock(labels.get(DK.OBJ));
1678
+ B.startBlock(labels.get(DYN_KIND.OBJ));
1751
1679
  {
1752
1680
  // The checked-dynamic tree's error encoding renders Error.prototype.toString;
1753
1681
  // plain objects are "[object Object]".
@@ -1776,7 +1704,7 @@ export class LlDyn {
1776
1704
  B.startBlock(lt);
1777
1705
  const k = this.kindOf(B, m);
1778
1706
  const isStr = B.tmp();
1779
- B.line(`${isStr} = icmp eq i32 ${k}, ${DK.STR}`);
1707
+ B.line(`${isStr} = icmp eq i32 ${k}, ${DYN_KIND.STR}`);
1780
1708
  const ls = B.newLabel(`${hint}.s`);
1781
1709
  B.condBr(isStr, ls, lj);
1782
1710
  B.startBlock(ls);
@@ -1839,7 +1767,7 @@ export class LlDyn {
1839
1767
  putIf(ems, "ds.pm");
1840
1768
  B.br(done);
1841
1769
  }
1842
- B.startBlock(labels.get(DK.BYTES));
1770
+ B.startBlock(labels.get(DYN_KIND.BYTES));
1843
1771
  {
1844
1772
  // Buffer-flavored values coerce utf8; plain Uint8Array joins
1845
1773
  // its elements.
@@ -1894,7 +1822,7 @@ export class LlDyn {
1894
1822
  });
1895
1823
  B.br(done);
1896
1824
  }
1897
- B.startBlock(labels.get(DK.FUNC));
1825
+ B.startBlock(labels.get(DYN_KIND.FUNC));
1898
1826
  {
1899
1827
  // Function.prototype.toString: the native-code form.
1900
1828
  this.puts(B, "%b", "function ");
@@ -1914,10 +1842,10 @@ export class LlDyn {
1914
1842
  this.puts(B, "%b", "() { [native code] }");
1915
1843
  B.br(done);
1916
1844
  }
1917
- B.startBlock(labels.get(DK.HANDLE));
1845
+ B.startBlock(labels.get(DYN_KIND.HANDLE));
1918
1846
  this.puts(B, "%b", "[object Object]");
1919
1847
  B.br(done);
1920
- B.startBlock(labels.get(DK.PROMISE));
1848
+ B.startBlock(labels.get(DYN_KIND.PROMISE));
1921
1849
  // Object.prototype.toString with the Promise @@toStringTag.
1922
1850
  this.puts(B, "%b", "[object Promise]");
1923
1851
  B.br(done);
@@ -1930,7 +1858,7 @@ export class LlDyn {
1930
1858
  const B = new BlockBuilder();
1931
1859
  const kd = this.kindOf(B, "%d");
1932
1860
  const isStr = B.tmp();
1933
- B.line(`${isStr} = icmp eq i32 ${kd}, ${DK.STR}`);
1861
+ B.line(`${isStr} = icmp eq i32 ${kd}, ${DYN_KIND.STR}`);
1934
1862
  const lFast = B.newLabel("ds.f");
1935
1863
  const lSlow = B.newLabel("ds.s");
1936
1864
  B.condBr(isStr, lFast, lSlow);
@@ -1952,7 +1880,7 @@ export class LlDyn {
1952
1880
  }
1953
1881
  return name;
1954
1882
  }
1955
- /* ── caughtToDyn (emit-walkers.ts, ported) ─────────────────────────── */
1883
+ /* ── caughtToDyn (walkers.ts, ported) ─────────────────────────── */
1956
1884
  /** A catch binding flowing into an `unknown` slot: the typed→unknown
1957
1885
  * deep-copy stance over the exception snapshot's runtime kind. */
1958
1886
  caughtToDynHelper() {
@@ -2085,8 +2013,8 @@ export class LlDyn {
2085
2013
  const isU = B.tmp();
2086
2014
  const isN = B.tmp();
2087
2015
  const unit = B.tmp();
2088
- B.line(`${isU} = icmp eq i32 ${kd}, ${DK.UNDEF}`);
2089
- B.line(`${isN} = icmp eq i32 ${kd}, ${DK.NULL}`);
2016
+ B.line(`${isU} = icmp eq i32 ${kd}, ${DYN_KIND.UNDEF}`);
2017
+ B.line(`${isN} = icmp eq i32 ${kd}, ${DYN_KIND.NULL}`);
2090
2018
  B.line(`${unit} = or i1 ${isU}, ${isN}`);
2091
2019
  const lUnit = B.newLabel("kg.u");
2092
2020
  const lNext = B.newLabel("kg.n");
@@ -2127,7 +2055,7 @@ export class LlDyn {
2127
2055
  // ordinary property reads while the capsule itself keeps identity.
2128
2056
  {
2129
2057
  const isTyped = B.tmp();
2130
- B.line(`${isTyped} = icmp eq i32 ${kd}, ${DK.TYPED_REF}`);
2058
+ B.line(`${isTyped} = icmp eq i32 ${kd}, ${DYN_KIND.TYPED_REF}`);
2131
2059
  const lTyped = B.newLabel("kg.tr");
2132
2060
  const lNext = B.newLabel("kg.n");
2133
2061
  B.condBr(isTyped, lTyped, lNext);
@@ -2147,7 +2075,7 @@ export class LlDyn {
2147
2075
  // scalar-normalized — the routed keyed read that retired the fence.
2148
2076
  {
2149
2077
  const isJv = B.tmp();
2150
- B.line(`${isJv} = icmp eq i32 ${kd}, ${DK.JSVAL}`);
2078
+ B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
2151
2079
  const lJv = B.newLabel("kg.jv");
2152
2080
  const lNext = B.newLabel("kg.n");
2153
2081
  B.condBr(isJv, lJv, lNext);
@@ -2161,7 +2089,7 @@ export class LlDyn {
2161
2089
  // OBJ: the own member (+1) or the undefined singleton.
2162
2090
  {
2163
2091
  const isObj = B.tmp();
2164
- B.line(`${isObj} = icmp eq i32 ${kd}, ${DK.OBJ}`);
2092
+ B.line(`${isObj} = icmp eq i32 ${kd}, ${DYN_KIND.OBJ}`);
2165
2093
  const lObj = B.newLabel("kg.ob");
2166
2094
  const lNext = B.newLabel("kg.n");
2167
2095
  B.condBr(isObj, lObj, lNext);
@@ -2181,7 +2109,7 @@ export class LlDyn {
2181
2109
  // HANDLE: the tag's modeled properties through the installed ops.
2182
2110
  {
2183
2111
  const isH = B.tmp();
2184
- B.line(`${isH} = icmp eq i32 ${kd}, ${DK.HANDLE}`);
2112
+ B.line(`${isH} = icmp eq i32 ${kd}, ${DYN_KIND.HANDLE}`);
2185
2113
  const lH = B.newLabel("kg.h");
2186
2114
  const lNext = B.newLabel("kg.n");
2187
2115
  B.condBr(isH, lH, lNext);
@@ -2290,7 +2218,7 @@ export class LlDyn {
2290
2218
  // BYTES: .length and canonical-index byte reads answer like Node.
2291
2219
  {
2292
2220
  const isB = B.tmp();
2293
- B.line(`${isB} = icmp eq i32 ${kd}, ${DK.BYTES}`);
2221
+ B.line(`${isB} = icmp eq i32 ${kd}, ${DYN_KIND.BYTES}`);
2294
2222
  const lB = B.newLabel("kg.by");
2295
2223
  const lNext = B.newLabel("kg.n");
2296
2224
  B.condBr(isB, lB, lNext);
@@ -2339,7 +2267,7 @@ export class LlDyn {
2339
2267
  // FUNC: own props (defineProperties writes), then name/length.
2340
2268
  {
2341
2269
  const isF = B.tmp();
2342
- B.line(`${isF} = icmp eq i32 ${kd}, ${DK.FUNC}`);
2270
+ B.line(`${isF} = icmp eq i32 ${kd}, ${DYN_KIND.FUNC}`);
2343
2271
  const lF = B.newLabel("kg.fn");
2344
2272
  const lNext = B.newLabel("kg.n");
2345
2273
  B.condBr(isF, lF, lNext);
@@ -2363,8 +2291,8 @@ export class LlDyn {
2363
2291
  const isA = B.tmp();
2364
2292
  const isS = B.tmp();
2365
2293
  const either = B.tmp();
2366
- B.line(`${isA} = icmp eq i32 ${kd}, ${DK.ARR}`);
2367
- B.line(`${isS} = icmp eq i32 ${kd}, ${DK.STR}`);
2294
+ B.line(`${isA} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
2295
+ B.line(`${isS} = icmp eq i32 ${kd}, ${DYN_KIND.STR}`);
2368
2296
  B.line(`${either} = or i1 ${isA}, ${isS}`);
2369
2297
  const lAS = B.newLabel("kg.as");
2370
2298
  const lNext = B.newLabel("kg.n");
@@ -2462,8 +2390,8 @@ export class LlDyn {
2462
2390
  const isU = B.tmp();
2463
2391
  const isN = B.tmp();
2464
2392
  const unit = B.tmp();
2465
- B.line(`${isU} = icmp eq i32 ${kd}, ${DK.UNDEF}`);
2466
- B.line(`${isN} = icmp eq i32 ${kd}, ${DK.NULL}`);
2393
+ B.line(`${isU} = icmp eq i32 ${kd}, ${DYN_KIND.UNDEF}`);
2394
+ B.line(`${isN} = icmp eq i32 ${kd}, ${DYN_KIND.NULL}`);
2467
2395
  B.line(`${unit} = or i1 ${isU}, ${isN}`);
2468
2396
  const lThrow = B.newLabel("ddc.t");
2469
2397
  const lOk = B.newLabel("ddc.o");
@@ -2526,7 +2454,7 @@ export class LlDyn {
2526
2454
  // Typed stream capsules iterate their cached, refreshed dyn view.
2527
2455
  {
2528
2456
  const isTyped = B.tmp();
2529
- B.line(`${isTyped} = icmp eq i32 ${kd}, ${DK.TYPED_REF}`);
2457
+ B.line(`${isTyped} = icmp eq i32 ${kd}, ${DYN_KIND.TYPED_REF}`);
2530
2458
  const lTyped = B.newLabel("din.tr");
2531
2459
  const lNext = B.newLabel("din.nt");
2532
2460
  B.condBr(isTyped, lTyped, lNext);
@@ -2546,7 +2474,7 @@ export class LlDyn {
2546
2474
  // dyn-routing-ops).
2547
2475
  {
2548
2476
  const isJv = B.tmp();
2549
- B.line(`${isJv} = icmp eq i32 ${kd}, ${DK.JSVAL}`);
2477
+ B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
2550
2478
  const lJv = B.newLabel("din.jv");
2551
2479
  const lNotJv = B.newLabel("din.njv");
2552
2480
  B.condBr(isJv, lJv, lNotJv);
@@ -2562,9 +2490,9 @@ export class LlDyn {
2562
2490
  const okB = B.tmp();
2563
2491
  const ok01 = B.tmp();
2564
2492
  const ok = B.tmp();
2565
- B.line(`${okA} = icmp eq i32 ${kd}, ${DK.ARR}`);
2566
- B.line(`${okS} = icmp eq i32 ${kd}, ${DK.STR}`);
2567
- B.line(`${okB} = icmp eq i32 ${kd}, ${DK.BYTES}`);
2493
+ B.line(`${okA} = icmp eq i32 ${kd}, ${DYN_KIND.ARR}`);
2494
+ B.line(`${okS} = icmp eq i32 ${kd}, ${DYN_KIND.STR}`);
2495
+ B.line(`${okB} = icmp eq i32 ${kd}, ${DYN_KIND.BYTES}`);
2568
2496
  B.line(`${ok01} = or i1 ${okA}, ${okS}`);
2569
2497
  B.line(`${ok} = or i1 ${ok01}, ${okB}`);
2570
2498
  const lGo = B.newLabel("din.g");
@@ -2582,7 +2510,7 @@ export class LlDyn {
2582
2510
  const lF = B.newLabel("din.f");
2583
2511
  const lDef = B.newLabel("din.d");
2584
2512
  const lTail = B.newLabel("din.e");
2585
- B.terminate(`switch i32 ${kd}, label %${lDef} [ i32 ${DK.UNDEF}, label %${lU} i32 ${DK.NULL}, label %${lN} i32 ${DK.BOOL}, label %${lB2} i32 ${DK.NUM}, label %${lNum} i32 ${DK.FUNC}, label %${lF} ]`);
2513
+ B.terminate(`switch i32 ${kd}, label %${lDef} [ i32 ${DYN_KIND.UNDEF}, label %${lU} i32 ${DYN_KIND.NULL}, label %${lN} i32 ${DYN_KIND.BOOL}, label %${lB2} i32 ${DYN_KIND.NUM}, label %${lNum} i32 ${DYN_KIND.FUNC}, label %${lF} ]`);
2586
2514
  B.startBlock(lU);
2587
2515
  this.puts(B, buf, "undefined");
2588
2516
  B.br(lTail);