@scriptc/compiler 0.1.7 → 0.2.0

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 (1032) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +73 -24
  2. package/ambient/scriptc-overrides.d.ts +10 -6
  3. package/ambient/scriptc.d.ts +15 -0
  4. package/dist/backend/build-cache.d.ts +1 -3
  5. package/dist/backend/build-cache.js +3 -22
  6. package/dist/backend/build-cache.js.map +1 -1
  7. package/dist/backend/cache-root.d.ts +3 -0
  8. package/dist/backend/cache-root.js +23 -0
  9. package/dist/backend/cache-root.js.map +1 -0
  10. package/dist/backend/cycle-analysis.d.ts +15 -0
  11. package/dist/backend/cycle-analysis.js +107 -0
  12. package/dist/backend/cycle-analysis.js.map +1 -0
  13. package/dist/backend/cycle-analysis.test.js +124 -0
  14. package/dist/backend/cycle-analysis.test.js.map +1 -0
  15. package/dist/backend/executable-features.d.ts +4 -0
  16. package/dist/backend/executable-features.js +42 -0
  17. package/dist/backend/executable-features.js.map +1 -0
  18. package/dist/backend/external-c.d.ts +5 -27
  19. package/dist/backend/external-c.js +5 -40
  20. package/dist/backend/external-c.js.map +1 -1
  21. package/dist/backend/ffi-callbacks.d.ts +2 -3
  22. package/dist/backend/ffi-callbacks.js +2 -3
  23. package/dist/backend/ffi-callbacks.js.map +1 -1
  24. package/dist/backend/library-identity-markers.d.ts +4 -9
  25. package/dist/backend/library-identity-markers.js +11 -49
  26. package/dist/backend/library-identity-markers.js.map +1 -1
  27. package/dist/backend/library-pack.d.ts +5 -0
  28. package/dist/backend/library-pack.js +123 -0
  29. package/dist/backend/library-pack.js.map +1 -0
  30. package/dist/backend/link-plan-core.d.ts +20 -0
  31. package/dist/backend/link-plan-core.js +18 -0
  32. package/dist/backend/link-plan-core.js.map +1 -0
  33. package/dist/backend/link-plan.d.ts +1 -1
  34. package/dist/backend/link-plan.js +16 -17
  35. package/dist/backend/link-plan.js.map +1 -1
  36. package/dist/backend/link-trace.d.ts +2 -0
  37. package/dist/backend/link-trace.js +24 -0
  38. package/dist/backend/link-trace.js.map +1 -0
  39. package/dist/backend/linker.js +1 -1
  40. package/dist/backend/linker.js.map +1 -1
  41. package/dist/backend/literals.d.ts +9 -0
  42. package/dist/backend/literals.js +35 -0
  43. package/dist/backend/literals.js.map +1 -0
  44. package/dist/backend/literals.test.d.ts +1 -0
  45. package/dist/backend/literals.test.js +53 -0
  46. package/dist/backend/literals.test.js.map +1 -0
  47. package/dist/backend/llvm/blocks.d.ts +2 -0
  48. package/dist/backend/llvm/blocks.js +9 -4
  49. package/dist/backend/llvm/blocks.js.map +1 -1
  50. package/dist/backend/llvm/blocks.test.d.ts +1 -0
  51. package/dist/backend/llvm/blocks.test.js +91 -0
  52. package/dist/backend/llvm/blocks.test.js.map +1 -0
  53. package/dist/backend/llvm/classes.d.ts +14 -8
  54. package/dist/backend/llvm/classes.js +70 -28
  55. package/dist/backend/llvm/classes.js.map +1 -1
  56. package/dist/backend/llvm/common.d.ts +5 -1
  57. package/dist/backend/llvm/common.js +45 -4
  58. package/dist/backend/llvm/common.js.map +1 -1
  59. package/dist/backend/llvm/debug-info.js +2 -7
  60. package/dist/backend/llvm/debug-info.js.map +1 -1
  61. package/dist/backend/llvm/debug-info.test.d.ts +1 -0
  62. package/dist/backend/llvm/debug-info.test.js +110 -0
  63. package/dist/backend/llvm/debug-info.test.js.map +1 -0
  64. package/dist/backend/llvm/dyn.d.ts +16 -2
  65. package/dist/backend/llvm/dyn.js +494 -165
  66. package/dist/backend/llvm/dyn.js.map +1 -1
  67. package/dist/backend/llvm/emitter.d.ts +596 -1
  68. package/dist/backend/llvm/emitter.js +695 -410
  69. package/dist/backend/llvm/emitter.js.map +1 -1
  70. package/dist/backend/llvm/emitter.test.d.ts +1 -0
  71. package/dist/backend/llvm/emitter.test.js +179 -0
  72. package/dist/backend/llvm/emitter.test.js.map +1 -0
  73. package/dist/backend/llvm/expr-async.js +23 -14
  74. package/dist/backend/llvm/expr-async.js.map +1 -1
  75. package/dist/backend/llvm/expr-bytes.d.ts +1 -1
  76. package/dist/backend/llvm/expr-bytes.js +32 -14
  77. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  78. package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
  79. package/dist/backend/llvm/expr-callbacks.js +25 -22
  80. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  81. package/dist/backend/llvm/expr-calls.js +136 -35
  82. package/dist/backend/llvm/expr-calls.js.map +1 -1
  83. package/dist/backend/llvm/expr-containers.d.ts +1 -1
  84. package/dist/backend/llvm/expr-containers.js +43 -14
  85. package/dist/backend/llvm/expr-containers.js.map +1 -1
  86. package/dist/backend/llvm/expr-context.d.ts +5 -260
  87. package/dist/backend/llvm/expr-control.js +9 -5
  88. package/dist/backend/llvm/expr-control.js.map +1 -1
  89. package/dist/backend/llvm/expr-dispatch.d.ts +1 -1
  90. package/dist/backend/llvm/expr-dispatch.js +2 -0
  91. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  92. package/dist/backend/llvm/expr-dynamic.js +62 -74
  93. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  94. package/dist/backend/llvm/expr-island.d.ts +1 -1
  95. package/dist/backend/llvm/expr-island.js +11 -7
  96. package/dist/backend/llvm/expr-island.js.map +1 -1
  97. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  98. package/dist/backend/llvm/expr-primitives.js +51 -30
  99. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  100. package/dist/backend/llvm/expr-primitives.test.js +1 -1
  101. package/dist/backend/llvm/expr-records.d.ts +5 -1
  102. package/dist/backend/llvm/expr-records.js +43 -4
  103. package/dist/backend/llvm/expr-records.js.map +1 -1
  104. package/dist/backend/llvm/expr-stream-bridges.d.ts +4 -4
  105. package/dist/backend/llvm/expr-stream-bridges.js +102 -121
  106. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  107. package/dist/backend/llvm/expr-stream-bridges.test.d.ts +1 -0
  108. package/dist/backend/llvm/expr-stream-bridges.test.js +55 -0
  109. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -0
  110. package/dist/backend/llvm/expr-stream-callbacks.d.ts +1 -1
  111. package/dist/backend/llvm/expr-stream-callbacks.js +12 -12
  112. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  113. package/dist/backend/llvm/layouts.d.ts +19 -0
  114. package/dist/backend/llvm/layouts.js +12 -0
  115. package/dist/backend/llvm/layouts.js.map +1 -0
  116. package/dist/backend/llvm/lib-abi.d.ts +19 -0
  117. package/dist/backend/llvm/lib-abi.js +82 -0
  118. package/dist/backend/llvm/lib-abi.js.map +1 -0
  119. package/dist/backend/llvm/lib-connect.d.ts +2 -0
  120. package/dist/backend/llvm/lib-connect.js +51 -0
  121. package/dist/backend/llvm/lib-connect.js.map +1 -0
  122. package/dist/backend/llvm/lib-datagram.d.ts +2 -0
  123. package/dist/backend/llvm/lib-datagram.js +135 -0
  124. package/dist/backend/llvm/lib-datagram.js.map +1 -0
  125. package/dist/backend/llvm/lib-dispatch.js +50 -6
  126. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  127. package/dist/backend/llvm/lib-filesystem.js +30 -18
  128. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  129. package/dist/backend/llvm/lib-http2.d.ts +2 -0
  130. package/dist/backend/llvm/lib-http2.js +215 -0
  131. package/dist/backend/llvm/lib-http2.js.map +1 -0
  132. package/dist/backend/llvm/lib-lookup.d.ts +2 -0
  133. package/dist/backend/llvm/lib-lookup.js +39 -0
  134. package/dist/backend/llvm/lib-lookup.js.map +1 -0
  135. package/dist/backend/llvm/lib-network.js +25 -2
  136. package/dist/backend/llvm/lib-network.js.map +1 -1
  137. package/dist/backend/llvm/lib-process.js +21 -16
  138. package/dist/backend/llvm/lib-process.js.map +1 -1
  139. package/dist/backend/llvm/lib-shared.js +117 -1
  140. package/dist/backend/llvm/lib-shared.js.map +1 -1
  141. package/dist/backend/llvm/lib-stream.js +3 -2
  142. package/dist/backend/llvm/lib-stream.js.map +1 -1
  143. package/dist/backend/llvm/lib-test.d.ts +2 -0
  144. package/dist/backend/llvm/lib-test.js +34 -0
  145. package/dist/backend/llvm/lib-test.js.map +1 -0
  146. package/dist/backend/llvm/lib-tls.d.ts +2 -0
  147. package/dist/backend/llvm/lib-tls.js +82 -0
  148. package/dist/backend/llvm/lib-tls.js.map +1 -0
  149. package/dist/backend/llvm/shapes.d.ts +10 -9
  150. package/dist/backend/llvm/shapes.js +35 -130
  151. package/dist/backend/llvm/shapes.js.map +1 -1
  152. package/dist/backend/llvm/unsupported.d.ts +1 -0
  153. package/dist/backend/llvm/unsupported.js +1 -2
  154. package/dist/backend/llvm/unsupported.js.map +1 -1
  155. package/dist/backend/llvm/walkers.js +1 -7
  156. package/dist/backend/llvm/walkers.js.map +1 -1
  157. package/dist/backend/mangle.d.ts +2 -2
  158. package/dist/backend/mangle.js +16 -5
  159. package/dist/backend/mangle.js.map +1 -1
  160. package/dist/backend/{c/may-throw.d.ts → may-throw.d.ts} +1 -1
  161. package/dist/backend/{c/may-throw.js → may-throw.js} +51 -46
  162. package/dist/backend/may-throw.js.map +1 -0
  163. package/dist/backend/may-throw.test.d.ts +1 -0
  164. package/dist/backend/may-throw.test.js +58 -0
  165. package/dist/backend/may-throw.test.js.map +1 -0
  166. package/dist/backend/native-codegen-core.d.ts +22 -0
  167. package/dist/backend/native-codegen-core.js +44 -0
  168. package/dist/backend/native-codegen-core.js.map +1 -0
  169. package/dist/backend/native-codegen.d.ts +3 -19
  170. package/dist/backend/native-codegen.js +5 -44
  171. package/dist/backend/native-codegen.js.map +1 -1
  172. package/dist/backend/native-codegen.test.js +2 -2
  173. package/dist/backend/native-codegen.test.js.map +1 -1
  174. package/dist/backend/native-link-info-core.d.ts +94 -0
  175. package/dist/backend/native-link-info-core.js +62 -0
  176. package/dist/backend/native-link-info-core.js.map +1 -0
  177. package/dist/backend/native-link-info.d.ts +3 -88
  178. package/dist/backend/native-link-info.js +12 -243
  179. package/dist/backend/native-link-info.js.map +1 -1
  180. package/dist/backend/native-link-info.test.js +41 -146
  181. package/dist/backend/native-link-info.test.js.map +1 -1
  182. package/dist/backend/native-toolchain.d.ts +10 -25
  183. package/dist/backend/native-toolchain.js +31 -211
  184. package/dist/backend/native-toolchain.js.map +1 -1
  185. package/dist/backend/native-toolchain.test.js +5 -5
  186. package/dist/backend/native-toolchain.test.js.map +1 -1
  187. package/dist/backend/native-tools.d.ts +24 -0
  188. package/dist/backend/native-tools.js +33 -0
  189. package/dist/backend/native-tools.js.map +1 -0
  190. package/dist/backend/object-localize.js +19 -8
  191. package/dist/backend/object-localize.js.map +1 -1
  192. package/dist/backend/object-localize.test.js +22 -0
  193. package/dist/backend/object-localize.test.js.map +1 -1
  194. package/dist/backend/runtime-abi.d.ts +2 -2
  195. package/dist/backend/runtime-abi.js +2 -2
  196. package/dist/backend/runtime-pack-core.d.ts +101 -0
  197. package/dist/backend/runtime-pack-core.js +172 -0
  198. package/dist/backend/runtime-pack-core.js.map +1 -0
  199. package/dist/backend/runtime-pack-native.d.ts +21 -0
  200. package/dist/backend/runtime-pack-native.js +70 -0
  201. package/dist/backend/runtime-pack-native.js.map +1 -0
  202. package/dist/backend/runtime-pack-targets.test.js +1 -1
  203. package/dist/backend/runtime-pack.d.ts +3 -83
  204. package/dist/backend/runtime-pack.js +8 -151
  205. package/dist/backend/runtime-pack.js.map +1 -1
  206. package/dist/backend/runtime-pack.test.js +24 -1
  207. package/dist/backend/runtime-pack.test.js.map +1 -1
  208. package/dist/backend/target-diagnostics.d.ts +22 -0
  209. package/dist/backend/target-diagnostics.js +108 -0
  210. package/dist/backend/target-diagnostics.js.map +1 -0
  211. package/dist/backend/target-platform.d.ts +15 -0
  212. package/dist/backend/target-platform.js +72 -0
  213. package/dist/backend/target-platform.js.map +1 -0
  214. package/dist/backend/targets.d.ts +13 -4
  215. package/dist/backend/targets.js +95 -30
  216. package/dist/backend/targets.js.map +1 -1
  217. package/dist/backend/targets.test.js +65 -4
  218. package/dist/backend/targets.test.js.map +1 -1
  219. package/dist/backend/toolchain-environment.d.ts +6 -0
  220. package/dist/backend/toolchain-environment.js +99 -0
  221. package/dist/backend/toolchain-environment.js.map +1 -0
  222. package/dist/backend/vendor-archives.d.ts +1 -9
  223. package/dist/backend/vendor-archives.js +2 -9
  224. package/dist/backend/vendor-archives.js.map +1 -1
  225. package/dist/backend/vendor-inputs.d.ts +9 -0
  226. package/dist/backend/vendor-inputs.js +10 -0
  227. package/dist/backend/vendor-inputs.js.map +1 -0
  228. package/dist/backend/warm-cache.d.ts +3 -0
  229. package/dist/backend/warm-cache.js +41 -0
  230. package/dist/backend/warm-cache.js.map +1 -0
  231. package/dist/cli/command.d.ts +3 -0
  232. package/dist/cli/command.js +328 -0
  233. package/dist/cli/command.js.map +1 -0
  234. package/dist/cli/host.d.ts +24 -0
  235. package/dist/cli/host.js +2 -0
  236. package/dist/cli/host.js.map +1 -0
  237. package/dist/cli/output-options.d.ts +26 -0
  238. package/dist/cli/output-options.js +60 -0
  239. package/dist/cli/output-options.js.map +1 -0
  240. package/dist/cli/paths.d.ts +12 -0
  241. package/dist/cli/paths.js +42 -0
  242. package/dist/cli/paths.js.map +1 -0
  243. package/dist/cli/usage.d.ts +74 -0
  244. package/dist/cli/usage.js +86 -0
  245. package/dist/cli/usage.js.map +1 -0
  246. package/dist/cli/wasi-paths.d.ts +8 -0
  247. package/dist/cli/wasi-paths.js +41 -0
  248. package/dist/cli/wasi-paths.js.map +1 -0
  249. package/dist/cli/wasi-runner.d.ts +2 -0
  250. package/dist/cli/wasi-runner.js +28 -0
  251. package/dist/cli/wasi-runner.js.map +1 -0
  252. package/dist/compat/fetch-profile.js +3 -3
  253. package/dist/compat/fetch-profile.js.map +1 -1
  254. package/dist/compile-types.d.ts +162 -0
  255. package/dist/compile-types.js +2 -0
  256. package/dist/compile-types.js.map +1 -0
  257. package/dist/coverage/report.js +11 -5
  258. package/dist/coverage/report.js.map +1 -1
  259. package/dist/coverage/surface-manifest.js +5 -2
  260. package/dist/coverage/surface-manifest.js.map +1 -1
  261. package/dist/diagnostics/diagnostic.js +3 -3
  262. package/dist/diagnostics/diagnostic.js.map +1 -1
  263. package/dist/executable/executable-cache.d.ts +3 -4
  264. package/dist/executable/executable-cache.js +5 -6
  265. package/dist/executable/executable-cache.js.map +1 -1
  266. package/dist/executable/executable-cache.test.js +16 -17
  267. package/dist/executable/executable-cache.test.js.map +1 -1
  268. package/dist/executable/prepare.d.ts +14 -0
  269. package/dist/executable/prepare.js +66 -0
  270. package/dist/executable/prepare.js.map +1 -0
  271. package/dist/ffi/ffi-manifest.d.ts +11 -4
  272. package/dist/ffi/ffi-manifest.js +170 -58
  273. package/dist/ffi/ffi-manifest.js.map +1 -1
  274. package/dist/ffi/ffi-manifest.test.d.ts +1 -0
  275. package/dist/ffi/ffi-manifest.test.js +111 -0
  276. package/dist/ffi/ffi-manifest.test.js.map +1 -0
  277. package/dist/format-integer.d.ts +3 -0
  278. package/dist/format-integer.js +14 -0
  279. package/dist/format-integer.js.map +1 -0
  280. package/dist/frontend/analysis.d.ts +5 -0
  281. package/dist/frontend/analysis.js +88 -0
  282. package/dist/frontend/analysis.js.map +1 -0
  283. package/dist/frontend/arguments-usage.d.ts +1 -3
  284. package/dist/frontend/arguments-usage.js.map +1 -1
  285. package/dist/frontend/builtin-modules.d.ts +1 -1
  286. package/dist/frontend/builtin-modules.js +1 -1
  287. package/dist/frontend/builtin-modules.js.map +1 -1
  288. package/dist/frontend/cjs-lexer.d.ts +4 -25
  289. package/dist/frontend/cjs-lexer.js +6 -806
  290. package/dist/frontend/cjs-lexer.js.map +1 -1
  291. package/dist/frontend/cjs-resolve.d.ts +5 -0
  292. package/dist/frontend/cjs-resolve.js +429 -0
  293. package/dist/frontend/cjs-resolve.js.map +1 -0
  294. package/dist/frontend/cjs-syntax.d.ts +26 -0
  295. package/dist/frontend/cjs-syntax.js +806 -0
  296. package/dist/frontend/cjs-syntax.js.map +1 -0
  297. package/dist/frontend/comptime-node.d.ts +4 -0
  298. package/dist/frontend/comptime-node.js +16 -0
  299. package/dist/frontend/comptime-node.js.map +1 -0
  300. package/dist/frontend/comptime-node.test.d.ts +1 -0
  301. package/dist/frontend/comptime-node.test.js +37 -0
  302. package/dist/frontend/comptime-node.test.js.map +1 -0
  303. package/dist/frontend/dts-paths.d.ts +3 -4
  304. package/dist/frontend/dts-paths.js +15 -8
  305. package/dist/frontend/dts-paths.js.map +1 -1
  306. package/dist/frontend/fork-target.js +2 -2
  307. package/dist/frontend/fork-target.js.map +1 -1
  308. package/dist/frontend/helper-tokens.d.ts +1 -0
  309. package/dist/frontend/helper-tokens.js +147 -0
  310. package/dist/frontend/helper-tokens.js.map +1 -0
  311. package/dist/frontend/helper-tokens.test.d.ts +1 -0
  312. package/dist/frontend/helper-tokens.test.js +35 -0
  313. package/dist/frontend/helper-tokens.test.js.map +1 -0
  314. package/dist/frontend/inferred-js-diagnostics.d.ts +5 -0
  315. package/dist/frontend/inferred-js-diagnostics.js +69 -0
  316. package/dist/frontend/inferred-js-diagnostics.js.map +1 -0
  317. package/dist/frontend/inferred-js-diagnostics.test.d.ts +1 -0
  318. package/dist/frontend/inferred-js-diagnostics.test.js +58 -0
  319. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -0
  320. package/dist/frontend/input-tracker.d.ts +5 -2
  321. package/dist/frontend/input-tracker.js +24 -3
  322. package/dist/frontend/input-tracker.js.map +1 -1
  323. package/dist/frontend/input-tracker.test.js +23 -0
  324. package/dist/frontend/input-tracker.test.js.map +1 -1
  325. package/dist/frontend/lib-contract.js +32 -24
  326. package/dist/frontend/lib-contract.js.map +1 -1
  327. package/dist/frontend/literal-values.d.ts +4 -0
  328. package/dist/frontend/literal-values.js +21 -0
  329. package/dist/frontend/literal-values.js.map +1 -0
  330. package/dist/frontend/literal-values.test.d.ts +1 -0
  331. package/dist/frontend/literal-values.test.js +91 -0
  332. package/dist/frontend/literal-values.test.js.map +1 -0
  333. package/dist/frontend/lowering/abstract-equality.d.ts +1 -1
  334. package/dist/frontend/lowering/abstract-equality.js +3 -0
  335. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  336. package/dist/frontend/lowering/array-indexed-mutation.js +11 -6
  337. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  338. package/dist/frontend/lowering/array-values.d.ts +4 -1
  339. package/dist/frontend/lowering/array-values.js +43 -1
  340. package/dist/frontend/lowering/array-values.js.map +1 -1
  341. package/dist/frontend/lowering/callback-arg.js +1 -0
  342. package/dist/frontend/lowering/callback-arg.js.map +1 -1
  343. package/dist/frontend/lowering/class-callbacks.d.ts +12 -0
  344. package/dist/frontend/lowering/class-callbacks.js +63 -0
  345. package/dist/frontend/lowering/class-callbacks.js.map +1 -0
  346. package/dist/frontend/lowering/class-descriptors.d.ts +9 -0
  347. package/dist/frontend/lowering/class-descriptors.js +73 -0
  348. package/dist/frontend/lowering/class-descriptors.js.map +1 -0
  349. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +41 -0
  350. package/dist/frontend/lowering/class-dynamic-dispatch.js +803 -0
  351. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -0
  352. package/dist/frontend/lowering/class-dynamic-dispatch.test.d.ts +1 -0
  353. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +92 -0
  354. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -0
  355. package/dist/frontend/lowering/class-instance-constructor.d.ts +7 -0
  356. package/dist/frontend/lowering/class-instance-constructor.js +64 -0
  357. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -0
  358. package/dist/frontend/lowering/class-method-values.d.ts +10 -0
  359. package/dist/frontend/lowering/class-method-values.js +170 -0
  360. package/dist/frontend/lowering/class-method-values.js.map +1 -0
  361. package/dist/frontend/lowering/class-prototypes.d.ts +16 -0
  362. package/dist/frontend/lowering/class-prototypes.js +134 -0
  363. package/dist/frontend/lowering/class-prototypes.js.map +1 -0
  364. package/dist/frontend/lowering/class-static-data.d.ts +6 -0
  365. package/dist/frontend/lowering/class-static-data.js +56 -0
  366. package/dist/frontend/lowering/class-static-data.js.map +1 -0
  367. package/dist/frontend/lowering/containers/buffer-numeric-methods.d.ts +4 -0
  368. package/dist/frontend/lowering/containers/buffer-numeric-methods.js +26 -0
  369. package/dist/frontend/lowering/containers/buffer-numeric-methods.js.map +1 -0
  370. package/dist/frontend/lowering/containers/bytes.d.ts +11 -7
  371. package/dist/frontend/lowering/containers/bytes.js +164 -155
  372. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  373. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +2 -2
  374. package/dist/frontend/lowering/containers/string-and-regexp.js +39 -16
  375. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  376. package/dist/frontend/lowering/containers/string-replacement.d.ts +7 -0
  377. package/dist/frontend/lowering/containers/string-replacement.js +217 -0
  378. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -0
  379. package/dist/frontend/lowering/error-methods.d.ts +11 -0
  380. package/dist/frontend/lowering/error-methods.js +78 -0
  381. package/dist/frontend/lowering/error-methods.js.map +1 -0
  382. package/dist/frontend/lowering/expressions/global-symbols.d.ts +6 -0
  383. package/dist/frontend/lowering/expressions/global-symbols.js +11 -0
  384. package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -0
  385. package/dist/frontend/lowering/expressions/native-proxy.d.ts +7 -0
  386. package/dist/frontend/lowering/expressions/native-proxy.js +49 -0
  387. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -0
  388. package/dist/frontend/lowering/expressions/nullish-assignment.d.ts +6 -0
  389. package/dist/frontend/lowering/expressions/nullish-assignment.js +124 -0
  390. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -0
  391. package/dist/frontend/lowering/expressions/object-literals.d.ts +8 -8
  392. package/dist/frontend/lowering/expressions/object-literals.js +473 -178
  393. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  394. package/dist/frontend/lowering/expressions/optional-chains.js +20 -8
  395. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  396. package/dist/frontend/lowering/expressions/try-lower-expression.js +1 -0
  397. package/dist/frontend/lowering/expressions/try-lower-expression.js.map +1 -1
  398. package/dist/frontend/lowering/expressions/union-field-write.d.ts +8 -0
  399. package/dist/frontend/lowering/expressions/union-field-write.js +71 -0
  400. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -0
  401. package/dist/frontend/lowering/function-context.d.ts +93 -0
  402. package/dist/frontend/lowering/function-context.js +103 -0
  403. package/dist/frontend/lowering/function-context.js.map +1 -0
  404. package/dist/frontend/lowering/generator-delegation.d.ts +7 -0
  405. package/dist/frontend/lowering/generator-delegation.js +85 -0
  406. package/dist/frontend/lowering/generator-delegation.js.map +1 -0
  407. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +10 -0
  408. package/dist/frontend/lowering/generator-dynamic-dispatch.js +105 -0
  409. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -0
  410. package/dist/frontend/lowering/lib-boundary.d.ts +2 -1
  411. package/dist/frontend/lowering/lib-boundary.js +59 -20
  412. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  413. package/dist/frontend/lowering/lib-boundary.test.d.ts +1 -0
  414. package/dist/frontend/lowering/lib-boundary.test.js +45 -0
  415. package/dist/frontend/lowering/lib-boundary.test.js.map +1 -0
  416. package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
  417. package/dist/frontend/lowering/lower-assert.d.ts +1 -1
  418. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  419. package/dist/frontend/lowering/lower-async-iteration.d.ts +1 -1
  420. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  421. package/dist/frontend/lowering/lower-builtin-values.d.ts +12 -0
  422. package/dist/frontend/lowering/lower-builtin-values.js +139 -0
  423. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -0
  424. package/dist/frontend/lowering/lower-builtins.d.ts +27 -41
  425. package/dist/frontend/lowering/lower-builtins.js +539 -343
  426. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  427. package/dist/frontend/lowering/lower-calls.d.ts +20 -17
  428. package/dist/frontend/lowering/lower-calls.js +1236 -353
  429. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  430. package/dist/frontend/lowering/lower-classes.d.ts +83 -45
  431. package/dist/frontend/lowering/lower-classes.js +952 -339
  432. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  433. package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
  434. package/dist/frontend/lowering/lower-comptime.js +23 -32
  435. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  436. package/dist/frontend/lowering/lower-containers.d.ts +27 -32
  437. package/dist/frontend/lowering/lower-containers.js +796 -151
  438. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  439. package/dist/frontend/lowering/lower-dgram.d.ts +1 -1
  440. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  441. package/dist/frontend/lowering/lower-enums.d.ts +1 -1
  442. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  443. package/dist/frontend/lowering/lower-event-emitter.d.ts +30 -1
  444. package/dist/frontend/lowering/lower-event-emitter.js +58 -26
  445. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  446. package/dist/frontend/lowering/lower-expando.d.ts +7 -1
  447. package/dist/frontend/lowering/lower-expando.js +14 -6
  448. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  449. package/dist/frontend/lowering/lower-exprs.d.ts +35 -11
  450. package/dist/frontend/lowering/lower-exprs.js +1674 -779
  451. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  452. package/dist/frontend/lowering/lower-generators.d.ts +2 -5
  453. package/dist/frontend/lowering/lower-generators.js +77 -46
  454. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  455. package/dist/frontend/lowering/lower-global-value.d.ts +7 -0
  456. package/dist/frontend/lowering/lower-global-value.js +17 -0
  457. package/dist/frontend/lowering/lower-global-value.js.map +1 -0
  458. package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
  459. package/dist/frontend/lowering/lower-inspect.js +17 -8
  460. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  461. package/dist/frontend/lowering/lower-island.d.ts +5 -8
  462. package/dist/frontend/lowering/lower-island.js +34 -23
  463. package/dist/frontend/lowering/lower-island.js.map +1 -1
  464. package/dist/frontend/lowering/lower-mixins.d.ts +2 -2
  465. package/dist/frontend/lowering/lower-mixins.js +5 -3
  466. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  467. package/dist/frontend/lowering/lower-modules.d.ts +1 -1
  468. package/dist/frontend/lowering/lower-modules.js +233 -30
  469. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  470. package/dist/frontend/lowering/lower-namespaces.d.ts +1 -1
  471. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  472. package/dist/frontend/lowering/lower-node-module.d.ts +1 -1
  473. package/dist/frontend/lowering/lower-node-module.js +13 -10
  474. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  475. package/dist/frontend/lowering/lower-server.d.ts +1 -1
  476. package/dist/frontend/lowering/lower-server.js +6 -10
  477. package/dist/frontend/lowering/lower-server.js.map +1 -1
  478. package/dist/frontend/lowering/lower-stmts.d.ts +10 -14
  479. package/dist/frontend/lowering/lower-stmts.js +728 -496
  480. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  481. package/dist/frontend/lowering/lower-stream.d.ts +1 -1
  482. package/dist/frontend/lowering/lower-stream.js +19 -10
  483. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  484. package/dist/frontend/lowering/lower-test.d.ts +1 -1
  485. package/dist/frontend/lowering/lower-test.js.map +1 -1
  486. package/dist/frontend/lowering/lower-url.d.ts +6 -0
  487. package/dist/frontend/lowering/lower-url.js +77 -0
  488. package/dist/frontend/lowering/lower-url.js.map +1 -0
  489. package/dist/frontend/lowering/lowerer.d.ts +113 -189
  490. package/dist/frontend/lowering/lowerer.js +1031 -672
  491. package/dist/frontend/lowering/lowerer.js.map +1 -1
  492. package/dist/frontend/lowering/lowerer.test.d.ts +1 -0
  493. package/dist/frontend/lowering/lowerer.test.js +26 -0
  494. package/dist/frontend/lowering/lowerer.test.js.map +1 -0
  495. package/dist/frontend/lowering/native-ffi.d.ts +5 -0
  496. package/dist/frontend/lowering/native-ffi.js +40 -0
  497. package/dist/frontend/lowering/native-ffi.js.map +1 -0
  498. package/dist/frontend/lowering/object-enumeration-receiver.d.ts +7 -0
  499. package/dist/frontend/lowering/object-enumeration-receiver.js +33 -0
  500. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -0
  501. package/dist/frontend/lowering/object-factory-new.d.ts +8 -0
  502. package/dist/frontend/lowering/object-factory-new.js +68 -0
  503. package/dist/frontend/lowering/object-factory-new.js.map +1 -0
  504. package/dist/frontend/lowering/optional-arguments.js +6 -1
  505. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  506. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  507. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  508. package/dist/frontend/lowering/runtime-optional-locals.d.ts +14 -0
  509. package/dist/frontend/lowering/runtime-optional-locals.js +41 -0
  510. package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -0
  511. package/dist/frontend/lowering/runtime-optional-locals.test.d.ts +1 -0
  512. package/dist/frontend/lowering/runtime-optional-locals.test.js +85 -0
  513. package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -0
  514. package/dist/frontend/lowering/sanitize-class-types.d.ts +8 -0
  515. package/dist/frontend/lowering/sanitize-class-types.js +79 -0
  516. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -0
  517. package/dist/frontend/lowering/sanitize-class-types.test.d.ts +1 -0
  518. package/dist/frontend/lowering/sanitize-class-types.test.js +60 -0
  519. package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -0
  520. package/dist/frontend/lowering/static-this.d.ts +5 -1
  521. package/dist/frontend/lowering/static-this.js +28 -2
  522. package/dist/frontend/lowering/static-this.js.map +1 -1
  523. package/dist/frontend/lowering/string-index.d.ts +7 -0
  524. package/dist/frontend/lowering/string-index.js +39 -0
  525. package/dist/frontend/lowering/string-index.js.map +1 -0
  526. package/dist/frontend/lowering/surfaces.d.ts +8 -3
  527. package/dist/frontend/lowering/surfaces.js +61 -29
  528. package/dist/frontend/lowering/surfaces.js.map +1 -1
  529. package/dist/frontend/lowering/symbol-fields.d.ts +22 -0
  530. package/dist/frontend/lowering/symbol-fields.js +183 -0
  531. package/dist/frontend/lowering/symbol-fields.js.map +1 -0
  532. package/dist/frontend/lowering/symbol-methods.d.ts +7 -0
  533. package/dist/frontend/lowering/symbol-methods.js +30 -0
  534. package/dist/frontend/lowering/symbol-methods.js.map +1 -0
  535. package/dist/frontend/lowering/text-decoder-encoding.d.ts +10 -0
  536. package/dist/frontend/lowering/text-decoder-encoding.js +77 -0
  537. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -0
  538. package/dist/frontend/lowering/text-decoder-encoding.test.d.ts +1 -0
  539. package/dist/frontend/lowering/text-decoder-encoding.test.js +38 -0
  540. package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -0
  541. package/dist/frontend/lowering/union-narrow.d.ts +9 -0
  542. package/dist/frontend/lowering/union-narrow.js +59 -0
  543. package/dist/frontend/lowering/union-narrow.js.map +1 -0
  544. package/dist/frontend/lowering/union-narrow.test.d.ts +1 -0
  545. package/dist/frontend/lowering/union-narrow.test.js +72 -0
  546. package/dist/frontend/lowering/union-narrow.test.js.map +1 -0
  547. package/dist/frontend/lowering/union-retag.d.ts +43 -0
  548. package/dist/frontend/lowering/union-retag.js +259 -0
  549. package/dist/frontend/lowering/union-retag.js.map +1 -0
  550. package/dist/frontend/lowering/union-retag.test.d.ts +1 -0
  551. package/dist/frontend/lowering/union-retag.test.js +405 -0
  552. package/dist/frontend/lowering/union-retag.test.js.map +1 -0
  553. package/dist/frontend/lowering/unregistered-class-types.d.ts +14 -0
  554. package/dist/frontend/lowering/unregistered-class-types.js +94 -0
  555. package/dist/frontend/lowering/unregistered-class-types.js.map +1 -0
  556. package/dist/frontend/lowering/unregistered-class-types.test.d.ts +1 -0
  557. package/dist/frontend/lowering/unregistered-class-types.test.js +65 -0
  558. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -0
  559. package/dist/frontend/lowering/width-lift.d.ts +40 -0
  560. package/dist/frontend/lowering/width-lift.js +2 -0
  561. package/dist/frontend/lowering/width-lift.js.map +1 -0
  562. package/dist/frontend/module-syntax.d.ts +58 -0
  563. package/dist/frontend/module-syntax.js +123 -0
  564. package/dist/frontend/module-syntax.js.map +1 -0
  565. package/dist/frontend/module-syntax.test.d.ts +1 -0
  566. package/dist/frontend/module-syntax.test.js +78 -0
  567. package/dist/frontend/module-syntax.test.js.map +1 -0
  568. package/dist/frontend/npm-fetch-analysis.d.ts +17 -0
  569. package/dist/frontend/npm-fetch-analysis.js +100 -0
  570. package/dist/frontend/npm-fetch-analysis.js.map +1 -0
  571. package/dist/frontend/npm-fetch-analysis.test.d.ts +1 -0
  572. package/dist/frontend/npm-fetch-analysis.test.js +107 -0
  573. package/dist/frontend/npm-fetch-analysis.test.js.map +1 -0
  574. package/dist/frontend/npm-fetch-node.d.ts +2 -0
  575. package/dist/frontend/npm-fetch-node.js +12 -0
  576. package/dist/frontend/npm-fetch-node.js.map +1 -0
  577. package/dist/frontend/npm-fetch-syntax.d.ts +6 -0
  578. package/dist/frontend/npm-fetch-syntax.js +207 -0
  579. package/dist/frontend/npm-fetch-syntax.js.map +1 -0
  580. package/dist/frontend/npm-node.d.ts +10 -0
  581. package/dist/frontend/npm-node.js +14 -0
  582. package/dist/frontend/npm-node.js.map +1 -0
  583. package/dist/frontend/npm-static-bundled-cjs.d.ts +8 -0
  584. package/dist/frontend/npm-static-bundled-cjs.js +236 -0
  585. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -0
  586. package/dist/frontend/npm-static-bundled-cjs.test.d.ts +1 -0
  587. package/dist/frontend/npm-static-bundled-cjs.test.js +69 -0
  588. package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -0
  589. package/dist/frontend/npm-static-declaration-syntax.d.ts +57 -0
  590. package/dist/frontend/npm-static-declaration-syntax.js +944 -0
  591. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -0
  592. package/dist/frontend/npm-static-declarations.d.ts +11 -39
  593. package/dist/frontend/npm-static-declarations.js +22 -561
  594. package/dist/frontend/npm-static-declarations.js.map +1 -1
  595. package/dist/frontend/npm-static-declarations.test.js +245 -6
  596. package/dist/frontend/npm-static-declarations.test.js.map +1 -1
  597. package/dist/frontend/npm-static-prune.d.ts +1 -1
  598. package/dist/frontend/npm-static-prune.js +5 -4
  599. package/dist/frontend/npm-static-prune.js.map +1 -1
  600. package/dist/frontend/npm-static-prune.test.js +1 -1
  601. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  602. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -0
  603. package/dist/frontend/npm-static-rewrite-host.js +179 -0
  604. package/dist/frontend/npm-static-rewrite-host.js.map +1 -0
  605. package/dist/frontend/npm-static-rewrite-syntax.d.ts +16 -0
  606. package/dist/frontend/npm-static-rewrite-syntax.js +905 -0
  607. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -0
  608. package/dist/frontend/npm-static-rewrite.d.ts +0 -5
  609. package/dist/frontend/npm-static-rewrite.js +2 -1079
  610. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  611. package/dist/frontend/npm-static-subtyping.d.ts +5 -0
  612. package/dist/frontend/npm-static-subtyping.js +55 -0
  613. package/dist/frontend/npm-static-subtyping.js.map +1 -0
  614. package/dist/frontend/npm-static-subtyping.test.d.ts +1 -0
  615. package/dist/frontend/npm-static-subtyping.test.js +58 -0
  616. package/dist/frontend/npm-static-subtyping.test.js.map +1 -0
  617. package/dist/frontend/npm-static.d.ts +7 -15
  618. package/dist/frontend/npm-static.js +19 -28
  619. package/dist/frontend/npm-static.js.map +1 -1
  620. package/dist/frontend/npm.d.ts +8 -69
  621. package/dist/frontend/npm.js +21 -361
  622. package/dist/frontend/npm.js.map +1 -1
  623. package/dist/frontend/npm.test.js +2 -2
  624. package/dist/frontend/npm.test.js.map +1 -1
  625. package/dist/frontend/pipeline-native.d.ts +6 -0
  626. package/dist/frontend/pipeline-native.js +32 -0
  627. package/dist/frontend/pipeline-native.js.map +1 -0
  628. package/dist/frontend/pipeline.d.ts +54 -0
  629. package/dist/frontend/pipeline.js +382 -0
  630. package/dist/frontend/pipeline.js.map +1 -0
  631. package/dist/frontend/pipeline.test.d.ts +1 -0
  632. package/dist/frontend/pipeline.test.js +77 -0
  633. package/dist/frontend/pipeline.test.js.map +1 -0
  634. package/dist/frontend/program-analysis.d.ts +10 -0
  635. package/dist/frontend/program-analysis.js +14 -0
  636. package/dist/frontend/program-analysis.js.map +1 -0
  637. package/dist/frontend/program-node.d.ts +9 -0
  638. package/dist/frontend/program-node.js +48 -0
  639. package/dist/frontend/program-node.js.map +1 -0
  640. package/dist/frontend/program.d.ts +38 -19
  641. package/dist/frontend/program.js +344 -169
  642. package/dist/frontend/program.js.map +1 -1
  643. package/dist/frontend/program.test.js +87 -2
  644. package/dist/frontend/program.test.js.map +1 -1
  645. package/dist/frontend/provenance-core.d.ts +9 -0
  646. package/dist/frontend/provenance-core.js +435 -0
  647. package/dist/frontend/provenance-core.js.map +1 -0
  648. package/dist/frontend/provenance.d.ts +0 -4
  649. package/dist/frontend/provenance.js +4 -459
  650. package/dist/frontend/provenance.js.map +1 -1
  651. package/dist/frontend/resolve.d.ts +3 -1
  652. package/dist/frontend/resolve.js +6 -3
  653. package/dist/frontend/resolve.js.map +1 -1
  654. package/dist/frontend/runtime-resolve.d.ts +4 -3
  655. package/dist/frontend/runtime-resolve.js +22 -18
  656. package/dist/frontend/runtime-resolve.js.map +1 -1
  657. package/dist/frontend/runtime-resolve.test.js +53 -0
  658. package/dist/frontend/runtime-resolve.test.js.map +1 -1
  659. package/dist/frontend/services-node.d.ts +5 -0
  660. package/dist/frontend/services-node.js +19 -0
  661. package/dist/frontend/services-node.js.map +1 -0
  662. package/dist/frontend/services-node.test.d.ts +1 -0
  663. package/dist/frontend/services-node.test.js +70 -0
  664. package/dist/frontend/services-node.test.js.map +1 -0
  665. package/dist/frontend/services.d.ts +44 -0
  666. package/dist/frontend/services.js +90 -0
  667. package/dist/frontend/services.js.map +1 -0
  668. package/dist/frontend/services.test.d.ts +1 -0
  669. package/dist/frontend/services.test.js +174 -0
  670. package/dist/frontend/services.test.js.map +1 -0
  671. package/dist/frontend/ts7/adapter.d.ts +3 -3
  672. package/dist/frontend/ts7/adapter.js +14 -31
  673. package/dist/frontend/ts7/adapter.js.map +1 -1
  674. package/dist/frontend/ts7/api.d.ts +16 -0
  675. package/dist/frontend/ts7/api.js +24 -0
  676. package/dist/frontend/ts7/api.js.map +1 -0
  677. package/dist/frontend/ts7/ast-bytes.d.ts +31 -0
  678. package/dist/frontend/ts7/ast-bytes.js +137 -0
  679. package/dist/frontend/ts7/ast-bytes.js.map +1 -0
  680. package/dist/frontend/ts7/ast-bytes.test.d.ts +1 -0
  681. package/dist/frontend/ts7/ast-bytes.test.js +73 -0
  682. package/dist/frontend/ts7/ast-bytes.test.js.map +1 -0
  683. package/dist/frontend/ts7/ast-guards.generated.d.ts +353 -0
  684. package/dist/frontend/ts7/ast-guards.generated.js +1951 -0
  685. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -0
  686. package/dist/frontend/ts7/ast-guards.test.d.ts +1 -0
  687. package/dist/frontend/ts7/ast-guards.test.js +43 -0
  688. package/dist/frontend/ts7/ast-guards.test.js.map +1 -0
  689. package/dist/frontend/ts7/ast-node.d.ts +194 -0
  690. package/dist/frontend/ts7/ast-node.js +448 -0
  691. package/dist/frontend/ts7/ast-node.js.map +1 -0
  692. package/dist/frontend/ts7/ast-node.test.d.ts +1 -0
  693. package/dist/frontend/ts7/ast-node.test.js +266 -0
  694. package/dist/frontend/ts7/ast-node.test.js.map +1 -0
  695. package/dist/frontend/ts7/ast-schema.generated.d.ts +503 -0
  696. package/dist/frontend/ts7/ast-schema.generated.js +1446 -0
  697. package/dist/frontend/ts7/ast-schema.generated.js.map +1 -0
  698. package/dist/frontend/ts7/ast-text.d.ts +6 -0
  699. package/dist/frontend/ts7/ast-text.js +124 -0
  700. package/dist/frontend/ts7/ast-text.js.map +1 -0
  701. package/dist/frontend/ts7/ast-text.test.d.ts +1 -0
  702. package/dist/frontend/ts7/ast-text.test.js +38 -0
  703. package/dist/frontend/ts7/ast-text.test.js.map +1 -0
  704. package/dist/frontend/ts7/ast-tokens.generated.d.ts +2 -0
  705. package/dist/frontend/ts7/ast-tokens.generated.js +155 -0
  706. package/dist/frontend/ts7/ast-tokens.generated.js.map +1 -0
  707. package/dist/frontend/ts7/ast-types.d.ts +42 -0
  708. package/dist/frontend/ts7/ast-types.generated.d.ts +1615 -0
  709. package/dist/frontend/ts7/ast-types.generated.js +5 -0
  710. package/dist/frontend/ts7/ast-types.generated.js.map +1 -0
  711. package/dist/frontend/ts7/ast-types.js +3 -0
  712. package/dist/frontend/ts7/ast-types.js.map +1 -0
  713. package/dist/frontend/ts7/ast-wire.d.ts +58 -0
  714. package/dist/frontend/ts7/ast-wire.js +267 -0
  715. package/dist/frontend/ts7/ast-wire.js.map +1 -0
  716. package/dist/frontend/ts7/ast-wire.test.d.ts +1 -0
  717. package/dist/frontend/ts7/ast-wire.test.js +151 -0
  718. package/dist/frontend/ts7/ast-wire.test.js.map +1 -0
  719. package/dist/frontend/ts7/ast.d.ts +14 -14
  720. package/dist/frontend/ts7/ast.js +21 -15
  721. package/dist/frontend/ts7/ast.js.map +1 -1
  722. package/dist/frontend/ts7/census-check.js +1 -0
  723. package/dist/frontend/ts7/census-check.js.map +1 -1
  724. package/dist/frontend/ts7/checker-cache.d.ts +48 -0
  725. package/dist/frontend/ts7/checker-cache.js +92 -0
  726. package/dist/frontend/ts7/checker-cache.js.map +1 -0
  727. package/dist/frontend/ts7/checker.d.ts +19 -46
  728. package/dist/frontend/ts7/checker.js +231 -161
  729. package/dist/frontend/ts7/checker.js.map +1 -1
  730. package/dist/frontend/ts7/checker.test.d.ts +1 -0
  731. package/dist/frontend/ts7/checker.test.js +335 -0
  732. package/dist/frontend/ts7/checker.test.js.map +1 -0
  733. package/dist/frontend/ts7/enums.d.ts +4 -27
  734. package/dist/frontend/ts7/enums.generated.d.ts +878 -0
  735. package/dist/frontend/ts7/enums.generated.js +1313 -0
  736. package/dist/frontend/ts7/enums.generated.js.map +1 -0
  737. package/dist/frontend/ts7/enums.js +4 -45
  738. package/dist/frontend/ts7/enums.js.map +1 -1
  739. package/dist/frontend/ts7/enums.test.d.ts +1 -0
  740. package/dist/frontend/ts7/enums.test.js +48 -0
  741. package/dist/frontend/ts7/enums.test.js.map +1 -0
  742. package/dist/frontend/ts7/native-api.d.ts +10 -0
  743. package/dist/frontend/ts7/native-api.js +10 -0
  744. package/dist/frontend/ts7/native-api.js.map +1 -0
  745. package/dist/frontend/ts7/native-host.d.ts +2 -0
  746. package/dist/frontend/ts7/native-host.js +11 -0
  747. package/dist/frontend/ts7/native-host.js.map +1 -0
  748. package/dist/frontend/ts7/native-process.d.ts +14 -0
  749. package/dist/frontend/ts7/native-process.js +62 -0
  750. package/dist/frontend/ts7/native-process.js.map +1 -0
  751. package/dist/frontend/ts7/program-adapter.d.ts +10 -98
  752. package/dist/frontend/ts7/program-adapter.js +16 -310
  753. package/dist/frontend/ts7/program-adapter.js.map +1 -1
  754. package/dist/frontend/ts7/program-host.d.ts +115 -0
  755. package/dist/frontend/ts7/program-host.js +347 -0
  756. package/dist/frontend/ts7/program-host.js.map +1 -0
  757. package/dist/frontend/ts7/program-host.test.d.ts +1 -0
  758. package/dist/frontend/ts7/program-host.test.js +207 -0
  759. package/dist/frontend/ts7/program-host.test.js.map +1 -0
  760. package/dist/frontend/ts7/rpc-api.d.ts +12 -0
  761. package/dist/frontend/ts7/rpc-api.js +23 -0
  762. package/dist/frontend/ts7/rpc-api.js.map +1 -0
  763. package/dist/frontend/ts7/rpc-client.d.ts +27 -0
  764. package/dist/frontend/ts7/rpc-client.js +102 -0
  765. package/dist/frontend/ts7/rpc-client.js.map +1 -0
  766. package/dist/frontend/ts7/rpc-client.test.d.ts +1 -0
  767. package/dist/frontend/ts7/rpc-client.test.js +133 -0
  768. package/dist/frontend/ts7/rpc-client.test.js.map +1 -0
  769. package/dist/frontend/ts7/rpc-filesystem.d.ts +16 -0
  770. package/dist/frontend/ts7/rpc-filesystem.js +42 -0
  771. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -0
  772. package/dist/frontend/ts7/rpc-filesystem.test.d.ts +1 -0
  773. package/dist/frontend/ts7/rpc-filesystem.test.js +89 -0
  774. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -0
  775. package/dist/frontend/ts7/rpc-process.d.ts +2 -0
  776. package/dist/frontend/ts7/rpc-process.js +148 -0
  777. package/dist/frontend/ts7/rpc-process.js.map +1 -0
  778. package/dist/frontend/ts7/rpc-process.test.d.ts +1 -0
  779. package/dist/frontend/ts7/rpc-process.test.js +29 -0
  780. package/dist/frontend/ts7/rpc-process.test.js.map +1 -0
  781. package/dist/frontend/ts7/rpc-wire.d.ts +46 -0
  782. package/dist/frontend/ts7/rpc-wire.js +195 -0
  783. package/dist/frontend/ts7/rpc-wire.js.map +1 -0
  784. package/dist/frontend/ts7/rpc-wire.test.d.ts +1 -0
  785. package/dist/frontend/ts7/rpc-wire.test.js +168 -0
  786. package/dist/frontend/ts7/rpc-wire.test.js.map +1 -0
  787. package/dist/frontend/ts7/semantic-checker.d.ts +137 -0
  788. package/dist/frontend/ts7/semantic-checker.js +221 -0
  789. package/dist/frontend/ts7/semantic-checker.js.map +1 -0
  790. package/dist/frontend/ts7/semantic-checker.test.d.ts +1 -0
  791. package/dist/frontend/ts7/semantic-checker.test.js +119 -0
  792. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -0
  793. package/dist/frontend/ts7/semantic-json.d.ts +5 -0
  794. package/dist/frontend/ts7/semantic-json.js +52 -0
  795. package/dist/frontend/ts7/semantic-json.js.map +1 -0
  796. package/dist/frontend/ts7/semantic-json.test.d.ts +1 -0
  797. package/dist/frontend/ts7/semantic-json.test.js +42 -0
  798. package/dist/frontend/ts7/semantic-json.test.js.map +1 -0
  799. package/dist/frontend/ts7/semantic-model.d.ts +222 -0
  800. package/dist/frontend/ts7/semantic-model.js +423 -0
  801. package/dist/frontend/ts7/semantic-model.js.map +1 -0
  802. package/dist/frontend/ts7/semantic-model.test.d.ts +1 -0
  803. package/dist/frontend/ts7/semantic-model.test.js +322 -0
  804. package/dist/frontend/ts7/semantic-model.test.js.map +1 -0
  805. package/dist/frontend/ts7/semantic-schema.generated.d.ts +283 -0
  806. package/dist/frontend/ts7/semantic-schema.generated.js +222 -0
  807. package/dist/frontend/ts7/semantic-schema.generated.js.map +1 -0
  808. package/dist/frontend/ts7/semantic-types.d.ts +5 -0
  809. package/dist/frontend/ts7/semantic-types.js +2 -0
  810. package/dist/frontend/ts7/semantic-types.js.map +1 -0
  811. package/dist/frontend/ts7/session-cache.d.ts +17 -0
  812. package/dist/frontend/ts7/session-cache.js +97 -0
  813. package/dist/frontend/ts7/session-cache.js.map +1 -0
  814. package/dist/frontend/ts7/session-cache.test.d.ts +1 -0
  815. package/dist/frontend/ts7/session-cache.test.js +87 -0
  816. package/dist/frontend/ts7/session-cache.test.js.map +1 -0
  817. package/dist/frontend/ts7/session-path.d.ts +18 -0
  818. package/dist/frontend/ts7/session-path.js +203 -0
  819. package/dist/frontend/ts7/session-path.js.map +1 -0
  820. package/dist/frontend/ts7/session-path.test.d.ts +1 -0
  821. package/dist/frontend/ts7/session-path.test.js +34 -0
  822. package/dist/frontend/ts7/session-path.test.js.map +1 -0
  823. package/dist/frontend/ts7/session-schema.generated.d.ts +167 -0
  824. package/dist/frontend/ts7/session-schema.generated.js +5 -0
  825. package/dist/frontend/ts7/session-schema.generated.js.map +1 -0
  826. package/dist/frontend/ts7/session-timing.d.ts +50 -0
  827. package/dist/frontend/ts7/session-timing.js +61 -0
  828. package/dist/frontend/ts7/session-timing.js.map +1 -0
  829. package/dist/frontend/ts7/session-timing.test.d.ts +1 -0
  830. package/dist/frontend/ts7/session-timing.test.js +52 -0
  831. package/dist/frontend/ts7/session-timing.test.js.map +1 -0
  832. package/dist/frontend/ts7/session.d.ts +105 -0
  833. package/dist/frontend/ts7/session.js +233 -0
  834. package/dist/frontend/ts7/session.js.map +1 -0
  835. package/dist/frontend/ts7/session.test.d.ts +1 -0
  836. package/dist/frontend/ts7/session.test.js +215 -0
  837. package/dist/frontend/ts7/session.test.js.map +1 -0
  838. package/dist/frontend/ts7/source-parser-node.d.ts +6 -0
  839. package/dist/frontend/ts7/source-parser-node.js +15 -0
  840. package/dist/frontend/ts7/source-parser-node.js.map +1 -0
  841. package/dist/frontend/ts7/source-parser.d.ts +25 -0
  842. package/dist/frontend/ts7/source-parser.js +96 -0
  843. package/dist/frontend/ts7/source-parser.js.map +1 -0
  844. package/dist/frontend/ts7/source-parser.test.d.ts +1 -0
  845. package/dist/frontend/ts7/source-parser.test.js +151 -0
  846. package/dist/frontend/ts7/source-parser.test.js.map +1 -0
  847. package/dist/frontend/ts7/syntax.d.ts +3 -0
  848. package/dist/frontend/ts7/syntax.js +4 -0
  849. package/dist/frontend/ts7/syntax.js.map +1 -0
  850. package/dist/frontend/tsc-codes.js +3 -0
  851. package/dist/frontend/tsc-codes.js.map +1 -1
  852. package/dist/frontend/type-mapper.d.ts +25 -17
  853. package/dist/frontend/type-mapper.js +465 -121
  854. package/dist/frontend/type-mapper.js.map +1 -1
  855. package/dist/frontend/type-mapper.test.js +123 -2
  856. package/dist/frontend/type-mapper.test.js.map +1 -1
  857. package/dist/frontend/union-discriminants.d.ts +16 -0
  858. package/dist/frontend/union-discriminants.js +98 -0
  859. package/dist/frontend/union-discriminants.js.map +1 -0
  860. package/dist/frontend/union-discriminants.test.d.ts +1 -0
  861. package/dist/frontend/union-discriminants.test.js +182 -0
  862. package/dist/frontend/union-discriminants.test.js.map +1 -0
  863. package/dist/index.d.ts +7 -198
  864. package/dist/index.js +369 -1572
  865. package/dist/index.js.map +1 -1
  866. package/dist/ir/analysis.d.ts +16 -4
  867. package/dist/ir/analysis.js +21 -4
  868. package/dist/ir/analysis.js.map +1 -1
  869. package/dist/ir/analysis.test.js +15 -2
  870. package/dist/ir/analysis.test.js.map +1 -1
  871. package/dist/ir/constant-tables.js +67 -49
  872. package/dist/ir/constant-tables.js.map +1 -1
  873. package/dist/ir/constant-tables.test.js +1 -1
  874. package/dist/ir/control-flow.d.ts +6 -0
  875. package/dist/ir/control-flow.js +142 -0
  876. package/dist/ir/control-flow.js.map +1 -0
  877. package/dist/ir/control-flow.test.d.ts +1 -0
  878. package/dist/ir/control-flow.test.js +113 -0
  879. package/dist/ir/control-flow.test.js.map +1 -0
  880. package/dist/ir/integer-loops.js +7 -18
  881. package/dist/ir/integer-loops.js.map +1 -1
  882. package/dist/ir/integer-ranges.js +53 -27
  883. package/dist/ir/integer-ranges.js.map +1 -1
  884. package/dist/ir/ir.d.ts +291 -152
  885. package/dist/ir/ir.js +588 -881
  886. package/dist/ir/ir.js.map +1 -1
  887. package/dist/ir/ir.test.js +127 -1
  888. package/dist/ir/ir.test.js.map +1 -1
  889. package/dist/ir/scalar-records.js +165 -134
  890. package/dist/ir/scalar-records.js.map +1 -1
  891. package/dist/ir/scalar-records.test.js +1 -1
  892. package/dist/ir/serialize.d.ts +4 -2
  893. package/dist/ir/serialize.js +19 -12
  894. package/dist/ir/serialize.js.map +1 -1
  895. package/dist/ir/serialize.test.d.ts +1 -0
  896. package/dist/ir/serialize.test.js +53 -0
  897. package/dist/ir/serialize.test.js.map +1 -0
  898. package/dist/ir/traverse.d.ts +41 -0
  899. package/dist/ir/traverse.js +660 -0
  900. package/dist/ir/traverse.js.map +1 -0
  901. package/dist/ir/traverse.test.d.ts +1 -0
  902. package/dist/ir/traverse.test.js +242 -0
  903. package/dist/ir/traverse.test.js.map +1 -0
  904. package/dist/ir/validate.js +1942 -1491
  905. package/dist/ir/validate.js.map +1 -1
  906. package/dist/ir/validate.test.js +476 -2
  907. package/dist/ir/validate.test.js.map +1 -1
  908. package/dist/library/cache-primitives.d.ts +2 -3
  909. package/dist/library/cache-primitives.js +4 -6
  910. package/dist/library/cache-primitives.js.map +1 -1
  911. package/dist/library/fence-eval.js +2 -2
  912. package/dist/library/fence-eval.js.map +1 -1
  913. package/dist/library/int-infer.js +7 -6
  914. package/dist/library/int-infer.js.map +1 -1
  915. package/dist/library/int-infer.test.js +4 -4
  916. package/dist/library/library-cache.d.ts +3 -2
  917. package/dist/library/library-cache.js +5 -17
  918. package/dist/library/library-cache.js.map +1 -1
  919. package/dist/library/library-cache.test.js +54 -41
  920. package/dist/library/library-cache.test.js.map +1 -1
  921. package/dist/library/library-profile.d.ts +3 -1
  922. package/dist/library/library-profile.js +15 -6
  923. package/dist/library/library-profile.js.map +1 -1
  924. package/dist/library/prepare.d.ts +15 -0
  925. package/dist/library/prepare.js +584 -0
  926. package/dist/library/prepare.js.map +1 -0
  927. package/dist/library/semantic-source.d.ts +1 -1
  928. package/dist/library/semantic-source.js +8 -6
  929. package/dist/library/semantic-source.js.map +1 -1
  930. package/dist/library/sidecar-validate.js +4 -4
  931. package/dist/library/sidecar-validate.js.map +1 -1
  932. package/dist/library/sidecar.d.ts +2 -0
  933. package/dist/library/sidecar.js +10 -3
  934. package/dist/library/sidecar.js.map +1 -1
  935. package/dist/native/cache.d.ts +11 -0
  936. package/dist/native/cache.js +113 -0
  937. package/dist/native/cache.js.map +1 -0
  938. package/dist/native/cache.test.d.ts +1 -0
  939. package/dist/native/cache.test.js +66 -0
  940. package/dist/native/cache.test.js.map +1 -0
  941. package/dist/native/cli.d.ts +1 -0
  942. package/dist/native/cli.js +112 -0
  943. package/dist/native/cli.js.map +1 -0
  944. package/dist/native/compiler.d.ts +15 -0
  945. package/dist/native/compiler.js +336 -0
  946. package/dist/native/compiler.js.map +1 -0
  947. package/dist/native/compiler.test.d.ts +1 -0
  948. package/dist/native/compiler.test.js +174 -0
  949. package/dist/native/compiler.test.js.map +1 -0
  950. package/dist/native/comptime.d.ts +5 -0
  951. package/dist/native/comptime.js +73 -0
  952. package/dist/native/comptime.js.map +1 -0
  953. package/dist/native/comptime.test.d.ts +1 -0
  954. package/dist/native/comptime.test.js +65 -0
  955. package/dist/native/comptime.test.js.map +1 -0
  956. package/dist/native/executable-cache.d.ts +26 -0
  957. package/dist/native/executable-cache.js +228 -0
  958. package/dist/native/executable-cache.js.map +1 -0
  959. package/dist/native/executable-cache.test.d.ts +1 -0
  960. package/dist/native/executable-cache.test.js +151 -0
  961. package/dist/native/executable-cache.test.js.map +1 -0
  962. package/dist/native/file-identity.d.ts +4 -0
  963. package/dist/native/file-identity.js +14 -0
  964. package/dist/native/file-identity.js.map +1 -0
  965. package/dist/native/file-identity.test.d.ts +1 -0
  966. package/dist/native/file-identity.test.js +43 -0
  967. package/dist/native/file-identity.test.js.map +1 -0
  968. package/dist/native/library.d.ts +22 -0
  969. package/dist/native/library.js +83 -0
  970. package/dist/native/library.js.map +1 -0
  971. package/dist/native/prepare.d.ts +21 -0
  972. package/dist/native/prepare.js +174 -0
  973. package/dist/native/prepare.js.map +1 -0
  974. package/dist/native/prepare.test.d.ts +1 -0
  975. package/dist/native/prepare.test.js +70 -0
  976. package/dist/native/prepare.test.js.map +1 -0
  977. package/dist/native/sanitizer.d.ts +11 -0
  978. package/dist/native/sanitizer.js +135 -0
  979. package/dist/native/sanitizer.js.map +1 -0
  980. package/dist/native/sanitizer.test.d.ts +1 -0
  981. package/dist/native/sanitizer.test.js +58 -0
  982. package/dist/native/sanitizer.test.js.map +1 -0
  983. package/dist/native/task.d.ts +4 -0
  984. package/dist/native/task.js +16 -0
  985. package/dist/native/task.js.map +1 -0
  986. package/dist/native/task.test.d.ts +1 -0
  987. package/dist/native/task.test.js +17 -0
  988. package/dist/native/task.test.js.map +1 -0
  989. package/dist/native/toolchain.d.ts +45 -0
  990. package/dist/native/toolchain.js +74 -0
  991. package/dist/native/toolchain.js.map +1 -0
  992. package/dist/native/toolchain.test.d.ts +1 -0
  993. package/dist/native/toolchain.test.js +33 -0
  994. package/dist/native/toolchain.test.js.map +1 -0
  995. package/dist/startup-cache.d.ts +1 -1
  996. package/dist/startup-cache.js +2 -5
  997. package/dist/startup-cache.js.map +1 -1
  998. package/dist/timing.d.ts +4 -0
  999. package/dist/timing.js +19 -0
  1000. package/dist/timing.js.map +1 -0
  1001. package/dist/wasi-paths.js +10 -7
  1002. package/dist/wasi-paths.js.map +1 -1
  1003. package/package.json +28 -19
  1004. package/surface-manifest.json +52 -18
  1005. package/dist/backend/c/async.d.ts +0 -171
  1006. package/dist/backend/c/async.js +0 -1317
  1007. package/dist/backend/c/async.js.map +0 -1
  1008. package/dist/backend/c/c-emitter.d.ts +0 -536
  1009. package/dist/backend/c/c-emitter.js +0 -1932
  1010. package/dist/backend/c/c-emitter.js.map +0 -1
  1011. package/dist/backend/c/exprs.d.ts +0 -15
  1012. package/dist/backend/c/exprs.js +0 -8847
  1013. package/dist/backend/c/exprs.js.map +0 -1
  1014. package/dist/backend/c/island.d.ts +0 -45
  1015. package/dist/backend/c/island.js +0 -281
  1016. package/dist/backend/c/island.js.map +0 -1
  1017. package/dist/backend/c/may-throw.js.map +0 -1
  1018. package/dist/backend/c/shapes.d.ts +0 -142
  1019. package/dist/backend/c/shapes.js +0 -603
  1020. package/dist/backend/c/shapes.js.map +0 -1
  1021. package/dist/backend/c/stmts.d.ts +0 -76
  1022. package/dist/backend/c/stmts.js +0 -1108
  1023. package/dist/backend/c/stmts.js.map +0 -1
  1024. package/dist/backend/c/types.d.ts +0 -71
  1025. package/dist/backend/c/types.js +0 -459
  1026. package/dist/backend/c/types.js.map +0 -1
  1027. package/dist/backend/c/types.test.js +0 -32
  1028. package/dist/backend/c/types.test.js.map +0 -1
  1029. package/dist/backend/c/walkers.d.ts +0 -134
  1030. package/dist/backend/c/walkers.js +0 -1772
  1031. package/dist/backend/c/walkers.js.map +0 -1
  1032. /package/dist/backend/{c/types.test.d.ts → cycle-analysis.test.d.ts} +0 -0
