@scriptc/compiler 0.4.5 → 0.4.6

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 (1200) hide show
  1. package/ambient/node-fallback/assert-strict.d.ts +47 -0
  2. package/ambient/node-fallback/assert.d.ts +86 -0
  3. package/ambient/node-fallback/async_hooks.d.ts +41 -0
  4. package/ambient/node-fallback/buffer.d.ts +23 -0
  5. package/ambient/node-fallback/child_process.d.ts +242 -0
  6. package/ambient/node-fallback/cluster.d.ts +17 -0
  7. package/ambient/node-fallback/constants.d.ts +15 -0
  8. package/ambient/node-fallback/crypto.d.ts +837 -0
  9. package/ambient/node-fallback/dgram.d.ts +58 -0
  10. package/ambient/node-fallback/diagnostics_channel.d.ts +87 -0
  11. package/ambient/node-fallback/dns-promises.d.ts +27 -0
  12. package/ambient/node-fallback/dns.d.ts +65 -0
  13. package/ambient/node-fallback/events.d.ts +60 -0
  14. package/ambient/node-fallback/fs-promises.d.ts +225 -0
  15. package/ambient/node-fallback/fs.d.ts +641 -0
  16. package/ambient/node-fallback/graceful-fs.d.ts +9 -0
  17. package/ambient/node-fallback/http.d.ts +326 -0
  18. package/ambient/node-fallback/http2.d.ts +816 -0
  19. package/ambient/node-fallback/https.d.ts +59 -0
  20. package/ambient/node-fallback/module.d.ts +10 -0
  21. package/ambient/node-fallback/net.d.ts +374 -0
  22. package/ambient/node-fallback/os.d.ts +288 -0
  23. package/ambient/node-fallback/path-posix.d.ts +22 -0
  24. package/ambient/node-fallback/path-win32.d.ts +22 -0
  25. package/ambient/node-fallback/path.d.ts +55 -0
  26. package/ambient/node-fallback/process.d.ts +11 -0
  27. package/ambient/node-fallback/punycode.d.ts +18 -0
  28. package/ambient/node-fallback/querystring.d.ts +55 -0
  29. package/ambient/node-fallback/stream-consumers.d.ts +21 -0
  30. package/ambient/node-fallback/stream-promises.d.ts +28 -0
  31. package/ambient/node-fallback/stream-web.d.ts +36 -0
  32. package/ambient/node-fallback/stream.d.ts +644 -0
  33. package/ambient/node-fallback/string_decoder.d.ts +20 -0
  34. package/ambient/node-fallback/test.d.ts +236 -0
  35. package/ambient/node-fallback/timers-promises.d.ts +31 -0
  36. package/ambient/node-fallback/timers.d.ts +28 -0
  37. package/ambient/node-fallback/tls.d.ts +169 -0
  38. package/ambient/node-fallback/url.d.ts +95 -0
  39. package/ambient/node-fallback/util-types.d.ts +50 -0
  40. package/ambient/node-fallback/util.d.ts +416 -0
  41. package/ambient/node-fallback/v8.d.ts +43 -0
  42. package/ambient/node-fallback/worker_threads.d.ts +113 -0
  43. package/ambient/node-fallback/zlib.d.ts +422 -0
  44. package/ambient/scriptc-node-fallback.d.ts +224 -6688
  45. package/dist/backend/cycle-analysis.js +4 -0
  46. package/dist/backend/cycle-analysis.js.map +1 -1
  47. package/dist/backend/executable-features.d.ts +1 -1
  48. package/dist/backend/executable-features.js +15 -2
  49. package/dist/backend/executable-features.js.map +1 -1
  50. package/dist/backend/huge-text.d.ts +16 -0
  51. package/dist/backend/huge-text.js +103 -0
  52. package/dist/backend/huge-text.js.map +1 -0
  53. package/dist/backend/huge-text.test.d.ts +1 -0
  54. package/dist/backend/huge-text.test.js +73 -0
  55. package/dist/backend/huge-text.test.js.map +1 -0
  56. package/dist/backend/library-pack.js +1 -1
  57. package/dist/backend/library-pack.js.map +1 -1
  58. package/dist/backend/link-plan-core.d.ts +10 -0
  59. package/dist/backend/link-plan-core.js +14 -2
  60. package/dist/backend/link-plan-core.js.map +1 -1
  61. package/dist/backend/link-plan-core.test.d.ts +1 -0
  62. package/dist/backend/link-plan-core.test.js +20 -0
  63. package/dist/backend/link-plan-core.test.js.map +1 -0
  64. package/dist/backend/link-plan.d.ts +8 -0
  65. package/dist/backend/link-plan.js +7 -0
  66. package/dist/backend/link-plan.js.map +1 -1
  67. package/dist/backend/linker.js +37 -14
  68. package/dist/backend/linker.js.map +1 -1
  69. package/dist/backend/lld.d.ts +13 -0
  70. package/dist/backend/lld.js +18 -1
  71. package/dist/backend/lld.js.map +1 -1
  72. package/dist/backend/lld.test.js +7 -1
  73. package/dist/backend/lld.test.js.map +1 -1
  74. package/dist/backend/llvm/alloc.d.ts +2 -0
  75. package/dist/backend/llvm/alloc.js +1 -1
  76. package/dist/backend/llvm/alloc.js.map +1 -1
  77. package/dist/backend/llvm/arenas.d.ts +78 -0
  78. package/dist/backend/llvm/arenas.js +313 -0
  79. package/dist/backend/llvm/arenas.js.map +1 -0
  80. package/dist/backend/llvm/arenas.test.d.ts +1 -0
  81. package/dist/backend/llvm/arenas.test.js +140 -0
  82. package/dist/backend/llvm/arenas.test.js.map +1 -0
  83. package/dist/backend/llvm/blocks.d.ts +11 -1
  84. package/dist/backend/llvm/blocks.js +23 -5
  85. package/dist/backend/llvm/blocks.js.map +1 -1
  86. package/dist/backend/llvm/bytes-headers.d.ts +19 -0
  87. package/dist/backend/llvm/bytes-headers.js +55 -0
  88. package/dist/backend/llvm/bytes-headers.js.map +1 -0
  89. package/dist/backend/llvm/bytes-loop-versions.d.ts +4 -3
  90. package/dist/backend/llvm/bytes-loop-versions.js +42 -7
  91. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  92. package/dist/backend/llvm/bytes-loop-versions.test.js +39 -4
  93. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  94. package/dist/backend/llvm/call-lifetimes.d.ts +5 -0
  95. package/dist/backend/llvm/call-lifetimes.js +43 -8
  96. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  97. package/dist/backend/llvm/call-lifetimes.test.js +26 -0
  98. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  99. package/dist/backend/llvm/checked-narrows.d.ts +3 -0
  100. package/dist/backend/llvm/checked-narrows.js +8 -1
  101. package/dist/backend/llvm/checked-narrows.js.map +1 -1
  102. package/dist/backend/llvm/class-unions.d.ts +21 -0
  103. package/dist/backend/llvm/class-unions.js +141 -0
  104. package/dist/backend/llvm/class-unions.js.map +1 -0
  105. package/dist/backend/llvm/class-unions.test.d.ts +1 -0
  106. package/dist/backend/llvm/class-unions.test.js +137 -0
  107. package/dist/backend/llvm/class-unions.test.js.map +1 -0
  108. package/dist/backend/llvm/classes.d.ts +46 -8
  109. package/dist/backend/llvm/classes.js +259 -32
  110. package/dist/backend/llvm/classes.js.map +1 -1
  111. package/dist/backend/llvm/classes.test.js +4 -0
  112. package/dist/backend/llvm/classes.test.js.map +1 -1
  113. package/dist/backend/llvm/common.d.ts +23 -0
  114. package/dist/backend/llvm/common.js +34 -0
  115. package/dist/backend/llvm/common.js.map +1 -1
  116. package/dist/backend/llvm/constant-callbacks.test.js +39 -0
  117. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  118. package/dist/backend/llvm/constant-choices.d.ts +32 -0
  119. package/dist/backend/llvm/constant-choices.js +209 -0
  120. package/dist/backend/llvm/constant-choices.js.map +1 -0
  121. package/dist/backend/llvm/constant-choices.test.d.ts +1 -0
  122. package/dist/backend/llvm/constant-choices.test.js +94 -0
  123. package/dist/backend/llvm/constant-choices.test.js.map +1 -0
  124. package/dist/backend/llvm/counted-loops.d.ts +14 -2
  125. package/dist/backend/llvm/counted-loops.js +60 -7
  126. package/dist/backend/llvm/counted-loops.js.map +1 -1
  127. package/dist/backend/llvm/counted-loops.test.d.ts +1 -0
  128. package/dist/backend/llvm/counted-loops.test.js +34 -0
  129. package/dist/backend/llvm/counted-loops.test.js.map +1 -0
  130. package/dist/backend/llvm/cpu-dispatch.d.ts +26 -0
  131. package/dist/backend/llvm/cpu-dispatch.js +279 -0
  132. package/dist/backend/llvm/cpu-dispatch.js.map +1 -0
  133. package/dist/backend/llvm/dense-array-access.d.ts +13 -2
  134. package/dist/backend/llvm/dense-array-access.js +60 -6
  135. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  136. package/dist/backend/llvm/dyn-handle-tags.test.js +40 -14
  137. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  138. package/dist/backend/llvm/dyn.d.ts +28 -2
  139. package/dist/backend/llvm/dyn.js +176 -27
  140. package/dist/backend/llvm/dyn.js.map +1 -1
  141. package/dist/backend/llvm/emit-function.js +25 -3
  142. package/dist/backend/llvm/emit-function.js.map +1 -1
  143. package/dist/backend/llvm/emit-journal.d.ts +1 -0
  144. package/dist/backend/llvm/emit-journal.js.map +1 -1
  145. package/dist/backend/llvm/emit-module.d.ts +5 -3
  146. package/dist/backend/llvm/emit-module.js +362 -74
  147. package/dist/backend/llvm/emit-module.js.map +1 -1
  148. package/dist/backend/llvm/emit-statements.js +327 -59
  149. package/dist/backend/llvm/emit-statements.js.map +1 -1
  150. package/dist/backend/llvm/emitter.d.ts +223 -33
  151. package/dist/backend/llvm/emitter.js +713 -100
  152. package/dist/backend/llvm/emitter.js.map +1 -1
  153. package/dist/backend/llvm/emitter.test.js +20 -1
  154. package/dist/backend/llvm/emitter.test.js.map +1 -1
  155. package/dist/backend/llvm/expr-async.js +32 -6
  156. package/dist/backend/llvm/expr-async.js.map +1 -1
  157. package/dist/backend/llvm/expr-bytes.d.ts +9 -1
  158. package/dist/backend/llvm/expr-bytes.js +105 -9
  159. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  160. package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
  161. package/dist/backend/llvm/expr-callbacks.js +29 -22
  162. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  163. package/dist/backend/llvm/expr-calls.d.ts +0 -4
  164. package/dist/backend/llvm/expr-calls.js +116 -14
  165. package/dist/backend/llvm/expr-calls.js.map +1 -1
  166. package/dist/backend/llvm/expr-containers.js +77 -12
  167. package/dist/backend/llvm/expr-containers.js.map +1 -1
  168. package/dist/backend/llvm/expr-context.d.ts +22 -0
  169. package/dist/backend/llvm/expr-control.d.ts +4 -0
  170. package/dist/backend/llvm/expr-control.js +485 -426
  171. package/dist/backend/llvm/expr-control.js.map +1 -1
  172. package/dist/backend/llvm/expr-dispatch.js +4 -0
  173. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  174. package/dist/backend/llvm/expr-dynamic.js +3 -3
  175. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  176. package/dist/backend/llvm/expr-primitives.d.ts +6 -0
  177. package/dist/backend/llvm/expr-primitives.js +119 -58
  178. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  179. package/dist/backend/llvm/expr-primitives.test.js +11 -2
  180. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  181. package/dist/backend/llvm/expr-records.d.ts +36 -4
  182. package/dist/backend/llvm/expr-records.js +249 -37
  183. package/dist/backend/llvm/expr-records.js.map +1 -1
  184. package/dist/backend/llvm/expr-stream-bridges.js +124 -7
  185. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  186. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  187. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  188. package/dist/backend/llvm/expr-stream-callbacks.js +13 -14
  189. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  190. package/dist/backend/llvm/frame-escapes.d.ts +11 -0
  191. package/dist/backend/llvm/frame-escapes.js +219 -0
  192. package/dist/backend/llvm/frame-escapes.js.map +1 -0
  193. package/dist/backend/llvm/function-layout.d.ts +15 -0
  194. package/dist/backend/llvm/function-layout.js +40 -0
  195. package/dist/backend/llvm/function-layout.js.map +1 -0
  196. package/dist/backend/llvm/heap-census.d.ts +34 -0
  197. package/dist/backend/llvm/heap-census.js +163 -0
  198. package/dist/backend/llvm/heap-census.js.map +1 -0
  199. package/dist/backend/llvm/inline-arrays.d.ts +41 -0
  200. package/dist/backend/llvm/inline-arrays.js +195 -0
  201. package/dist/backend/llvm/inline-arrays.js.map +1 -0
  202. package/dist/backend/llvm/int32-kind-loops.js +2 -0
  203. package/dist/backend/llvm/int32-kind-loops.js.map +1 -1
  204. package/dist/backend/llvm/integer-clones.d.ts +32 -5
  205. package/dist/backend/llvm/integer-clones.js +237 -44
  206. package/dist/backend/llvm/integer-clones.js.map +1 -1
  207. package/dist/backend/llvm/integer-clones.test.js +120 -0
  208. package/dist/backend/llvm/integer-clones.test.js.map +1 -1
  209. package/dist/backend/llvm/iterative-teardown.test.d.ts +1 -0
  210. package/dist/backend/llvm/iterative-teardown.test.js +62 -0
  211. package/dist/backend/llvm/iterative-teardown.test.js.map +1 -0
  212. package/dist/backend/llvm/js-ic.js +246 -62
  213. package/dist/backend/llvm/js-ic.js.map +1 -1
  214. package/dist/backend/llvm/lib-connect.js +1 -1
  215. package/dist/backend/llvm/lib-connect.js.map +1 -1
  216. package/dist/backend/llvm/lib-datagram.js +2 -2
  217. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  218. package/dist/backend/llvm/lib-dispatch.js +153 -16
  219. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  220. package/dist/backend/llvm/lib-filesystem.d.ts +8 -0
  221. package/dist/backend/llvm/lib-filesystem.js +48 -4
  222. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  223. package/dist/backend/llvm/lib-http2.js +4 -3
  224. package/dist/backend/llvm/lib-http2.js.map +1 -1
  225. package/dist/backend/llvm/lib-lookup.js +1 -1
  226. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  227. package/dist/backend/llvm/lib-network.js +15 -1
  228. package/dist/backend/llvm/lib-network.js.map +1 -1
  229. package/dist/backend/llvm/lib-process.js +32 -8
  230. package/dist/backend/llvm/lib-process.js.map +1 -1
  231. package/dist/backend/llvm/lib-shared.d.ts +3 -0
  232. package/dist/backend/llvm/lib-shared.js +191 -28
  233. package/dist/backend/llvm/lib-shared.js.map +1 -1
  234. package/dist/backend/llvm/lib-stream.js +1 -1
  235. package/dist/backend/llvm/lib-stream.js.map +1 -1
  236. package/dist/backend/llvm/local-array-reads.js +15 -1
  237. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  238. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  239. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  240. package/dist/backend/llvm/local-extents.d.ts +22 -0
  241. package/dist/backend/llvm/local-extents.js +102 -0
  242. package/dist/backend/llvm/local-extents.js.map +1 -1
  243. package/dist/backend/llvm/local-union-storage.js +15 -2
  244. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  245. package/dist/backend/llvm/local-union-storage.test.js +1 -1
  246. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  247. package/dist/backend/llvm/loop-callees.d.ts +21 -0
  248. package/dist/backend/llvm/loop-callees.js +119 -0
  249. package/dist/backend/llvm/loop-callees.js.map +1 -0
  250. package/dist/backend/llvm/loop-callees.test.d.ts +1 -0
  251. package/dist/backend/llvm/loop-callees.test.js +65 -0
  252. package/dist/backend/llvm/loop-callees.test.js.map +1 -0
  253. package/dist/backend/llvm/loop-entry-versions.d.ts +17 -0
  254. package/dist/backend/llvm/loop-entry-versions.js +185 -0
  255. package/dist/backend/llvm/loop-entry-versions.js.map +1 -0
  256. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  257. package/dist/backend/llvm/map-number-lookup.test.js +13 -4
  258. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  259. package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -0
  260. package/dist/backend/llvm/map-read-lifetimes.js +51 -1
  261. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  262. package/dist/backend/llvm/map-read-lifetimes.test.js +6 -3
  263. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  264. package/dist/backend/llvm/nullable-unions.d.ts +67 -10
  265. package/dist/backend/llvm/nullable-unions.js +218 -22
  266. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  267. package/dist/backend/llvm/nullable-unions.test.js +124 -1
  268. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  269. package/dist/backend/llvm/periodic-guards.d.ts +16 -0
  270. package/dist/backend/llvm/periodic-guards.js +91 -0
  271. package/dist/backend/llvm/periodic-guards.js.map +1 -0
  272. package/dist/backend/llvm/periodic-guards.test.d.ts +1 -0
  273. package/dist/backend/llvm/periodic-guards.test.js +64 -0
  274. package/dist/backend/llvm/periodic-guards.test.js.map +1 -0
  275. package/dist/backend/llvm/publish.d.ts +12 -2
  276. package/dist/backend/llvm/publish.js +15 -8
  277. package/dist/backend/llvm/publish.js.map +1 -1
  278. package/dist/backend/llvm/rebound-parameters.d.ts +4 -1
  279. package/dist/backend/llvm/rebound-parameters.js +17 -1
  280. package/dist/backend/llvm/rebound-parameters.js.map +1 -1
  281. package/dist/backend/llvm/receivers.d.ts +7 -0
  282. package/dist/backend/llvm/receivers.js +77 -10
  283. package/dist/backend/llvm/receivers.js.map +1 -1
  284. package/dist/backend/llvm/record-union-keys.test.js +29 -0
  285. package/dist/backend/llvm/record-union-keys.test.js.map +1 -1
  286. package/dist/backend/llvm/record-views.d.ts +29 -0
  287. package/dist/backend/llvm/record-views.js +249 -0
  288. package/dist/backend/llvm/record-views.js.map +1 -0
  289. package/dist/backend/llvm/record-views.test.d.ts +1 -0
  290. package/dist/backend/llvm/record-views.test.js +118 -0
  291. package/dist/backend/llvm/record-views.test.js.map +1 -0
  292. package/dist/backend/llvm/reference-writes.js +21 -0
  293. package/dist/backend/llvm/reference-writes.js.map +1 -1
  294. package/dist/backend/llvm/reference-writes.test.js +42 -0
  295. package/dist/backend/llvm/reference-writes.test.js.map +1 -1
  296. package/dist/backend/llvm/regex-matchers.d.ts +5 -1
  297. package/dist/backend/llvm/regex-matchers.js +173 -21
  298. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  299. package/dist/backend/llvm/regex-matchers.test.js +39 -1
  300. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  301. package/dist/backend/llvm/region-groups.d.ts +67 -0
  302. package/dist/backend/llvm/region-groups.js +1719 -0
  303. package/dist/backend/llvm/region-groups.js.map +1 -0
  304. package/dist/backend/llvm/region-groups.test.d.ts +1 -0
  305. package/dist/backend/llvm/region-groups.test.js +197 -0
  306. package/dist/backend/llvm/region-groups.test.js.map +1 -0
  307. package/dist/backend/llvm/region-ir.d.ts +31 -0
  308. package/dist/backend/llvm/region-ir.js +256 -0
  309. package/dist/backend/llvm/region-ir.js.map +1 -0
  310. package/dist/backend/llvm/region-sites.d.ts +20 -0
  311. package/dist/backend/llvm/region-sites.js +327 -0
  312. package/dist/backend/llvm/region-sites.js.map +1 -0
  313. package/dist/backend/llvm/region-sites.test.d.ts +1 -0
  314. package/dist/backend/llvm/region-sites.test.js +216 -0
  315. package/dist/backend/llvm/region-sites.test.js.map +1 -0
  316. package/dist/backend/llvm/repr-report.d.ts +9 -0
  317. package/dist/backend/llvm/repr-report.js +143 -0
  318. package/dist/backend/llvm/repr-report.js.map +1 -0
  319. package/dist/backend/llvm/repr-report.test.d.ts +1 -0
  320. package/dist/backend/llvm/repr-report.test.js +62 -0
  321. package/dist/backend/llvm/repr-report.test.js.map +1 -0
  322. package/dist/backend/llvm/runtime-registries.test.d.ts +1 -0
  323. package/dist/backend/llvm/runtime-registries.test.js +88 -0
  324. package/dist/backend/llvm/runtime-registries.test.js.map +1 -0
  325. package/dist/backend/llvm/serialized-ir-emission.test.js +1 -0
  326. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  327. package/dist/backend/llvm/shape-union-tags.test.d.ts +1 -0
  328. package/dist/backend/llvm/shape-union-tags.test.js +75 -0
  329. package/dist/backend/llvm/shape-union-tags.test.js.map +1 -0
  330. package/dist/backend/llvm/shapes.d.ts +60 -10
  331. package/dist/backend/llvm/shapes.js +233 -51
  332. package/dist/backend/llvm/shapes.js.map +1 -1
  333. package/dist/backend/llvm/shapes.test.js +37 -18
  334. package/dist/backend/llvm/shapes.test.js.map +1 -1
  335. package/dist/backend/llvm/speculative-integers.d.ts +3 -0
  336. package/dist/backend/llvm/speculative-integers.js +20 -8
  337. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  338. package/dist/backend/llvm/split.js +6 -1
  339. package/dist/backend/llvm/split.js.map +1 -1
  340. package/dist/backend/llvm/split.test.js +23 -0
  341. package/dist/backend/llvm/split.test.js.map +1 -1
  342. package/dist/backend/llvm/stack-callbacks.js +4 -2
  343. package/dist/backend/llvm/stack-callbacks.js.map +1 -1
  344. package/dist/backend/llvm/stack-objects.d.ts +12 -3
  345. package/dist/backend/llvm/stack-objects.js +110 -22
  346. package/dist/backend/llvm/stack-objects.js.map +1 -1
  347. package/dist/backend/llvm/stack-objects.test.js +144 -0
  348. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  349. package/dist/backend/llvm/stack-unions.test.js +24 -1
  350. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  351. package/dist/backend/llvm/string-lifetimes.js +2 -1
  352. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  353. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  354. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  355. package/dist/backend/llvm/string-reads.d.ts +4 -0
  356. package/dist/backend/llvm/string-reads.js +27 -0
  357. package/dist/backend/llvm/string-reads.js.map +1 -1
  358. package/dist/backend/llvm/test-boxed-unions.d.ts +10 -8
  359. package/dist/backend/llvm/test-boxed-unions.js +20 -25
  360. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  361. package/dist/backend/llvm/union-repr.js +9 -8
  362. package/dist/backend/llvm/union-repr.js.map +1 -1
  363. package/dist/backend/llvm/union-retype.test.js +45 -2
  364. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  365. package/dist/backend/llvm/unwind-abi.d.ts +20 -8
  366. package/dist/backend/llvm/unwind-abi.js +177 -70
  367. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  368. package/dist/backend/llvm/unwind-abi.test.js +90 -3
  369. package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
  370. package/dist/backend/llvm/walk-borrows.d.ts +3 -2
  371. package/dist/backend/llvm/walk-borrows.js +2 -2
  372. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  373. package/dist/backend/llvm/walk-borrows.test.js +18 -0
  374. package/dist/backend/llvm/walk-borrows.test.js.map +1 -1
  375. package/dist/backend/llvm/walkers.d.ts +14 -1
  376. package/dist/backend/llvm/walkers.js +103 -11
  377. package/dist/backend/llvm/walkers.js.map +1 -1
  378. package/dist/backend/llvm/wrapping-sums.d.ts +26 -6
  379. package/dist/backend/llvm/wrapping-sums.js +64 -12
  380. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  381. package/dist/backend/loop-polls.d.ts +4 -2
  382. package/dist/backend/loop-polls.js +11 -2
  383. package/dist/backend/loop-polls.js.map +1 -1
  384. package/dist/backend/mangle.d.ts +0 -5
  385. package/dist/backend/mangle.js +0 -9
  386. package/dist/backend/mangle.js.map +1 -1
  387. package/dist/backend/may-throw.d.ts +10 -9
  388. package/dist/backend/may-throw.js +189 -27
  389. package/dist/backend/may-throw.js.map +1 -1
  390. package/dist/backend/may-throw.test.js +44 -7
  391. package/dist/backend/may-throw.test.js.map +1 -1
  392. package/dist/backend/native/compiler-fingerprint.d.ts +5 -0
  393. package/dist/backend/native/compiler-fingerprint.js +62 -16
  394. package/dist/backend/native/compiler-fingerprint.js.map +1 -1
  395. package/dist/backend/native/contracts.d.ts +31 -8
  396. package/dist/backend/native/executable.js +56 -32
  397. package/dist/backend/native/executable.js.map +1 -1
  398. package/dist/backend/native/library.js +3 -4
  399. package/dist/backend/native/library.js.map +1 -1
  400. package/dist/backend/native/object-merge.d.ts +3 -1
  401. package/dist/backend/native/object-merge.js +24 -11
  402. package/dist/backend/native/object-merge.js.map +1 -1
  403. package/dist/backend/native/program-shards.js +6 -3
  404. package/dist/backend/native/program-shards.js.map +1 -1
  405. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  406. package/dist/backend/native/runtime-inputs.js +3 -0
  407. package/dist/backend/native/runtime-inputs.js.map +1 -1
  408. package/dist/backend/native/vendor.d.ts +1 -1
  409. package/dist/backend/native-codegen-core.d.ts +15 -6
  410. package/dist/backend/native-codegen-core.js +20 -9
  411. package/dist/backend/native-codegen-core.js.map +1 -1
  412. package/dist/backend/native-codegen.js +51 -5
  413. package/dist/backend/native-codegen.js.map +1 -1
  414. package/dist/backend/native-codegen.test.js +82 -8
  415. package/dist/backend/native-codegen.test.js.map +1 -1
  416. package/dist/backend/native-link-info-core.d.ts +30 -0
  417. package/dist/backend/native-link-info-core.js.map +1 -1
  418. package/dist/backend/native-profile.d.ts +68 -4
  419. package/dist/backend/native-profile.js +86 -14
  420. package/dist/backend/native-profile.js.map +1 -1
  421. package/dist/backend/native-profile.test.js +127 -4
  422. package/dist/backend/native-profile.test.js.map +1 -1
  423. package/dist/backend/native-toolchain.d.ts +1 -1
  424. package/dist/backend/native-toolchain.js +1 -1
  425. package/dist/backend/native-toolchain.js.map +1 -1
  426. package/dist/backend/native-toolchain.test.js +58 -4
  427. package/dist/backend/native-toolchain.test.js.map +1 -1
  428. package/dist/backend/native-tools.d.ts +17 -3
  429. package/dist/backend/native-tools.js +12 -4
  430. package/dist/backend/native-tools.js.map +1 -1
  431. package/dist/backend/native-tools.test.d.ts +1 -0
  432. package/dist/backend/native-tools.test.js +76 -0
  433. package/dist/backend/native-tools.test.js.map +1 -0
  434. package/dist/backend/object-localize.js +69 -9
  435. package/dist/backend/object-localize.js.map +1 -1
  436. package/dist/backend/object-localize.test.js +99 -10
  437. package/dist/backend/object-localize.test.js.map +1 -1
  438. package/dist/backend/publication.d.ts +2 -0
  439. package/dist/backend/publication.js +4 -0
  440. package/dist/backend/publication.js.map +1 -1
  441. package/dist/backend/runtime-abi.d.ts +2 -2
  442. package/dist/backend/runtime-abi.js +2 -2
  443. package/dist/backend/runtime-pack-core.d.ts +19 -0
  444. package/dist/backend/runtime-pack-core.js +23 -3
  445. package/dist/backend/runtime-pack-core.js.map +1 -1
  446. package/dist/backend/runtime-pack-targets.test.js +1 -1
  447. package/dist/backend/runtime-pack.test.js +48 -2
  448. package/dist/backend/runtime-pack.test.js.map +1 -1
  449. package/dist/backend/target-cpu.d.ts +2 -0
  450. package/dist/backend/target-cpu.js +4 -0
  451. package/dist/backend/target-cpu.js.map +1 -1
  452. package/dist/backend/target-diagnostics.js +1 -19
  453. package/dist/backend/target-diagnostics.js.map +1 -1
  454. package/dist/backend/target-diagnostics.test.js +1 -1
  455. package/dist/backend/target-diagnostics.test.js.map +1 -1
  456. package/dist/backend/targets.d.ts +28 -0
  457. package/dist/backend/targets.js +70 -0
  458. package/dist/backend/targets.js.map +1 -1
  459. package/dist/backend/targets.test.js +75 -1
  460. package/dist/backend/targets.test.js.map +1 -1
  461. package/dist/backend/vendor-archives.d.ts +1 -1
  462. package/dist/backend/vendor-archives.js +25 -12
  463. package/dist/backend/vendor-archives.js.map +1 -1
  464. package/dist/backend/vendor-inputs.d.ts +15 -2
  465. package/dist/backend/vendor-inputs.js +59 -3
  466. package/dist/backend/vendor-inputs.js.map +1 -1
  467. package/dist/backend/vendor-inputs.test.d.ts +1 -0
  468. package/dist/backend/vendor-inputs.test.js +74 -0
  469. package/dist/backend/vendor-inputs.test.js.map +1 -0
  470. package/dist/cli/command.js +95 -5
  471. package/dist/cli/command.js.map +1 -1
  472. package/dist/cli/host.d.ts +3 -0
  473. package/dist/cli/output-options.d.ts +3 -0
  474. package/dist/cli/output-options.js +8 -2
  475. package/dist/cli/output-options.js.map +1 -1
  476. package/dist/cli/usage.d.ts +28 -1
  477. package/dist/cli/usage.js +56 -6
  478. package/dist/cli/usage.js.map +1 -1
  479. package/dist/compat/fetch-profile.d.ts +3 -0
  480. package/dist/compat/fetch-profile.js +23 -3
  481. package/dist/compat/fetch-profile.js.map +1 -1
  482. package/dist/compile-types.d.ts +45 -0
  483. package/dist/contracts/check.js +70 -2
  484. package/dist/contracts/check.js.map +1 -1
  485. package/dist/contracts/int32-elements.d.ts +2 -1
  486. package/dist/contracts/int32-elements.js.map +1 -1
  487. package/dist/coverage/report.d.ts +5 -1
  488. package/dist/coverage/report.js +83 -2
  489. package/dist/coverage/report.js.map +1 -1
  490. package/dist/coverage/verdict-cache.d.ts +2 -0
  491. package/dist/coverage/verdict-cache.js +5 -10
  492. package/dist/coverage/verdict-cache.js.map +1 -1
  493. package/dist/diagnostics/codes.d.ts +145 -0
  494. package/dist/diagnostics/codes.js +159 -0
  495. package/dist/diagnostics/codes.js.map +1 -0
  496. package/dist/diagnostics/codes.test.d.ts +1 -0
  497. package/dist/diagnostics/codes.test.js +78 -0
  498. package/dist/diagnostics/codes.test.js.map +1 -0
  499. package/dist/diagnostics/diagnostic.d.ts +101 -2
  500. package/dist/diagnostics/diagnostic.js +155 -0
  501. package/dist/diagnostics/diagnostic.js.map +1 -1
  502. package/dist/diagnostics/dynamic-slots.d.ts +23 -0
  503. package/dist/diagnostics/dynamic-slots.js +29 -0
  504. package/dist/diagnostics/dynamic-slots.js.map +1 -0
  505. package/dist/diagnostics/dynamic-tier.d.ts +6 -0
  506. package/dist/diagnostics/dynamic-tier.js +8 -1
  507. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  508. package/dist/diagnostics/envelope.d.ts +43 -1
  509. package/dist/diagnostics/envelope.js +19 -1
  510. package/dist/diagnostics/envelope.js.map +1 -1
  511. package/dist/diagnostics/envelope.test.js.map +1 -1
  512. package/dist/diagnostics/render.d.ts +3 -1
  513. package/dist/diagnostics/render.js +27 -6
  514. package/dist/diagnostics/render.js.map +1 -1
  515. package/dist/executable/executable-cache.d.ts +41 -0
  516. package/dist/executable/executable-cache.js +39 -1
  517. package/dist/executable/executable-cache.js.map +1 -1
  518. package/dist/executable/executable-cache.test.js +4 -1
  519. package/dist/executable/executable-cache.test.js.map +1 -1
  520. package/dist/executable/prepare.d.ts +2 -1
  521. package/dist/executable/prepare.js +421 -10
  522. package/dist/executable/prepare.js.map +1 -1
  523. package/dist/frontend/analysis.js +1 -0
  524. package/dist/frontend/analysis.js.map +1 -1
  525. package/dist/frontend/canon-map.d.ts +17 -0
  526. package/dist/frontend/canon-map.js +177 -0
  527. package/dist/frontend/canon-map.js.map +1 -0
  528. package/dist/frontend/canon.d.ts +122 -0
  529. package/dist/frontend/canon.js +462 -0
  530. package/dist/frontend/canon.js.map +1 -0
  531. package/dist/frontend/contract-types.d.ts +9 -1
  532. package/dist/frontend/contract-types.js +46 -4
  533. package/dist/frontend/contract-types.js.map +1 -1
  534. package/dist/frontend/decl-projection.d.ts +3 -0
  535. package/dist/frontend/decl-projection.js +121 -3
  536. package/dist/frontend/decl-projection.js.map +1 -1
  537. package/dist/frontend/dts-paths.d.ts +17 -4
  538. package/dist/frontend/dts-paths.js +149 -5
  539. package/dist/frontend/dts-paths.js.map +1 -1
  540. package/dist/frontend/fork-target.js +4 -4
  541. package/dist/frontend/fork-target.js.map +1 -1
  542. package/dist/frontend/fork-target.test.js +3 -3
  543. package/dist/frontend/fork-target.test.js.map +1 -1
  544. package/dist/frontend/heritage-elements.d.ts +15 -0
  545. package/dist/frontend/heritage-elements.js +18 -0
  546. package/dist/frontend/heritage-elements.js.map +1 -0
  547. package/dist/frontend/heritage-elements.test.d.ts +1 -0
  548. package/dist/frontend/heritage-elements.test.js +68 -0
  549. package/dist/frontend/heritage-elements.test.js.map +1 -0
  550. package/dist/frontend/input-tracker.d.ts +20 -0
  551. package/dist/frontend/input-tracker.js +74 -4
  552. package/dist/frontend/input-tracker.js.map +1 -1
  553. package/dist/frontend/input-tracker.test.js +66 -0
  554. package/dist/frontend/input-tracker.test.js.map +1 -1
  555. package/dist/frontend/lowering/any-collection-residue.d.ts +9 -0
  556. package/dist/frontend/lowering/any-collection-residue.js +42 -0
  557. package/dist/frontend/lowering/any-collection-residue.js.map +1 -0
  558. package/dist/frontend/lowering/array-values.d.ts +44 -2
  559. package/dist/frontend/lowering/array-values.js +193 -3
  560. package/dist/frontend/lowering/array-values.js.map +1 -1
  561. package/dist/frontend/lowering/builtin-namespaces.d.ts +6 -2
  562. package/dist/frontend/lowering/builtin-namespaces.js +28 -6
  563. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/array-classes.d.ts +69 -0
  565. package/dist/frontend/lowering/builtins/array-classes.js +729 -0
  566. package/dist/frontend/lowering/builtins/array-classes.js.map +1 -0
  567. package/dist/frontend/lowering/builtins/callable-aliases.js +4 -0
  568. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  569. package/dist/frontend/lowering/builtins/child-process-methods.js +34 -0
  570. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  571. package/dist/frontend/lowering/builtins/disposable-stack.js +1 -3
  572. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  573. package/dist/frontend/lowering/builtins/errors.d.ts +13 -9
  574. package/dist/frontend/lowering/builtins/errors.js +136 -56
  575. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  577. package/dist/frontend/lowering/builtins/filesystem-calls.js +85 -4
  578. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  579. package/dist/frontend/lowering/builtins/filesystem.d.ts +11 -6
  580. package/dist/frontend/lowering/builtins/filesystem.js +270 -24
  581. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  582. package/dist/frontend/lowering/builtins/json.js +7 -1
  583. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  584. package/dist/frontend/lowering/builtins/mime.d.ts +25 -0
  585. package/dist/frontend/lowering/builtins/mime.js +167 -0
  586. package/dist/frontend/lowering/builtins/mime.js.map +1 -0
  587. package/dist/frontend/lowering/builtins/module-bindings.d.ts +3 -0
  588. package/dist/frontend/lowering/builtins/module-bindings.js +6 -0
  589. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  590. package/dist/frontend/lowering/builtins/module-calls.js +79 -12
  591. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  592. package/dist/frontend/lowering/builtins/module-resolution.d.ts +7 -4
  593. package/dist/frontend/lowering/builtins/module-resolution.js +115 -13
  594. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  595. package/dist/frontend/lowering/builtins/navigator.d.ts +3 -1
  596. package/dist/frontend/lowering/builtins/navigator.js +22 -8
  597. package/dist/frontend/lowering/builtins/navigator.js.map +1 -1
  598. package/dist/frontend/lowering/builtins/process.js +49 -9
  599. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  600. package/dist/frontend/lowering/builtins/promises.js +18 -3
  601. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  602. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +6 -2
  603. package/dist/frontend/lowering/builtins/promisify-callback.js +19 -6
  604. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  605. package/dist/frontend/lowering/builtins/properties.js +23 -5
  606. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  607. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +42 -0
  608. package/dist/frontend/lowering/builtins/web-streams-dyn.js +321 -0
  609. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -0
  610. package/dist/frontend/lowering/builtins/x509.js +35 -5
  611. package/dist/frontend/lowering/builtins/x509.js.map +1 -1
  612. package/dist/frontend/lowering/call-arguments.d.ts +14 -1
  613. package/dist/frontend/lowering/call-arguments.js +84 -70
  614. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  615. package/dist/frontend/lowering/call-signatures.js +108 -24
  616. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  617. package/dist/frontend/lowering/class-attributes.js +6 -5
  618. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  619. package/dist/frontend/lowering/class-dynamic-dispatch.js +40 -19
  620. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  621. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
  622. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  623. package/dist/frontend/lowering/class-protocol-dispatch.js +4 -0
  624. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  625. package/dist/frontend/lowering/class-protocols.d.ts +61 -1
  626. package/dist/frontend/lowering/class-protocols.js +297 -21
  627. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  628. package/dist/frontend/lowering/class-to-primitive.d.ts +3 -2
  629. package/dist/frontend/lowering/class-to-primitive.js +15 -5
  630. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  631. package/dist/frontend/lowering/coercions/asserted.d.ts +16 -0
  632. package/dist/frontend/lowering/coercions/asserted.js +79 -0
  633. package/dist/frontend/lowering/coercions/asserted.js.map +1 -0
  634. package/dist/frontend/lowering/coercions/function-adapters.d.ts +13 -0
  635. package/dist/frontend/lowering/coercions/function-adapters.js +70 -3
  636. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  637. package/dist/frontend/lowering/coercions/state.d.ts +23 -0
  638. package/dist/frontend/lowering/coercions/state.js +9 -0
  639. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  640. package/dist/frontend/lowering/coercions/structural-plans.js +67 -1
  641. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  642. package/dist/frontend/lowering/coercions/structural.d.ts +10 -0
  643. package/dist/frontend/lowering/coercions/structural.js +134 -4
  644. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  645. package/dist/frontend/lowering/coercions/unions.d.ts +11 -0
  646. package/dist/frontend/lowering/coercions/unions.js +83 -4
  647. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  648. package/dist/frontend/lowering/completion-callbacks.js +3 -2
  649. package/dist/frontend/lowering/completion-callbacks.js.map +1 -1
  650. package/dist/frontend/lowering/containers/array-callbacks.d.ts +10 -0
  651. package/dist/frontend/lowering/containers/array-callbacks.js +224 -81
  652. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  653. package/dist/frontend/lowering/containers/array-concat.d.ts +5 -2
  654. package/dist/frontend/lowering/containers/array-concat.js +76 -7
  655. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  656. package/dist/frontend/lowering/containers/array-construction.d.ts +9 -4
  657. package/dist/frontend/lowering/containers/array-construction.js +112 -100
  658. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  659. package/dist/frontend/lowering/containers/array-methods.js +193 -45
  660. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  661. package/dist/frontend/lowering/containers/array-pipelines.d.ts +3 -0
  662. package/dist/frontend/lowering/containers/array-pipelines.js +81 -13
  663. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  664. package/dist/frontend/lowering/containers/callback-arguments.d.ts +1 -0
  665. package/dist/frontend/lowering/containers/callback-arguments.js +28 -2
  666. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  667. package/dist/frontend/lowering/containers/collection-methods.js +13 -3
  668. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  669. package/dist/frontend/lowering/containers/filter-predicates.js +34 -3
  670. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  671. package/dist/frontend/lowering/containers/indexed-objects.d.ts +34 -1
  672. package/dist/frontend/lowering/containers/indexed-objects.js +131 -72
  673. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  674. package/dist/frontend/lowering/cycle-initialization.js +43 -6
  675. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  676. package/dist/frontend/lowering/decl-origin.d.ts +49 -0
  677. package/dist/frontend/lowering/decl-origin.js +402 -0
  678. package/dist/frontend/lowering/decl-origin.js.map +1 -0
  679. package/dist/frontend/lowering/deferred-module-initializers.d.ts +2 -0
  680. package/dist/frontend/lowering/deferred-module-initializers.js +7 -0
  681. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  682. package/dist/frontend/lowering/divergences.js +5 -0
  683. package/dist/frontend/lowering/divergences.js.map +1 -1
  684. package/dist/frontend/lowering/dynamic-tier.d.ts +8 -2
  685. package/dist/frontend/lowering/dynamic-tier.js +111 -3
  686. package/dist/frontend/lowering/dynamic-tier.js.map +1 -1
  687. package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -1
  688. package/dist/frontend/lowering/expressions/array-literals.js +43 -5
  689. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  690. package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +48 -0
  691. package/dist/frontend/lowering/expressions/asserted-receiver.js +233 -0
  692. package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -0
  693. package/dist/frontend/lowering/expressions/binary.js +136 -1
  694. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  695. package/dist/frontend/lowering/expressions/element-access.d.ts +7 -0
  696. package/dist/frontend/lowering/expressions/element-access.js +363 -12
  697. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  698. package/dist/frontend/lowering/expressions/identifiers.d.ts +3 -0
  699. package/dist/frontend/lowering/expressions/identifiers.js +78 -62
  700. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  701. package/dist/frontend/lowering/expressions/message-listeners.d.ts +3 -0
  702. package/dist/frontend/lowering/expressions/message-listeners.js +19 -0
  703. package/dist/frontend/lowering/expressions/message-listeners.js.map +1 -0
  704. package/dist/frontend/lowering/expressions/narrowing.js +224 -6
  705. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  706. package/dist/frontend/lowering/expressions/nullish-assignment.js +5 -2
  707. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  708. package/dist/frontend/lowering/expressions/object-literals.d.ts +1 -1
  709. package/dist/frontend/lowering/expressions/object-literals.js +282 -24
  710. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  711. package/dist/frontend/lowering/expressions/property-access.d.ts +15 -3
  712. package/dist/frontend/lowering/expressions/property-access.js +397 -74
  713. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  714. package/dist/frontend/lowering/expressions/relational.js +202 -70
  715. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  716. package/dist/frontend/lowering/expressions/typeof.js +9 -1
  717. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/union-fields.d.ts +28 -8
  719. package/dist/frontend/lowering/expressions/union-fields.js +168 -14
  720. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  721. package/dist/frontend/lowering/frozen-records.d.ts +8 -0
  722. package/dist/frontend/lowering/frozen-records.js +56 -9
  723. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  724. package/dist/frontend/lowering/function-context.d.ts +3 -0
  725. package/dist/frontend/lowering/function-context.js +4 -1
  726. package/dist/frontend/lowering/function-context.js.map +1 -1
  727. package/dist/frontend/lowering/function-returns.d.ts +4 -0
  728. package/dist/frontend/lowering/function-returns.js +231 -2
  729. package/dist/frontend/lowering/function-returns.js.map +1 -1
  730. package/dist/frontend/lowering/generator-delegation.js +3 -2
  731. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  732. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +26 -0
  733. package/dist/frontend/lowering/generator-dynamic-dispatch.js +294 -2
  734. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  735. package/dist/frontend/lowering/generic-functions.d.ts +10 -0
  736. package/dist/frontend/lowering/generic-functions.js +67 -7
  737. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  738. package/dist/frontend/lowering/global-values.d.ts +37 -0
  739. package/dist/frontend/lowering/global-values.js +395 -0
  740. package/dist/frontend/lowering/global-values.js.map +1 -0
  741. package/dist/frontend/lowering/handle-properties.js +3 -2
  742. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  743. package/dist/frontend/lowering/handle-properties.test.d.ts +1 -0
  744. package/dist/frontend/lowering/handle-properties.test.js +25 -0
  745. package/dist/frontend/lowering/handle-properties.test.js.map +1 -0
  746. package/dist/frontend/lowering/import-meta.d.ts +3 -0
  747. package/dist/frontend/lowering/import-meta.js +8 -3
  748. package/dist/frontend/lowering/import-meta.js.map +1 -1
  749. package/dist/frontend/lowering/iterator-adapters.js +3 -3
  750. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  751. package/dist/frontend/lowering/key-order-witness.d.ts +2 -0
  752. package/dist/frontend/lowering/key-order-witness.js +10 -0
  753. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  754. package/dist/frontend/lowering/lower-array-sort.d.ts +5 -1
  755. package/dist/frontend/lowering/lower-array-sort.js +16 -2
  756. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  757. package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -0
  758. package/dist/frontend/lowering/lower-builtin-values.js +65 -16
  759. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  760. package/dist/frontend/lowering/lower-calls.js +222 -24
  761. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  762. package/dist/frontend/lowering/lower-classes.d.ts +6 -0
  763. package/dist/frontend/lowering/lower-classes.js +154 -20
  764. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  765. package/dist/frontend/lowering/lower-console.js +25 -2
  766. package/dist/frontend/lowering/lower-console.js.map +1 -1
  767. package/dist/frontend/lowering/lower-exprs.d.ts +29 -0
  768. package/dist/frontend/lowering/lower-exprs.js +544 -24
  769. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  770. package/dist/frontend/lowering/lower-functions.js +93 -18
  771. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  772. package/dist/frontend/lowering/lower-global-value.d.ts +4 -1
  773. package/dist/frontend/lowering/lower-global-value.js +10 -3
  774. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  775. package/dist/frontend/lowering/lower-inspect.d.ts +44 -4
  776. package/dist/frontend/lowering/lower-inspect.js +723 -26
  777. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  778. package/dist/frontend/lowering/lower-modules.d.ts +3 -1
  779. package/dist/frontend/lowering/lower-modules.js +189 -24
  780. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  781. package/dist/frontend/lowering/lower-namespaces.d.ts +7 -0
  782. package/dist/frontend/lowering/lower-namespaces.js +23 -0
  783. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  784. package/dist/frontend/lowering/lower-node-island.d.ts +74 -0
  785. package/dist/frontend/lowering/lower-node-island.js +1931 -0
  786. package/dist/frontend/lowering/lower-node-island.js.map +1 -0
  787. package/dist/frontend/lowering/lower-server.js +44 -0
  788. package/dist/frontend/lowering/lower-server.js.map +1 -1
  789. package/dist/frontend/lowering/lower-shared-modules.d.ts +27 -0
  790. package/dist/frontend/lowering/lower-shared-modules.js +611 -0
  791. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -0
  792. package/dist/frontend/lowering/lower-stdlib.js +85 -9
  793. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  794. package/dist/frontend/lowering/lower-stmts.d.ts +2 -6
  795. package/dist/frontend/lowering/lower-stmts.js +781 -143
  796. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  797. package/dist/frontend/lowering/lower-stream.js +548 -36
  798. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  799. package/dist/frontend/lowering/lower-timers.js +9 -0
  800. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  801. package/dist/frontend/lowering/lowerer.d.ts +514 -10
  802. package/dist/frontend/lowering/lowerer.js +2667 -163
  803. package/dist/frontend/lowering/lowerer.js.map +1 -1
  804. package/dist/frontend/lowering/lowerer.test.js +44 -1
  805. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  806. package/dist/frontend/lowering/maybe-promise.d.ts +6 -0
  807. package/dist/frontend/lowering/maybe-promise.js +13 -0
  808. package/dist/frontend/lowering/maybe-promise.js.map +1 -1
  809. package/dist/frontend/lowering/module-namespace-elements.d.ts +12 -0
  810. package/dist/frontend/lowering/module-namespace-elements.js +114 -18
  811. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  812. package/dist/frontend/lowering/nan-coded-reads.d.ts +11 -0
  813. package/dist/frontend/lowering/nan-coded-reads.js +45 -2
  814. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  815. package/dist/frontend/lowering/narrowing-stability.d.ts +4 -0
  816. package/dist/frontend/lowering/narrowing-stability.js +14 -6
  817. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  818. package/dist/frontend/lowering/receiver-returns.d.ts +3 -0
  819. package/dist/frontend/lowering/receiver-returns.js +134 -0
  820. package/dist/frontend/lowering/receiver-returns.js.map +1 -0
  821. package/dist/frontend/lowering/record-inherited.d.ts +26 -0
  822. package/dist/frontend/lowering/record-inherited.js +807 -0
  823. package/dist/frontend/lowering/record-inherited.js.map +1 -0
  824. package/dist/frontend/lowering/runtime-optional-elements.d.ts +31 -1
  825. package/dist/frontend/lowering/runtime-optional-elements.js +105 -13
  826. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  827. package/dist/frontend/lowering/runtime-optional-guards.d.ts +3 -0
  828. package/dist/frontend/lowering/runtime-optional-guards.js +35 -7
  829. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  830. package/dist/frontend/lowering/runtime-optional-guards.test.js +59 -1
  831. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  832. package/dist/frontend/lowering/stable-names.d.ts +8 -0
  833. package/dist/frontend/lowering/stable-names.js +22 -0
  834. package/dist/frontend/lowering/stable-names.js.map +1 -1
  835. package/dist/frontend/lowering/stable-names.test.d.ts +1 -0
  836. package/dist/frontend/lowering/stable-names.test.js +16 -0
  837. package/dist/frontend/lowering/stable-names.test.js.map +1 -0
  838. package/dist/frontend/lowering/static-typeof.d.ts +5 -4
  839. package/dist/frontend/lowering/static-typeof.js +10 -4
  840. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  841. package/dist/frontend/lowering/structural-instances.d.ts +22 -0
  842. package/dist/frontend/lowering/structural-instances.js +282 -0
  843. package/dist/frontend/lowering/structural-instances.js.map +1 -0
  844. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  845. package/dist/frontend/lowering/surfaces.js +108 -12
  846. package/dist/frontend/lowering/surfaces.js.map +1 -1
  847. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  848. package/dist/frontend/lowering/symbol-fields.js +32 -0
  849. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  850. package/dist/frontend/lowering/type-failure.d.ts +17 -0
  851. package/dist/frontend/lowering/type-failure.js +163 -0
  852. package/dist/frontend/lowering/type-failure.js.map +1 -0
  853. package/dist/frontend/lowering/typed-arguments.d.ts +5 -6
  854. package/dist/frontend/lowering/typed-arguments.js +10 -2
  855. package/dist/frontend/lowering/typed-arguments.js.map +1 -1
  856. package/dist/frontend/lowering/union-narrow.d.ts +9 -1
  857. package/dist/frontend/lowering/union-narrow.js +31 -2
  858. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  859. package/dist/frontend/lowering/union-retag.test.js +42 -2
  860. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  861. package/dist/frontend/lowering/unit-journal.d.ts +194 -0
  862. package/dist/frontend/lowering/unit-journal.js +556 -0
  863. package/dist/frontend/lowering/unit-journal.js.map +1 -0
  864. package/dist/frontend/lowering/unit-journal.test.d.ts +1 -0
  865. package/dist/frontend/lowering/unit-journal.test.js +335 -0
  866. package/dist/frontend/lowering/unit-journal.test.js.map +1 -0
  867. package/dist/frontend/lowering/width-lift.d.ts +19 -0
  868. package/dist/frontend/node-api-import.d.ts +21 -0
  869. package/dist/frontend/node-api-import.js +88 -0
  870. package/dist/frontend/node-api-import.js.map +1 -0
  871. package/dist/frontend/npm-static-type-exports-host.js +4 -3
  872. package/dist/frontend/npm-static-type-exports-host.js.map +1 -1
  873. package/dist/frontend/npm-static.js +9 -2
  874. package/dist/frontend/npm-static.js.map +1 -1
  875. package/dist/frontend/package-shims.d.ts +6 -2
  876. package/dist/frontend/package-shims.js +13 -2
  877. package/dist/frontend/package-shims.js.map +1 -1
  878. package/dist/frontend/pipeline.d.ts +11 -4
  879. package/dist/frontend/pipeline.js +249 -26
  880. package/dist/frontend/pipeline.js.map +1 -1
  881. package/dist/frontend/process-fork.d.ts +3 -0
  882. package/dist/frontend/process-fork.js.map +1 -1
  883. package/dist/frontend/program-analysis.d.ts +6 -0
  884. package/dist/frontend/program-analysis.js +4 -0
  885. package/dist/frontend/program-analysis.js.map +1 -1
  886. package/dist/frontend/program.d.ts +12 -1
  887. package/dist/frontend/program.js +256 -36
  888. package/dist/frontend/program.js.map +1 -1
  889. package/dist/frontend/resolve.js +8 -2
  890. package/dist/frontend/resolve.js.map +1 -1
  891. package/dist/frontend/shape-inference/analyze.d.ts +23 -1
  892. package/dist/frontend/shape-inference/analyze.js +982 -97
  893. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  894. package/dist/frontend/shape-inference/constant-graphs.d.ts +2 -0
  895. package/dist/frontend/shape-inference/constant-graphs.js +39 -4
  896. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -1
  897. package/dist/frontend/shape-inference/domain.d.ts +2 -0
  898. package/dist/frontend/shape-inference/domain.js.map +1 -1
  899. package/dist/frontend/shape-inference/fallback.d.ts +17 -0
  900. package/dist/frontend/shape-inference/fallback.js +303 -0
  901. package/dist/frontend/shape-inference/fallback.js.map +1 -0
  902. package/dist/frontend/shape-inference/index.d.ts +75 -1
  903. package/dist/frontend/shape-inference/index.js +531 -2
  904. package/dist/frontend/shape-inference/index.js.map +1 -1
  905. package/dist/frontend/shape-inference/inferred-checks.d.ts +2 -0
  906. package/dist/frontend/shape-inference/inferred-checks.js +90 -0
  907. package/dist/frontend/shape-inference/inferred-checks.js.map +1 -0
  908. package/dist/frontend/shape-inference/memo.d.ts +30 -0
  909. package/dist/frontend/shape-inference/memo.js +99 -0
  910. package/dist/frontend/shape-inference/memo.js.map +1 -0
  911. package/dist/frontend/shape-inference/overlay.d.ts +81 -0
  912. package/dist/frontend/shape-inference/overlay.js +1160 -0
  913. package/dist/frontend/shape-inference/overlay.js.map +1 -0
  914. package/dist/frontend/shape-inference/registry.test.d.ts +1 -0
  915. package/dist/frontend/shape-inference/registry.test.js +34 -0
  916. package/dist/frontend/shape-inference/registry.test.js.map +1 -0
  917. package/dist/frontend/shape-inference/report.js +42 -8
  918. package/dist/frontend/shape-inference/report.js.map +1 -1
  919. package/dist/frontend/shape-inference/static-objects.d.ts +29 -0
  920. package/dist/frontend/shape-inference/static-objects.js +1951 -0
  921. package/dist/frontend/shape-inference/static-objects.js.map +1 -0
  922. package/dist/frontend/tier-analysis.d.ts +53 -1
  923. package/dist/frontend/tier-analysis.js +133 -0
  924. package/dist/frontend/tier-analysis.js.map +1 -1
  925. package/dist/frontend/ts7/api.js +4 -2
  926. package/dist/frontend/ts7/api.js.map +1 -1
  927. package/dist/frontend/ts7/ast-node.d.ts +9 -0
  928. package/dist/frontend/ts7/ast-node.js +42 -10
  929. package/dist/frontend/ts7/ast-node.js.map +1 -1
  930. package/dist/frontend/ts7/ast-node.test.js +23 -0
  931. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  932. package/dist/frontend/ts7/ast-wire-protocols.test.d.ts +1 -0
  933. package/dist/frontend/ts7/ast-wire-protocols.test.js +93 -0
  934. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -0
  935. package/dist/frontend/ts7/ast-wire.d.ts +18 -0
  936. package/dist/frontend/ts7/ast-wire.js +66 -4
  937. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  938. package/dist/frontend/ts7/checker-server.d.ts +12 -11
  939. package/dist/frontend/ts7/checker-server.js +28 -12
  940. package/dist/frontend/ts7/checker-server.js.map +1 -1
  941. package/dist/frontend/ts7/checker-server.test.js +8 -3
  942. package/dist/frontend/ts7/checker-server.test.js.map +1 -1
  943. package/dist/frontend/ts7/checker.d.ts +4 -0
  944. package/dist/frontend/ts7/checker.js +9 -0
  945. package/dist/frontend/ts7/checker.js.map +1 -1
  946. package/dist/frontend/ts7/checker.test.js +216 -205
  947. package/dist/frontend/ts7/checker.test.js.map +1 -1
  948. package/dist/frontend/ts7/lib-diagnostics.d.ts +71 -4
  949. package/dist/frontend/ts7/lib-diagnostics.js +337 -20
  950. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  951. package/dist/frontend/ts7/lib-diagnostics.test.js +268 -5
  952. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  953. package/dist/frontend/ts7/native-api.d.ts +4 -0
  954. package/dist/frontend/ts7/native-api.js +36 -1
  955. package/dist/frontend/ts7/native-api.js.map +1 -1
  956. package/dist/frontend/ts7/program-host.d.ts +19 -2
  957. package/dist/frontend/ts7/program-host.js +69 -9
  958. package/dist/frontend/ts7/program-host.js.map +1 -1
  959. package/dist/frontend/ts7/program-host.test.js +42 -1
  960. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  961. package/dist/frontend/ts7/rpc-filesystem.d.ts +4 -2
  962. package/dist/frontend/ts7/rpc-filesystem.js +23 -2
  963. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  964. package/dist/frontend/ts7/rpc-filesystem.test.js +28 -2
  965. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  966. package/dist/frontend/ts7/semantic-checker.js +73 -5
  967. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  968. package/dist/frontend/ts7/semantic-checker.test.js +106 -74
  969. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  970. package/dist/frontend/ts7/semantic-json.d.ts +2 -6
  971. package/dist/frontend/ts7/semantic-model-71.test.d.ts +1 -0
  972. package/dist/frontend/ts7/semantic-model-71.test.js +131 -0
  973. package/dist/frontend/ts7/semantic-model-71.test.js.map +1 -0
  974. package/dist/frontend/ts7/semantic-model.d.ts +121 -3
  975. package/dist/frontend/ts7/semantic-model.js +245 -8
  976. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  977. package/dist/frontend/ts7/session.d.ts +19 -1
  978. package/dist/frontend/ts7/session.js +111 -11
  979. package/dist/frontend/ts7/session.js.map +1 -1
  980. package/dist/frontend/ts7/session.test.js +259 -239
  981. package/dist/frontend/ts7/session.test.js.map +1 -1
  982. package/dist/frontend/ts7/test-servers.d.ts +12 -0
  983. package/dist/frontend/ts7/test-servers.js +16 -0
  984. package/dist/frontend/ts7/test-servers.js.map +1 -0
  985. package/dist/frontend/tsc-codes.js +6 -3
  986. package/dist/frontend/tsc-codes.js.map +1 -1
  987. package/dist/frontend/type-mapper.d.ts +61 -1
  988. package/dist/frontend/type-mapper.js +577 -28
  989. package/dist/frontend/type-mapper.js.map +1 -1
  990. package/dist/frontend/type-patches/command.d.ts +19 -0
  991. package/dist/frontend/type-patches/command.js +352 -0
  992. package/dist/frontend/type-patches/command.js.map +1 -0
  993. package/dist/frontend/type-patches/layer.d.ts +45 -0
  994. package/dist/frontend/type-patches/layer.js +409 -0
  995. package/dist/frontend/type-patches/layer.js.map +1 -0
  996. package/dist/frontend/type-patches/locate.d.ts +41 -0
  997. package/dist/frontend/type-patches/locate.js +914 -0
  998. package/dist/frontend/type-patches/locate.js.map +1 -0
  999. package/dist/frontend/type-patches/locate.test.d.ts +1 -0
  1000. package/dist/frontend/type-patches/locate.test.js +179 -0
  1001. package/dist/frontend/type-patches/locate.test.js.map +1 -0
  1002. package/dist/frontend/type-patches/selector.d.ts +43 -0
  1003. package/dist/frontend/type-patches/selector.js +126 -0
  1004. package/dist/frontend/type-patches/selector.js.map +1 -0
  1005. package/dist/frontend/type-patches/selector.test.d.ts +1 -0
  1006. package/dist/frontend/type-patches/selector.test.js +56 -0
  1007. package/dist/frontend/type-patches/selector.test.js.map +1 -0
  1008. package/dist/frontend/type-patches/semver.d.ts +19 -0
  1009. package/dist/frontend/type-patches/semver.js +221 -0
  1010. package/dist/frontend/type-patches/semver.js.map +1 -0
  1011. package/dist/frontend/type-patches/semver.test.d.ts +1 -0
  1012. package/dist/frontend/type-patches/semver.test.js +47 -0
  1013. package/dist/frontend/type-patches/semver.test.js.map +1 -0
  1014. package/dist/frontend/worker-target.test.js +2 -2
  1015. package/dist/frontend/worker-target.test.js.map +1 -1
  1016. package/dist/index.d.ts +4 -1
  1017. package/dist/index.js +292 -27
  1018. package/dist/index.js.map +1 -1
  1019. package/dist/ir/builtin-effects.js +51 -5
  1020. package/dist/ir/builtin-effects.js.map +1 -1
  1021. package/dist/ir/builtin-signatures.d.ts +4 -3
  1022. package/dist/ir/builtin-signatures.js +277 -12
  1023. package/dist/ir/builtin-signatures.js.map +1 -1
  1024. package/dist/ir/callback-specialization.js +108 -67
  1025. package/dist/ir/callback-specialization.js.map +1 -1
  1026. package/dist/ir/capture-values.d.ts +7 -1
  1027. package/dist/ir/capture-values.js +28 -5
  1028. package/dist/ir/capture-values.js.map +1 -1
  1029. package/dist/ir/char-unit-locals.js +38 -42
  1030. package/dist/ir/char-unit-locals.js.map +1 -1
  1031. package/dist/ir/expression-inlining.js +12 -6
  1032. package/dist/ir/expression-inlining.js.map +1 -1
  1033. package/dist/ir/fields.generated.d.ts +751 -0
  1034. package/dist/ir/fields.generated.js +2071 -0
  1035. package/dist/ir/fields.generated.js.map +1 -0
  1036. package/dist/ir/fields.test.d.ts +1 -0
  1037. package/dist/ir/fields.test.js +113 -0
  1038. package/dist/ir/fields.test.js.map +1 -0
  1039. package/dist/ir/function-references.js +4 -0
  1040. package/dist/ir/function-references.js.map +1 -1
  1041. package/dist/ir/function-references.test.js +25 -0
  1042. package/dist/ir/function-references.test.js.map +1 -1
  1043. package/dist/ir/inline-array-sources.d.ts +15 -0
  1044. package/dist/ir/inline-array-sources.js +1825 -0
  1045. package/dist/ir/inline-array-sources.js.map +1 -0
  1046. package/dist/ir/inline-arrays.d.ts +41 -0
  1047. package/dist/ir/inline-arrays.js +533 -0
  1048. package/dist/ir/inline-arrays.js.map +1 -0
  1049. package/dist/ir/inline-arrays.test.d.ts +1 -0
  1050. package/dist/ir/inline-arrays.test.js +225 -0
  1051. package/dist/ir/inline-arrays.test.js.map +1 -0
  1052. package/dist/ir/int32-slots.d.ts +6 -0
  1053. package/dist/ir/int32-slots.js +154 -16
  1054. package/dist/ir/int32-slots.js.map +1 -1
  1055. package/dist/ir/int32-slots.test.js +48 -0
  1056. package/dist/ir/int32-slots.test.js.map +1 -1
  1057. package/dist/ir/integer-loops.d.ts +12 -0
  1058. package/dist/ir/integer-loops.js +23 -0
  1059. package/dist/ir/integer-loops.js.map +1 -1
  1060. package/dist/ir/integer-ranges.d.ts +7 -1
  1061. package/dist/ir/integer-ranges.js +29 -2
  1062. package/dist/ir/integer-ranges.js.map +1 -1
  1063. package/dist/ir/intrinsic-signatures.js +2 -1
  1064. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1065. package/dist/ir/ir.d.ts +103 -5
  1066. package/dist/ir/ir.js +38 -4
  1067. package/dist/ir/ir.js.map +1 -1
  1068. package/dist/ir/ir.test.js +134 -1
  1069. package/dist/ir/ir.test.js.map +1 -1
  1070. package/dist/ir/jsval.js +211 -29
  1071. package/dist/ir/jsval.js.map +1 -1
  1072. package/dist/ir/jsval.test.js +120 -0
  1073. package/dist/ir/jsval.test.js.map +1 -1
  1074. package/dist/ir/loop-entry-ranges.d.ts +38 -0
  1075. package/dist/ir/loop-entry-ranges.js +259 -0
  1076. package/dist/ir/loop-entry-ranges.js.map +1 -0
  1077. package/dist/ir/loop-entry-ranges.test.d.ts +1 -0
  1078. package/dist/ir/loop-entry-ranges.test.js +191 -0
  1079. package/dist/ir/loop-entry-ranges.test.js.map +1 -0
  1080. package/dist/ir/node-index.d.ts +3 -0
  1081. package/dist/ir/node-index.js +6 -0
  1082. package/dist/ir/node-index.js.map +1 -1
  1083. package/dist/ir/numeric-call-specialization.d.ts +9 -6
  1084. package/dist/ir/numeric-call-specialization.js +164 -34
  1085. package/dist/ir/numeric-call-specialization.js.map +1 -1
  1086. package/dist/ir/paired-while-loops.js +23 -19
  1087. package/dist/ir/paired-while-loops.js.map +1 -1
  1088. package/dist/ir/parameter-versions.js +6 -3
  1089. package/dist/ir/parameter-versions.js.map +1 -1
  1090. package/dist/ir/receiver-readers.d.ts +10 -0
  1091. package/dist/ir/receiver-readers.js +65 -28
  1092. package/dist/ir/receiver-readers.js.map +1 -1
  1093. package/dist/ir/row-pairs.d.ts +9 -1
  1094. package/dist/ir/row-pairs.js +136 -43
  1095. package/dist/ir/row-pairs.js.map +1 -1
  1096. package/dist/ir/row-pairs.test.js +25 -5
  1097. package/dist/ir/row-pairs.test.js.map +1 -1
  1098. package/dist/ir/runtime-features.d.ts +33 -1
  1099. package/dist/ir/runtime-features.js +104 -6
  1100. package/dist/ir/runtime-features.js.map +1 -1
  1101. package/dist/ir/runtime-features.test.js +13 -0
  1102. package/dist/ir/runtime-features.test.js.map +1 -1
  1103. package/dist/ir/saturating-loop-jams.d.ts +24 -0
  1104. package/dist/ir/saturating-loop-jams.js +420 -0
  1105. package/dist/ir/saturating-loop-jams.js.map +1 -0
  1106. package/dist/ir/saturating-loop-jams.test.d.ts +1 -0
  1107. package/dist/ir/saturating-loop-jams.test.js +196 -0
  1108. package/dist/ir/saturating-loop-jams.test.js.map +1 -0
  1109. package/dist/ir/scalar-records.js +9 -3
  1110. package/dist/ir/scalar-records.js.map +1 -1
  1111. package/dist/ir/self-captures.js +2 -1
  1112. package/dist/ir/self-captures.js.map +1 -1
  1113. package/dist/ir/serialize.d.ts +5 -1
  1114. package/dist/ir/serialize.js +7 -1
  1115. package/dist/ir/serialize.js.map +1 -1
  1116. package/dist/ir/traverse.js +3 -0
  1117. package/dist/ir/traverse.js.map +1 -1
  1118. package/dist/ir/validate.js +91 -9
  1119. package/dist/ir/validate.js.map +1 -1
  1120. package/dist/library/ir-policy.js +1 -0
  1121. package/dist/library/ir-policy.js.map +1 -1
  1122. package/dist/native/cache.js +2 -0
  1123. package/dist/native/cache.js.map +1 -1
  1124. package/dist/native/cli.js +54 -7
  1125. package/dist/native/cli.js.map +1 -1
  1126. package/dist/native/compiler.d.ts +3 -0
  1127. package/dist/native/compiler.js +173 -36
  1128. package/dist/native/compiler.js.map +1 -1
  1129. package/dist/native/compiler.test.js +86 -3
  1130. package/dist/native/compiler.test.js.map +1 -1
  1131. package/dist/native/executable-cache.d.ts +20 -2
  1132. package/dist/native/executable-cache.js +17 -10
  1133. package/dist/native/executable-cache.js.map +1 -1
  1134. package/dist/native/executable-cache.test.js +38 -1
  1135. package/dist/native/executable-cache.test.js.map +1 -1
  1136. package/dist/native/linker-job.d.ts +71 -0
  1137. package/dist/native/linker-job.js +242 -0
  1138. package/dist/native/linker-job.js.map +1 -0
  1139. package/dist/native/linker-job.test.d.ts +1 -0
  1140. package/dist/native/linker-job.test.js +349 -0
  1141. package/dist/native/linker-job.test.js.map +1 -0
  1142. package/dist/native/prepare.js +15 -2
  1143. package/dist/native/prepare.js.map +1 -1
  1144. package/dist/native/sanitizer.js +10 -15
  1145. package/dist/native/sanitizer.js.map +1 -1
  1146. package/dist/native/sanitizer.test.js +152 -66
  1147. package/dist/native/sanitizer.test.js.map +1 -1
  1148. package/dist/native/toolchain.d.ts +11 -2
  1149. package/dist/native/toolchain.js +43 -17
  1150. package/dist/native/toolchain.js.map +1 -1
  1151. package/dist/native/toolchain.test.js +75 -0
  1152. package/dist/native/toolchain.test.js.map +1 -1
  1153. package/dist/node-islands/boundary.d.ts +37 -0
  1154. package/dist/node-islands/boundary.js +135 -0
  1155. package/dist/node-islands/boundary.js.map +1 -0
  1156. package/dist/node-islands/classify.js +1 -1
  1157. package/dist/node-islands/classify.js.map +1 -1
  1158. package/dist/node-islands/effect-gate.d.ts +11 -0
  1159. package/dist/node-islands/effect-gate.js +746 -0
  1160. package/dist/node-islands/effect-gate.js.map +1 -0
  1161. package/dist/node-islands/effect-gate.test.d.ts +1 -0
  1162. package/dist/node-islands/effect-gate.test.js +152 -0
  1163. package/dist/node-islands/effect-gate.test.js.map +1 -0
  1164. package/dist/node-islands/libnode-pack.d.ts +68 -0
  1165. package/dist/node-islands/libnode-pack.js +199 -0
  1166. package/dist/node-islands/libnode-pack.js.map +1 -0
  1167. package/dist/node-islands/libnode-pack.test.d.ts +1 -0
  1168. package/dist/node-islands/libnode-pack.test.js +258 -0
  1169. package/dist/node-islands/libnode-pack.test.js.map +1 -0
  1170. package/dist/node-islands/libnode.d.ts +32 -0
  1171. package/dist/node-islands/libnode.js +212 -0
  1172. package/dist/node-islands/libnode.js.map +1 -0
  1173. package/dist/node-islands/libnode.test.d.ts +1 -0
  1174. package/dist/node-islands/libnode.test.js +170 -0
  1175. package/dist/node-islands/libnode.test.js.map +1 -0
  1176. package/dist/node-islands/modules.d.ts +96 -0
  1177. package/dist/node-islands/modules.js +803 -0
  1178. package/dist/node-islands/modules.js.map +1 -0
  1179. package/dist/node-islands/modules.test.d.ts +1 -0
  1180. package/dist/node-islands/modules.test.js +276 -0
  1181. package/dist/node-islands/modules.test.js.map +1 -0
  1182. package/dist/node-islands/resolve.d.ts +8 -0
  1183. package/dist/node-islands/resolve.js +10 -0
  1184. package/dist/node-islands/resolve.js.map +1 -0
  1185. package/dist/node-islands/snapshot.d.ts +16 -0
  1186. package/dist/node-islands/snapshot.js +486 -0
  1187. package/dist/node-islands/snapshot.js.map +1 -0
  1188. package/dist/node-islands/snapshot.test.d.ts +1 -0
  1189. package/dist/node-islands/snapshot.test.js +56 -0
  1190. package/dist/node-islands/snapshot.test.js.map +1 -0
  1191. package/dist/project-config.d.ts +37 -1
  1192. package/dist/project-config.js +159 -7
  1193. package/dist/project-config.js.map +1 -1
  1194. package/dist/project-config.test.js +153 -0
  1195. package/dist/project-config.test.js.map +1 -1
  1196. package/dist/startup-cache.d.ts +1 -0
  1197. package/dist/startup-cache.js +1 -0
  1198. package/dist/startup-cache.js.map +1 -1
  1199. package/package.json +24 -21
  1200. package/surface-manifest.json +47 -7