@@ -1,3 +1,5 @@
1
+ import { typedRefConstructor } from "./shapes.js";
2
+ import { BYTES_ELEM_NUM, f64Lit } from "./common.js";
1
3
  import { InternalCompilerError } from "../../errors.js";
2
4
  import { DYN_HANDLE_KINDS, isDynTypedRefType, isRefCounted, typeKey } from "../../ir/ir.js";
3
5
  import { dynDesc, undefinedArmTag } from "../../ir/analysis.js";
@@ -17,6 +19,7 @@ const DYN_HANDLE_TAG_NUM = {
17
19
  http2Stream: 5,
18
20
  httpClientReq: 6,
19
21
  child: 16,
22
+ fileHandle: 17,
20
23
  };
21
24
  export const DYN_KIND = {
22
25
  NULL: 0,
@@ -32,13 +35,10 @@ export const DYN_KIND = {
32
35
  PROMISE: 10,
33
36
  JSVAL: 11, /* SCR_DYN_JSVAL — island values held by reference */
34
37
  TYPED_REF: 12, /* SCR_DYN_TYPED_REF — static Web-stream transit capsule */
38
+ PROXY: 13,
39
+ BIGINT: 14,
40
+ SYMBOL: 15,
35
41
  };
36
- /** Exact double literal (the emitter's f64Lit — the walkers' copy). */
37
- function f64Lit(n) {
38
- const buf = new ArrayBuffer(8);
39
- new DataView(buf).setFloat64(0, n);
40
- return `0x${[...new Uint8Array(buf)].map((b) => b.toString(16).padStart(2, "0")).join("").toUpperCase()}`;
41
- }
42
42
  const FN_ATTRS = "#0";
43
43
  export class LlDyn {
44
44
  host;
@@ -51,11 +51,38 @@ export class LlDyn {
51
51
  promiseDynAdapters = new Map();
52
52
  dynToStrFn = null;
53
53
  caughtToDynFn = null;
54
+ helperMemo = new Map();
54
55
  /** Emitted function definitions, in interning order. */
55
56
  defs = [];
56
57
  constructor(host) {
57
58
  this.host = host;
58
59
  }
60
+ /** Branch to a variant only after its literal discriminator and complete
61
+ * structure match. Use the same path for predicates and builders. */
62
+ unionArmMatch(B, def, tag, yes, no) {
63
+ const guard = def.discriminant?.cases.find((candidate) => candidate.tag === tag);
64
+ if (guard && def.discriminant) {
65
+ const structure = B.newLabel("du.shape");
66
+ const field = this.host.internLiteral(def.discriminant.field);
67
+ guard.values.forEach((value, index) => {
68
+ const suffix = typeof value === "string" ? "str" : typeof value === "boolean" ? "bool" : "num";
69
+ const ty = typeof value === "string" ? "ptr" : typeof value === "boolean" ? "i1" : "double";
70
+ const operand = typeof value === "string" ? this.host.internLiteral(value)
71
+ : typeof value === "boolean" ? String(value) : f64Lit(value);
72
+ this.host.declare(`declare zeroext i1 @scr_dyn_field_eq_${suffix}(ptr, ptr, ${ty}${ty === "i1" ? " zeroext" : ""})`);
73
+ const matches = B.tmp();
74
+ B.line(`${matches} = call zeroext i1 @scr_dyn_field_eq_${suffix}(ptr %d, ptr ${field}, ${ty} ${operand})`);
75
+ const next = index === guard.values.length - 1 ? no : B.newLabel("du.literal");
76
+ B.condBr(matches, structure, next);
77
+ if (index !== guard.values.length - 1)
78
+ B.startBlock(next);
79
+ });
80
+ B.startBlock(structure);
81
+ }
82
+ const matches = B.tmp();
83
+ B.line(`${matches} = call zeroext i1 @${this.dynMatchHelper(def.arms[tag])}(ptr %d)`);
84
+ B.condBr(matches, yes, no);
85
+ }
59
86
  get S() { return this.host.sizeType; }
60
87
  abiOffset(native64, wasm32) {
61
88
  return this.S === "i32" ? wasm32 : native64;
@@ -118,12 +145,12 @@ export class LlDyn {
118
145
  B.line(`${e} = load ptr, ptr ${p}`);
119
146
  return e;
120
147
  }
121
- /** Object entry field addresses: entries + i*24 (+0 key, +8 key_len,
122
- * +16 value). */
148
+ /** Object entry field addresses: entries + i*sizeof(ScrDynEntry), with
149
+ * key, key_len, and value at offsets 0, 8, and 16 on 64-bit targets. */
123
150
  entryAt(B, entries, i) {
124
151
  const off = B.tmp();
125
152
  const base = B.tmp();
126
- B.line(`${off} = mul ${this.S} ${i}, ${this.abiOffset(24, 12)} ; sizeof(ScrDynEntry)`);
153
+ B.line(`${off} = mul ${this.S} ${i}, ${this.abiOffset(48, 24)} ; sizeof(ScrDynEntry)`);
127
154
  B.line(`${base} = getelementptr inbounds i8, ptr ${entries}, ${this.S} ${off}`);
128
155
  const key = B.tmp();
129
156
  B.line(`${key} = load ptr, ptr ${base}`);
@@ -245,6 +272,29 @@ export class LlDyn {
245
272
  B.startBlock(lk);
246
273
  }
247
274
  /* ── dynMatchHelper (walkers.ts, ported) ──────────────────────── */
275
+ /** Native subclass capsules also satisfy a checked base-class slot.
276
+ * Class layouts share their base prefix, so unboxing retains the same
277
+ * pointer and virtual dispatch still uses the object's original vtable. */
278
+ typedRefMatches(B, t) {
279
+ this.host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${this.S})`);
280
+ const types = isDynTypedRefType(t)
281
+ ? this.host.classSubtypes(t.className).map((className) => ({ kind: "object", className }))
282
+ : [t];
283
+ let matched = "false";
284
+ for (const type of types) {
285
+ const key = typeKey(type);
286
+ const next = B.tmp();
287
+ B.line(`${next} = call zeroext i1 @scr_dyn_typed_ref_is(ptr %d, ptr ${this.host.cstr(key)}, ${this.S} ${Buffer.byteLength(key, "utf8")})`);
288
+ if (matched === "false")
289
+ matched = next;
290
+ else {
291
+ const either = B.tmp();
292
+ B.line(`${either} = or i1 ${matched}, ${next}`);
293
+ matched = either;
294
+ }
295
+ }
296
+ return matched;
297
+ }
248
298
  /** `sc_dm_<n>(ptr d) -> i1` — does this dyn fit T? Never throws. */
249
299
  dynMatchHelper(t) {
250
300
  const key = typeKey(t);
@@ -255,9 +305,7 @@ export class LlDyn {
255
305
  this.dynMatchers.set(key, name);
256
306
  const B = new BlockBuilder();
257
307
  if (isRefCounted(t) && t.kind !== "dyn") {
258
- this.host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${this.S})`);
259
- const matched = B.tmp();
260
- B.line(`${matched} = call zeroext i1 @scr_dyn_typed_ref_is(ptr %d, ptr ${this.host.cstr(key)}, ${this.S} ${Buffer.byteLength(key, "utf8")})`);
308
+ const matched = this.typedRefMatches(B, t);
261
309
  const lRef = B.newLabel("dm.tr");
262
310
  const lNext = B.newLabel("dm.nt");
263
311
  B.condBr(matched, lRef, lNext);
@@ -290,6 +338,34 @@ export class LlDyn {
290
338
  B.terminate(`ret i1 ${r}`);
291
339
  };
292
340
  switch (t.kind) {
341
+ case "url": {
342
+ this.host.declare(`declare zeroext i1 @scr_dyn_native_url_is(ptr)`);
343
+ const r = B.tmp();
344
+ B.line(`${r} = call zeroext i1 @scr_dyn_native_url_is(ptr %d)`);
345
+ B.terminate(`ret i1 ${r}`);
346
+ break;
347
+ }
348
+ case "regex": {
349
+ this.host.declare(`declare zeroext i1 @scr_dyn_native_regex_is(ptr)`);
350
+ const r = B.tmp();
351
+ B.line(`${r} = call zeroext i1 @scr_dyn_native_regex_is(ptr %d)`);
352
+ B.terminate(`ret i1 ${r}`);
353
+ break;
354
+ }
355
+ case "map":
356
+ case "set": {
357
+ this.host.declare(`declare zeroext i1 @scr_dyn_native_${t.kind}_is(ptr)`);
358
+ const r = B.tmp();
359
+ B.line(`${r} = call zeroext i1 @scr_dyn_native_${t.kind}_is(ptr %d)`);
360
+ B.terminate(`ret i1 ${r}`);
361
+ break;
362
+ }
363
+ case "bigint":
364
+ kindIs(DYN_KIND.BIGINT);
365
+ break;
366
+ case "symbol":
367
+ kindIs(DYN_KIND.SYMBOL);
368
+ break;
293
369
  case "f64":
294
370
  kindIs(DYN_KIND.NUM);
295
371
  break;
@@ -309,14 +385,27 @@ export class LlDyn {
309
385
  // An `unknown` target: every dyn value fits, undefined included.
310
386
  B.terminate(`ret i1 true`);
311
387
  break;
312
- case "bytes":
313
- if (t.elem !== "u8")
314
- throw new InternalCompilerError(`llvm emitter bug: dynMatch of bytes<${t.elem}>`);
315
- kindIs(DYN_KIND.BYTES);
388
+ case "bytes": {
389
+ this.host.declare(`declare zeroext i1 @scr_dyn_bytes_is(ptr, i32)`);
390
+ const matched = B.tmp();
391
+ B.line(`${matched} = call zeroext i1 @scr_dyn_bytes_is(ptr %d, i32 ${BYTES_ELEM_NUM[t.elem]})`);
392
+ B.terminate(`ret i1 ${matched}`);
316
393
  break;
394
+ }
317
395
  case "func":
318
396
  kindIs(DYN_KIND.FUNC);
319
397
  break;
398
+ case "classval": {
399
+ this.host.declare(`declare zeroext i1 @scr_dyn_class_is(ptr, ptr)`);
400
+ const matched = B.tmp();
401
+ B.line(`${matched} = call zeroext i1 @scr_dyn_class_is(ptr %d, ptr ${this.host.cstr(key)})`);
402
+ B.terminate(`ret i1 ${matched}`);
403
+ break;
404
+ }
405
+ case "generator":
406
+ // Only an exact native capsule carries these channel types.
407
+ B.terminate(`ret i1 false`);
408
+ break;
320
409
  case "object": {
321
410
  if (t.className !== "%Error") {
322
411
  // Exact class capsules returned true before materialization.
@@ -473,11 +562,9 @@ export class LlDyn {
473
562
  throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
474
563
  // Arms in canonical order; any full match answers true.
475
564
  const yes = B.newLabel("dm.y");
476
- for (const arm of def.arms) {
477
- const ok = B.tmp();
478
- B.line(`${ok} = call zeroext i1 @${this.dynMatchHelper(arm)}(ptr %d)`);
565
+ for (let tag = 0; tag < def.arms.length; tag++) {
479
566
  const ln = B.newLabel("dm.n");
480
- B.condBr(ok, yes, ln);
567
+ this.unionArmMatch(B, def, tag, yes, ln);
481
568
  B.startBlock(ln);
482
569
  }
483
570
  B.terminate(`ret i1 false`);
@@ -528,11 +615,17 @@ export class LlDyn {
528
615
  host.declare(`declare void @scr_dyn_check_fail(ptr, ptr, ptr)`);
529
616
  const want = host.cstr(dynDesc(t, this.host.recordsById, this.host.unionsById));
530
617
  const B = new BlockBuilder();
618
+ if (t.kind === "classval") {
619
+ host.declare(`declare ptr @scr_dyn_class_check(ptr, ptr, ptr)`);
620
+ const checked = B.tmp();
621
+ B.line(`${checked} = call ptr @scr_dyn_class_check(ptr %d, ptr ${host.cstr(key)}, ptr %path)`);
622
+ B.terminate(`ret ptr ${checked}`);
623
+ this.defs.push(`define internal ptr @${name}(ptr %d, ptr %path) ${FN_ATTRS} {`, B.render(), `}`, ``);
624
+ return name;
625
+ }
531
626
  if (isRefCounted(t) && t.kind !== "dyn") {
532
- host.declare(`declare zeroext i1 @scr_dyn_typed_ref_is(ptr, ptr, ${host.sizeType})`);
533
627
  host.declare(`declare ptr @scr_dyn_typed_ref_unbox(ptr)`);
534
- const matched = B.tmp();
535
- B.line(`${matched} = call zeroext i1 @scr_dyn_typed_ref_is(ptr %d, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")})`);
628
+ const matched = this.typedRefMatches(B, t);
536
629
  const lRef = B.newLabel("dc.tr");
537
630
  const lNext = B.newLabel("dc.nt");
538
631
  B.condBr(matched, lRef, lNext);
@@ -672,6 +765,46 @@ export class LlDyn {
672
765
  B.startBlock(lo);
673
766
  };
674
767
  switch (t.kind) {
768
+ case "url": {
769
+ host.declare(`declare ptr @scr_dyn_native_url_check(ptr, ptr)`);
770
+ const r = B.tmp();
771
+ B.line(`${r} = call ptr @scr_dyn_native_url_check(ptr %d, ptr %path)`);
772
+ B.terminate(`ret ptr ${r}`);
773
+ break;
774
+ }
775
+ case "regex": {
776
+ host.declare(`declare ptr @scr_dyn_native_regex_check(ptr, ptr)`);
777
+ const r = B.tmp();
778
+ B.line(`${r} = call ptr @scr_dyn_native_regex_check(ptr %d, ptr %path)`);
779
+ B.terminate(`ret ptr ${r}`);
780
+ break;
781
+ }
782
+ case "map":
783
+ case "set": {
784
+ host.declare(`declare ptr @scr_dyn_native_${t.kind}_check(ptr, ptr)`);
785
+ const r = B.tmp();
786
+ B.line(`${r} = call ptr @scr_dyn_native_${t.kind}_check(ptr %d, ptr %path)`);
787
+ B.terminate(`ret ptr ${r}`);
788
+ break;
789
+ }
790
+ case "bigint": {
791
+ requireKind(DYN_KIND.BIGINT, "dc");
792
+ host.declare(`declare ptr @scr_bigint_retain(ptr)`);
793
+ const v = this.payloadOf(B, "%d", "ptr");
794
+ const r = B.tmp();
795
+ B.line(`${r} = call ptr @scr_bigint_retain(ptr ${v})`);
796
+ B.terminate(`ret ptr ${r}`);
797
+ break;
798
+ }
799
+ case "symbol": {
800
+ requireKind(DYN_KIND.SYMBOL, "dc");
801
+ host.declare(`declare ptr @scr_sym_retain(ptr)`);
802
+ const v = this.payloadOf(B, "%d", "ptr");
803
+ const r = B.tmp();
804
+ B.line(`${r} = call ptr @scr_sym_retain(ptr ${v})`);
805
+ B.terminate(`ret ptr ${r}`);
806
+ break;
807
+ }
675
808
  case "f64": {
676
809
  requireKind(DYN_KIND.NUM, "dc");
677
810
  const v = this.payloadOf(B, "%d", "double");
@@ -702,16 +835,26 @@ export class LlDyn {
702
835
  break;
703
836
  }
704
837
  case "bytes": {
705
- // `u as Uint8Array`: kind check, then a fresh COPY out.
706
- if (t.elem !== "u8")
707
- throw new InternalCompilerError(`llvm emitter bug: dynCheck of bytes<${t.elem}>`);
708
- requireKind(DYN_KIND.BYTES, "dc");
709
- host.declare(`declare ptr @scr_dyn_bytes_copy_out(ptr)`);
838
+ host.declare(`declare zeroext i1 @scr_dyn_bytes_is(ptr, i32)`);
839
+ const matched = B.tmp();
840
+ B.line(`${matched} = call zeroext i1 @scr_dyn_bytes_is(ptr %d, i32 ${BYTES_ELEM_NUM[t.elem]})`);
841
+ const yes = B.newLabel("dc.bytes");
842
+ const no = B.newLabel("dc.bytes.fail");
843
+ B.condBr(matched, yes, no);
844
+ B.startBlock(no);
845
+ B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
846
+ B.terminate(`ret ptr null`);
847
+ B.startBlock(yes);
848
+ host.declare(`declare ptr @scr_dyn_bytes_unbox(ptr)`);
710
849
  const r = B.tmp();
711
- B.line(`${r} = call ptr @scr_dyn_bytes_copy_out(ptr %d)`);
850
+ B.line(`${r} = call ptr @scr_dyn_bytes_unbox(ptr %d)`);
712
851
  B.terminate(`ret ptr ${r}`);
713
852
  break;
714
853
  }
854
+ case "generator":
855
+ B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${want}, ptr %d)`);
856
+ B.terminate(`ret ptr null`);
857
+ break;
715
858
  case "object": {
716
859
  // The %Error extraction (an instanceof-Error narrow on unknown):
717
860
  // validate the checked-dynamic tree's error encoding — the reserved "%error" marker
@@ -827,6 +970,21 @@ export class LlDyn {
827
970
  break;
828
971
  }
829
972
  requireKind(DYN_KIND.OBJ, "dcr");
973
+ if (shape.fields.length === 0 && !shape.indexValue) {
974
+ const sourceAccessor = `${this.toDynHelper(t)}_source_access`;
975
+ const rc = vAdapters(host, t);
976
+ host.declare(`declare ptr @scr_dyn_obj_source_cast(ptr, ptr, ptr)`);
977
+ const source = B.tmp();
978
+ const found = B.tmp();
979
+ const lSource = B.newLabel("dcr.source");
980
+ const lCopy = B.newLabel("dcr.copy");
981
+ B.line(`${source} = call ptr @scr_dyn_obj_source_cast(ptr %d, ptr @${sourceAccessor}, ptr ${rc.retain})`);
982
+ B.line(`${found} = icmp ne ptr ${source}, null`);
983
+ B.condBr(found, lSource, lCopy);
984
+ B.startBlock(lSource);
985
+ B.terminate(`ret ptr ${source}`);
986
+ B.startBlock(lCopy);
987
+ }
830
988
  B.line(`%r0 = call ptr @${mangleRecordNew(t.shapeId)}()`);
831
989
  for (const f of shape.fields) {
832
990
  const fieldWant = host.cstr(dynDesc(f.type, this.host.recordsById, this.host.unionsById));
@@ -994,12 +1152,9 @@ export class LlDyn {
994
1152
  // Arms in CANONICAL order, first FULL match wins. The matched
995
1153
  // arm's builder can no longer fail.
996
1154
  def.arms.forEach((arm, i) => {
997
- const m = this.dynMatchHelper(arm);
998
- const hit = B.tmp();
999
- B.line(`${hit} = call zeroext i1 @${m}(ptr %d)`);
1000
1155
  const lHit = B.newLabel("dcu.h");
1001
1156
  const lNext = B.newLabel("dcu.n");
1002
- B.condBr(hit, lHit, lNext);
1157
+ this.unionArmMatch(B, def, i, lHit, lNext);
1003
1158
  B.startBlock(lHit);
1004
1159
  if (arm.kind === "undefinedT" || arm.kind === "nullT") {
1005
1160
  // A matched unit arm builds nothing: THE interned immortal
@@ -1078,13 +1233,14 @@ export class LlDyn {
1078
1233
  const lCache = B.newLabel("dcu.put");
1079
1234
  B.condBr(hasCached, lRefresh, lCache);
1080
1235
  B.startBlock(lRefresh);
1081
- [
1236
+ const fields = [
1082
1237
  [1, "i32", "tag"],
1083
1238
  [2, "ptr", "retain"],
1084
1239
  [3, "ptr", "release"],
1085
1240
  [4, "ptr", "trace"],
1086
1241
  [5, "i64", "slot"],
1087
- ].forEach(([index, fieldType, fieldName]) => {
1242
+ ];
1243
+ fields.forEach(([index, fieldType, fieldName]) => {
1088
1244
  const cachedPtr = B.tmp();
1089
1245
  const checkedPtr = B.tmp();
1090
1246
  const oldValue = B.tmp();
@@ -1140,11 +1296,20 @@ export class LlDyn {
1140
1296
  host.declare(`declare ptr @scr_box_new_obj(ptr, ptr, ptr)`);
1141
1297
  host.declare(`declare void @scr_box_set_ref(ptr, ptr)`);
1142
1298
  host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
1299
+ host.declare(`declare void @scr_dyn_trace_v(ptr, ptr, ptr)`);
1143
1300
  host.declare(`declare void @scr_dyn_release_v(ptr)`);
1144
1301
  const a = B.tmp();
1145
1302
  B.line(`${a} = call ptr @scr_closure_new(ptr @${adapter}, ${host.sizeType} 1)`);
1303
+ const sourceClosure = this.payloadOf(B, "%d", "ptr");
1304
+ const sourceKind = B.tmp();
1305
+ const functionKind = B.tmp();
1306
+ const targetKind = B.tmp();
1307
+ B.line(`${sourceKind} = getelementptr inbounds %ScrClosure, ptr ${sourceClosure}, i64 0, i32 4`);
1308
+ B.line(`${functionKind} = load i32, ptr ${sourceKind}`);
1309
+ B.line(`${targetKind} = getelementptr inbounds %ScrClosure, ptr ${a}, i64 0, i32 4`);
1310
+ B.line(`store i32 ${functionKind}, ptr ${targetKind}`);
1146
1311
  const box = B.tmp();
1147
- B.line(`${box} = call ptr @scr_box_new_obj(ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr null)`);
1312
+ B.line(`${box} = call ptr @scr_box_new_obj(ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr @scr_dyn_trace_v)`);
1148
1313
  const capp = B.tmp();
1149
1314
  B.line(`${capp} = getelementptr inbounds %ScrClosure, ptr ${a}, i64 1 ; caps[0]`);
1150
1315
  B.line(`store ptr ${box}, ptr ${capp}`);
@@ -1186,6 +1351,42 @@ export class LlDyn {
1186
1351
  const B = new BlockBuilder();
1187
1352
  let sourceAccessor = null;
1188
1353
  switch (t.kind) {
1354
+ case "url": {
1355
+ host.declare(`declare ptr @scr_dyn_native_url(ptr)`);
1356
+ const r = B.tmp();
1357
+ B.line(`${r} = call ptr @scr_dyn_native_url(ptr %v)`);
1358
+ B.terminate(`ret ptr ${r}`);
1359
+ break;
1360
+ }
1361
+ case "regex": {
1362
+ host.declare(`declare ptr @scr_dyn_native_regex(ptr)`);
1363
+ const r = B.tmp();
1364
+ B.line(`${r} = call ptr @scr_dyn_native_regex(ptr %v)`);
1365
+ B.terminate(`ret ptr ${r}`);
1366
+ break;
1367
+ }
1368
+ case "map":
1369
+ case "set": {
1370
+ host.declare(`declare ptr @scr_dyn_native_${t.kind}(ptr)`);
1371
+ const r = B.tmp();
1372
+ B.line(`${r} = call ptr @scr_dyn_native_${t.kind}(ptr %v)`);
1373
+ B.terminate(`ret ptr ${r}`);
1374
+ break;
1375
+ }
1376
+ case "bigint": {
1377
+ host.declare(`declare ptr @scr_dyn_new_bigint(ptr)`);
1378
+ const r = B.tmp();
1379
+ B.line(`${r} = call ptr @scr_dyn_new_bigint(ptr %v)`);
1380
+ B.terminate(`ret ptr ${r}`);
1381
+ break;
1382
+ }
1383
+ case "symbol": {
1384
+ host.declare(`declare ptr @scr_dyn_new_symbol(ptr)`);
1385
+ const r = B.tmp();
1386
+ B.line(`${r} = call ptr @scr_dyn_new_symbol(ptr %v)`);
1387
+ B.terminate(`ret ptr ${r}`);
1388
+ break;
1389
+ }
1189
1390
  case "f64": {
1190
1391
  host.declare(`declare ptr @scr_dyn_new_num(double)`);
1191
1392
  const r = B.tmp();
@@ -1207,9 +1408,22 @@ export class LlDyn {
1207
1408
  B.terminate(`ret ptr ${r}`);
1208
1409
  break;
1209
1410
  }
1411
+ case "generator": {
1412
+ // Keep the suspended fiber and its channels by identity. Member
1413
+ // calls are generated from the exact capsule key by the frontend.
1414
+ const rc = vAdapters(host, t);
1415
+ const r = B.tmp();
1416
+ const snapshot = `${name}_snapshot`;
1417
+ const message = "property reflection on a native generator through an untyped value is not supported yet";
1418
+ host.declare(`declare void @scr_throw_error_msg_code(i32, ptr, ${host.sizeType}, ptr)`);
1419
+ this.defs.push(`define internal ptr @${snapshot}(ptr %v) ${FN_ATTRS} {`, `entry:`, ` call void @scr_throw_error_msg_code(i32 0, ptr ${host.cstr(message)}, ${host.sizeType} ${Buffer.byteLength(message, "utf8")}, ptr ${host.cstr("SC1071")})`, ` ret ptr null`, `}`, ``);
1420
+ B.line(`${r} = call ptr ${typedRefConstructor(host, t)}(ptr %v, ptr ${rc.retain}, ptr ${rc.release}, ptr ${host.cstr(key)}, ${host.sizeType} ${Buffer.byteLength(key, "utf8")}, ptr @${snapshot}, ptr null)`);
1421
+ B.terminate(`ret ptr ${r}`);
1422
+ break;
1423
+ }
1210
1424
  case "object": {
1211
1425
  const className = t.className;
1212
- if (className === "%Error") {
1426
+ if (host.isErrorClass(className)) {
1213
1427
  host.declare(`declare ptr @scr_dyn_from_error(ptr)`);
1214
1428
  const r = B.tmp();
1215
1429
  B.line(`${r} = call ptr @scr_dyn_from_error(ptr %v)`);
@@ -1222,9 +1436,8 @@ export class LlDyn {
1222
1436
  const adapter = host.liveDynRefAdapter(t);
1223
1437
  const rc = vAdapters(host, t);
1224
1438
  const keyLit = host.cstr(typeKey(t));
1225
- host.declare(`declare ptr @scr_dyn_new_typed_ref(ptr, ptr, ptr, ptr, ${host.sizeType}, ptr, ptr)`);
1226
1439
  const r = B.tmp();
1227
- B.line(`${r} = call ptr @scr_dyn_new_typed_ref(ptr %v, ptr ${rc.retain}, ptr ${rc.release}, ptr ${keyLit}, ${host.sizeType} ${Buffer.byteLength(typeKey(t), "utf8")}, ptr @${adapter.snapshot}, ptr ${adapter.commit})`);
1440
+ B.line(`${r} = call ptr ${typedRefConstructor(host, t)}(ptr %v, ptr ${rc.retain}, ptr ${rc.release}, ptr ${keyLit}, ${host.sizeType} ${Buffer.byteLength(typeKey(t), "utf8")}, ptr @${adapter.snapshot}, ptr ${adapter.commit})`);
1228
1441
  B.terminate(`ret ptr ${r}`);
1229
1442
  break;
1230
1443
  }
@@ -1233,6 +1446,13 @@ export class LlDyn {
1233
1446
  B.terminate(`ret ptr ${r}`);
1234
1447
  break;
1235
1448
  }
1449
+ case "classval": {
1450
+ host.declare(`declare ptr @scr_dyn_new_class(ptr, ptr)`);
1451
+ const r = B.tmp();
1452
+ B.line(`${r} = call ptr @scr_dyn_new_class(ptr %v, ptr ${host.cstr(key)})`);
1453
+ B.terminate(`ret ptr ${r}`);
1454
+ break;
1455
+ }
1236
1456
  case "func": {
1237
1457
  const r = B.tmp();
1238
1458
  B.line(`${r} = call ptr @${this.dynFuncBoxHelper(t)}(ptr %v, ptr null)`);
@@ -1240,11 +1460,9 @@ export class LlDyn {
1240
1460
  break;
1241
1461
  }
1242
1462
  case "bytes": {
1243
- if (t.elem !== "u8")
1244
- throw new InternalCompilerError(`llvm emitter bug: to-dyn of bytes<${t.elem}>`);
1245
- host.declare(`declare ptr @scr_dyn_new_bytes_copy(ptr)`);
1463
+ host.declare(`declare ptr @scr_dyn_new_bytes(ptr)`);
1246
1464
  const r = B.tmp();
1247
- B.line(`${r} = call ptr @scr_dyn_new_bytes_copy(ptr %v)`);
1465
+ B.line(`${r} = call ptr @scr_dyn_new_bytes(ptr %v)`);
1248
1466
  B.terminate(`ret ptr ${r}`);
1249
1467
  break;
1250
1468
  }
@@ -1268,7 +1486,7 @@ export class LlDyn {
1268
1486
  host.declare(`declare void @scr_dyn_obj_set(ptr, ptr, ${host.sizeType}, ptr)`);
1269
1487
  // CYCLE-CAPABLE shapes guard the deep copy: enter TRAPS on a value
1270
1488
  // already being converted (a cyclic value has no finite dyn copy —
1271
- // SEMANTICS.md; the C emitter's contract exactly).
1489
+ // SEMANTICS.md).
1272
1490
  const cyclicRec = traceAdapter(host, t) !== null;
1273
1491
  if (cyclicRec) {
1274
1492
  host.declare(`declare void @scr_dyn_from_enter(ptr)`);
@@ -1290,12 +1508,14 @@ export class LlDyn {
1290
1508
  }
1291
1509
  if (cyclicRec)
1292
1510
  B.line(`call void @scr_dyn_from_leave()`);
1511
+ host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
1512
+ B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
1293
1513
  B.terminate(`ret ptr ${d}`);
1294
1514
  break;
1295
1515
  }
1296
1516
  const d = B.tmp();
1297
1517
  const carriesListenerIdentity = shape.fields.some((f) => f.name === "handleEvent" && f.type.kind === "func");
1298
- if (carriesListenerIdentity) {
1518
+ if ((shape.fields.length === 0 && !shape.indexValue) || carriesListenerIdentity) {
1299
1519
  const rc = vAdapters(host, t);
1300
1520
  sourceAccessor = {
1301
1521
  name: `${name}_source_access`,
@@ -1391,6 +1611,8 @@ export class LlDyn {
1391
1611
  }
1392
1612
  if (cyclicRec)
1393
1613
  B.line(`call void @scr_dyn_from_leave()`);
1614
+ host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
1615
+ B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
1394
1616
  B.terminate(`ret ptr ${d}`);
1395
1617
  break;
1396
1618
  }
@@ -1411,6 +1633,20 @@ export class LlDyn {
1411
1633
  const len = B.tmp();
1412
1634
  B.line(`${len} = call double @scr_arr_len(ptr %v)`);
1413
1635
  B.countedLoop(len, (i) => {
1636
+ host.declare(`declare double @scr_arr_state(ptr, double)`);
1637
+ const state = B.tmp();
1638
+ const undefinedState = B.tmp();
1639
+ const undefinedLabel = B.newLabel("tda.undefined");
1640
+ const valueLabel = B.newLabel("tda.value");
1641
+ const doneLabel = B.newLabel("tda.done");
1642
+ B.line(`${state} = call double @scr_arr_state(ptr %v, double ${i})`);
1643
+ B.line(`${undefinedState} = fcmp oeq double ${state}, 2.0`); // SCR_ARR_UNDEFINED
1644
+ B.terminate(`br i1 ${undefinedState}, label %${undefinedLabel}, label %${valueLabel}`);
1645
+ B.startBlock(undefinedLabel);
1646
+ const retained = this.retainDyn(B, this.undef(B));
1647
+ B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${retained})`);
1648
+ B.terminate(`br label %${doneLabel}`);
1649
+ B.startBlock(valueLabel);
1414
1650
  if (elem.kind === "f64" || elem.kind === "bool") {
1415
1651
  const acc = elem.kind;
1416
1652
  const accTy = elem.kind === "f64" ? "double" : "i1";
@@ -1437,9 +1673,13 @@ export class LlDyn {
1437
1673
  B.line(`call void @scr_dyn_arr_push(ptr ${d}, ptr ${conv})`);
1438
1674
  B.line(`call void ${releaseSym(host, elem)}(ptr ${e})`);
1439
1675
  }
1676
+ B.terminate(`br label %${doneLabel}`);
1677
+ B.startBlock(doneLabel);
1440
1678
  });
1441
1679
  if (cyclicArr)
1442
1680
  B.line(`call void @scr_dyn_from_leave()`);
1681
+ host.declare(`declare ptr @scr_dyn_mark_snapshot(ptr)`);
1682
+ B.line(`call ptr @scr_dyn_mark_snapshot(ptr ${d})`);
1443
1683
  B.terminate(`ret ptr ${d}`);
1444
1684
  break;
1445
1685
  }
@@ -1549,7 +1789,7 @@ export class LlDyn {
1549
1789
  }
1550
1790
  this.defs.push(`define internal ptr @${name}(${this.valTy(t)} %v) ${FN_ATTRS} { ; to-dyn ${key}`, B.render(), `}`, ``);
1551
1791
  if (sourceAccessor) {
1552
- this.defs.push(`define internal ptr @${sourceAccessor.name}(ptr %v, i1 %materialize) ${FN_ATTRS} { ; live listener source ${key}`, `entry:`, ` br i1 %materialize, label %snapshot, label %release`, `snapshot:`, ` %d = call ptr @${name}(ptr %v)`, ` ret ptr %d`, `release:`, ` call void ${sourceAccessor.release}(ptr %v)`, ` ret ptr null`, `}`, ``);
1792
+ this.defs.push(`define internal ptr @${sourceAccessor.name}(ptr %v, i1 %materialize) ${FN_ATTRS} { ; record source ${key}`, `entry:`, ` br i1 %materialize, label %snapshot, label %release`, `snapshot:`, ` %d = call ptr @${name}(ptr %v)`, ` ret ptr %d`, `release:`, ` call void ${sourceAccessor.release}(ptr %v)`, ` ret ptr null`, `}`, ``);
1553
1793
  }
1554
1794
  return name;
1555
1795
  }
@@ -1571,9 +1811,10 @@ export class LlDyn {
1571
1811
  const B = new BlockBuilder();
1572
1812
  host.declare(`declare void @scr_promise_fulfill_ref(ptr, ptr, ptr, ptr, ptr)`);
1573
1813
  host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
1814
+ host.declare(`declare void @scr_dyn_trace_v(ptr, ptr, ptr)`);
1574
1815
  host.declare(`declare void @scr_dyn_release_v(ptr)`);
1575
1816
  const fulfill = (dv) => {
1576
- B.line(`call void @scr_promise_fulfill_ref(ptr %dst, ptr ${dv}, ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr null)`);
1817
+ B.line(`call void @scr_promise_fulfill_ref(ptr %dst, ptr ${dv}, ptr @scr_dyn_retain_v, ptr @scr_dyn_release_v, ptr @scr_dyn_trace_v)`);
1577
1818
  };
1578
1819
  switch (inner.kind) {
1579
1820
  case "void":
@@ -1660,10 +1901,17 @@ export class LlDyn {
1660
1901
  const kd = this.kindOf(B, "%d");
1661
1902
  const done = B.newLabel("ds.d");
1662
1903
  const labels = new Map();
1663
- 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]) {
1904
+ 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, DYN_KIND.PROXY, DYN_KIND.BIGINT, DYN_KIND.SYMBOL]) {
1664
1905
  labels.set(k, B.newLabel(`ds.k${k}`));
1665
1906
  }
1666
- B.terminate(`switch i32 ${kd}, label %${done} [ ${[...labels].map(([k, l]) => `i32 ${k}, label %${l}`).join(" ")} ]`);
1907
+ const branches = [];
1908
+ for (const [kind, label] of labels)
1909
+ branches.push(`i32 ${kind}, label %${label}`);
1910
+ B.terminate(`switch i32 ${kd}, label %${done} [ ${branches.join(" ")} ]`);
1911
+ B.startBlock(labels.get(DYN_KIND.PROXY));
1912
+ host.declare(`declare void @scr_dyn_proxy_unsupported(ptr)`);
1913
+ B.line(`call void @scr_dyn_proxy_unsupported(ptr ${host.cstr("string conversion")})`);
1914
+ B.br(done);
1667
1915
  B.startBlock(labels.get(DYN_KIND.JSVAL));
1668
1916
  {
1669
1917
  // Island-held: the engine's own ToString (a bridged failure
@@ -1696,6 +1944,24 @@ export class LlDyn {
1696
1944
  B.line(`call void @scr_jb_puts(ptr %b, ptr ${s})`);
1697
1945
  B.br(done);
1698
1946
  }
1947
+ B.startBlock(labels.get(DYN_KIND.BIGINT));
1948
+ {
1949
+ host.declare(`declare ptr @scr_bigint_to_string(ptr, double)`);
1950
+ const v = this.payloadOf(B, "%d", "ptr");
1951
+ const s = B.tmp();
1952
+ B.line(`${s} = call ptr @scr_bigint_to_string(ptr ${v}, double ${f64Lit(10)})`);
1953
+ this.putScrStr(B, "%b", s);
1954
+ B.line(`call void @scr_str_release(ptr ${s})`);
1955
+ B.br(done);
1956
+ }
1957
+ B.startBlock(labels.get(DYN_KIND.SYMBOL));
1958
+ {
1959
+ host.declare(`declare ptr @scr_dyn_string_coerce(ptr)`);
1960
+ const s = B.tmp();
1961
+ B.line(`${s} = call ptr @scr_dyn_string_coerce(ptr %d)`);
1962
+ B.line(`call void @scr_str_release(ptr ${s})`);
1963
+ B.br(done);
1964
+ }
1699
1965
  B.startBlock(labels.get(DYN_KIND.NUM));
1700
1966
  {
1701
1967
  // String(n): NaN/Infinity spelled out, not the JSON null.
@@ -1862,35 +2128,11 @@ export class LlDyn {
1862
2128
  B.br(done);
1863
2129
  B.startBlock(lJoin);
1864
2130
  const bts = this.payloadOf(B, "%d", "ptr");
1865
- const blenp = B.tmp();
1866
- const blen = B.tmp();
1867
- const bdatap = B.tmp();
1868
- const bdata = B.tmp();
1869
- B.line(`${blenp} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(8, 4)} ; ->len`);
1870
- B.line(`${blen} = load ${this.S}, ptr ${blenp}`);
1871
- B.line(`${bdatap} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(24, 12)} ; ->data`);
1872
- B.line(`${bdata} = load ptr, ptr ${bdatap}`);
1873
- this.i64Loop(B, "ds.by", blen, (i) => {
1874
- const nz = B.tmp();
1875
- B.line(`${nz} = icmp ugt ${this.S} ${i}, 0`);
1876
- const lcm = B.newLabel("ds.bc");
1877
- const lv = B.newLabel("ds.bv");
1878
- B.condBr(nz, lcm, lv);
1879
- B.startBlock(lcm);
1880
- B.line(`call void @scr_jb_putc(ptr %b, i8 44)`);
1881
- B.br(lv);
1882
- B.startBlock(lv);
1883
- const cp = B.tmp();
1884
- const c = B.tmp();
1885
- const cd = B.tmp();
1886
- B.line(`${cp} = getelementptr inbounds i8, ptr ${bdata}, ${this.S} ${i}`);
1887
- B.line(`${c} = load i8, ptr ${cp}`);
1888
- B.line(`${cd} = uitofp i8 ${c} to double`);
1889
- const s = B.tmp();
1890
- B.line(`${s} = call ptr @scr_f64_to_scrstr(double ${cd})`);
1891
- this.putScrStr(B, "%b", s);
1892
- B.line(`call void @scr_str_release(ptr ${s})`);
1893
- });
2131
+ host.declare(`declare ptr @scr_bytes_join(ptr, ptr)`);
2132
+ const joined = B.tmp();
2133
+ B.line(`${joined} = call ptr @scr_bytes_join(ptr ${bts}, ptr ${host.internLiteral(",")})`);
2134
+ this.putScrStr(B, "%b", joined);
2135
+ B.line(`call void @scr_str_release(ptr ${joined})`);
1894
2136
  B.br(done);
1895
2137
  }
1896
2138
  B.startBlock(labels.get(DYN_KIND.FUNC));
@@ -1914,8 +2156,14 @@ export class LlDyn {
1914
2156
  B.br(done);
1915
2157
  }
1916
2158
  B.startBlock(labels.get(DYN_KIND.HANDLE));
1917
- this.puts(B, "%b", "[object Object]");
1918
- B.br(done);
2159
+ {
2160
+ host.declare(`declare ptr @scr_dyn_to_string(ptr, ptr)`);
2161
+ const s = B.tmp();
2162
+ B.line(`${s} = call ptr @scr_dyn_to_string(ptr %d, ptr null)`);
2163
+ this.putScrStr(B, "%b", s);
2164
+ B.line(`call void @scr_str_release(ptr ${s})`);
2165
+ B.br(done);
2166
+ }
1919
2167
  B.startBlock(labels.get(DYN_KIND.PROMISE));
1920
2168
  // Object.prototype.toString with the Promise @@toStringTag.
1921
2169
  this.puts(B, "%b", "[object Promise]");
@@ -2062,6 +2310,47 @@ export class LlDyn {
2062
2310
  /* ── the keyed read (dynKeyGetHelper, ported) ──────────────────────── */
2063
2311
  /** `sc_dyn_key_get(ptr d, ptr k, i1 opt) -> ptr` — d[k] on a dyn value.
2064
2312
  * Result +1; throws on non-optional nullish receivers. */
2313
+ dynComputedKeyGetHelper() {
2314
+ const name = "sc_dyn_computed_key_get";
2315
+ if (this.helperMemo.has(name))
2316
+ return name;
2317
+ this.helperMemo.set(name, name);
2318
+ const B = new BlockBuilder();
2319
+ const host = this.host;
2320
+ const stringHelper = this.dynKeyGetHelper();
2321
+ host.declare(`declare ptr @scr_dyn_property_key_value(ptr)`);
2322
+ host.declare(`declare ptr @scr_dyn_symbol_key_get(ptr, ptr, i1 zeroext)`);
2323
+ host.declare(`declare void @scr_dyn_release(ptr)`);
2324
+ const key = B.tmp();
2325
+ B.line(`${key} = call ptr @scr_dyn_property_key_value(ptr %key)`);
2326
+ const missing = B.tmp();
2327
+ B.line(`${missing} = icmp eq ptr ${key}, null`);
2328
+ const fail = B.newLabel("kg.fail");
2329
+ const dispatch = B.newLabel("kg.dispatch");
2330
+ B.condBr(missing, fail, dispatch);
2331
+ B.startBlock(fail);
2332
+ B.terminate("ret ptr null");
2333
+ B.startBlock(dispatch);
2334
+ const kind = this.kindOf(B, key);
2335
+ const symbol = B.tmp();
2336
+ B.line(`${symbol} = icmp eq i32 ${kind}, ${DYN_KIND.SYMBOL}`);
2337
+ const sym = B.newLabel("kg.symbol");
2338
+ const str = B.newLabel("kg.string");
2339
+ B.condBr(symbol, sym, str);
2340
+ B.startBlock(sym);
2341
+ const sv = B.tmp();
2342
+ B.line(`${sv} = call ptr @scr_dyn_symbol_key_get(ptr %d, ptr ${key}, i1 %opt)`);
2343
+ B.line(`call void @scr_dyn_release(ptr ${key})`);
2344
+ B.terminate(`ret ptr ${sv}`);
2345
+ B.startBlock(str);
2346
+ const text = this.payloadOf(B, key, "ptr");
2347
+ const value = B.tmp();
2348
+ B.line(`${value} = call ptr @${stringHelper}(ptr %d, ptr ${text}, i1 %opt)`);
2349
+ B.line(`call void @scr_dyn_release(ptr ${key})`);
2350
+ B.terminate(`ret ptr ${value}`);
2351
+ this.defs.push(`define internal ptr @${name}(ptr %d, ptr %key, i1 zeroext %opt) ${FN_ATTRS} {`, B.render(), "}", "");
2352
+ return name;
2353
+ }
2065
2354
  dynKeyGetHelper() {
2066
2355
  const memoKey = "%dynKeyGet";
2067
2356
  const existing = this.dynBuilders.get(memoKey);
@@ -2122,6 +2411,19 @@ export class LlDyn {
2122
2411
  B.terminate(`ret ptr null`);
2123
2412
  B.startBlock(lNext);
2124
2413
  }
2414
+ {
2415
+ const isSymbol = B.tmp();
2416
+ B.line(`${isSymbol} = icmp eq i32 ${kd}, ${DYN_KIND.SYMBOL}`);
2417
+ const lSymbol = B.newLabel("kg.sym");
2418
+ const lNext = B.newLabel("kg.n");
2419
+ B.condBr(isSymbol, lSymbol, lNext);
2420
+ B.startBlock(lSymbol);
2421
+ host.declare(`declare ptr @scr_dyn_symbol_get(ptr, ptr)`);
2422
+ const r = B.tmp();
2423
+ B.line(`${r} = call ptr @scr_dyn_symbol_get(ptr %d, ptr %k)`);
2424
+ B.terminate(`ret ptr ${r}`);
2425
+ B.startBlock(lNext);
2426
+ }
2125
2427
  // Typed stream capsules expose their one cached, refreshed dyn view to
2126
2428
  // ordinary property reads while the capsule itself keeps identity.
2127
2429
  {
@@ -2144,6 +2446,19 @@ export class LlDyn {
2144
2446
  // ISLAND-held receivers: o[k] reads the REAL engine property (getters
2145
2447
  // included, throws bridged catchably) and the result wraps back
2146
2448
  // scalar-normalized — the routed keyed read that retired the fence.
2449
+ {
2450
+ const isProxy = B.tmp();
2451
+ B.line(`${isProxy} = icmp eq i32 ${kd}, ${DYN_KIND.PROXY}`);
2452
+ const lProxy = B.newLabel("kg.proxy");
2453
+ const lNext = B.newLabel("kg.n");
2454
+ B.condBr(isProxy, lProxy, lNext);
2455
+ B.startBlock(lProxy);
2456
+ host.declare(`declare ptr @scr_dyn_proxy_get(ptr, ptr)`);
2457
+ const r = B.tmp();
2458
+ B.line(`${r} = call ptr @scr_dyn_proxy_get(ptr %d, ptr %k)`);
2459
+ B.terminate(`ret ptr ${r}`);
2460
+ B.startBlock(lNext);
2461
+ }
2147
2462
  {
2148
2463
  const isJv = B.tmp();
2149
2464
  B.line(`${isJv} = icmp eq i32 ${kd}, ${DYN_KIND.JSVAL}`);
@@ -2288,45 +2603,10 @@ export class LlDyn {
2288
2603
  const lNext = B.newLabel("kg.n");
2289
2604
  B.condBr(isB, lB, lNext);
2290
2605
  B.startBlock(lB);
2291
- host.declare(`declare ptr @scr_dyn_new_num(double)`);
2292
- const bts = this.payloadOf(B, "%d", "ptr");
2293
- const blenp = B.tmp();
2294
- const blen = B.tmp();
2295
- B.line(`${blenp} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(8, 4)} ; ->len`);
2296
- B.line(`${blen} = load ${host.sizeType}, ptr ${blenp}`);
2297
- const lLen = B.newLabel("kg.bl");
2298
- const lIdx = B.newLabel("kg.bi");
2299
- B.condBr(lenHit, lLen, lIdx);
2300
- B.startBlock(lLen);
2301
- const lenD = B.tmp();
2302
- const r0 = B.tmp();
2303
- B.line(`${lenD} = uitofp ${host.sizeType} ${blen} to double`);
2304
- B.line(`${r0} = call ptr @scr_dyn_new_num(double ${lenD})`);
2305
- B.terminate(`ret ptr ${r0}`);
2306
- B.startBlock(lIdx);
2307
- const inRange = B.tmp();
2308
- const hit = B.tmp();
2309
- B.line(`${inRange} = icmp ult ${host.sizeType} ${idx}, ${blen}`);
2310
- B.line(`${hit} = and i1 ${digits}, ${inRange}`);
2311
- const lHit = B.newLabel("kg.bh");
2312
- const lMiss = B.newLabel("kg.bm");
2313
- B.condBr(hit, lHit, lMiss);
2314
- B.startBlock(lHit);
2315
- const bdatap = B.tmp();
2316
- const bdata = B.tmp();
2317
- B.line(`${bdatap} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(24, 12)} ; ->data`);
2318
- B.line(`${bdata} = load ptr, ptr ${bdatap}`);
2319
- const bp = B.tmp();
2320
- const bv = B.tmp();
2321
- const bd = B.tmp();
2322
- const r1 = B.tmp();
2323
- B.line(`${bp} = getelementptr inbounds i8, ptr ${bdata}, ${host.sizeType} ${idx}`);
2324
- B.line(`${bv} = load i8, ptr ${bp}`);
2325
- B.line(`${bd} = uitofp i8 ${bv} to double`);
2326
- B.line(`${r1} = call ptr @scr_dyn_new_num(double ${bd})`);
2327
- B.terminate(`ret ptr ${r1}`);
2328
- B.startBlock(lMiss);
2329
- retainUndef();
2606
+ host.declare(`declare ptr @scr_dyn_bytes_key_get(ptr, ptr)`);
2607
+ const result = B.tmp();
2608
+ B.line(`${result} = call ptr @scr_dyn_bytes_key_get(ptr %d, ptr %k)`);
2609
+ B.terminate(`ret ptr ${result}`);
2330
2610
  B.startBlock(lNext);
2331
2611
  }
2332
2612
  // FUNC: own props (defineProperties writes), then name/length.
@@ -2429,6 +2709,15 @@ export class LlDyn {
2429
2709
  B.line(`call void @scr_str_release(ptr ${ch})`);
2430
2710
  B.terminate(`ret ptr ${r2}`);
2431
2711
  B.startBlock(lMiss);
2712
+ const lArrNamed = B.newLabel("kg.an");
2713
+ const lOther = B.newLabel("kg.ao");
2714
+ B.condBr(isA, lArrNamed, lOther);
2715
+ B.startBlock(lArrNamed);
2716
+ host.declare(`declare ptr @scr_dyn_arr_named_get(ptr, ptr)`);
2717
+ const named = B.tmp();
2718
+ B.line(`${named} = call ptr @scr_dyn_arr_named_get(ptr %d, ptr %k)`);
2719
+ B.terminate(`ret ptr ${named}`);
2720
+ B.startBlock(lOther);
2432
2721
  retainUndef();
2433
2722
  }
2434
2723
  B.startBlock(lNext);
@@ -2647,7 +2936,7 @@ export class LlDyn {
2647
2936
  B.line(`store ptr ${r2}, ptr ${itemSlot}`);
2648
2937
  B.br(lPush);
2649
2938
  }
2650
- // BYTES: by byte.
2939
+ // BYTES: by numeric element.
2651
2940
  B.startBlock(lBy);
2652
2941
  {
2653
2942
  const bts = this.payloadOf(B, "%d", "ptr");
@@ -2661,17 +2950,12 @@ export class LlDyn {
2661
2950
  const lMiss = B.newLabel("din.bm");
2662
2951
  B.condBr(inR, lHit, lMiss);
2663
2952
  B.startBlock(lHit);
2664
- const bdatap = B.tmp();
2665
- const bdata = B.tmp();
2666
- B.line(`${bdatap} = getelementptr inbounds i8, ptr ${bts}, i64 ${this.abiOffset(24, 12)} ; ->data`);
2667
- B.line(`${bdata} = load ptr, ptr ${bdatap}`);
2668
- const bp = B.tmp();
2669
- const bv = B.tmp();
2953
+ host.declare(`declare double @scr_bytes_get(ptr, double)`);
2954
+ const index = B.tmp();
2670
2955
  const bd = B.tmp();
2671
2956
  const r = B.tmp();
2672
- B.line(`${bp} = getelementptr inbounds i8, ptr ${bdata}, ${host.sizeType} ${i}`);
2673
- B.line(`${bv} = load i8, ptr ${bp}`);
2674
- B.line(`${bd} = uitofp i8 ${bv} to double`);
2957
+ B.line(`${index} = uitofp ${host.sizeType} ${i} to double`);
2958
+ B.line(`${bd} = call double @scr_bytes_get(ptr ${bts}, double ${index})`);
2675
2959
  B.line(`${r} = call ptr @scr_dyn_new_num(double ${bd})`);
2676
2960
  B.line(`store ptr ${r}, ptr ${itemSlot}`);
2677
2961
  B.br(lPush);
@@ -2793,7 +3077,55 @@ export class LlDyn {
2793
3077
  const host = this.host;
2794
3078
  const B = new BlockBuilder();
2795
3079
  const argNames = [];
3080
+ const typedRest = t.rest === true && t.restAbi === "typed";
3081
+ const packTail = (start) => {
3082
+ host.declare(`declare ptr @scr_dyn_new_arr()`);
3083
+ host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
3084
+ const packed = B.tmp();
3085
+ B.line(`${packed} = call ptr @scr_dyn_new_arr()`);
3086
+ const riSlot = B.slot();
3087
+ B.entryAllocas.push(`${riSlot} = alloca ${host.sizeType}`);
3088
+ B.line(`store ${host.sizeType} ${start}, ptr ${riSlot}`);
3089
+ const lc = B.newLabel("dfk.rc");
3090
+ const lb = B.newLabel("dfk.rb");
3091
+ const le = B.newLabel("dfk.re");
3092
+ B.br(lc);
3093
+ B.startBlock(lc);
3094
+ const ri = B.tmp();
3095
+ const cont = B.tmp();
3096
+ B.line(`${ri} = load ${host.sizeType}, ptr ${riSlot}`);
3097
+ B.line(`${cont} = icmp ult ${host.sizeType} ${ri}, %argc`);
3098
+ B.condBr(cont, lb, le);
3099
+ B.startBlock(lb);
3100
+ const ap = B.tmp();
3101
+ const av = B.tmp();
3102
+ B.line(`${ap} = getelementptr inbounds ptr, ptr %args, ${host.sizeType} ${ri}`);
3103
+ B.line(`${av} = load ptr, ptr ${ap}`);
3104
+ const rv = this.retainDyn(B, av);
3105
+ B.line(`call void @scr_dyn_arr_push(ptr ${packed}, ptr ${rv})`);
3106
+ const ri2 = B.tmp();
3107
+ B.line(`${ri2} = add ${host.sizeType} ${ri}, 1`);
3108
+ B.line(`store ${host.sizeType} ${ri2}, ptr ${riSlot}`);
3109
+ B.br(lc);
3110
+ B.startBlock(le);
3111
+ return packed;
3112
+ };
2796
3113
  t.params.forEach((p, i) => {
3114
+ if (typedRest && i === t.params.length - 1) {
3115
+ const packed = packTail(i);
3116
+ const a = B.tmp();
3117
+ B.line(`${a} = call ${this.valTy(p)} @${this.dynCheckHelper(p)}(ptr ${packed}, ptr null)`);
3118
+ host.declare(`declare void @scr_dyn_release(ptr)`);
3119
+ B.line(`call void @scr_dyn_release(ptr ${packed})`);
3120
+ this.pendingBail(B, "dfk.rest", () => {
3121
+ t.params.slice(0, i).forEach((q, j) => {
3122
+ if (isRefCounted(q))
3123
+ B.line(`call void ${releaseSym(host, q)}(ptr ${argNames[j]})`);
3124
+ });
3125
+ }, "ptr null");
3126
+ argNames.push(a);
3127
+ return;
3128
+ }
2797
3129
  // JS arity: a missing argument IS the undefined dyn value.
2798
3130
  const adSlot = B.slot();
2799
3131
  B.entryAllocas.push(`${adSlot} = alloca ptr`);
@@ -2867,38 +3199,7 @@ export class LlDyn {
2867
3199
  });
2868
3200
  // VARIADIC (rest-marked) signatures: one extra trailing dyn-array
2869
3201
  // param carries the call's arguments from index params.length on.
2870
- let rest = null;
2871
- if (t.rest) {
2872
- host.declare(`declare ptr @scr_dyn_new_arr()`);
2873
- host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
2874
- rest = B.tmp();
2875
- B.line(`${rest} = call ptr @scr_dyn_new_arr()`);
2876
- const riSlot = B.slot();
2877
- B.entryAllocas.push(`${riSlot} = alloca ${host.sizeType}`);
2878
- B.line(`store ${host.sizeType} ${t.argumentsAll ? 0 : t.params.length}, ptr ${riSlot}`);
2879
- const lc = B.newLabel("dfk.rc");
2880
- const lb = B.newLabel("dfk.rb");
2881
- const le = B.newLabel("dfk.re");
2882
- B.br(lc);
2883
- B.startBlock(lc);
2884
- const ri = B.tmp();
2885
- const cont = B.tmp();
2886
- B.line(`${ri} = load ${host.sizeType}, ptr ${riSlot}`);
2887
- B.line(`${cont} = icmp ult ${host.sizeType} ${ri}, %argc`);
2888
- B.condBr(cont, lb, le);
2889
- B.startBlock(lb);
2890
- const ap = B.tmp();
2891
- const av = B.tmp();
2892
- B.line(`${ap} = getelementptr inbounds ptr, ptr %args, ${host.sizeType} ${ri}`);
2893
- B.line(`${av} = load ptr, ptr ${ap}`);
2894
- const rv = this.retainDyn(B, av);
2895
- B.line(`call void @scr_dyn_arr_push(ptr ${rest}, ptr ${rv})`);
2896
- const ri2 = B.tmp();
2897
- B.line(`${ri2} = add ${host.sizeType} ${ri}, 1`);
2898
- B.line(`store ${host.sizeType} ${ri2}, ptr ${riSlot}`);
2899
- B.br(lc);
2900
- B.startBlock(le);
2901
- }
3202
+ const rest = t.rest && !typedRest ? packTail(t.argumentsAll ? 0 : t.params.length) : null;
2902
3203
  // The closure CONSUMES its params (+1 each moved in).
2903
3204
  const fnp = B.tmp();
2904
3205
  const fn = B.tmp();
@@ -2948,7 +3249,7 @@ export class LlDyn {
2948
3249
  host.declare(`declare ptr @scr_closure_retain_v(ptr)`);
2949
3250
  host.declare(`declare ptr @scr_dyn_new_func(ptr, ptr, i32, ptr, ptr)`);
2950
3251
  const sigLit = host.cstr(key);
2951
- this.defs.push(`define internal ptr @${name}(ptr %v, ptr %fname) ${FN_ATTRS} { ; box ${key} into dyn`, `entry:`, ` %c = call ptr @scr_closure_retain_v(ptr %v)`, ` %r = call ptr @scr_dyn_new_func(ptr %c, ptr @${thunk}, i32 ${t.params.length}, ptr ${sigLit}, ptr %fname)`, ` ret ptr %r`, `}`, ``);
3252
+ this.defs.push(`define internal ptr @${name}(ptr %v, ptr %fname) ${FN_ATTRS} { ; box ${key} into dyn`, `entry:`, ` %c = call ptr @scr_closure_retain_v(ptr %v)`, ` %r = call ptr @scr_dyn_new_func(ptr %c, ptr @${thunk}, i32 ${t.params.length - (t.restAbi === "typed" ? 1 : 0)}, ptr ${sigLit}, ptr %fname)`, ` ret ptr %r`, `}`, ``);
2952
3253
  return name;
2953
3254
  }
2954
3255
  /** The adapter closure body for one TARGET signature: caps[0] is an
@@ -2977,7 +3278,30 @@ export class LlDyn {
2977
3278
  // argument (borrowed by the conversion) and releases.
2978
3279
  let argsPtr = "null";
2979
3280
  const argVals = [];
2980
- if (t.params.length > 0) {
3281
+ const checkedRest = t.rest === true && t.restAbi === undefined;
3282
+ let packed = null;
3283
+ if (checkedRest) {
3284
+ host.declare(`declare ptr @scr_dyn_apply(ptr, ptr, ptr)`);
3285
+ host.declare(`declare ptr @scr_dyn_new_arr()`);
3286
+ host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
3287
+ host.declare(`declare void @scr_dyn_arr_push_spread(ptr, ptr, ptr)`);
3288
+ packed = t.argumentsAll ? "%rest" : B.tmp();
3289
+ if (!t.argumentsAll)
3290
+ B.line(`${packed} = call ptr @scr_dyn_new_arr()`);
3291
+ t.params.forEach((p, i) => {
3292
+ if (!t.argumentsAll) {
3293
+ const v = this.toDynExpr(B, p, `%a${i}`);
3294
+ B.line(`call void @scr_dyn_arr_push(ptr ${packed}, ptr ${v})`);
3295
+ }
3296
+ if (isRefCounted(p))
3297
+ B.line(`call void ${releaseSym(host, p)}(ptr %a${i})`);
3298
+ });
3299
+ if (!t.argumentsAll) {
3300
+ B.line(`call void @scr_dyn_arr_push_spread(ptr ${packed}, ptr %rest, ptr ${host.cstr("")})`);
3301
+ B.line(`call void @scr_dyn_release(ptr %rest)`);
3302
+ }
3303
+ }
3304
+ else if (t.params.length > 0) {
2981
3305
  const arr = B.slot();
2982
3306
  B.entryAllocas.push(`${arr} = alloca [${t.params.length} x ptr]`);
2983
3307
  t.params.forEach((p, i) => {
@@ -2994,7 +3318,12 @@ export class LlDyn {
2994
3318
  // The kind is FUNC by construction; `what` is unreachable — spelled
2995
3319
  // anyway (the C's "value").
2996
3320
  const r = B.tmp();
2997
- B.line(`${r} = call ptr @scr_dyn_call(ptr ${fnv}, ptr ${argsPtr}, ${host.sizeType} ${t.params.length}, ptr ${host.cstr("value")})`);
3321
+ if (packed) {
3322
+ B.line(`${r} = call ptr @scr_dyn_apply(ptr ${fnv}, ptr ${packed}, ptr ${host.cstr("value")})`);
3323
+ B.line(`call void @scr_dyn_release(ptr ${packed})`);
3324
+ }
3325
+ else
3326
+ B.line(`${r} = call ptr @scr_dyn_call(ptr ${fnv}, ptr ${argsPtr}, ${host.sizeType} ${t.params.length}, ptr ${host.cstr("value")})`);
2998
3327
  B.line(`call void @scr_dyn_release(ptr ${fnv})`);
2999
3328
  for (const v of argVals)
3000
3329
  B.line(`call void @scr_dyn_release(ptr ${v})`);
@@ -3014,7 +3343,7 @@ export class LlDyn {
3014
3343
  B.line(`call void @scr_dyn_release(ptr ${r})`);
3015
3344
  B.terminate(`ret ${this.valTy(t.ret)} ${out}`);
3016
3345
  }
3017
- const params = ["ptr %sc_env", ...t.params.map((p, i) => `${this.valTy(p)} %a${i}`)].join(", ");
3346
+ const params = ["ptr %sc_env", ...t.params.map((p, i) => `${this.valTy(p)} %a${i}`), ...(checkedRest ? ["ptr %rest"] : [])].join(", ");
3018
3347
  this.defs.push(`define internal ${retTy === "i1" ? "zeroext i1" : retTy} @${name}(${params}) ${FN_ATTRS} { ; dyn fn adapter to ${key}`, B.render(), `}`, ``);
3019
3348
  return name;
3020
3349
  }