@@ -6,438 +6,471 @@ import { isRefCounted, isUnitType, typeEquals } from "../../ir/ir.js";
6
6
  import { DYN_KIND } from "./dyn.js";
7
7
  import { LlvmUnsupportedError } from "./unsupported.js";
8
8
  import { f64Lit } from "./common.js";
9
+ import { emitRecordKeyGetOr } from "./expr-records.js";
9
10
  import { NULLABLE_NULL, SHAPE_WORD_INDEX, shapeWordHeader } from "./nullable-unions.js";
10
11
  import { emitUnionTag } from "./union-repr.js";
12
+ /** Each kind emits in a function of its own: emitting a nested chain of
13
+ * these expressions holds one emitControlExpr frame per level, and in an
14
+ * unoptimized build of the compiler a frame holds every local of the
15
+ * function. */
11
16
  export function emitControlExpr(host, e) {
12
- const B = host.B;
13
17
  switch (e.kind) {
14
- case "dynDestrCheck": {
15
- // RequireObjectCoercible with V8's destructuring TypeError. dyn
16
- // values check in the runtime helper and pass through unchanged.
17
- const v = host.emitExpr(e.value);
18
- const first = e.firstProp !== undefined ? host.cstr(e.firstProp) : "null";
19
- const helper = host.dyn.dynDestrCheckHelper();
20
- B.line(`call void @${helper}(ptr ${v.name}, ptr ${host.cstr(e.spelling)}, ptr ${first})`);
21
- host.emitPendingCheck();
22
- return v;
23
- }
24
- case "dynIterN": {
25
- // GetIterator + first-N steps as a fresh array (V8's exact
26
- // not-iterable TypeError on non-iterables) through the native dyn helper.
27
- const v = emitBorrowedInput(host, e.value);
28
- const helper = host.dyn.dynIterNHelper();
29
- const t = B.tmp();
30
- B.line(`${t} = call ptr @${helper}(ptr ${v.name}, ${host.sizeType} ${e.count}, ptr ${e.notIterableMessage ? host.cstr(e.notIterableMessage) : "null"})`);
31
- const out = host.own({ name: t, type: e.type });
32
- host.emitPendingCheck();
33
- return out;
34
- }
18
+ case "dynDestrCheck":
19
+ return emitDynDestrCheck(host, e);
20
+ case "dynIterN":
21
+ return emitDynIterN(host, e);
35
22
  case "toBool":
36
23
  return { name: host.truthy(host.emitUnionProjection(e.operand)), type: e.type };
37
- case "logical": {
38
- const tagSet = e.op === "||" ? unionTagSet(e) : null;
39
- if (tagSet)
40
- return { name: emitUnionTagSet(host, tagSet), type: e.type };
41
- // JS value semantics: the result is the deciding operand itself.
42
- // Left evaluates once, ownership moves into the result slot; when
43
- // the branch takes the right operand the stale left releases first
44
- // and the right runs in its own frame.
45
- const ty = host.llType(e.type);
46
- const l = host.emitExpr(e.left);
47
- host.toFrame(l);
48
- const slot = B.slot();
49
- B.entryAllocas.push(`${slot} = alloca ${ty}`);
50
- B.line(`store ${ty} ${l.name}, ptr ${slot}`);
51
- const integerSlot = e.type.kind === "f64" && l.uint32 !== undefined ? B.slot() : undefined;
52
- if (integerSlot !== undefined) {
53
- B.entryAllocas.push(`${integerSlot} = alloca i32`);
54
- B.line(`store i32 ${l.uint32}, ptr ${integerSlot}`);
55
- }
56
- const truthy = host.truthy(l);
57
- const rightLabel = B.newLabel("log.r");
58
- const joinLabel = B.newLabel("log.j");
59
- if (e.op === "&&")
60
- B.condBr(truthy, rightLabel, joinLabel);
61
- else
62
- B.condBr(truthy, joinLabel, rightLabel);
63
- B.startBlock(rightLabel);
64
- if (isRefCounted(e.type))
65
- host.releaseFrame(l.name, e.type);
66
- const rightInteger = host.emitBranchInto(slot, e.right, integerSlot);
67
- B.br(joinLabel);
68
- B.startBlock(joinLabel);
69
- const t = B.tmp();
70
- B.line(`${t} = load ${ty}, ptr ${slot}`);
71
- if (integerSlot !== undefined && rightInteger) {
72
- const uint32 = B.tmp();
73
- B.line(`${uint32} = load i32, ptr ${integerSlot}`);
74
- return { name: t, type: e.type, uint32 };
75
- }
76
- return host.own({ name: t, type: e.type });
77
- }
78
- case "ternary": {
79
- // Exactly one arm evaluates; each arm runs in its own frame and
80
- // moves the chosen value into the result slot.
81
- const ty = host.llType(e.type);
82
- const c = host.emitExpr(e.cond);
83
- const slot = B.slot();
84
- B.entryAllocas.push(`${slot} = alloca ${ty}`);
85
- const integerSlot = e.type.kind === "f64" ? B.slot() : undefined;
86
- if (integerSlot !== undefined)
87
- B.entryAllocas.push(`${integerSlot} = alloca i32`);
88
- const lt = B.newLabel("tern.t");
89
- const lf = B.newLabel("tern.f");
90
- const lj = B.newLabel("tern.j");
91
- B.condBr(c.name, lt, lf);
92
- B.startBlock(lt);
93
- const thenInteger = host.emitBranchInto(slot, e.then, integerSlot);
94
- B.br(lj);
95
- B.startBlock(lf);
96
- const elseInteger = host.emitBranchInto(slot, e.else_, integerSlot);
97
- B.br(lj);
98
- B.startBlock(lj);
99
- const t = B.tmp();
100
- B.line(`${t} = load ${ty}, ptr ${slot}`);
101
- // A view is available only when every incoming branch wrote it.
102
- // Incomplete views are unused and disappear during promotion.
103
- if (integerSlot !== undefined && thenInteger && elseInteger) {
104
- const uint32 = B.tmp();
105
- B.line(`${uint32} = load i32, ptr ${integerSlot}`);
106
- return { name: t, type: e.type, uint32 };
107
- }
108
- // A choice between interned literals is an interned literal: like a
109
- // strLit operand, nothing owns it (retain and release are no-ops).
110
- if (literalChoice(e))
111
- return host.markImmortal({ name: t, type: e.type });
112
- return host.own({ name: t, type: e.type });
24
+ case "logical":
25
+ return emitLogical(host, e);
26
+ case "ternary":
27
+ return emitTernary(host, e);
28
+ case "optChain":
29
+ return emitOptChain(host, e);
30
+ case "chainRecv":
31
+ return emitChainRecv(host, e);
32
+ case "orDefault":
33
+ return emitOrDefault(host, e);
34
+ case "nullish":
35
+ return emitNullish(host, e);
36
+ default: {
37
+ const _exhaustive = e;
38
+ void _exhaustive;
39
+ throw new InternalCompilerError("unreachable");
113
40
  }
114
- case "optChain": {
115
- // `a?.b` / `f?.()`: the nullish test inverted. The receiver
116
- // evaluates once into an ordinary frame temp (borrowed); on a unit
117
- // tag the result is the interned undefined arm and the body never
118
- // runs; otherwise the narrowed payload fills the bind slot (+1,
119
- // frame-owned through a SLOT entry — NULL on the unit path, where
120
- // the frame's release is a no-op) and the body reads it through
121
- // chainRecv.
122
- if (e.receiver.type.kind === "dyn") {
123
- // A dyn (dyn) receiver — the `rawName?.match(re)` step: the
124
- // nullish test reads the node's kind tag; the unit path is the
125
- // undefined dyn singleton (dyn results) or nothing (void
126
- // bodies), the body runs over the bound receiver otherwise.
127
- const r = host.emitExpr(e.receiver);
128
- const kd = host.dynKind(r.name);
129
- const isU = B.tmp();
130
- const isN = B.tmp();
131
- const isUnit = B.tmp();
132
- B.line(`${isU} = icmp eq i32 ${kd}, ${DYN_KIND.UNDEF}`);
133
- B.line(`${isN} = icmp eq i32 ${kd}, ${DYN_KIND.NULL}`);
134
- B.line(`${isUnit} = or i1 ${isU}, ${isN}`);
135
- const bind = B.slot();
136
- B.entryAllocas.push(`${bind} = alloca ptr`);
137
- B.line(`store ptr null, ptr ${bind}`);
138
- host.ownSlot(bind, e.receiver.type);
139
- host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
140
- if (e.type.kind === "void") {
141
- const lb = B.newLabel("ocd.b");
142
- const lj = B.newLabel("ocd.j");
143
- B.condBr(isUnit, lj, lb);
144
- B.startBlock(lb);
145
- const rr = B.tmp();
146
- B.line(`${rr} = call ptr @scr_dyn_retain_v(ptr ${r.name})`);
147
- B.line(`store ptr ${rr}, ptr ${bind}`);
148
- host.chainSlots.set(e.id, { name: bind, type: e.receiver.type, slot: true });
149
- host.frames.push([]);
150
- host.emitExpr(e.body);
151
- host.releaseTemps(host.frames.pop());
152
- host.chainSlots.delete(e.id);
153
- B.br(lj);
154
- B.startBlock(lj);
155
- return { name: "", type: e.type };
156
- }
157
- if (e.type.kind !== "dyn")
158
- throw new InternalCompilerError("llvm emitter bug: dyn optChain result kind");
159
- const slot = B.slot();
160
- B.entryAllocas.push(`${slot} = alloca ptr`);
161
- const lu = B.newLabel("ocd.u");
162
- const lb = B.newLabel("ocd.b");
163
- const lj = B.newLabel("ocd.j");
164
- B.condBr(isUnit, lu, lb);
165
- B.startBlock(lu);
166
- host.declare(`declare ptr @scr_dyn_undefined()`);
167
- const un = B.tmp();
168
- const ur = B.tmp();
169
- B.line(`${un} = call ptr @scr_dyn_undefined()`);
170
- B.line(`${ur} = call ptr @scr_dyn_retain_v(ptr ${un})`);
171
- B.line(`store ptr ${ur}, ptr ${slot}`);
172
- B.br(lj);
173
- B.startBlock(lb);
174
- const rr = B.tmp();
175
- B.line(`${rr} = call ptr @scr_dyn_retain_v(ptr ${r.name})`);
176
- B.line(`store ptr ${rr}, ptr ${bind}`);
177
- host.chainSlots.set(e.id, { name: bind, type: e.receiver.type, slot: true });
178
- host.emitBranchInto(slot, e.body);
179
- host.chainSlots.delete(e.id);
180
- B.br(lj);
181
- B.startBlock(lj);
182
- const t = B.tmp();
183
- B.line(`${t} = load ptr, ptr ${slot}`);
184
- return host.own({ name: t, type: e.type });
185
- }
186
- const { isUnit, bindPresent } = emitOptionalChainReceiver(host, e);
187
- if (e.type.kind === "void") {
188
- // Statement form (cb?.()): no result value at all.
189
- const lb = B.newLabel("oc.b");
190
- const lj = B.newLabel("oc.j");
191
- B.condBr(isUnit, lj, lb);
192
- B.startBlock(lb);
193
- bindPresent();
194
- host.frames.push([]);
195
- host.emitExpr(e.body);
196
- host.releaseTemps(host.frames.pop());
197
- host.chainSlots.delete(e.id);
198
- B.br(lj);
199
- B.startBlock(lj);
200
- return { name: "", type: e.type };
201
- }
202
- if (e.type.kind === "dyn") {
203
- // A dyn-typed chain (`pricing?.[key]` over an unknown-valued
204
- // index signature): the unit path is the undefined dyn value —
205
- // dyn represents undefined directly, no union wrapper exists.
206
- const slotD = B.slot();
207
- B.entryAllocas.push(`${slotD} = alloca ptr`);
208
- const lu = B.newLabel("ocu.u");
209
- const lb = B.newLabel("ocu.b");
210
- const lj = B.newLabel("ocu.j");
211
- B.condBr(isUnit, lu, lb);
212
- B.startBlock(lu);
213
- host.declare(`declare ptr @scr_dyn_undefined()`);
214
- host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
215
- const un = B.tmp();
216
- const ur = B.tmp();
217
- B.line(`${un} = call ptr @scr_dyn_undefined()`);
218
- B.line(`${ur} = call ptr @scr_dyn_retain_v(ptr ${un})`);
219
- B.line(`store ptr ${ur}, ptr ${slotD}`);
220
- B.br(lj);
221
- B.startBlock(lb);
222
- bindPresent();
223
- host.emitBranchInto(slotD, e.body);
224
- host.chainSlots.delete(e.id);
225
- B.br(lj);
226
- B.startBlock(lj);
227
- const t = B.tmp();
228
- B.line(`${t} = load ptr, ptr ${slotD}`);
229
- return host.own({ name: t, type: e.type });
230
- }
231
- if (e.type.kind !== "union")
232
- throw new LlvmUnsupportedError(`optChainResult:${e.type.kind}`, e.loc);
233
- const undefTag = undefinedArmTag(e.type, host.unionsById);
234
- if (undefTag < 0)
235
- throw new InternalCompilerError("llvm emitter bug: optChain result lacks its undefined arm");
236
- const ty = host.llType(e.type);
237
- const slot = B.slot();
238
- B.entryAllocas.push(`${slot} = alloca ${ty}`);
239
- const lu = B.newLabel("oc.u");
240
- const lb = B.newLabel("oc.b");
241
- const lj = B.newLabel("oc.j");
242
- B.condBr(isUnit, lu, lb);
243
- B.startBlock(lu);
244
- B.line(`store ptr ${host.unitInstanceRef(e.type.unionId, undefTag)}, ptr ${slot}`);
245
- B.br(lj);
41
+ }
42
+ }
43
+ function emitDynDestrCheck(host, e) {
44
+ const B = host.B;
45
+ // RequireObjectCoercible with V8's destructuring TypeError. dyn
46
+ // values check in the runtime helper and pass through unchanged.
47
+ const v = host.emitExpr(e.value);
48
+ const first = e.firstProp !== undefined ? host.cstr(e.firstProp) : "null";
49
+ const helper = host.dyn.dynDestrCheckHelper();
50
+ B.line(`call void @${helper}(ptr ${v.name}, ptr ${host.cstr(e.spelling)}, ptr ${first})`);
51
+ host.emitPendingCheck();
52
+ return v;
53
+ }
54
+ function emitDynIterN(host, e) {
55
+ const B = host.B;
56
+ // GetIterator + first-N steps as a fresh array (V8's exact
57
+ // not-iterable TypeError on non-iterables) through the native dyn helper.
58
+ const v = emitBorrowedInput(host, e.value);
59
+ const helper = host.dyn.dynIterNHelper();
60
+ const t = B.tmp();
61
+ B.line(`${t} = call ptr @${helper}(ptr ${v.name}, ${host.sizeType} ${e.count}, ptr ${e.notIterableMessage ? host.cstr(e.notIterableMessage) : "null"})`);
62
+ const out = host.own({ name: t, type: e.type });
63
+ host.emitPendingCheck();
64
+ return out;
65
+ }
66
+ function emitLogical(host, e) {
67
+ const B = host.B;
68
+ const tagSet = e.op === "||" ? unionTagSet(e) : null;
69
+ if (tagSet)
70
+ return { name: emitUnionTagSet(host, tagSet), type: e.type };
71
+ // JS value semantics: the result is the deciding operand itself.
72
+ // Left evaluates once, ownership moves into the result slot; when
73
+ // the branch takes the right operand the stale left releases first
74
+ // and the right runs in its own frame.
75
+ const ty = host.llType(e.type);
76
+ const l = host.emitExpr(e.left);
77
+ host.toFrame(l);
78
+ const slot = B.slot();
79
+ B.entryAllocas.push(`${slot} = alloca ${ty}`);
80
+ B.line(`store ${ty} ${l.name}, ptr ${slot}`);
81
+ const integerSlot = e.type.kind === "f64" && l.uint32 !== undefined ? B.slot() : undefined;
82
+ if (integerSlot !== undefined) {
83
+ B.entryAllocas.push(`${integerSlot} = alloca i32`);
84
+ B.line(`store i32 ${l.uint32}, ptr ${integerSlot}`);
85
+ }
86
+ const truthy = host.truthy(l);
87
+ const rightLabel = B.newLabel("log.r");
88
+ const joinLabel = B.newLabel("log.j");
89
+ if (e.op === "&&")
90
+ B.condBr(truthy, rightLabel, joinLabel);
91
+ else
92
+ B.condBr(truthy, joinLabel, rightLabel);
93
+ B.startBlock(rightLabel);
94
+ if (isRefCounted(e.type))
95
+ host.releaseFrame(l.name, e.type);
96
+ const rightInteger = host.emitBranchInto(slot, e.right, integerSlot);
97
+ B.br(joinLabel);
98
+ B.startBlock(joinLabel);
99
+ const t = B.tmp();
100
+ B.line(`${t} = load ${ty}, ptr ${slot}`);
101
+ if (integerSlot !== undefined && rightInteger) {
102
+ const uint32 = B.tmp();
103
+ B.line(`${uint32} = load i32, ptr ${integerSlot}`);
104
+ return { name: t, type: e.type, uint32 };
105
+ }
106
+ return host.own({ name: t, type: e.type });
107
+ }
108
+ function emitTernary(host, e) {
109
+ const B = host.B;
110
+ // Exactly one arm evaluates; each arm runs in its own frame and
111
+ // moves the chosen value into the result slot.
112
+ const ty = host.llType(e.type);
113
+ const c = host.emitExpr(e.cond);
114
+ const slot = B.slot();
115
+ B.entryAllocas.push(`${slot} = alloca ${ty}`);
116
+ const integerSlot = e.type.kind === "f64" ? B.slot() : undefined;
117
+ if (integerSlot !== undefined)
118
+ B.entryAllocas.push(`${integerSlot} = alloca i32`);
119
+ const lt = B.newLabel("tern.t");
120
+ const lf = B.newLabel("tern.f");
121
+ const lj = B.newLabel("tern.j");
122
+ B.condBr(c.name, lt, lf);
123
+ B.startBlock(lt);
124
+ const thenInteger = host.emitBranchInto(slot, e.then, integerSlot);
125
+ B.br(lj);
126
+ B.startBlock(lf);
127
+ const elseInteger = host.emitBranchInto(slot, e.else_, integerSlot);
128
+ B.br(lj);
129
+ B.startBlock(lj);
130
+ const t = B.tmp();
131
+ B.line(`${t} = load ${ty}, ptr ${slot}`);
132
+ // A view is available only when every incoming branch wrote it.
133
+ // Incomplete views are unused and disappear during promotion.
134
+ if (integerSlot !== undefined && thenInteger && elseInteger) {
135
+ const uint32 = B.tmp();
136
+ B.line(`${uint32} = load i32, ptr ${integerSlot}`);
137
+ return { name: t, type: e.type, uint32 };
138
+ }
139
+ // A choice between interned literals is an interned literal: like a
140
+ // strLit operand, nothing owns it (retain and release are no-ops).
141
+ if (literalChoice(e))
142
+ return host.markImmortal({ name: t, type: e.type });
143
+ return host.own({ name: t, type: e.type });
144
+ }
145
+ function emitOptChain(host, e) {
146
+ const B = host.B;
147
+ // `a?.b` / `f?.()`: the nullish test inverted. The receiver
148
+ // evaluates once into an ordinary frame temp (borrowed); on a unit
149
+ // tag the result is the interned undefined arm and the body never
150
+ // runs; otherwise the narrowed payload fills the bind slot (+1,
151
+ // frame-owned through a SLOT entry — NULL on the unit path, where
152
+ // the frame's release is a no-op) and the body reads it through
153
+ // chainRecv.
154
+ if (e.receiver.type.kind === "dyn") {
155
+ // A dyn (dyn) receiver — the `rawName?.match(re)` step: the
156
+ // nullish test reads the node's kind tag; the unit path is the
157
+ // undefined dyn singleton (dyn results) or nothing (void
158
+ // bodies), the body runs over the bound receiver otherwise.
159
+ const r = host.emitExpr(e.receiver);
160
+ const kd = host.dynKind(r.name);
161
+ const isU = B.tmp();
162
+ const isN = B.tmp();
163
+ const isUnit = B.tmp();
164
+ B.line(`${isU} = icmp eq i32 ${kd}, ${DYN_KIND.UNDEF}`);
165
+ B.line(`${isN} = icmp eq i32 ${kd}, ${DYN_KIND.NULL}`);
166
+ B.line(`${isUnit} = or i1 ${isU}, ${isN}`);
167
+ const bind = B.slot();
168
+ B.entryAllocas.push(`${bind} = alloca ptr`);
169
+ B.line(`store ptr null, ptr ${bind}`);
170
+ host.ownSlot(bind, e.receiver.type);
171
+ host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
172
+ if (e.type.kind === "void") {
173
+ const lb = B.newLabel("ocd.b");
174
+ const lj = B.newLabel("ocd.j");
175
+ B.condBr(isUnit, lj, lb);
246
176
  B.startBlock(lb);
247
- bindPresent();
248
- host.emitBranchInto(slot, e.body);
177
+ const rr = B.tmp();
178
+ B.line(`${rr} = call ptr @scr_dyn_retain_v(ptr ${r.name})`);
179
+ B.line(`store ptr ${rr}, ptr ${bind}`);
180
+ host.chainSlots.set(e.id, { name: bind, type: e.receiver.type, slot: true });
181
+ host.frames.push([]);
182
+ host.emitExpr(e.body);
183
+ host.releaseTemps(host.frames.pop());
249
184
  host.chainSlots.delete(e.id);
250
185
  B.br(lj);
251
186
  B.startBlock(lj);
252
- const t = B.tmp();
253
- B.line(`${t} = load ${ty}, ptr ${slot}`);
254
- return host.own({ name: t, type: e.type });
255
- }
256
- case "chainRecv": {
257
- const bound = host.chainSlots.get(e.id);
258
- if (!bound)
259
- throw new InternalCompilerError(`llvm emitter bug: chainRecv "${e.id}" outside its chain`);
260
- const v = B.tmp();
261
- B.line(`${v} = load ${host.llType(bound.type)}, ptr ${bound.name}`);
262
- if (!isRefCounted(e.type))
263
- return { name: v, type: e.type };
264
- return host.own({ name: host.retainFrame(v, e.type), type: e.type });
265
- }
266
- case "orDefault": {
267
- // `u || d` narrowed to the single non-unit arm: nullish's dance
268
- // with the union TRUTHY switch as the test — truthy extracts the
269
- // arm (+1 for ref kinds), falsy releases and runs the default.
270
- if (e.left.type.kind !== "union")
271
- throw new InternalCompilerError("llvm emitter bug: orDefault left is not a union");
272
- if (e.retag === undefined &&
273
- !host.nullableUnions.has(e.left.type.unionId) &&
274
- host.isStackUnionSource(e.left)) {
275
- // A stack box (`arr[i] || d`): test truthiness and extract the
276
- // payload (+1). The box is never retained or released.
277
- const l = host.emitUnionProjection(e.left);
278
- const ty = host.llType(e.type);
279
- const slot = B.slot();
280
- B.entryAllocas.push(`${slot} = alloca ${ty}`);
281
- const lt = B.newLabel("ord.t"), lf = B.newLabel("ord.f"), lj = B.newLabel("ord.j");
282
- B.condBr(host.truthy(l), lt, lf);
283
- B.startBlock(lt);
284
- B.line(`store ${ty} ${host.unionExtract(l.name, e.left.type.unionId, e.type)}, ptr ${slot}`);
285
- B.br(lj);
286
- B.startBlock(lf);
287
- host.emitBranchInto(slot, e.right);
288
- B.br(lj);
289
- B.startBlock(lj);
290
- const t = B.tmp();
291
- B.line(`${t} = load ${ty}, ptr ${slot}`);
292
- return host.own({ name: t, type: e.type });
293
- }
294
- const l = host.emitExpr(e.left);
295
- host.toFrame(l);
296
- const ty = host.llType(e.type);
297
- const slot = B.slot();
298
- B.entryAllocas.push(`${slot} = alloca ${ty}`);
299
- const truthy = host.truthy(l);
300
- const lt = B.newLabel("ord.t");
301
- const lf = B.newLabel("ord.f");
302
- const lj = B.newLabel("ord.j");
303
- B.condBr(truthy, lt, lf);
304
- B.startBlock(lt);
305
- if (e.retag !== undefined) {
306
- // Retagged shape: the whole box goes to the union→union helper,
307
- // which CONSUMES it (callees own their params) — no release on
308
- // this side. The store precedes the pending check so an unwind
309
- // leaves only the NULL dummy behind, in a slot nothing reads.
310
- const t = B.tmp();
311
- B.line(`${t} = call ${ty} @${host.callTarget(e.retag)}(${host.llType(e.left.type)} ${l.name})`);
312
- B.line(`store ${ty} ${t}, ptr ${slot}`);
313
- if (host.mayThrow.has(e.retag))
314
- host.emitPendingCheck();
315
- }
316
- else if (host.nullableUnions.single(e.left.type.unionId)) {
317
- // The owned nullable pointer IS the owned arm value.
318
- B.line(`store ${ty} ${l.name}, ptr ${slot}`);
319
- }
320
- else {
321
- B.line(`store ${ty} ${host.unionExtract(l.name, e.left.type.unionId, e.type)}, ptr ${slot}`);
322
- host.releaseFrame(l.name, e.left.type);
323
- }
324
- B.br(lj);
325
- B.startBlock(lf);
326
- host.releaseFrame(l.name, e.left.type);
327
- host.emitBranchInto(slot, e.right);
328
- B.br(lj);
329
- B.startBlock(lj);
330
- const t = B.tmp();
331
- B.line(`${t} = load ${ty}, ptr ${slot}`);
332
- return host.own({ name: t, type: e.type });
333
- }
334
- case "nullish": {
335
- // `a ?? b`: logical's move/release dance with the left's runtime
336
- // TAG against its unit arms as the test. Pass-through shape: the
337
- // result IS the left box. Narrowed shape: the single non-unit
338
- // arm's payload extracts (+1 for ref kinds) and the box releases.
339
- if (e.left.type.kind === "dyn") {
340
- // The native checked-value kind decides whether the left is
341
- // nullish; the right runs lazily in its branch.
342
- const l = host.emitExpr(e.left);
343
- host.toFrame(l);
344
- host.declare(`declare zeroext i1 @scr_dyn_is_nullish(ptr)`);
345
- const slot = B.slot();
346
- B.entryAllocas.push(`${slot} = alloca ptr`);
347
- const isN = B.tmp();
348
- B.line(`${isN} = call zeroext i1 @scr_dyn_is_nullish(ptr ${l.name})`);
349
- const lu = B.newLabel("nuld.u");
350
- const lv = B.newLabel("nuld.v");
351
- const lj = B.newLabel("nuld.j");
352
- B.condBr(isN, lu, lv);
353
- B.startBlock(lu);
354
- host.releaseFrame(l.name, e.left.type);
355
- host.emitBranchInto(slot, e.right);
356
- B.br(lj);
357
- B.startBlock(lv);
358
- B.line(`store ptr ${l.name}, ptr ${slot}`);
359
- B.br(lj);
360
- B.startBlock(lj);
361
- const t = B.tmp();
362
- B.line(`${t} = load ptr, ptr ${slot}`);
363
- return host.own({ name: t, type: e.type });
364
- }
365
- if (e.left.type.kind !== "union")
366
- throw new InternalCompilerError("llvm emitter bug: nullish left is not a union");
367
- const def = host.unionsById.get(e.left.type.unionId);
368
- if (!def)
369
- throw new InternalCompilerError(`llvm emitter bug: nullish of unknown union ${e.left.type.unionId}`);
370
- const unitTags = def.arms.flatMap((a, i) => (isUnitType(a) ? [i] : []));
371
- if (unitTags.length === 0)
372
- throw new InternalCompilerError("llvm emitter bug: nullish union lacks unit arms");
373
- const fused = emitNullishOptionalChain(host, e);
374
- if (fused)
375
- return fused;
376
- if (!typeEquals(e.type, e.left.type) &&
377
- (e.left.kind === "varRef" ||
378
- host.isStackUnionSource(e.left) ||
379
- host.nullableFieldGet(e.left) !== null)) {
380
- // Narrowed shape over a binding or a stack box (`arr[i] ?? d`,
381
- // `map.get(k) ?? d`): test the tag and extract the payload (+1).
382
- // The box is never retained or released. A binding is borrowed:
383
- // no code runs between its read and the extraction, and the
384
- // default never touches it. Bindings proven projection-only may
385
- // hold stack boxes, which must never reach RC entry points.
386
- const l = host.emitUnionProjection(e.left);
387
- const ty = host.llType(e.type);
388
- const slot = B.slot();
389
- B.entryAllocas.push(`${slot} = alloca ${ty}`);
390
- const isUnit = host.tagInSet(l.name, def.id, unitTags);
391
- const lu = B.newLabel("nul.u");
392
- const lv = B.newLabel("nul.v");
393
- const lj = B.newLabel("nul.j");
394
- B.condBr(isUnit, lu, lv);
395
- B.startBlock(lu);
396
- host.emitBranchInto(slot, e.right);
397
- B.br(lj);
398
- B.startBlock(lv);
399
- B.line(`store ${ty} ${host.unionExtract(l.name, def.id, e.type)}, ptr ${slot}`);
400
- B.br(lj);
401
- B.startBlock(lj);
402
- const t = B.tmp();
403
- B.line(`${t} = load ${ty}, ptr ${slot}`);
404
- return host.own({ name: t, type: e.type });
405
- }
406
- const l = host.emitExpr(e.left);
407
- host.toFrame(l);
408
- const ty = host.llType(e.type);
409
- const slot = B.slot();
410
- B.entryAllocas.push(`${slot} = alloca ${ty}`);
411
- const isUnit = host.tagInSet(l.name, def.id, unitTags);
412
- const lu = B.newLabel("nul.u");
413
- const lv = B.newLabel("nul.v");
414
- const lj = B.newLabel("nul.j");
415
- B.condBr(isUnit, lu, lv);
416
- B.startBlock(lu);
417
- host.releaseFrame(l.name, e.left.type);
418
- host.emitBranchInto(slot, e.right);
419
- B.br(lj);
420
- B.startBlock(lv);
421
- if (typeEquals(e.type, e.left.type) || host.nullableUnions.single(def.id)) {
422
- // Pass-through, or a nullable pointer that IS its owned arm value.
423
- B.line(`store ${ty} ${l.name}, ptr ${slot}`);
424
- }
425
- else {
426
- B.line(`store ${ty} ${host.unionExtract(l.name, def.id, e.type)}, ptr ${slot}`);
427
- host.releaseFrame(l.name, e.left.type);
428
- }
429
- B.br(lj);
430
- B.startBlock(lj);
431
- const t = B.tmp();
432
- B.line(`${t} = load ${ty}, ptr ${slot}`);
433
- return host.own({ name: t, type: e.type });
434
- }
435
- default: {
436
- const _exhaustive = e;
437
- void _exhaustive;
438
- throw new InternalCompilerError("unreachable");
187
+ return { name: "", type: e.type };
439
188
  }
189
+ if (e.type.kind !== "dyn")
190
+ throw new InternalCompilerError("llvm emitter bug: dyn optChain result kind");
191
+ const slot = B.slot();
192
+ B.entryAllocas.push(`${slot} = alloca ptr`);
193
+ const lu = B.newLabel("ocd.u");
194
+ const lb = B.newLabel("ocd.b");
195
+ const lj = B.newLabel("ocd.j");
196
+ B.condBr(isUnit, lu, lb);
197
+ B.startBlock(lu);
198
+ host.declare(`declare ptr @scr_dyn_undefined()`);
199
+ const un = B.tmp();
200
+ const ur = B.tmp();
201
+ B.line(`${un} = call ptr @scr_dyn_undefined()`);
202
+ B.line(`${ur} = call ptr @scr_dyn_retain_v(ptr ${un})`);
203
+ B.line(`store ptr ${ur}, ptr ${slot}`);
204
+ B.br(lj);
205
+ B.startBlock(lb);
206
+ const rr = B.tmp();
207
+ B.line(`${rr} = call ptr @scr_dyn_retain_v(ptr ${r.name})`);
208
+ B.line(`store ptr ${rr}, ptr ${bind}`);
209
+ host.chainSlots.set(e.id, { name: bind, type: e.receiver.type, slot: true });
210
+ host.emitBranchInto(slot, e.body);
211
+ host.chainSlots.delete(e.id);
212
+ B.br(lj);
213
+ B.startBlock(lj);
214
+ const t = B.tmp();
215
+ B.line(`${t} = load ptr, ptr ${slot}`);
216
+ return host.own({ name: t, type: e.type });
440
217
  }
218
+ const { isUnit, bindPresent } = emitOptionalChainReceiver(host, e);
219
+ if (e.type.kind === "void") {
220
+ // Statement form (cb?.()): no result value at all.
221
+ const lb = B.newLabel("oc.b");
222
+ const lj = B.newLabel("oc.j");
223
+ B.condBr(isUnit, lj, lb);
224
+ B.startBlock(lb);
225
+ bindPresent();
226
+ host.frames.push([]);
227
+ host.emitExpr(e.body);
228
+ host.releaseTemps(host.frames.pop());
229
+ host.chainSlots.delete(e.id);
230
+ B.br(lj);
231
+ B.startBlock(lj);
232
+ return { name: "", type: e.type };
233
+ }
234
+ if (e.type.kind === "dyn") {
235
+ // A dyn-typed chain (`pricing?.[key]` over an unknown-valued
236
+ // index signature): the unit path is the undefined dyn value —
237
+ // dyn represents undefined directly, no union wrapper exists.
238
+ const slotD = B.slot();
239
+ B.entryAllocas.push(`${slotD} = alloca ptr`);
240
+ const lu = B.newLabel("ocu.u");
241
+ const lb = B.newLabel("ocu.b");
242
+ const lj = B.newLabel("ocu.j");
243
+ B.condBr(isUnit, lu, lb);
244
+ B.startBlock(lu);
245
+ host.declare(`declare ptr @scr_dyn_undefined()`);
246
+ host.declare(`declare ptr @scr_dyn_retain_v(ptr)`);
247
+ const un = B.tmp();
248
+ const ur = B.tmp();
249
+ B.line(`${un} = call ptr @scr_dyn_undefined()`);
250
+ B.line(`${ur} = call ptr @scr_dyn_retain_v(ptr ${un})`);
251
+ B.line(`store ptr ${ur}, ptr ${slotD}`);
252
+ B.br(lj);
253
+ B.startBlock(lb);
254
+ bindPresent();
255
+ host.emitBranchInto(slotD, e.body);
256
+ host.chainSlots.delete(e.id);
257
+ B.br(lj);
258
+ B.startBlock(lj);
259
+ const t = B.tmp();
260
+ B.line(`${t} = load ptr, ptr ${slotD}`);
261
+ return host.own({ name: t, type: e.type });
262
+ }
263
+ if (e.type.kind !== "union")
264
+ throw new LlvmUnsupportedError(`optChainResult:${e.type.kind}`, e.loc);
265
+ const undefTag = undefinedArmTag(e.type, host.unionsById);
266
+ if (undefTag < 0)
267
+ throw new InternalCompilerError("llvm emitter bug: optChain result lacks its undefined arm");
268
+ const ty = host.llType(e.type);
269
+ const slot = B.slot();
270
+ B.entryAllocas.push(`${slot} = alloca ${ty}`);
271
+ const lu = B.newLabel("oc.u");
272
+ const lb = B.newLabel("oc.b");
273
+ const lj = B.newLabel("oc.j");
274
+ B.condBr(isUnit, lu, lb);
275
+ B.startBlock(lu);
276
+ B.line(`store ptr ${host.unitInstanceRef(e.type.unionId, undefTag)}, ptr ${slot}`);
277
+ B.br(lj);
278
+ B.startBlock(lb);
279
+ bindPresent();
280
+ host.emitBranchInto(slot, e.body);
281
+ host.chainSlots.delete(e.id);
282
+ B.br(lj);
283
+ B.startBlock(lj);
284
+ const t = B.tmp();
285
+ B.line(`${t} = load ${ty}, ptr ${slot}`);
286
+ return host.own({ name: t, type: e.type });
287
+ }
288
+ function emitChainRecv(host, e) {
289
+ const B = host.B;
290
+ const bound = host.chainSlots.get(e.id);
291
+ if (!bound)
292
+ throw new InternalCompilerError(`llvm emitter bug: chainRecv "${e.id}" outside its chain`);
293
+ const v = B.tmp();
294
+ B.line(`${v} = load ${host.llType(bound.type)}, ptr ${bound.name}`);
295
+ if (!isRefCounted(e.type))
296
+ return { name: v, type: e.type };
297
+ return host.own({ name: host.retainFrame(v, e.type), type: e.type });
298
+ }
299
+ function emitOrDefault(host, e) {
300
+ const B = host.B;
301
+ // `u || d` narrowed to the single non-unit arm: nullish's dance
302
+ // with the union TRUTHY switch as the test — truthy extracts the
303
+ // arm (+1 for ref kinds), falsy releases and runs the default.
304
+ if (e.left.type.kind !== "union")
305
+ throw new InternalCompilerError("llvm emitter bug: orDefault left is not a union");
306
+ if (e.retag === undefined &&
307
+ !host.nullableUnions.has(e.left.type.unionId) &&
308
+ host.isStackUnionSource(e.left)) {
309
+ // A stack box (`arr[i] || d`): test truthiness and extract the
310
+ // payload (+1). The box is never retained or released.
311
+ const l = host.emitUnionProjection(e.left);
312
+ const ty = host.llType(e.type);
313
+ const slot = B.slot();
314
+ B.entryAllocas.push(`${slot} = alloca ${ty}`);
315
+ const lt = B.newLabel("ord.t"), lf = B.newLabel("ord.f"), lj = B.newLabel("ord.j");
316
+ B.condBr(host.truthy(l), lt, lf);
317
+ B.startBlock(lt);
318
+ B.line(`store ${ty} ${host.unionExtract(l.name, e.left.type.unionId, e.type)}, ptr ${slot}`);
319
+ B.br(lj);
320
+ B.startBlock(lf);
321
+ host.emitBranchInto(slot, e.right);
322
+ B.br(lj);
323
+ B.startBlock(lj);
324
+ const t = B.tmp();
325
+ B.line(`${t} = load ${ty}, ptr ${slot}`);
326
+ return host.own({ name: t, type: e.type });
327
+ }
328
+ const l = host.emitExpr(e.left);
329
+ host.toFrame(l);
330
+ const ty = host.llType(e.type);
331
+ const slot = B.slot();
332
+ B.entryAllocas.push(`${slot} = alloca ${ty}`);
333
+ const truthy = host.truthy(l);
334
+ const lt = B.newLabel("ord.t");
335
+ const lf = B.newLabel("ord.f");
336
+ const lj = B.newLabel("ord.j");
337
+ B.condBr(truthy, lt, lf);
338
+ B.startBlock(lt);
339
+ if (e.retag !== undefined) {
340
+ // Retagged shape: the whole box goes to the union→union helper,
341
+ // which CONSUMES it (callees own their params) — no release on
342
+ // this side. The store precedes the pending check so an unwind
343
+ // leaves only the NULL dummy behind, in a slot nothing reads.
344
+ const t = B.tmp();
345
+ B.line(`${t} = call ${ty} @${host.callTarget(e.retag)}(${host.llType(e.left.type)} ${l.name})`);
346
+ B.line(`store ${ty} ${t}, ptr ${slot}`);
347
+ if (host.mayThrow.has(e.retag))
348
+ host.emitPendingCheck();
349
+ }
350
+ else if (host.nullableUnions.single(e.left.type.unionId)) {
351
+ // The owned nullable pointer IS the owned arm value.
352
+ B.line(`store ${ty} ${l.name}, ptr ${slot}`);
353
+ }
354
+ else {
355
+ B.line(`store ${ty} ${host.unionExtract(l.name, e.left.type.unionId, e.type)}, ptr ${slot}`);
356
+ host.releaseFrame(l.name, e.left.type);
357
+ }
358
+ B.br(lj);
359
+ B.startBlock(lf);
360
+ host.releaseFrame(l.name, e.left.type);
361
+ host.emitBranchInto(slot, e.right);
362
+ B.br(lj);
363
+ B.startBlock(lj);
364
+ const t = B.tmp();
365
+ B.line(`${t} = load ${ty}, ptr ${slot}`);
366
+ return host.own({ name: t, type: e.type });
367
+ }
368
+ function emitNullish(host, e) {
369
+ const B = host.B;
370
+ // `a ?? b`: logical's move/release dance with the left's runtime
371
+ // TAG against its unit arms as the test. Pass-through shape: the
372
+ // result IS the left box. Narrowed shape: the single non-unit
373
+ // arm's payload extracts (+1 for ref kinds) and the box releases.
374
+ if (e.left.type.kind === "dyn") {
375
+ // The native checked-value kind decides whether the left is
376
+ // nullish; the right runs lazily in its branch.
377
+ const l = host.emitExpr(e.left);
378
+ host.toFrame(l);
379
+ host.declare(`declare zeroext i1 @scr_dyn_is_nullish(ptr)`);
380
+ const slot = B.slot();
381
+ B.entryAllocas.push(`${slot} = alloca ptr`);
382
+ const isN = B.tmp();
383
+ B.line(`${isN} = call zeroext i1 @scr_dyn_is_nullish(ptr ${l.name})`);
384
+ const lu = B.newLabel("nuld.u");
385
+ const lv = B.newLabel("nuld.v");
386
+ const lj = B.newLabel("nuld.j");
387
+ B.condBr(isN, lu, lv);
388
+ B.startBlock(lu);
389
+ host.releaseFrame(l.name, e.left.type);
390
+ host.emitBranchInto(slot, e.right);
391
+ B.br(lj);
392
+ B.startBlock(lv);
393
+ B.line(`store ptr ${l.name}, ptr ${slot}`);
394
+ B.br(lj);
395
+ B.startBlock(lj);
396
+ const t = B.tmp();
397
+ B.line(`${t} = load ptr, ptr ${slot}`);
398
+ return host.own({ name: t, type: e.type });
399
+ }
400
+ if (e.left.type.kind !== "union")
401
+ throw new InternalCompilerError("llvm emitter bug: nullish left is not a union");
402
+ const def = host.unionsById.get(e.left.type.unionId);
403
+ if (!def)
404
+ throw new InternalCompilerError(`llvm emitter bug: nullish of unknown union ${e.left.type.unionId}`);
405
+ const unitTags = def.arms.flatMap((a, i) => (isUnitType(a) ? [i] : []));
406
+ if (unitTags.length === 0)
407
+ throw new InternalCompilerError("llvm emitter bug: nullish union lacks unit arms");
408
+ const fused = emitNullishOptionalChain(host, e);
409
+ if (fused)
410
+ return fused;
411
+ if (e.left.kind === "recordKeyGet" &&
412
+ e.left.missNaN !== true &&
413
+ typeEquals(e.type, e.left.type) &&
414
+ storesNoUnit(host, e.left))
415
+ return emitRecordKeyGetOr(host, e.left, e.right);
416
+ if (!typeEquals(e.type, e.left.type) &&
417
+ (e.left.kind === "varRef" ||
418
+ host.isStackUnionSource(e.left) ||
419
+ host.nullableFieldGet(e.left) !== null)) {
420
+ // Narrowed shape over a binding or a stack box (`arr[i] ?? d`,
421
+ // `map.get(k) ?? d`): test the tag and extract the payload (+1).
422
+ // The box is never retained or released. A binding is borrowed:
423
+ // no code runs between its read and the extraction, and the
424
+ // default never touches it. Bindings proven projection-only may
425
+ // hold stack boxes, which must never reach RC entry points.
426
+ const l = host.emitUnionProjection(e.left);
427
+ const ty = host.llType(e.type);
428
+ const slot = B.slot();
429
+ B.entryAllocas.push(`${slot} = alloca ${ty}`);
430
+ const isUnit = host.tagInSet(l.name, def.id, unitTags);
431
+ const lu = B.newLabel("nul.u");
432
+ const lv = B.newLabel("nul.v");
433
+ const lj = B.newLabel("nul.j");
434
+ B.condBr(isUnit, lu, lv);
435
+ B.startBlock(lu);
436
+ host.emitBranchInto(slot, e.right);
437
+ B.br(lj);
438
+ B.startBlock(lv);
439
+ B.line(`store ${ty} ${host.unionExtract(l.name, def.id, e.type)}, ptr ${slot}`);
440
+ B.br(lj);
441
+ B.startBlock(lj);
442
+ const t = B.tmp();
443
+ B.line(`${t} = load ${ty}, ptr ${slot}`);
444
+ return host.own({ name: t, type: e.type });
445
+ }
446
+ const l = host.emitExpr(e.left);
447
+ host.toFrame(l);
448
+ const ty = host.llType(e.type);
449
+ const slot = B.slot();
450
+ B.entryAllocas.push(`${slot} = alloca ${ty}`);
451
+ const isUnit = host.tagInSet(l.name, def.id, unitTags);
452
+ const lu = B.newLabel("nul.u");
453
+ const lv = B.newLabel("nul.v");
454
+ const lj = B.newLabel("nul.j");
455
+ B.condBr(isUnit, lu, lv);
456
+ B.startBlock(lu);
457
+ host.releaseFrame(l.name, e.left.type);
458
+ host.emitBranchInto(slot, e.right);
459
+ B.br(lj);
460
+ B.startBlock(lv);
461
+ if (typeEquals(e.type, e.left.type) || host.nullableUnions.single(def.id)) {
462
+ // Pass-through, or a nullable pointer that IS its owned arm value.
463
+ B.line(`store ${ty} ${l.name}, ptr ${slot}`);
464
+ }
465
+ else {
466
+ B.line(`store ${ty} ${host.unionExtract(l.name, def.id, e.type)}, ptr ${slot}`);
467
+ host.releaseFrame(l.name, e.left.type);
468
+ }
469
+ B.br(lj);
470
+ B.startBlock(lj);
471
+ const t = B.tmp();
472
+ B.line(`${t} = load ${ty}, ptr ${slot}`);
473
+ return host.own({ name: t, type: e.type });
441
474
  }
442
475
  /** The receiver half of a union-receiver `a?.b`. The receiver evaluates
443
476
  * once; `isUnit` tests its unit arms, and `bindPresent` fills the chain's
@@ -459,10 +492,7 @@ export function emitOptionalChainReceiver(host, e) {
459
492
  // `owner.field?.member`: a receiver projected from a borrowable owner
460
493
  // needs no reference of its own while the body cannot remove an edge
461
494
  // (so nothing can overwrite the projection before the body finishes).
462
- const borrowReceiver = !multiple &&
463
- isRefCounted(narrowed) &&
464
- host.canBorrowReceiver(e.receiver) &&
465
- host.referenceEffects.preserves(e.body);
495
+ const borrowReceiver = !multiple && isRefCounted(narrowed) && borrowsChainReceiver(host, e.receiver, e.body);
466
496
  // An optional array read of a nullable-pointer union is the element
467
497
  // pointer itself, read inline and owned by the statement frame until
468
498
  // the body finishes; the bind slot borrows it like an emitExpr value.
@@ -515,6 +545,17 @@ export function emitOptionalChainReceiver(host, e) {
515
545
  },
516
546
  };
517
547
  }
548
+ /** An optional chain's receiver can lend its payload to the bind slot when
549
+ * the body leaves the receiver's locations alone: it removes no edge at
550
+ * all, or it writes none of the locations the receiver reads. */
551
+ function borrowsChainReceiver(host, receiver, body) {
552
+ if (!host.canBorrowReceiver(receiver))
553
+ return false;
554
+ if (host.referenceEffects.preserves(body))
555
+ return true;
556
+ const writes = host.referenceWrites;
557
+ return writes !== null && host.unwrittenRead(receiver, writes.expr(body));
558
+ }
518
559
  /** `a?.b ?? d` narrowed to the chain body's present arm. The body wraps a
519
560
  * value of the result type in a non-unit arm, so the default runs exactly
520
561
  * when the receiver is nullish and the intermediate result box is never
@@ -540,14 +581,18 @@ function emitNullishOptionalChain(host, e) {
540
581
  return null;
541
582
  const B = host.B;
542
583
  const narrowed = receiverDef.arms[present[0]];
543
- const r = host.canStackReceiver(chain.receiver)
584
+ // A receiver read from a location the body cannot write lends its
585
+ // payload to the bind slot for the whole body (`table[k]?.(…) ?? d`).
586
+ const borrowed = isRefCounted(narrowed) && borrowsChainReceiver(host, chain.receiver, chain.body.value);
587
+ const r = borrowed || host.canStackReceiver(chain.receiver)
544
588
  ? host.emitReadReceiver(chain.receiver)
545
589
  : host.emitExpr(chain.receiver);
546
590
  const bindTy = host.llType(narrowed);
547
591
  const bind = B.slot();
548
592
  B.entryAllocas.push(`${bind} = alloca ${bindTy}`);
549
593
  B.line(`store ${bindTy} ${bindTy === "ptr" ? "null" : bindTy === "double" ? f64Lit(0) : "false"}, ptr ${bind}`);
550
- host.ownSlot(bind, narrowed);
594
+ if (!borrowed)
595
+ host.ownSlot(bind, narrowed);
551
596
  const isUnit = host.tagInSet(r.name, receiverDef.id, unitTags);
552
597
  const ty = host.llType(e.type);
553
598
  const slot = B.slot();
@@ -558,7 +603,10 @@ function emitNullishOptionalChain(host, e) {
558
603
  host.emitBranchInto(slot, e.right);
559
604
  B.br(lj);
560
605
  B.startBlock(lb);
561
- B.line(`store ${bindTy} ${host.unionExtract(r.name, receiverDef.id, narrowed)}, ptr ${bind}`);
606
+ const payload = borrowed
607
+ ? host.unionPeek(r.name, receiverDef.id)
608
+ : host.unionExtract(r.name, receiverDef.id, narrowed);
609
+ B.line(`store ${bindTy} ${payload}, ptr ${bind}`);
562
610
  host.chainSlots.set(chain.id, { name: bind, type: narrowed, slot: true });
563
611
  host.emitBranchInto(slot, chain.body.value);
564
612
  host.chainSlots.delete(chain.id);
@@ -652,4 +700,15 @@ function emitUnionTagSet(host, set) {
652
700
  B.line(`${t} = phi i1 [ true, %${yes} ], [ false, %${no} ]`);
653
701
  return t;
654
702
  }
703
+ /** Every value a keyed read can hit is present (no stored undefined or
704
+ * null), so only a missing key yields the read's unit arm. */
705
+ function storesNoUnit(host, e) {
706
+ const shape = host.recordShape(e.shapeId);
707
+ const holdsUnit = (t) => isUnitType(t) ||
708
+ t.kind === "dyn" ||
709
+ (t.kind === "union" && (host.unionsById.get(t.unionId)?.arms ?? []).some(isUnitType));
710
+ if (shape.indexValue !== undefined && holdsUnit(shape.indexValue))
711
+ return false;
712
+ return e.overflowOnly === true || !shape.fields.some((f) => holdsUnit(f.type));
713
+ }
655
714
  //# sourceMappingURL=expr-control.js.map