@scriptc/compiler 0.2.3 → 0.2.5

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 (1124) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +915 -215
  2. package/ambient/scriptc-overrides.d.ts +5 -1
  3. package/ambient/scriptc.d.ts +22 -2
  4. package/dist/backend/build-cache.d.ts +4 -0
  5. package/dist/backend/build-cache.js +16 -2
  6. package/dist/backend/build-cache.js.map +1 -1
  7. package/dist/backend/cycle-analysis.js +17 -5
  8. package/dist/backend/cycle-analysis.js.map +1 -1
  9. package/dist/backend/cycle-analysis.test.js +50 -11
  10. package/dist/backend/cycle-analysis.test.js.map +1 -1
  11. package/dist/backend/debug-symbols.js.map +1 -1
  12. package/dist/backend/executable-features.js +2 -1
  13. package/dist/backend/executable-features.js.map +1 -1
  14. package/dist/backend/external-c.d.ts +13 -6
  15. package/dist/backend/external-c.js +15 -3
  16. package/dist/backend/external-c.js.map +1 -1
  17. package/dist/backend/ffi-callbacks.js +6 -9
  18. package/dist/backend/ffi-callbacks.js.map +1 -1
  19. package/dist/backend/library-identity-markers.js.map +1 -1
  20. package/dist/backend/library-pack.d.ts +1 -1
  21. package/dist/backend/library-pack.js +81 -24
  22. package/dist/backend/library-pack.js.map +1 -1
  23. package/dist/backend/link-plan-core.js +9 -2
  24. package/dist/backend/link-plan-core.js.map +1 -1
  25. package/dist/backend/link-plan.d.ts +1 -1
  26. package/dist/backend/link-plan.js +4 -5
  27. package/dist/backend/link-plan.js.map +1 -1
  28. package/dist/backend/linker.d.ts +1 -1
  29. package/dist/backend/linker.js +42 -23
  30. package/dist/backend/linker.js.map +1 -1
  31. package/dist/backend/literals.js +5 -4
  32. package/dist/backend/literals.js.map +1 -1
  33. package/dist/backend/literals.test.js +30 -5
  34. package/dist/backend/literals.test.js.map +1 -1
  35. package/dist/backend/llvm/blocks.test.js +5 -2
  36. package/dist/backend/llvm/blocks.test.js.map +1 -1
  37. package/dist/backend/llvm/borrowed-inputs.d.ts +15 -0
  38. package/dist/backend/llvm/borrowed-inputs.js +28 -0
  39. package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
  40. package/dist/backend/llvm/borrowed-receivers.js +43 -19
  41. package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
  42. package/dist/backend/llvm/byte-numbers.d.ts +10 -0
  43. package/dist/backend/llvm/byte-numbers.js +240 -0
  44. package/dist/backend/llvm/byte-numbers.js.map +1 -0
  45. package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
  46. package/dist/backend/llvm/bytes-bounds.js +240 -0
  47. package/dist/backend/llvm/bytes-bounds.js.map +1 -0
  48. package/dist/backend/llvm/call-lifetimes.d.ts +10 -0
  49. package/dist/backend/llvm/call-lifetimes.js +83 -20
  50. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  51. package/dist/backend/llvm/call-lifetimes.test.js +203 -18
  52. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  53. package/dist/backend/llvm/checked-value-lifetimes.d.ts +13 -0
  54. package/dist/backend/llvm/checked-value-lifetimes.js +45 -0
  55. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
  56. package/dist/backend/llvm/classes.js +16 -12
  57. package/dist/backend/llvm/classes.js.map +1 -1
  58. package/dist/backend/llvm/common.js +4 -1
  59. package/dist/backend/llvm/common.js.map +1 -1
  60. package/dist/backend/llvm/counted-loops.d.ts +6 -0
  61. package/dist/backend/llvm/counted-loops.js +35 -0
  62. package/dist/backend/llvm/counted-loops.js.map +1 -0
  63. package/dist/backend/llvm/debug-info.js +33 -13
  64. package/dist/backend/llvm/debug-info.js.map +1 -1
  65. package/dist/backend/llvm/debug-info.test.js +28 -6
  66. package/dist/backend/llvm/debug-info.test.js.map +1 -1
  67. package/dist/backend/llvm/dyn.js +68 -22
  68. package/dist/backend/llvm/dyn.js.map +1 -1
  69. package/dist/backend/llvm/emitter.d.ts +34 -12
  70. package/dist/backend/llvm/emitter.js +357 -124
  71. package/dist/backend/llvm/emitter.js.map +1 -1
  72. package/dist/backend/llvm/emitter.test.js +237 -46
  73. package/dist/backend/llvm/emitter.test.js.map +1 -1
  74. package/dist/backend/llvm/expr-async.js +28 -8
  75. package/dist/backend/llvm/expr-async.js.map +1 -1
  76. package/dist/backend/llvm/expr-bytes.d.ts +4 -4
  77. package/dist/backend/llvm/expr-bytes.js +78 -36
  78. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  79. package/dist/backend/llvm/expr-callbacks.js +10 -4
  80. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  81. package/dist/backend/llvm/expr-calls.js +40 -21
  82. package/dist/backend/llvm/expr-calls.js.map +1 -1
  83. package/dist/backend/llvm/expr-containers.d.ts +4 -1
  84. package/dist/backend/llvm/expr-containers.js +157 -76
  85. package/dist/backend/llvm/expr-containers.js.map +1 -1
  86. package/dist/backend/llvm/expr-context.d.ts +11 -0
  87. package/dist/backend/llvm/expr-control.js +27 -8
  88. package/dist/backend/llvm/expr-control.js.map +1 -1
  89. package/dist/backend/llvm/expr-dispatch.js +3 -1
  90. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  91. package/dist/backend/llvm/expr-dynamic.js +50 -33
  92. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  93. package/dist/backend/llvm/expr-island.js +26 -6
  94. package/dist/backend/llvm/expr-island.js.map +1 -1
  95. package/dist/backend/llvm/expr-primitives.js +139 -37
  96. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  97. package/dist/backend/llvm/expr-primitives.test.js +43 -1
  98. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  99. package/dist/backend/llvm/expr-records.js +16 -9
  100. package/dist/backend/llvm/expr-records.js.map +1 -1
  101. package/dist/backend/llvm/expr-stream-bridges.js +44 -26
  102. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  103. package/dist/backend/llvm/expr-stream-bridges.test.js +51 -14
  104. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  105. package/dist/backend/llvm/expr-stream-callbacks.js +34 -14
  106. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  107. package/dist/backend/llvm/integer-values.d.ts +10 -0
  108. package/dist/backend/llvm/integer-values.js +52 -0
  109. package/dist/backend/llvm/integer-values.js.map +1 -0
  110. package/dist/backend/llvm/integer-views.d.ts +7 -0
  111. package/dist/backend/llvm/integer-views.js +83 -0
  112. package/dist/backend/llvm/integer-views.js.map +1 -0
  113. package/dist/backend/llvm/integer-views.test.d.ts +1 -0
  114. package/dist/backend/llvm/integer-views.test.js +69 -0
  115. package/dist/backend/llvm/integer-views.test.js.map +1 -0
  116. package/dist/backend/llvm/lib-abi.js +13 -4
  117. package/dist/backend/llvm/lib-abi.js.map +1 -1
  118. package/dist/backend/llvm/lib-connect.js +7 -1
  119. package/dist/backend/llvm/lib-connect.js.map +1 -1
  120. package/dist/backend/llvm/lib-datagram.js +35 -10
  121. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  122. package/dist/backend/llvm/lib-dispatch.js +36 -15
  123. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  124. package/dist/backend/llvm/lib-filesystem.js +38 -23
  125. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  126. package/dist/backend/llvm/lib-http2.js +60 -15
  127. package/dist/backend/llvm/lib-http2.js.map +1 -1
  128. package/dist/backend/llvm/lib-lookup.js +12 -5
  129. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  130. package/dist/backend/llvm/lib-network.js +97 -31
  131. package/dist/backend/llvm/lib-network.js.map +1 -1
  132. package/dist/backend/llvm/lib-process.js +57 -14
  133. package/dist/backend/llvm/lib-process.js.map +1 -1
  134. package/dist/backend/llvm/lib-shared.js +107 -31
  135. package/dist/backend/llvm/lib-shared.js.map +1 -1
  136. package/dist/backend/llvm/lib-stream.js +33 -14
  137. package/dist/backend/llvm/lib-stream.js.map +1 -1
  138. package/dist/backend/llvm/lib-test.js +21 -7
  139. package/dist/backend/llvm/lib-test.js.map +1 -1
  140. package/dist/backend/llvm/lib-tls.js +69 -20
  141. package/dist/backend/llvm/lib-tls.js.map +1 -1
  142. package/dist/backend/llvm/local-array-reads.d.ts +3 -4
  143. package/dist/backend/llvm/local-array-reads.js +100 -121
  144. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  145. package/dist/backend/llvm/local-array-reads.test.js +379 -71
  146. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  147. package/dist/backend/llvm/local-union-storage.d.ts +25 -0
  148. package/dist/backend/llvm/local-union-storage.js +109 -0
  149. package/dist/backend/llvm/local-union-storage.js.map +1 -0
  150. package/dist/backend/llvm/local-union-storage.test.d.ts +1 -0
  151. package/dist/backend/llvm/local-union-storage.test.js +210 -0
  152. package/dist/backend/llvm/local-union-storage.test.js.map +1 -0
  153. package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -2
  154. package/dist/backend/llvm/map-read-lifetimes.js +46 -16
  155. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  156. package/dist/backend/llvm/map-read-lifetimes.test.js +93 -17
  157. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  158. package/dist/backend/llvm/reference-effects.d.ts +23 -0
  159. package/dist/backend/llvm/reference-effects.js +179 -0
  160. package/dist/backend/llvm/reference-effects.js.map +1 -0
  161. package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
  162. package/dist/backend/llvm/reference-effects.test.js +157 -0
  163. package/dist/backend/llvm/reference-effects.test.js.map +1 -0
  164. package/dist/backend/llvm/shapes.d.ts +7 -4
  165. package/dist/backend/llvm/shapes.js +82 -22
  166. package/dist/backend/llvm/shapes.js.map +1 -1
  167. package/dist/backend/llvm/shapes.test.js +3 -1
  168. package/dist/backend/llvm/shapes.test.js.map +1 -1
  169. package/dist/backend/llvm/split.js +4 -4
  170. package/dist/backend/llvm/split.js.map +1 -1
  171. package/dist/backend/llvm/split.test.js +14 -6
  172. package/dist/backend/llvm/split.test.js.map +1 -1
  173. package/dist/backend/llvm/stack-unions.js +14 -5
  174. package/dist/backend/llvm/stack-unions.js.map +1 -1
  175. package/dist/backend/llvm/stack-unions.test.js +172 -32
  176. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  177. package/dist/backend/llvm/string-construction.d.ts +10 -0
  178. package/dist/backend/llvm/string-construction.js +38 -0
  179. package/dist/backend/llvm/string-construction.js.map +1 -0
  180. package/dist/backend/llvm/string-construction.test.d.ts +1 -0
  181. package/dist/backend/llvm/string-construction.test.js +90 -0
  182. package/dist/backend/llvm/string-construction.test.js.map +1 -0
  183. package/dist/backend/llvm/string-lifetimes.d.ts +2 -2
  184. package/dist/backend/llvm/string-lifetimes.js +19 -11
  185. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  186. package/dist/backend/llvm/string-lifetimes.test.js +127 -32
  187. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  188. package/dist/backend/llvm/switch-dispatch.d.ts +9 -0
  189. package/dist/backend/llvm/switch-dispatch.js +114 -0
  190. package/dist/backend/llvm/switch-dispatch.js.map +1 -0
  191. package/dist/backend/llvm/switch-dispatch.test.d.ts +1 -0
  192. package/dist/backend/llvm/switch-dispatch.test.js +83 -0
  193. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -0
  194. package/dist/backend/llvm/unsupported.js.map +1 -1
  195. package/dist/backend/llvm/walkers.js +6 -3
  196. package/dist/backend/llvm/walkers.js.map +1 -1
  197. package/dist/backend/mangle.js +9 -3
  198. package/dist/backend/mangle.js.map +1 -1
  199. package/dist/backend/may-throw.js +18 -8
  200. package/dist/backend/may-throw.js.map +1 -1
  201. package/dist/backend/may-throw.test.js +118 -22
  202. package/dist/backend/may-throw.test.js.map +1 -1
  203. package/dist/backend/native/artifact-stamps.d.ts +39 -0
  204. package/dist/backend/native/artifact-stamps.js +371 -0
  205. package/dist/backend/native/artifact-stamps.js.map +1 -0
  206. package/dist/backend/native/cache-warm.d.ts +24 -0
  207. package/dist/backend/native/cache-warm.js +80 -0
  208. package/dist/backend/native/cache-warm.js.map +1 -0
  209. package/dist/backend/native/compiler-fingerprint.d.ts +19 -0
  210. package/dist/backend/native/compiler-fingerprint.js +357 -0
  211. package/dist/backend/native/compiler-fingerprint.js.map +1 -0
  212. package/dist/backend/native/contracts.d.ts +314 -0
  213. package/dist/backend/native/contracts.js +2 -0
  214. package/dist/backend/native/contracts.js.map +1 -0
  215. package/dist/backend/native/dependency-files.d.ts +5 -0
  216. package/dist/backend/native/dependency-files.js +83 -0
  217. package/dist/backend/native/dependency-files.js.map +1 -0
  218. package/dist/backend/native/driver.d.ts +50 -0
  219. package/dist/backend/native/driver.js +294 -0
  220. package/dist/backend/native/driver.js.map +1 -0
  221. package/dist/backend/native/executable.d.ts +18 -0
  222. package/dist/backend/native/executable.js +1267 -0
  223. package/dist/backend/native/executable.js.map +1 -0
  224. package/dist/backend/native/library.d.ts +2 -0
  225. package/dist/backend/native/library.js +614 -0
  226. package/dist/backend/native/library.js.map +1 -0
  227. package/dist/backend/native/linker-fingerprint.d.ts +8 -0
  228. package/dist/backend/native/linker-fingerprint.js +174 -0
  229. package/dist/backend/native/linker-fingerprint.js.map +1 -0
  230. package/dist/backend/native/object-merge.d.ts +2 -0
  231. package/dist/backend/native/object-merge.js +154 -0
  232. package/dist/backend/native/object-merge.js.map +1 -0
  233. package/dist/backend/native/process.d.ts +17 -0
  234. package/dist/backend/native/process.js +42 -0
  235. package/dist/backend/native/process.js.map +1 -0
  236. package/dist/backend/native/program-shards.d.ts +21 -0
  237. package/dist/backend/native/program-shards.js +99 -0
  238. package/dist/backend/native/program-shards.js.map +1 -0
  239. package/dist/backend/native/runtime-inputs.d.ts +12 -0
  240. package/dist/backend/native/runtime-inputs.js +163 -0
  241. package/dist/backend/native/runtime-inputs.js.map +1 -0
  242. package/dist/backend/native/runtime-inputs.test.d.ts +1 -0
  243. package/dist/backend/native/runtime-inputs.test.js +64 -0
  244. package/dist/backend/native/runtime-inputs.test.js.map +1 -0
  245. package/dist/backend/native/runtime-objects.d.ts +16 -0
  246. package/dist/backend/native/runtime-objects.js +122 -0
  247. package/dist/backend/native/runtime-objects.js.map +1 -0
  248. package/dist/backend/native/session.d.ts +12 -0
  249. package/dist/backend/native/session.js +31 -0
  250. package/dist/backend/native/session.js.map +1 -0
  251. package/dist/backend/native/tool-identity.d.ts +37 -0
  252. package/dist/backend/native/tool-identity.js +310 -0
  253. package/dist/backend/native/tool-identity.js.map +1 -0
  254. package/dist/backend/native/trace-paths.d.ts +12 -0
  255. package/dist/backend/native/trace-paths.js +73 -0
  256. package/dist/backend/native/trace-paths.js.map +1 -0
  257. package/dist/backend/native/vendor.d.ts +1 -0
  258. package/dist/backend/native/vendor.js +12 -0
  259. package/dist/backend/native/vendor.js.map +1 -0
  260. package/dist/backend/native-codegen-core.js +2 -1
  261. package/dist/backend/native-codegen-core.js.map +1 -1
  262. package/dist/backend/native-codegen.d.ts +1 -1
  263. package/dist/backend/native-codegen.js +24 -13
  264. package/dist/backend/native-codegen.js.map +1 -1
  265. package/dist/backend/native-codegen.test.js +12 -9
  266. package/dist/backend/native-codegen.test.js.map +1 -1
  267. package/dist/backend/native-link-info-core.js +9 -5
  268. package/dist/backend/native-link-info-core.js.map +1 -1
  269. package/dist/backend/native-link-info.js +14 -5
  270. package/dist/backend/native-link-info.js.map +1 -1
  271. package/dist/backend/native-link-info.test.js +58 -13
  272. package/dist/backend/native-link-info.test.js.map +1 -1
  273. package/dist/backend/native-toolchain.d.ts +17 -450
  274. package/dist/backend/native-toolchain.js +17 -3971
  275. package/dist/backend/native-toolchain.js.map +1 -1
  276. package/dist/backend/native-toolchain.test.js +103 -72
  277. package/dist/backend/native-toolchain.test.js.map +1 -1
  278. package/dist/backend/native-tools.js +27 -8
  279. package/dist/backend/native-tools.js.map +1 -1
  280. package/dist/backend/object-localize.js +17 -14
  281. package/dist/backend/object-localize.js.map +1 -1
  282. package/dist/backend/object-localize.test.js +59 -12
  283. package/dist/backend/object-localize.test.js.map +1 -1
  284. package/dist/backend/runtime-pack-core.js +96 -49
  285. package/dist/backend/runtime-pack-core.js.map +1 -1
  286. package/dist/backend/runtime-pack-native.js +5 -3
  287. package/dist/backend/runtime-pack-native.js.map +1 -1
  288. package/dist/backend/runtime-pack-targets.test.js +87 -15
  289. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  290. package/dist/backend/runtime-pack.d.ts +1 -1
  291. package/dist/backend/runtime-pack.js +11 -12
  292. package/dist/backend/runtime-pack.js.map +1 -1
  293. package/dist/backend/runtime-pack.test.js +40 -24
  294. package/dist/backend/runtime-pack.test.js.map +1 -1
  295. package/dist/backend/source-locations.js.map +1 -1
  296. package/dist/backend/source-locations.test.js +7 -2
  297. package/dist/backend/source-locations.test.js.map +1 -1
  298. package/dist/backend/target-diagnostics.js +44 -14
  299. package/dist/backend/target-diagnostics.js.map +1 -1
  300. package/dist/backend/target-diagnostics.test.js +93 -20
  301. package/dist/backend/target-diagnostics.test.js.map +1 -1
  302. package/dist/backend/targets.js +230 -86
  303. package/dist/backend/targets.js.map +1 -1
  304. package/dist/backend/targets.test.js +32 -18
  305. package/dist/backend/targets.test.js.map +1 -1
  306. package/dist/backend/toolchain-environment.js +5 -1
  307. package/dist/backend/toolchain-environment.js.map +1 -1
  308. package/dist/backend/vendor-archives.d.ts +2 -2
  309. package/dist/backend/vendor-archives.js +84 -35
  310. package/dist/backend/vendor-archives.js.map +1 -1
  311. package/dist/backend/vendor-inputs.js +13 -1
  312. package/dist/backend/vendor-inputs.js.map +1 -1
  313. package/dist/backend/warm-cache.d.ts +1 -1
  314. package/dist/backend/warm-cache.js +33 -9
  315. package/dist/backend/warm-cache.js.map +1 -1
  316. package/dist/cli/command.js +39 -9
  317. package/dist/cli/command.js.map +1 -1
  318. package/dist/cli/output-options.js +14 -4
  319. package/dist/cli/output-options.js.map +1 -1
  320. package/dist/cli/paths.js.map +1 -1
  321. package/dist/cli/wasi-runner.js.map +1 -1
  322. package/dist/compat/fetch-profile.js +36 -35
  323. package/dist/compat/fetch-profile.js.map +1 -1
  324. package/dist/coverage/report.js +16 -17
  325. package/dist/coverage/report.js.map +1 -1
  326. package/dist/coverage/surface-manifest.js +112 -26
  327. package/dist/coverage/surface-manifest.js.map +1 -1
  328. package/dist/diagnostics/diagnostic.js +55 -16
  329. package/dist/diagnostics/diagnostic.js.map +1 -1
  330. package/dist/executable/executable-cache.d.ts +1 -1
  331. package/dist/executable/executable-cache.js +78 -48
  332. package/dist/executable/executable-cache.js.map +1 -1
  333. package/dist/executable/executable-cache.test.js +75 -26
  334. package/dist/executable/executable-cache.test.js.map +1 -1
  335. package/dist/executable/prepare.js +2 -2
  336. package/dist/executable/prepare.js.map +1 -1
  337. package/dist/ffi/ffi-manifest.js +78 -20
  338. package/dist/ffi/ffi-manifest.js.map +1 -1
  339. package/dist/ffi/ffi-manifest.test.js +96 -16
  340. package/dist/ffi/ffi-manifest.test.js.map +1 -1
  341. package/dist/format-integer.js.map +1 -1
  342. package/dist/frontend/analysis.js +12 -2
  343. package/dist/frontend/analysis.js.map +1 -1
  344. package/dist/frontend/arguments-usage.js.map +1 -1
  345. package/dist/frontend/binding-source.js +9 -3
  346. package/dist/frontend/binding-source.js.map +1 -1
  347. package/dist/frontend/builtin-modules.js +46 -2
  348. package/dist/frontend/builtin-modules.js.map +1 -1
  349. package/dist/frontend/cjs-resolve.js +40 -17
  350. package/dist/frontend/cjs-resolve.js.map +1 -1
  351. package/dist/frontend/cjs-syntax.js +31 -10
  352. package/dist/frontend/cjs-syntax.js.map +1 -1
  353. package/dist/frontend/comptime-node.test.js +10 -11
  354. package/dist/frontend/comptime-node.test.js.map +1 -1
  355. package/dist/frontend/dts-paths.js +7 -3
  356. package/dist/frontend/dts-paths.js.map +1 -1
  357. package/dist/frontend/fork-target.js +17 -12
  358. package/dist/frontend/fork-target.js.map +1 -1
  359. package/dist/frontend/function-completion.js +11 -6
  360. package/dist/frontend/function-completion.js.map +1 -1
  361. package/dist/frontend/helper-tokens.js +53 -6
  362. package/dist/frontend/helper-tokens.js.map +1 -1
  363. package/dist/frontend/helper-tokens.test.js +18 -2
  364. package/dist/frontend/helper-tokens.test.js.map +1 -1
  365. package/dist/frontend/inferred-js-diagnostics.js +32 -12
  366. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  367. package/dist/frontend/inferred-js-diagnostics.test.js +11 -15
  368. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  369. package/dist/frontend/input-tracker.js +11 -11
  370. package/dist/frontend/input-tracker.js.map +1 -1
  371. package/dist/frontend/input-tracker.test.js +4 -1
  372. package/dist/frontend/input-tracker.test.js.map +1 -1
  373. package/dist/frontend/lib-contract.js +38 -9
  374. package/dist/frontend/lib-contract.js.map +1 -1
  375. package/dist/frontend/literal-values.js.map +1 -1
  376. package/dist/frontend/literal-values.test.js +28 -8
  377. package/dist/frontend/literal-values.test.js.map +1 -1
  378. package/dist/frontend/lowering/abstract-equality.js +53 -10
  379. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  380. package/dist/frontend/lowering/array-indexed-mutation.d.ts +1 -1
  381. package/dist/frontend/lowering/array-indexed-mutation.js +108 -106
  382. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  383. package/dist/frontend/lowering/array-values.js +37 -14
  384. package/dist/frontend/lowering/array-values.js.map +1 -1
  385. package/dist/frontend/lowering/binding-analysis.d.ts +50 -0
  386. package/dist/frontend/lowering/binding-analysis.js +376 -0
  387. package/dist/frontend/lowering/binding-analysis.js.map +1 -0
  388. package/dist/frontend/lowering/builtin-calls.d.ts +9 -0
  389. package/dist/frontend/lowering/builtin-calls.js +60 -0
  390. package/dist/frontend/lowering/builtin-calls.js.map +1 -0
  391. package/dist/frontend/lowering/builtins/arguments.d.ts +43 -0
  392. package/dist/frontend/lowering/builtins/arguments.js +247 -0
  393. package/dist/frontend/lowering/builtins/arguments.js.map +1 -0
  394. package/dist/frontend/lowering/builtins/async-context.d.ts +52 -0
  395. package/dist/frontend/lowering/builtins/async-context.js +436 -0
  396. package/dist/frontend/lowering/builtins/async-context.js.map +1 -0
  397. package/dist/frontend/lowering/builtins/atomics.d.ts +15 -0
  398. package/dist/frontend/lowering/builtins/atomics.js +46 -0
  399. package/dist/frontend/lowering/builtins/atomics.js.map +1 -0
  400. package/dist/frontend/lowering/builtins/callable-aliases.d.ts +13 -0
  401. package/dist/frontend/lowering/builtins/callable-aliases.js +87 -0
  402. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -0
  403. package/dist/frontend/lowering/builtins/child-process-async.d.ts +18 -0
  404. package/dist/frontend/lowering/builtins/child-process-async.js +245 -0
  405. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -0
  406. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +21 -0
  407. package/dist/frontend/lowering/builtins/child-process-methods.js +362 -0
  408. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -0
  409. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +4 -0
  410. package/dist/frontend/lowering/builtins/child-process-sync.js +639 -0
  411. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -0
  412. package/dist/frontend/lowering/builtins/child-process.d.ts +55 -0
  413. package/dist/frontend/lowering/builtins/child-process.js +669 -0
  414. package/dist/frontend/lowering/builtins/child-process.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/compression.d.ts +7 -0
  416. package/dist/frontend/lowering/builtins/compression.js +115 -0
  417. package/dist/frontend/lowering/builtins/compression.js.map +1 -0
  418. package/dist/frontend/lowering/builtins/console.d.ts +10 -0
  419. package/dist/frontend/lowering/builtins/console.js +38 -0
  420. package/dist/frontend/lowering/builtins/console.js.map +1 -0
  421. package/dist/frontend/lowering/builtins/constants.d.ts +24 -0
  422. package/dist/frontend/lowering/builtins/constants.js +141 -0
  423. package/dist/frontend/lowering/builtins/constants.js.map +1 -0
  424. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  425. package/dist/frontend/lowering/builtins/crypto.js +517 -0
  426. package/dist/frontend/lowering/builtins/crypto.js.map +1 -0
  427. package/dist/frontend/lowering/builtins/dates.d.ts +7 -0
  428. package/dist/frontend/lowering/builtins/dates.js +101 -0
  429. package/dist/frontend/lowering/builtins/dates.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/environment.d.ts +34 -0
  431. package/dist/frontend/lowering/builtins/environment.js +95 -0
  432. package/dist/frontend/lowering/builtins/environment.js.map +1 -0
  433. package/dist/frontend/lowering/builtins/errors.d.ts +14 -0
  434. package/dist/frontend/lowering/builtins/errors.js +83 -0
  435. package/dist/frontend/lowering/builtins/errors.js.map +1 -0
  436. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +32 -0
  437. package/dist/frontend/lowering/builtins/filesystem-calls.js +678 -0
  438. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -0
  439. package/dist/frontend/lowering/builtins/filesystem.d.ts +108 -0
  440. package/dist/frontend/lowering/builtins/filesystem.js +1061 -0
  441. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -0
  442. package/dist/frontend/lowering/builtins/ipc.d.ts +8 -0
  443. package/dist/frontend/lowering/builtins/ipc.js +76 -0
  444. package/dist/frontend/lowering/builtins/ipc.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/json.d.ts +12 -0
  446. package/dist/frontend/lowering/builtins/json.js +387 -0
  447. package/dist/frontend/lowering/builtins/json.js.map +1 -0
  448. package/dist/frontend/lowering/builtins/module-bindings.d.ts +85 -0
  449. package/dist/frontend/lowering/builtins/module-bindings.js +346 -0
  450. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -0
  451. package/dist/frontend/lowering/builtins/module-calls.d.ts +8 -0
  452. package/dist/frontend/lowering/builtins/module-calls.js +303 -0
  453. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/module-resolution.d.ts +38 -0
  455. package/dist/frontend/lowering/builtins/module-resolution.js +344 -0
  456. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -0
  457. package/dist/frontend/lowering/builtins/numbers.d.ts +15 -0
  458. package/dist/frontend/lowering/builtins/numbers.js +124 -0
  459. package/dist/frontend/lowering/builtins/numbers.js.map +1 -0
  460. package/dist/frontend/lowering/builtins/operating-system.d.ts +13 -0
  461. package/dist/frontend/lowering/builtins/operating-system.js +148 -0
  462. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/performance.d.ts +13 -0
  464. package/dist/frontend/lowering/builtins/performance.js +100 -0
  465. package/dist/frontend/lowering/builtins/performance.js.map +1 -0
  466. package/dist/frontend/lowering/builtins/process.d.ts +50 -0
  467. package/dist/frontend/lowering/builtins/process.js +1138 -0
  468. package/dist/frontend/lowering/builtins/process.js.map +1 -0
  469. package/dist/frontend/lowering/builtins/promises.d.ts +14 -0
  470. package/dist/frontend/lowering/builtins/promises.js +356 -0
  471. package/dist/frontend/lowering/builtins/promises.js.map +1 -0
  472. package/dist/frontend/lowering/builtins/properties.d.ts +11 -0
  473. package/dist/frontend/lowering/builtins/properties.js +186 -0
  474. package/dist/frontend/lowering/builtins/properties.js.map +1 -0
  475. package/dist/frontend/lowering/builtins/querystring.d.ts +19 -0
  476. package/dist/frontend/lowering/builtins/querystring.js +150 -0
  477. package/dist/frontend/lowering/builtins/querystring.js.map +1 -0
  478. package/dist/frontend/lowering/builtins/readline.d.ts +13 -0
  479. package/dist/frontend/lowering/builtins/readline.js +138 -0
  480. package/dist/frontend/lowering/builtins/readline.js.map +1 -0
  481. package/dist/frontend/lowering/builtins/receiver-types.d.ts +5 -0
  482. package/dist/frontend/lowering/builtins/receiver-types.js +15 -0
  483. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -0
  484. package/dist/frontend/lowering/builtins/reflection.d.ts +13 -0
  485. package/dist/frontend/lowering/builtins/reflection.js +95 -0
  486. package/dist/frontend/lowering/builtins/reflection.js.map +1 -0
  487. package/dist/frontend/lowering/builtins/strings.d.ts +14 -0
  488. package/dist/frontend/lowering/builtins/strings.js +121 -0
  489. package/dist/frontend/lowering/builtins/strings.js.map +1 -0
  490. package/dist/frontend/lowering/builtins/text-codecs.d.ts +29 -0
  491. package/dist/frontend/lowering/builtins/text-codecs.js +590 -0
  492. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -0
  493. package/dist/frontend/lowering/builtins/timers.d.ts +22 -0
  494. package/dist/frontend/lowering/builtins/timers.js +180 -0
  495. package/dist/frontend/lowering/builtins/timers.js.map +1 -0
  496. package/dist/frontend/lowering/builtins/url.d.ts +37 -0
  497. package/dist/frontend/lowering/builtins/url.js +596 -0
  498. package/dist/frontend/lowering/builtins/url.js.map +1 -0
  499. package/dist/frontend/lowering/builtins/util-types.d.ts +7 -0
  500. package/dist/frontend/lowering/builtins/util-types.js +31 -0
  501. package/dist/frontend/lowering/builtins/util-types.js.map +1 -0
  502. package/dist/frontend/lowering/call-arguments.d.ts +72 -0
  503. package/dist/frontend/lowering/call-arguments.js +618 -0
  504. package/dist/frontend/lowering/call-arguments.js.map +1 -0
  505. package/dist/frontend/lowering/call-signatures.d.ts +115 -0
  506. package/dist/frontend/lowering/call-signatures.js +719 -0
  507. package/dist/frontend/lowering/call-signatures.js.map +1 -0
  508. package/dist/frontend/lowering/callback-arg.js.map +1 -1
  509. package/dist/frontend/lowering/checked-iterable-spread.js +53 -10
  510. package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -1
  511. package/dist/frontend/lowering/checked-promise-all.js +41 -9
  512. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  513. package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
  514. package/dist/frontend/lowering/class-callbacks.js +130 -27
  515. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  516. package/dist/frontend/lowering/class-construction.d.ts +1 -1
  517. package/dist/frontend/lowering/class-construction.js +247 -50
  518. package/dist/frontend/lowering/class-construction.js.map +1 -1
  519. package/dist/frontend/lowering/class-descriptors.js +109 -29
  520. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  521. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -1
  522. package/dist/frontend/lowering/class-dynamic-dispatch.js +2471 -465
  523. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  524. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +284 -44
  525. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  526. package/dist/frontend/lowering/class-instance-constructor.js +17 -5
  527. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  528. package/dist/frontend/lowering/class-method-values.js +199 -51
  529. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  530. package/dist/frontend/lowering/class-prototypes.js +345 -86
  531. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  532. package/dist/frontend/lowering/class-runtime-statics.d.ts +1 -1
  533. package/dist/frontend/lowering/class-runtime-statics.js +80 -17
  534. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  535. package/dist/frontend/lowering/class-static-data.js +76 -16
  536. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  537. package/dist/frontend/lowering/coercions/builders.d.ts +13 -0
  538. package/dist/frontend/lowering/coercions/builders.js +77 -0
  539. package/dist/frontend/lowering/coercions/builders.js.map +1 -0
  540. package/dist/frontend/lowering/coercions/function-adapters.d.ts +58 -0
  541. package/dist/frontend/lowering/coercions/function-adapters.js +430 -0
  542. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -0
  543. package/dist/frontend/lowering/coercions/island.d.ts +37 -0
  544. package/dist/frontend/lowering/coercions/island.js +350 -0
  545. package/dist/frontend/lowering/coercions/island.js.map +1 -0
  546. package/dist/frontend/lowering/coercions/state.d.ts +14 -0
  547. package/dist/frontend/lowering/coercions/state.js +16 -0
  548. package/dist/frontend/lowering/coercions/state.js.map +1 -0
  549. package/dist/frontend/lowering/coercions/structural-plans.d.ts +40 -0
  550. package/dist/frontend/lowering/coercions/structural-plans.js +447 -0
  551. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -0
  552. package/dist/frontend/lowering/coercions/structural.d.ts +63 -0
  553. package/dist/frontend/lowering/coercions/structural.js +616 -0
  554. package/dist/frontend/lowering/coercions/structural.js.map +1 -0
  555. package/dist/frontend/lowering/coercions/unions.d.ts +65 -0
  556. package/dist/frontend/lowering/coercions/unions.js +318 -0
  557. package/dist/frontend/lowering/coercions/unions.js.map +1 -0
  558. package/dist/frontend/lowering/collection-ingestion.js +359 -67
  559. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  560. package/dist/frontend/lowering/containers/array-callbacks.d.ts +92 -0
  561. package/dist/frontend/lowering/containers/array-callbacks.js +1646 -0
  562. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -0
  563. package/dist/frontend/lowering/containers/array-construction.d.ts +42 -0
  564. package/dist/frontend/lowering/containers/array-construction.js +1044 -0
  565. package/dist/frontend/lowering/containers/array-construction.js.map +1 -0
  566. package/dist/frontend/lowering/containers/array-iteration.d.ts +16 -0
  567. package/dist/frontend/lowering/containers/array-iteration.js +95 -0
  568. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -0
  569. package/dist/frontend/lowering/containers/array-methods.d.ts +27 -0
  570. package/dist/frontend/lowering/containers/array-methods.js +1854 -0
  571. package/dist/frontend/lowering/containers/array-methods.js.map +1 -0
  572. package/dist/frontend/lowering/containers/bytes.d.ts +17 -17
  573. package/dist/frontend/lowering/containers/bytes.js +419 -105
  574. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  575. package/dist/frontend/lowering/containers/callback-arguments.d.ts +26 -0
  576. package/dist/frontend/lowering/containers/callback-arguments.js +179 -0
  577. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -0
  578. package/dist/frontend/lowering/containers/collection-grouping.d.ts +19 -0
  579. package/dist/frontend/lowering/containers/collection-grouping.js +297 -0
  580. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -0
  581. package/dist/frontend/lowering/containers/collection-methods.d.ts +57 -0
  582. package/dist/frontend/lowering/containers/collection-methods.js +1314 -0
  583. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -0
  584. package/dist/frontend/lowering/containers/dynamic-receivers.d.ts +18 -0
  585. package/dist/frontend/lowering/containers/dynamic-receivers.js +114 -0
  586. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -0
  587. package/dist/frontend/lowering/containers/for-of.d.ts +60 -0
  588. package/dist/frontend/lowering/containers/for-of.js +643 -0
  589. package/dist/frontend/lowering/containers/for-of.js.map +1 -0
  590. package/dist/frontend/lowering/containers/indexed-objects.d.ts +132 -0
  591. package/dist/frontend/lowering/containers/indexed-objects.js +1743 -0
  592. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -0
  593. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +20 -0
  594. package/dist/frontend/lowering/containers/iterator-helpers.js +809 -0
  595. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -0
  596. package/dist/frontend/lowering/containers/string-and-regexp.js +585 -157
  597. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  598. package/dist/frontend/lowering/containers/string-replacement.js +213 -63
  599. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  600. package/dist/frontend/lowering/crypto-tables.js +263 -64
  601. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  602. package/dist/frontend/lowering/deferred-module-initializers.js +172 -68
  603. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  604. package/dist/frontend/lowering/deferred-module-initializers.test.js +41 -8
  605. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  606. package/dist/frontend/lowering/error-methods.js +339 -65
  607. package/dist/frontend/lowering/error-methods.js.map +1 -1
  608. package/dist/frontend/lowering/expressions/evaluation-safety.js +3 -2
  609. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  610. package/dist/frontend/lowering/expressions/global-symbols.js +2 -1
  611. package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -1
  612. package/dist/frontend/lowering/expressions/native-proxy.js +11 -5
  613. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  614. package/dist/frontend/lowering/expressions/nullish-assignment.js +67 -13
  615. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  616. package/dist/frontend/lowering/expressions/object-literals.js +589 -162
  617. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  618. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  619. package/dist/frontend/lowering/expressions/optional-chains.js +68 -17
  620. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  621. package/dist/frontend/lowering/expressions/union-field-write.js +45 -18
  622. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  623. package/dist/frontend/lowering/function-context.js +5 -1
  624. package/dist/frontend/lowering/function-context.js.map +1 -1
  625. package/dist/frontend/lowering/function-returns.d.ts +67 -0
  626. package/dist/frontend/lowering/function-returns.js +392 -0
  627. package/dist/frontend/lowering/function-returns.js.map +1 -0
  628. package/dist/frontend/lowering/generator-delegation.d.ts +1 -1
  629. package/dist/frontend/lowering/generator-delegation.js +171 -39
  630. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  631. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -1
  632. package/dist/frontend/lowering/generator-dynamic-dispatch.js +176 -36
  633. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  634. package/dist/frontend/lowering/generic-functions.d.ts +274 -0
  635. package/dist/frontend/lowering/generic-functions.js +1727 -0
  636. package/dist/frontend/lowering/generic-functions.js.map +1 -0
  637. package/dist/frontend/lowering/import-meta.d.ts +1 -1
  638. package/dist/frontend/lowering/import-meta.js +37 -14
  639. package/dist/frontend/lowering/import-meta.js.map +1 -1
  640. package/dist/frontend/lowering/indexed-comparison.js +6 -2
  641. package/dist/frontend/lowering/indexed-comparison.js.map +1 -1
  642. package/dist/frontend/lowering/iterator-consumption.d.ts +9 -0
  643. package/dist/frontend/lowering/iterator-consumption.js +91 -0
  644. package/dist/frontend/lowering/iterator-consumption.js.map +1 -0
  645. package/dist/frontend/lowering/lib-boundary.js +40 -17
  646. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  647. package/dist/frontend/lowering/lib-boundary.test.js +49 -11
  648. package/dist/frontend/lowering/lib-boundary.test.js.map +1 -1
  649. package/dist/frontend/lowering/lower-array-sort.d.ts +0 -19
  650. package/dist/frontend/lowering/lower-array-sort.js +331 -566
  651. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  652. package/dist/frontend/lowering/lower-assert.js +248 -43
  653. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  654. package/dist/frontend/lowering/lower-async-iteration.js +71 -16
  655. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  656. package/dist/frontend/lowering/lower-builtin-values.js +420 -71
  657. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  658. package/dist/frontend/lowering/lower-calls.d.ts +39 -558
  659. package/dist/frontend/lowering/lower-calls.js +2593 -5667
  660. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  661. package/dist/frontend/lowering/lower-classes.d.ts +243 -242
  662. package/dist/frontend/lowering/lower-classes.js +1704 -727
  663. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  664. package/dist/frontend/lowering/lower-comptime.d.ts +35 -35
  665. package/dist/frontend/lowering/lower-comptime.js +39 -37
  666. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  667. package/dist/frontend/lowering/lower-dgram.js +59 -31
  668. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  669. package/dist/frontend/lowering/lower-enums.js +5 -2
  670. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  671. package/dist/frontend/lowering/lower-event-emitter.js +322 -85
  672. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  673. package/dist/frontend/lowering/lower-expando.js +19 -7
  674. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  675. package/dist/frontend/lowering/lower-exprs.d.ts +194 -194
  676. package/dist/frontend/lowering/lower-exprs.js +3455 -1153
  677. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  678. package/dist/frontend/lowering/lower-functions.d.ts +23 -0
  679. package/dist/frontend/lowering/lower-functions.js +449 -0
  680. package/dist/frontend/lowering/lower-functions.js.map +1 -0
  681. package/dist/frontend/lowering/lower-generators.js +121 -32
  682. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  683. package/dist/frontend/lowering/lower-global-value.js +15 -4
  684. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  685. package/dist/frontend/lowering/lower-inspect.js +479 -89
  686. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  687. package/dist/frontend/lowering/lower-island.d.ts +79 -79
  688. package/dist/frontend/lowering/lower-island.js +365 -273
  689. package/dist/frontend/lowering/lower-island.js.map +1 -1
  690. package/dist/frontend/lowering/lower-island.test.js +7 -2
  691. package/dist/frontend/lowering/lower-island.test.js.map +1 -1
  692. package/dist/frontend/lowering/lower-mixins.js +17 -8
  693. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  694. package/dist/frontend/lowering/lower-modules.d.ts +94 -94
  695. package/dist/frontend/lowering/lower-modules.js +612 -321
  696. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  697. package/dist/frontend/lowering/lower-modules.test.js +91 -20
  698. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  699. package/dist/frontend/lowering/lower-namespaces.js +25 -8
  700. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  701. package/dist/frontend/lowering/lower-node-module.js +115 -34
  702. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  703. package/dist/frontend/lowering/lower-server.js +1210 -290
  704. package/dist/frontend/lowering/lower-server.js.map +1 -1
  705. package/dist/frontend/lowering/lower-stmts.d.ts +148 -148
  706. package/dist/frontend/lowering/lower-stmts.js +2312 -984
  707. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  708. package/dist/frontend/lowering/lower-stmts.test.js +13 -5
  709. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  710. package/dist/frontend/lowering/lower-stream.js +362 -90
  711. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  712. package/dist/frontend/lowering/lower-system-errors.js +30 -8
  713. package/dist/frontend/lowering/lower-system-errors.js.map +1 -1
  714. package/dist/frontend/lowering/lower-test.js +40 -13
  715. package/dist/frontend/lowering/lower-test.js.map +1 -1
  716. package/dist/frontend/lowering/lower-timers.d.ts +31 -0
  717. package/dist/frontend/lowering/lower-timers.js +336 -0
  718. package/dist/frontend/lowering/lower-timers.js.map +1 -0
  719. package/dist/frontend/lowering/lower-url.d.ts +1 -1
  720. package/dist/frontend/lowering/lower-url.js +46 -13
  721. package/dist/frontend/lowering/lower-url.js.map +1 -1
  722. package/dist/frontend/lowering/lowerer.d.ts +21 -351
  723. package/dist/frontend/lowering/lowerer.js +1031 -2704
  724. package/dist/frontend/lowering/lowerer.js.map +1 -1
  725. package/dist/frontend/lowering/lowerer.test.js +85 -17
  726. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  727. package/dist/frontend/lowering/module-namespace-elements.js +43 -8
  728. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  729. package/dist/frontend/lowering/native-ffi.d.ts +21 -1
  730. package/dist/frontend/lowering/native-ffi.js +487 -18
  731. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  732. package/dist/frontend/lowering/object-enumeration-receiver.js +55 -10
  733. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  734. package/dist/frontend/lowering/object-factory-new.d.ts +1 -1
  735. package/dist/frontend/lowering/object-factory-new.js +36 -11
  736. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  737. package/dist/frontend/lowering/optional-arguments.js +49 -20
  738. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  739. package/dist/frontend/lowering/pairs-snapshot.js +66 -14
  740. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  741. package/dist/frontend/lowering/runtime-optional-locals.js +3 -1
  742. package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -1
  743. package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -1
  744. package/dist/frontend/lowering/sanitize-class-types.js +4 -1
  745. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  746. package/dist/frontend/lowering/sanitize-class-types.test.js +86 -18
  747. package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -1
  748. package/dist/frontend/lowering/static-this.js +13 -6
  749. package/dist/frontend/lowering/static-this.js.map +1 -1
  750. package/dist/frontend/lowering/string-index.js +32 -10
  751. package/dist/frontend/lowering/string-index.js.map +1 -1
  752. package/dist/frontend/lowering/surfaces.d.ts +42 -42
  753. package/dist/frontend/lowering/surfaces.js +1094 -249
  754. package/dist/frontend/lowering/surfaces.js.map +1 -1
  755. package/dist/frontend/lowering/symbol-fields.js +40 -15
  756. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  757. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  758. package/dist/frontend/lowering/text-decoder-encoding.js +236 -24
  759. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
  760. package/dist/frontend/lowering/text-decoder-encoding.test.js +84 -12
  761. package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
  762. package/dist/frontend/lowering/union-narrow.js +59 -16
  763. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  764. package/dist/frontend/lowering/union-narrow.test.js +24 -7
  765. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  766. package/dist/frontend/lowering/union-retag.js +155 -40
  767. package/dist/frontend/lowering/union-retag.js.map +1 -1
  768. package/dist/frontend/lowering/union-retag.test.js +131 -33
  769. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  770. package/dist/frontend/lowering/unregistered-class-types.js.map +1 -1
  771. package/dist/frontend/lowering/unregistered-class-types.test.js +34 -8
  772. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
  773. package/dist/frontend/module-syntax.js +21 -8
  774. package/dist/frontend/module-syntax.js.map +1 -1
  775. package/dist/frontend/module-syntax.test.js +37 -13
  776. package/dist/frontend/module-syntax.test.js.map +1 -1
  777. package/dist/frontend/npm-fetch-analysis.js +13 -4
  778. package/dist/frontend/npm-fetch-analysis.js.map +1 -1
  779. package/dist/frontend/npm-fetch-analysis.test.js +33 -10
  780. package/dist/frontend/npm-fetch-analysis.test.js.map +1 -1
  781. package/dist/frontend/npm-fetch-node.js.map +1 -1
  782. package/dist/frontend/npm-fetch-syntax.js +4 -9
  783. package/dist/frontend/npm-fetch-syntax.js.map +1 -1
  784. package/dist/frontend/npm-node.js +3 -1
  785. package/dist/frontend/npm-node.js.map +1 -1
  786. package/dist/frontend/npm-static-bundled-cjs.js +88 -29
  787. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  788. package/dist/frontend/npm-static-bundled-cjs.test.js +29 -10
  789. package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -1
  790. package/dist/frontend/npm-static-declaration-syntax.js +148 -56
  791. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  792. package/dist/frontend/npm-static-declarations.d.ts +1 -1
  793. package/dist/frontend/npm-static-declarations.js.map +1 -1
  794. package/dist/frontend/npm-static-declarations.test.js +33 -7
  795. package/dist/frontend/npm-static-declarations.test.js.map +1 -1
  796. package/dist/frontend/npm-static-prune.js +26 -12
  797. package/dist/frontend/npm-static-prune.js.map +1 -1
  798. package/dist/frontend/npm-static-prune.test.js +17 -3
  799. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  800. package/dist/frontend/npm-static-rewrite-host.js +2 -3
  801. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  802. package/dist/frontend/npm-static-rewrite-syntax.js +64 -21
  803. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  804. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  805. package/dist/frontend/npm-static-subtyping.js +9 -4
  806. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  807. package/dist/frontend/npm-static-subtyping.test.js +30 -6
  808. package/dist/frontend/npm-static-subtyping.test.js.map +1 -1
  809. package/dist/frontend/npm-static.js +15 -4
  810. package/dist/frontend/npm-static.js.map +1 -1
  811. package/dist/frontend/npm.js +122 -36
  812. package/dist/frontend/npm.js.map +1 -1
  813. package/dist/frontend/npm.test.js +30 -10
  814. package/dist/frontend/npm.test.js.map +1 -1
  815. package/dist/frontend/pipeline-native.js.map +1 -1
  816. package/dist/frontend/pipeline.js +25 -8
  817. package/dist/frontend/pipeline.js.map +1 -1
  818. package/dist/frontend/pipeline.test.js +21 -7
  819. package/dist/frontend/pipeline.test.js.map +1 -1
  820. package/dist/frontend/program-node.js +5 -3
  821. package/dist/frontend/program-node.js.map +1 -1
  822. package/dist/frontend/program.d.ts +2 -2
  823. package/dist/frontend/program.js +234 -101
  824. package/dist/frontend/program.js.map +1 -1
  825. package/dist/frontend/program.test.js +27 -27
  826. package/dist/frontend/program.test.js.map +1 -1
  827. package/dist/frontend/provenance-core.js +8 -4
  828. package/dist/frontend/provenance-core.js.map +1 -1
  829. package/dist/frontend/provenance-registry.js +1 -4
  830. package/dist/frontend/provenance-registry.js.map +1 -1
  831. package/dist/frontend/resolve.js +32 -20
  832. package/dist/frontend/resolve.js.map +1 -1
  833. package/dist/frontend/resolve.test.js +1 -1
  834. package/dist/frontend/resolve.test.js.map +1 -1
  835. package/dist/frontend/runtime-resolve.js +13 -4
  836. package/dist/frontend/runtime-resolve.js.map +1 -1
  837. package/dist/frontend/runtime-resolve.test.js +25 -9
  838. package/dist/frontend/runtime-resolve.test.js.map +1 -1
  839. package/dist/frontend/services-node.js +6 -2
  840. package/dist/frontend/services-node.js.map +1 -1
  841. package/dist/frontend/services-node.test.js +18 -6
  842. package/dist/frontend/services-node.test.js.map +1 -1
  843. package/dist/frontend/services.js +8 -4
  844. package/dist/frontend/services.js.map +1 -1
  845. package/dist/frontend/services.test.js +6 -2
  846. package/dist/frontend/services.test.js.map +1 -1
  847. package/dist/frontend/ts7/api.js +12 -4
  848. package/dist/frontend/ts7/api.js.map +1 -1
  849. package/dist/frontend/ts7/ast-bytes.js +10 -3
  850. package/dist/frontend/ts7/ast-bytes.js.map +1 -1
  851. package/dist/frontend/ts7/ast-bytes.test.js +23 -4
  852. package/dist/frontend/ts7/ast-bytes.test.js.map +1 -1
  853. package/dist/frontend/ts7/ast-guards.test.js +14 -5
  854. package/dist/frontend/ts7/ast-guards.test.js.map +1 -1
  855. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  856. package/dist/frontend/ts7/ast-node.js +484 -164
  857. package/dist/frontend/ts7/ast-node.js.map +1 -1
  858. package/dist/frontend/ts7/ast-node.test.js +109 -36
  859. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  860. package/dist/frontend/ts7/ast-text.js +13 -3
  861. package/dist/frontend/ts7/ast-text.js.map +1 -1
  862. package/dist/frontend/ts7/ast-text.test.js.map +1 -1
  863. package/dist/frontend/ts7/ast-types.js.map +1 -1
  864. package/dist/frontend/ts7/ast-wire.d.ts +1 -1
  865. package/dist/frontend/ts7/ast-wire.js +55 -20
  866. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  867. package/dist/frontend/ts7/ast-wire.test.js +53 -8
  868. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  869. package/dist/frontend/ts7/ast.js +47 -28
  870. package/dist/frontend/ts7/ast.js.map +1 -1
  871. package/dist/frontend/ts7/census-check.js +1 -1
  872. package/dist/frontend/ts7/census-check.js.map +1 -1
  873. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  874. package/dist/frontend/ts7/checker.js +5 -3
  875. package/dist/frontend/ts7/checker.js.map +1 -1
  876. package/dist/frontend/ts7/checker.test.js +54 -17
  877. package/dist/frontend/ts7/checker.test.js.map +1 -1
  878. package/dist/frontend/ts7/enums.test.js +9 -4
  879. package/dist/frontend/ts7/enums.test.js.map +1 -1
  880. package/dist/frontend/ts7/native-api.js.map +1 -1
  881. package/dist/frontend/ts7/native-host.js.map +1 -1
  882. package/dist/frontend/ts7/native-process.js +9 -3
  883. package/dist/frontend/ts7/native-process.js.map +1 -1
  884. package/dist/frontend/ts7/program-adapter.js +1 -1
  885. package/dist/frontend/ts7/program-adapter.js.map +1 -1
  886. package/dist/frontend/ts7/program-host.js +7 -4
  887. package/dist/frontend/ts7/program-host.js.map +1 -1
  888. package/dist/frontend/ts7/program-host.test.js +43 -11
  889. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  890. package/dist/frontend/ts7/rpc-api.js +3 -1
  891. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  892. package/dist/frontend/ts7/rpc-client.js +15 -5
  893. package/dist/frontend/ts7/rpc-client.js.map +1 -1
  894. package/dist/frontend/ts7/rpc-client.test.js +26 -8
  895. package/dist/frontend/ts7/rpc-client.test.js.map +1 -1
  896. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  897. package/dist/frontend/ts7/rpc-filesystem.test.js +43 -10
  898. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  899. package/dist/frontend/ts7/rpc-process.js +16 -6
  900. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  901. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  902. package/dist/frontend/ts7/rpc-wire.d.ts +1 -0
  903. package/dist/frontend/ts7/rpc-wire.js +41 -14
  904. package/dist/frontend/ts7/rpc-wire.js.map +1 -1
  905. package/dist/frontend/ts7/rpc-wire.test.js +36 -6
  906. package/dist/frontend/ts7/rpc-wire.test.js.map +1 -1
  907. package/dist/frontend/ts7/semantic-checker.js +209 -68
  908. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  909. package/dist/frontend/ts7/semantic-checker.test.js +29 -14
  910. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  911. package/dist/frontend/ts7/semantic-json.js +7 -1
  912. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  913. package/dist/frontend/ts7/semantic-json.test.js +17 -3
  914. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  915. package/dist/frontend/ts7/semantic-model.js +147 -51
  916. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  917. package/dist/frontend/ts7/semantic-model.test.js +72 -19
  918. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  919. package/dist/frontend/ts7/semantic-types.d.ts +2 -2
  920. package/dist/frontend/ts7/session-cache.js +10 -3
  921. package/dist/frontend/ts7/session-cache.js.map +1 -1
  922. package/dist/frontend/ts7/session-cache.test.js +13 -4
  923. package/dist/frontend/ts7/session-cache.test.js.map +1 -1
  924. package/dist/frontend/ts7/session-path.js +25 -10
  925. package/dist/frontend/ts7/session-path.js.map +1 -1
  926. package/dist/frontend/ts7/session-path.test.js +47 -4
  927. package/dist/frontend/ts7/session-path.test.js.map +1 -1
  928. package/dist/frontend/ts7/session-timing.js +22 -3
  929. package/dist/frontend/ts7/session-timing.js.map +1 -1
  930. package/dist/frontend/ts7/session-timing.test.js +12 -3
  931. package/dist/frontend/ts7/session-timing.test.js.map +1 -1
  932. package/dist/frontend/ts7/session.d.ts +1 -0
  933. package/dist/frontend/ts7/session.js +109 -35
  934. package/dist/frontend/ts7/session.js.map +1 -1
  935. package/dist/frontend/ts7/session.test.js +69 -15
  936. package/dist/frontend/ts7/session.test.js.map +1 -1
  937. package/dist/frontend/ts7/source-parser.js +17 -6
  938. package/dist/frontend/ts7/source-parser.js.map +1 -1
  939. package/dist/frontend/ts7/source-parser.test.js +32 -9
  940. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  941. package/dist/frontend/tsc-codes.js +56 -11
  942. package/dist/frontend/tsc-codes.js.map +1 -1
  943. package/dist/frontend/tsc-codes.test.d.ts +1 -0
  944. package/dist/frontend/tsc-codes.test.js +16 -0
  945. package/dist/frontend/tsc-codes.test.js.map +1 -0
  946. package/dist/frontend/type-mapper.js +547 -206
  947. package/dist/frontend/type-mapper.js.map +1 -1
  948. package/dist/frontend/type-mapper.test.js +108 -33
  949. package/dist/frontend/type-mapper.test.js.map +1 -1
  950. package/dist/frontend/union-discriminants.js +8 -2
  951. package/dist/frontend/union-discriminants.js.map +1 -1
  952. package/dist/frontend/union-discriminants.test.js +77 -20
  953. package/dist/frontend/union-discriminants.test.js.map +1 -1
  954. package/dist/index.d.ts +9 -8
  955. package/dist/index.js +150 -81
  956. package/dist/index.js.map +1 -1
  957. package/dist/ir/analysis.js +97 -38
  958. package/dist/ir/analysis.js.map +1 -1
  959. package/dist/ir/analysis.test.js +91 -15
  960. package/dist/ir/analysis.test.js.map +1 -1
  961. package/dist/ir/api.d.ts +4 -0
  962. package/dist/ir/api.js +6 -0
  963. package/dist/ir/api.js.map +1 -0
  964. package/dist/ir/build.d.ts +7 -0
  965. package/dist/ir/build.js +27 -1
  966. package/dist/ir/build.js.map +1 -1
  967. package/dist/ir/builtin-effects.d.ts +9 -0
  968. package/dist/ir/builtin-effects.js +631 -0
  969. package/dist/ir/builtin-effects.js.map +1 -0
  970. package/dist/ir/builtin-signatures.d.ts +15 -0
  971. package/dist/ir/builtin-signatures.js +3396 -0
  972. package/dist/ir/builtin-signatures.js.map +1 -0
  973. package/dist/ir/byte-numbers.d.ts +20 -0
  974. package/dist/ir/byte-numbers.js +116 -0
  975. package/dist/ir/byte-numbers.js.map +1 -0
  976. package/dist/ir/byte-numbers.test.d.ts +1 -0
  977. package/dist/ir/byte-numbers.test.js +55 -0
  978. package/dist/ir/byte-numbers.test.js.map +1 -0
  979. package/dist/ir/constant-tables.js +13 -5
  980. package/dist/ir/constant-tables.js.map +1 -1
  981. package/dist/ir/constant-tables.test.js +47 -7
  982. package/dist/ir/constant-tables.test.js.map +1 -1
  983. package/dist/ir/control-flow.js +2 -1
  984. package/dist/ir/control-flow.js.map +1 -1
  985. package/dist/ir/control-flow.test.js +35 -11
  986. package/dist/ir/control-flow.test.js.map +1 -1
  987. package/dist/ir/initializer-bindings.d.ts +9 -0
  988. package/dist/ir/initializer-bindings.js +115 -0
  989. package/dist/ir/initializer-bindings.js.map +1 -0
  990. package/dist/ir/initializer-bindings.test.d.ts +1 -0
  991. package/dist/ir/initializer-bindings.test.js +118 -0
  992. package/dist/ir/initializer-bindings.test.js.map +1 -0
  993. package/dist/ir/integer-loop-facts.d.ts +12 -0
  994. package/dist/ir/integer-loop-facts.js +137 -0
  995. package/dist/ir/integer-loop-facts.js.map +1 -0
  996. package/dist/ir/integer-loops.d.ts +19 -0
  997. package/dist/ir/integer-loops.js +172 -11
  998. package/dist/ir/integer-loops.js.map +1 -1
  999. package/dist/ir/integer-loops.test.js +122 -9
  1000. package/dist/ir/integer-loops.test.js.map +1 -1
  1001. package/dist/ir/integer-ranges.d.ts +8 -6
  1002. package/dist/ir/integer-ranges.js +416 -90
  1003. package/dist/ir/integer-ranges.js.map +1 -1
  1004. package/dist/ir/integer-ranges.test.js +239 -10
  1005. package/dist/ir/integer-ranges.test.js.map +1 -1
  1006. package/dist/ir/intrinsic-signatures.d.ts +20 -0
  1007. package/dist/ir/intrinsic-signatures.js +57 -0
  1008. package/dist/ir/intrinsic-signatures.js.map +1 -0
  1009. package/dist/ir/ir.d.ts +14 -2155
  1010. package/dist/ir/ir.js +169 -1394
  1011. package/dist/ir/ir.js.map +1 -1
  1012. package/dist/ir/ir.test.js +98 -77
  1013. package/dist/ir/ir.test.js.map +1 -1
  1014. package/dist/ir/runtime-features.d.ts +221 -0
  1015. package/dist/ir/runtime-features.js +551 -0
  1016. package/dist/ir/runtime-features.js.map +1 -0
  1017. package/dist/ir/runtime-features.test.d.ts +1 -0
  1018. package/dist/ir/runtime-features.test.js +98 -0
  1019. package/dist/ir/runtime-features.test.js.map +1 -0
  1020. package/dist/ir/scalar-records.js +130 -40
  1021. package/dist/ir/scalar-records.js.map +1 -1
  1022. package/dist/ir/scalar-records.test.js +146 -27
  1023. package/dist/ir/scalar-records.test.js.map +1 -1
  1024. package/dist/ir/serialize.js +4 -2
  1025. package/dist/ir/serialize.js.map +1 -1
  1026. package/dist/ir/serialize.test.js +44 -9
  1027. package/dist/ir/serialize.test.js.map +1 -1
  1028. package/dist/ir/traverse.js +156 -43
  1029. package/dist/ir/traverse.js.map +1 -1
  1030. package/dist/ir/traverse.test.js +99 -24
  1031. package/dist/ir/traverse.test.js.map +1 -1
  1032. package/dist/ir/validate.d.ts +1 -31
  1033. package/dist/ir/validate.js +826 -1915
  1034. package/dist/ir/validate.js.map +1 -1
  1035. package/dist/ir/validate.test.js +627 -111
  1036. package/dist/ir/validate.test.js.map +1 -1
  1037. package/dist/library/cache-primitives.js +9 -10
  1038. package/dist/library/cache-primitives.js.map +1 -1
  1039. package/dist/library/cache-reset.test.js +2 -1
  1040. package/dist/library/cache-reset.test.js.map +1 -1
  1041. package/dist/library/compiler-self-identity.js +11 -5
  1042. package/dist/library/compiler-self-identity.js.map +1 -1
  1043. package/dist/library/compiler-self-identity.test.js +10 -3
  1044. package/dist/library/compiler-self-identity.test.js.map +1 -1
  1045. package/dist/library/fence-eval.js +24 -7
  1046. package/dist/library/fence-eval.js.map +1 -1
  1047. package/dist/library/fence-eval.test.js +31 -7
  1048. package/dist/library/fence-eval.test.js.map +1 -1
  1049. package/dist/library/int-infer.js +199 -59
  1050. package/dist/library/int-infer.js.map +1 -1
  1051. package/dist/library/int-infer.test.js +133 -57
  1052. package/dist/library/int-infer.test.js.map +1 -1
  1053. package/dist/library/ir-policy.d.ts +27 -0
  1054. package/dist/library/ir-policy.js +232 -0
  1055. package/dist/library/ir-policy.js.map +1 -0
  1056. package/dist/library/library-cache.js +40 -17
  1057. package/dist/library/library-cache.js.map +1 -1
  1058. package/dist/library/library-cache.test.js +24 -13
  1059. package/dist/library/library-cache.test.js.map +1 -1
  1060. package/dist/library/library-profile.js +68 -13
  1061. package/dist/library/library-profile.js.map +1 -1
  1062. package/dist/library/prepare.js +48 -20
  1063. package/dist/library/prepare.js.map +1 -1
  1064. package/dist/library/semantic-source.js +16 -14
  1065. package/dist/library/semantic-source.js.map +1 -1
  1066. package/dist/library/semantic-source.test.js +9 -14
  1067. package/dist/library/semantic-source.test.js.map +1 -1
  1068. package/dist/library/sidecar-validate.js +53 -12
  1069. package/dist/library/sidecar-validate.js.map +1 -1
  1070. package/dist/library/sidecar.js +85 -24
  1071. package/dist/library/sidecar.js.map +1 -1
  1072. package/dist/library/trap-teaching.js +11 -2
  1073. package/dist/library/trap-teaching.js.map +1 -1
  1074. package/dist/native/cache.js +10 -4
  1075. package/dist/native/cache.js.map +1 -1
  1076. package/dist/native/cli.js +34 -9
  1077. package/dist/native/cli.js.map +1 -1
  1078. package/dist/native/compiler.js +167 -43
  1079. package/dist/native/compiler.js.map +1 -1
  1080. package/dist/native/compiler.test.js +129 -32
  1081. package/dist/native/compiler.test.js.map +1 -1
  1082. package/dist/native/comptime.js +23 -7
  1083. package/dist/native/comptime.js.map +1 -1
  1084. package/dist/native/comptime.test.js +26 -6
  1085. package/dist/native/comptime.test.js.map +1 -1
  1086. package/dist/native/executable-cache.js +77 -27
  1087. package/dist/native/executable-cache.js.map +1 -1
  1088. package/dist/native/executable-cache.test.js +41 -6
  1089. package/dist/native/executable-cache.test.js.map +1 -1
  1090. package/dist/native/file-identity.js +9 -2
  1091. package/dist/native/file-identity.js.map +1 -1
  1092. package/dist/native/file-identity.test.js.map +1 -1
  1093. package/dist/native/library.js +50 -12
  1094. package/dist/native/library.js.map +1 -1
  1095. package/dist/native/prepare.js +119 -34
  1096. package/dist/native/prepare.js.map +1 -1
  1097. package/dist/native/prepare.test.js +22 -6
  1098. package/dist/native/prepare.test.js.map +1 -1
  1099. package/dist/native/runtime-typescript.js +24 -11
  1100. package/dist/native/runtime-typescript.js.map +1 -1
  1101. package/dist/native/runtime-typescript.test.js.map +1 -1
  1102. package/dist/native/sanitizer.js +71 -18
  1103. package/dist/native/sanitizer.js.map +1 -1
  1104. package/dist/native/sanitizer.test.js +77 -20
  1105. package/dist/native/sanitizer.test.js.map +1 -1
  1106. package/dist/native/task.js.map +1 -1
  1107. package/dist/native/task.test.js +7 -2
  1108. package/dist/native/task.test.js.map +1 -1
  1109. package/dist/native/toolchain.js +74 -29
  1110. package/dist/native/toolchain.js.map +1 -1
  1111. package/dist/native/toolchain.test.js +95 -18
  1112. package/dist/native/toolchain.test.js.map +1 -1
  1113. package/dist/startup-cache.d.ts +1 -1
  1114. package/dist/startup-cache.js +1 -1
  1115. package/dist/startup-cache.js.map +1 -1
  1116. package/dist/timing.js.map +1 -1
  1117. package/package.json +20 -20
  1118. package/surface-manifest.json +1 -1
  1119. package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
  1120. package/dist/frontend/lowering/lower-builtins.js +0 -8984
  1121. package/dist/frontend/lowering/lower-builtins.js.map +0 -1
  1122. package/dist/frontend/lowering/lower-containers.d.ts +0 -382
  1123. package/dist/frontend/lowering/lower-containers.js +0 -7366
  1124. package/dist/frontend/lowering/lower-containers.js.map +0 -1
@@ -21,43 +21,52 @@ import { InternalCompilerError } from "../../errors.js";
21
21
  import { deflateRawSync } from "node:zlib";
22
22
  import { endsWithJump, matchStringSelfConcat, streamTypedRefEligible } from "../../ir/analysis.js";
23
23
  import { emitLibraryIdentityLines } from "../library-identity-markers.js";
24
- import { CAUGHT, ffiCallbackType, isDynTypedRefType, isFfiContextParam, isRefCounted, isUnitType, moduleRuntimeFeatures, moduleEmbedsBuiltin, moduleEmbedsCompressedNpm, NPM_COMPRESS_MIN, POINTER_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, typeKey, VOID } from "../../ir/ir.js";
25
- import { matchIntegerArrayForLoop, matchIntegerBytesForLoop } from "../../ir/integer-loops.js";
24
+ import { CAUGHT, ffiCallbackType, isDynTypedRefType, isFfiContextParam, isRefCounted, isUnitType, POINTER_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, typeKey, VOID, } from "../../ir/ir.js";
25
+ import { moduleRuntimeFeatures, moduleEmbedsBuiltin, moduleEmbedsCompressedNpm, NPM_COMPRESS_MIN, } from "../../ir/runtime-features.js";
26
+ import { matchIntegerArrayForLoop, matchIntegerBytesForLoop, matchIntegerCountedForLoop, } from "../../ir/integer-loops.js";
27
+ import { emitCountedLoopLimit } from "./counted-loops.js";
28
+ import { emitLiteralSwitch } from "./switch-dispatch.js";
29
+ import { findBytesBounds } from "./bytes-bounds.js";
26
30
  import { scalarizeNumericRecords } from "../../ir/scalar-records.js";
27
31
  import { everyStmtList } from "../../ir/traverse.js";
28
32
  import { analyzeIntegerRanges } from "../../ir/integer-ranges.js";
33
+ import { findIntegerViews } from "./integer-views.js";
34
+ import { findInitializerBindings, withInitializerBindings } from "../../ir/initializer-bindings.js";
29
35
  import { findConstantNumericTables } from "../../ir/constant-tables.js";
30
- import { allocateFfiCallbackAdapters, hasForeignFfiCallback, hasRetainedFfiCallback } from "../ffi-callbacks.js";
36
+ import { allocateFfiCallbackAdapters, hasForeignFfiCallback, hasRetainedFfiCallback, } from "../ffi-callbacks.js";
31
37
  import { RUNTIME_ABI_MARKER } from "../runtime-abi.js";
32
38
  import { computeMayThrow } from "../may-throw.js";
33
- import { mangleArgPack, mangleAsyncSpawn, mangleBorrowedFunction, mangleClassObj, mangleClassStruct, mangleFnClosure, mangleFunction, mangleGenDrop, mangleGenSpawn, mangleGlobal, mangleLocal, mangleRecordStruct, mangleTrampoline, mangleWrapper, mangleVtInstance } from "../mangle.js";
39
+ import { mangleArgPack, mangleAsyncSpawn, mangleBorrowedFunction, mangleClassObj, mangleClassStruct, mangleFnClosure, mangleFunction, mangleGenDrop, mangleGenSpawn, mangleGlobal, mangleLocal, mangleRecordStruct, mangleTrampoline, mangleWrapper, mangleVtInstance, } from "../mangle.js";
34
40
  import { analyzeCallLifetimes } from "./call-lifetimes.js";
35
- import { emitStackUnion, findLocalStackUnions } from "./stack-unions.js";
41
+ import { canStackUnion, emitStackUnion, findLocalStackUnions } from "./stack-unions.js";
42
+ import { allocateLocalUnion, findLocalUnionStorage, storeLocalUnion, } from "./local-union-storage.js";
36
43
  import { BlockBuilder } from "./blocks.js";
37
- import { emitLocalArrayRead, findArrayPreservingFunctions, findLocalArrayReads, findCallArrayReads, OptionalArrayReads } from "./local-array-reads.js";
38
- import { emitStackMapRead, findMapReadLifetimes } from "./map-read-lifetimes.js";
44
+ import { emitLocalArrayRead, findLocalArrayReads, findCallArrayReads, OptionalArrayReads, } from "./local-array-reads.js";
45
+ import { emitStackMapRead, findMapReadLifetimes, matchMapRead, } from "./map-read-lifetimes.js";
39
46
  import { emitBorrowedFieldSequence } from "./borrowed-receivers.js";
47
+ import { emitBorrowedInput } from "./borrowed-inputs.js";
48
+ import { ReferenceEffects } from "./reference-effects.js";
40
49
  import { LlvmDebugInfo } from "./debug-info.js";
41
- import { f64Lit, ffiNativeTypeLl, ffiNativeParamLl, ffiNativeReturnLl, llvmCommentText } from "./common.js";
50
+ import { f64Lit, ffiNativeTypeLl, ffiNativeParamLl, ffiNativeReturnLl, llvmCommentText, } from "./common.js";
42
51
  import { ffiExtendsNarrowIntegers } from "../targets.js";
43
- import { emitLiteralExpr, emitOperatorExpr, emitStringExpr, emitContainerExpr, emitRecordExpr } from "./expr-primitives.js";
52
+ import { emitLiteralExpr, emitOperatorExpr, emitStringExpr, emitContainerExpr, emitRecordExpr, } from "./expr-primitives.js";
44
53
  import { emitControlExpr } from "./expr-control.js";
45
54
  import { emitCallExpr } from "./expr-calls.js";
46
55
  import { emitDynamicExpr } from "./expr-dynamic.js";
47
56
  import { emitIntrinsicExpr, emitSerializationExpr, emitAsyncExpr } from "./expr-async.js";
48
57
  import { emitJsInteropExpr, emitExpr } from "./expr-dispatch.js";
49
- import { emitJsMarshal, emitJsOp, emitJsExit, islandAdapter, islandTypedAdapter } from "./expr-island.js";
50
- import { dynKind, raceAdapterFor, genResultThunkFor, childExitThunkFor, childExitSignalThunkFor, childDataThunkFor, execFileThunkFor, ipcMessageThunkFor, ipcSendThunkFor, emitterFixedAdapter, wrapEmitterListener, unwrapNullableClosure, closeBindThunkFor, closeOverrideWrapFor } from "./expr-callbacks.js";
51
- import { streamDataAdapter, streamDoneFnFor, cryptoBytesThunkFor, fsRenameThunkFor, streamCbThunkFor, zlibBytesThunkFor } from "./expr-stream-callbacks.js";
52
- import { emitStableReceiver, resolveThunkFor, tagInSet, arrPush, emitArrayCopyLoop, emitStrIntrinsic, emitArrIntrinsic, wrapNullable, emitMapNew, mapSet, emitMapLikeIntrinsic, emitSetNew } from "./expr-containers.js";
53
- import { emitIntegerLoopIndex, emitBytesIndex, emitBytesData, emitBytesLength, emitBytesGet, emitToUint32, emitBytesSet, emitBytesIntrinsic } from "./expr-bytes.js";
58
+ import { emitJsMarshal, emitJsOp, emitJsExit, islandAdapter, islandTypedAdapter, } from "./expr-island.js";
59
+ import { dynKind, raceAdapterFor, genResultThunkFor, childExitThunkFor, childExitSignalThunkFor, childDataThunkFor, execFileThunkFor, ipcMessageThunkFor, ipcSendThunkFor, emitterFixedAdapter, wrapEmitterListener, unwrapNullableClosure, closeBindThunkFor, closeOverrideWrapFor, } from "./expr-callbacks.js";
60
+ import { streamDataAdapter, streamDoneFnFor, cryptoBytesThunkFor, fsRenameThunkFor, streamCbThunkFor, zlibBytesThunkFor, } from "./expr-stream-callbacks.js";
61
+ import { emitStableReceiver, resolveThunkFor, tagInSet, arrPush, emitArrayCopyLoop, emitStrIntrinsic, emitArrIntrinsic, wrapNullable, emitMapNew, mapSet, emitMapLikeIntrinsic, emitSetNew, } from "./expr-containers.js";
62
+ import { emitIntegerLoopIndex, emitBytesIndex, emitBytesData, emitBytesLength, emitBytesGet, emitToUint32, emitBytesSet, emitBytesIntrinsic, } from "./expr-bytes.js";
54
63
  import { emitRegexIntrinsic, emitRecordKeyGet, keyedRecordReadInto } from "./expr-records.js";
55
- import { dynPromiseAdapter, streamTypedRefCommitAdapter, liveDynUnionRefAdapter, streamTypedRefBoxValue, streamTypedRefMaterializeAdapter, streamFromArrayAdapter } from "./expr-stream-bridges.js";
56
- import { emitWebLibCall, emitDynamicLibCall, emitFilesystemLibCall, emitPathUrlLibCall, emitPrimitiveLibCall } from "./lib-filesystem.js";
57
- import { emitChildProcessLibCall, emitAsyncContextLibCall, emitProcessLibCall, emitErrorsEventsLibCall } from "./lib-process.js";
64
+ import { dynPromiseAdapter, streamTypedRefCommitAdapter, liveDynUnionRefAdapter, streamTypedRefBoxValue, streamTypedRefMaterializeAdapter, streamFromArrayAdapter, } from "./expr-stream-bridges.js";
65
+ import { emitWebLibCall, emitDynamicLibCall, emitFilesystemLibCall, emitPathUrlLibCall, emitPrimitiveLibCall, } from "./lib-filesystem.js";
66
+ import { emitChildProcessLibCall, emitAsyncContextLibCall, emitProcessLibCall, emitErrorsEventsLibCall, } from "./lib-process.js";
58
67
  import { emitStreamLibCall } from "./lib-stream.js";
59
68
  import { emitNetworkHttpLibCall } from "./lib-network.js";
60
- import { emitAssertInspectLibCall, emitIoLibCall, emitGenericLibCall, emitLibCall } from "./lib-dispatch.js";
69
+ import { emitAssertInspectLibCall, emitIoLibCall, emitGenericLibCall, emitLibCall, } from "./lib-dispatch.js";
61
70
  import { buildClassGraph, classEnvironmentIndex, classFieldIndex, classStructSym, } from "./classes.js";
62
71
  import { LlDyn } from "./dyn.js";
63
72
  import { LlvmUnsupportedError } from "./unsupported.js";
@@ -99,7 +108,7 @@ export function emitLlvmModuleSource(mod, options = {}) {
99
108
  const length = parts.reduce((total, part) => total + part.length, Math.max(0, parts.length - 1));
100
109
  if (length <= 256 * 1024 * 1024)
101
110
  return parts.join("\n");
102
- return parts.flatMap((part, index) => index === 0 ? [part] : ["\n", part]);
111
+ return parts.flatMap((part, index) => (index === 0 ? [part] : ["\n", part]));
103
112
  }
104
113
  function llStrBytes(text) {
105
114
  return llBytes(Buffer.from(text, "utf8"));
@@ -108,6 +117,8 @@ export class LlEmitter {
108
117
  mod;
109
118
  localArrayReads = new Map();
110
119
  localStackUnions = new Map();
120
+ localUnionStorageProofs = new Map();
121
+ localUnionStorage = new Map();
111
122
  integerArrayBindings = new Set();
112
123
  fieldAliasTags = new Map();
113
124
  fieldPointerTags = new Map();
@@ -156,6 +167,7 @@ export class LlEmitter {
156
167
  * immortal (rc == SIZE_MAX) static per (union, unit tag).
157
168
  * RC entry points and the collector skip immortals. */
158
169
  unitInstances = new Map();
170
+ immortalValues = new Set();
159
171
  /** Regex literal templates: "<flags>/<pattern>" → { symbol, interned
160
172
  * source/flags literal refs } — one immortal ScrRegex template per distinct
161
173
  * (pattern, flags) pair; the bytecode slot starts null and the runtime
@@ -189,12 +201,13 @@ export class LlEmitter {
189
201
  needsBadKey = false;
190
202
  needsRetainBox = false;
191
203
  fnByName = new Map();
192
- arrayPreservingFunctions;
204
+ referenceEffects;
193
205
  optionalArrayReads;
194
206
  callArrayReads = new Map();
195
207
  mapReadLifetimes = { locals: new Map(), arguments: new Map() };
196
208
  callLifetimes;
197
209
  borrowedParameters = new Set();
210
+ stableCallBindings = new Set();
198
211
  /** Manifest-bound native imports, used by ffiCall emission. */
199
212
  ffiByName = new Map();
200
213
  /** C-ABI callback trampolines and (for raw/no-userdata callbacks) their
@@ -275,10 +288,15 @@ export class LlEmitter {
275
288
  * for blocks and switches. */
276
289
  jumpTargets = [];
277
290
  currentLocals = new Map();
291
+ initializerBindings;
292
+ numericLocals = new Map();
278
293
  captureIds = new Set();
279
- /** Active canonical byte-loop induction bindings: local id → size_t slot. */
294
+ /** Active induction bindings retain their width independently of size_t. */
280
295
  integerLoopBindings = new Map();
296
+ countedLoopsEnabled = false;
281
297
  integerRanges = new Map();
298
+ bytesBounds = new Set();
299
+ integerViews = new Map();
282
300
  /** Enclosing try-with-FINALLY regions, innermost last: a `return`
283
301
  * inside one runs every crossed finally (innermost first) before the
284
302
  * actual ret — the runtime ABI’s pending-return path, with the finally
@@ -312,12 +330,18 @@ export class LlEmitter {
312
330
  constructor(mod, options) {
313
331
  this.mod = mod;
314
332
  this.stackTraces = mod.functions.some((fn) => !everyStmtList(fn.body, {
315
- stmt: () => true, expr: (expr) => !(expr.kind === "libCall" && expr.fn === "error.stack"),
333
+ stmt: () => true,
334
+ expr: (expr) => !(expr.kind === "libCall" && expr.fn === "error.stack"),
316
335
  }));
317
- this.debug = options.debugSources === undefined ? null : new LlvmDebugInfo(mod.sourceFile, options.debugSources, options.pointerBits, mod.unions);
336
+ this.debug =
337
+ options.debugSources === undefined
338
+ ? null
339
+ : new LlvmDebugInfo(mod.sourceFile, options.debugSources, options.pointerBits, mod.unions);
318
340
  this.constantNumericTables = findConstantNumericTables(mod);
341
+ this.initializerBindings = findInitializerBindings(mod);
319
342
  this.sizeType = options.pointerBits === 32 ? "i32" : "i64";
320
- this.ffiExtendNarrowIntegers = options.wasi === true || ffiExtendsNarrowIntegers(options.targetTriple);
343
+ this.ffiExtendNarrowIntegers =
344
+ options.wasi === true || ffiExtendsNarrowIntegers(options.targetTriple);
321
345
  this.wasi = options.wasi === true;
322
346
  this.emitLibraryIdentity = options.emitLibraryIdentity !== false;
323
347
  this.runtimeAbiMarker = options.runtimeAbiMarker === true;
@@ -345,7 +369,7 @@ export class LlEmitter {
345
369
  for (const u of mod.unions ?? [])
346
370
  this.unionsById.set(u.id, u);
347
371
  this.optionalArrayReads = new OptionalArrayReads(this.fnByName, this.unionsById);
348
- this.arrayPreservingFunctions = findArrayPreservingFunctions(this.fnByName, this.unionsById, this.optionalArrayReads);
372
+ this.referenceEffects = new ReferenceEffects(this.fnByName, (call) => this.optionalArrayReads.get(call) !== null);
349
373
  this.callLifetimes = analyzeCallLifetimes(this.fnByName);
350
374
  for (const r of mod.records ?? [])
351
375
  this.recordsById.set(r.id, r);
@@ -372,7 +396,9 @@ export class LlEmitter {
372
396
  isErrorClass: (name) => this.classMeta.get(name)?.root.def.name === "%Error",
373
397
  classSubtypes: (name) => {
374
398
  const target = this.classMetaOf(name);
375
- return [...this.classMeta.values()].filter((meta) => target.pre <= meta.pre && meta.pre <= target.post).map((meta) => meta.def.name);
399
+ return [...this.classMeta.values()]
400
+ .filter((meta) => target.pre <= meta.pre && meta.pre <= target.post)
401
+ .map((meta) => meta.def.name);
376
402
  },
377
403
  };
378
404
  this.walkers = new LlWalkers(this.shapeHost);
@@ -492,8 +518,10 @@ export class LlEmitter {
492
518
  return [`${ffiNativeParamLl(param, this.ffiExtendNarrowIntegers)} %a${i}`];
493
519
  });
494
520
  if (cb.invoke === "foreign") {
495
- if (adapter.table === null || !cb.params.some(isFfiContextParam) || cb.returns !== "void" ||
496
- cb.params.some(param => param === "i64" || param === "u64" || param === "pointer")) {
521
+ if (adapter.table === null ||
522
+ !cb.params.some(isFfiContextParam) ||
523
+ cb.returns !== "void" ||
524
+ cb.params.some((param) => param === "i64" || param === "u64" || param === "pointer")) {
497
525
  throw new InternalCompilerError("llvm emitter bug: invalid foreign FFI callback descriptor");
498
526
  }
499
527
  const dispatch = `${adapter.symbol}_dispatch`;
@@ -678,7 +706,9 @@ export class LlEmitter {
678
706
  defs.push(` %invoke_pin = call ptr @scr_closure_retain_v(ptr %cb)`);
679
707
  }
680
708
  if (cb.returns === "void") {
681
- defs.push(` call void %fn(${callArgs})`, ...(cb.lifetime === "retained" ? [` call void @scr_closure_release_v(ptr %invoke_pin)`] : []), ` ret void`, `}`, ``);
709
+ defs.push(` call void %fn(${callArgs})`, ...(cb.lifetime === "retained"
710
+ ? [` call void @scr_closure_release_v(ptr %invoke_pin)`]
711
+ : []), ` ret void`, `}`, ``);
682
712
  continue;
683
713
  }
684
714
  defs.push(` %result = call ${internalRet} %fn(${callArgs})`);
@@ -833,18 +863,18 @@ export class LlEmitter {
833
863
  // Stream-surface programs fill the loop's stream hook (the deferred
834
864
  // next-tick emissions) and the emitter's post-registration flow kick
835
865
  // before %main — scr_stream.c links only when the line is emitted
836
- // (native-toolchain.ts gates on the same predicate).
866
+ // (native/executable.ts gates on the same predicate).
837
867
  const usesStream = runtimeFeatures.stream;
838
868
  // Net-surface programs fill the loop's net hooks (and the netSocket
839
869
  // handle-dispatch ops for the checked-dynamic boundary); http-surface
840
870
  // programs additionally stamp the httpReq/httpRes ops — the C main's
841
- // install lines, gated on the same predicates native-toolchain.ts links by.
871
+ // install lines, gated on the same predicates native/executable.ts links by.
842
872
  const usesNet = runtimeFeatures.net;
843
873
  const usesDgram = runtimeFeatures.dgram;
844
874
  const usesHttp2 = runtimeFeatures.http2;
845
875
  const usesHttp = runtimeFeatures.http;
846
876
  // Fetch-referencing programs register the native fetch bridge before
847
- // any island entry (the engine's lazy boot consults it) — native-toolchain.ts
877
+ // any island entry (the engine's lazy boot consults it) — native/executable.ts
848
878
  // compiles scr_fetch.c on the same predicate.
849
879
  const usesFetch = runtimeFeatures.fetch;
850
880
  const embedsZlib = moduleEmbedsBuiltin(this.mod, "node:zlib");
@@ -852,7 +882,8 @@ export class LlEmitter {
852
882
  moduleEmbedsBuiltin(this.mod, "node:https") ||
853
883
  moduleEmbedsBuiltin(this.mod, "node:net") ||
854
884
  moduleEmbedsBuiltin(this.mod, "node:tls");
855
- const snapshotsTlsCa = runtimeFeatures.tls || runtimeFeatures.tlsCa ||
885
+ const snapshotsTlsCa = runtimeFeatures.tls ||
886
+ runtimeFeatures.tlsCa ||
856
887
  moduleEmbedsBuiltin(this.mod, "node:https") ||
857
888
  moduleEmbedsBuiltin(this.mod, "node:tls");
858
889
  // The process verdict has the same precedence as the C reference
@@ -865,10 +896,14 @@ export class LlEmitter {
865
896
  this.declare(`declare void @scr_events_install()`);
866
897
  if (usesChildProcess)
867
898
  this.declare(`declare void @scr_child_dyn_install()`);
868
- const childStreamBoxes = usesChildProcess && usesStream &&
869
- this.classMeta.has("%Readable") && this.classMeta.has("%Writable")
870
- ? [this.dyn.toDynHelper({ kind: "object", className: "%Readable" }),
871
- this.dyn.toDynHelper({ kind: "object", className: "%Writable" })]
899
+ const childStreamBoxes = usesChildProcess &&
900
+ usesStream &&
901
+ this.classMeta.has("%Readable") &&
902
+ this.classMeta.has("%Writable")
903
+ ? [
904
+ this.dyn.toDynHelper({ kind: "object", className: "%Readable" }),
905
+ this.dyn.toDynHelper({ kind: "object", className: "%Writable" }),
906
+ ]
872
907
  : null;
873
908
  if (childStreamBoxes) {
874
909
  this.declare(`@scr_stream_child_ops = external constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }`);
@@ -1159,9 +1194,7 @@ export class LlEmitter {
1159
1194
  // entry points). Every dense slot is present; reads retain immortal
1160
1195
  // strings — a no-op.
1161
1196
  const n = inst.slots.length;
1162
- const present = n === 0
1163
- ? "zeroinitializer"
1164
- : `[ ${inst.slots.map(() => "i8 1").join(", ")} ]`;
1197
+ const present = n === 0 ? "zeroinitializer" : `[ ${inst.slots.map(() => "i8 1").join(", ")} ]`;
1165
1198
  out.push(`@${inst.sym}_data = internal constant [${n} x ptr] [ ${inst.slots.map((s) => `ptr ${s}`).join(", ")} ]`, `@${inst.sym}_present = internal constant [${n} x i8] ${present}`, `@${inst.sym} = internal global %ScrArr { ${this.sizeType} -1, ${this.sizeType} ${n}, ${this.sizeType} ${n}, i32 2, ptr null, ptr null, ptr null, ptr @${inst.sym}_data, ptr @${inst.sym}_present, ptr null, ${this.sizeType} 0, ${this.sizeType} 0, ptr null, ${this.sizeType} 0, ${this.sizeType} 0, ptr null }`);
1166
1199
  }
1167
1200
  if (this.templateStringsInstances.size > 0)
@@ -1189,13 +1222,17 @@ export class LlEmitter {
1189
1222
  const esm = stored.esm === null
1190
1223
  ? `ptr null, ${this.sizeType} 0, ${this.sizeType} 0`
1191
1224
  : `ptr @sc_npm_esm_${i}, ${this.sizeType} ${stored.esm.bytes.length}, ${this.sizeType} ${stored.esm.raw}`;
1192
- return `%ScrIslandModule { ptr @sc_npm_key_${i}, ptr @sc_npm_src_${i}, ` +
1225
+ return (`%ScrIslandModule { ptr @sc_npm_key_${i}, ptr @sc_npm_src_${i}, ` +
1193
1226
  `${this.sizeType} ${stored.src.bytes.length}, ${this.sizeType} ${stored.src.raw}, ` +
1194
- `i32 ${fmt[m.format]}, ${esm} }`;
1227
+ `i32 ${fmt[m.format]}, ${esm} }`);
1195
1228
  });
1196
1229
  out.push(`@sc_npm_modules = internal constant [${moduleRows.length} x %ScrIslandModule] [ ${moduleRows.join(", ")} ]`);
1197
1230
  embedded.edges.forEach((edge, i) => {
1198
- const parts = [["from", edge.from], ["spec", edge.specifier], ["to", edge.to]];
1231
+ const parts = [
1232
+ ["from", edge.from],
1233
+ ["spec", edge.specifier],
1234
+ ["to", edge.to],
1235
+ ];
1199
1236
  for (const [part, text] of parts) {
1200
1237
  const bytes = Buffer.from(text, "utf8");
1201
1238
  out.push(`@sc_npm_edge_${i}_${part} = internal constant [${bytes.length + 1} x i8] c"${llBytes(bytes)}"`);
@@ -1250,7 +1287,10 @@ export class LlEmitter {
1250
1287
  // The exception epilogue is emitted when the entry may throw.
1251
1288
  const stamps = [...errorViews];
1252
1289
  for (const iv of this.errorIntervals) {
1253
- const fields = [[0, iv.pre], [1, iv.post]];
1290
+ const fields = [
1291
+ [0, iv.pre],
1292
+ [1, iv.post],
1293
+ ];
1254
1294
  for (const [field, value] of fields) {
1255
1295
  stamps.push(` store ${this.sizeType} ${value}, ptr getelementptr inbounds ([${RUNTIME_ERROR_CLASSES.size} x %ScrVt], ptr @scr_error_vts, i64 0, i64 ${iv.kind}, i32 ${field})${field === 1 ? ` ; ${iv.lib}` : ""}`);
1256
1296
  }
@@ -1306,8 +1346,12 @@ export class LlEmitter {
1306
1346
  out.push(`define i32 @${this.wasi ? "__main_argc_argv" : "main"}(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`, ...(this.runtimeAbiMarker ? [` call void @${RUNTIME_ABI_MARKER}()`] : []), ` call void @scr_init()`, ...stamps,
1307
1347
  // Event-surface programs (signal/exit listeners) fill the loop's
1308
1348
  // nullable event hooks before %main — scr_events.c links only when
1309
- // this line is emitted (native-toolchain.ts gates on the same predicate).
1310
- ...(usesEvents ? [` call void @scr_events_install()`] : []), ...(usesChildProcess ? [` call void @scr_child_dyn_install()`] : []), ...(childStreamBoxes ? [` call void @scr_child_dyn_streams_install(ptr @scr_stream_child_ops, ptr @${childStreamBoxes[0]}, ptr @${childStreamBoxes[1]})`] : []),
1349
+ // this line is emitted (native/executable.ts gates on the same predicate).
1350
+ ...(usesEvents ? [` call void @scr_events_install()`] : []), ...(usesChildProcess ? [` call void @scr_child_dyn_install()`] : []), ...(childStreamBoxes
1351
+ ? [
1352
+ ` call void @scr_child_dyn_streams_install(ptr @scr_stream_child_ops, ptr @${childStreamBoxes[0]}, ptr @${childStreamBoxes[1]})`,
1353
+ ]
1354
+ : []),
1311
1355
  // fs.watch programs fill the loop's watch hooks the same way —
1312
1356
  // scr_watch.c links only when this line is emitted.
1313
1357
  ...(usesFsWatch ? [` call void @scr_watch_install()`] : []), ...(this.ffiHasForeignCallback ? [` call void @scr_ffi_install()`] : []), ...(snapshotsTlsCa ? [` call void @scr_tls_ca_install()`] : []), ...(usesFetch ? [` call void @scr_fetch_install()`] : []), ...(embedsZlib ? [` call void @scr_zlib_island_install()`] : []), ...(embedsNet ? [` call void @scr_net_island_install()`] : []), ...(usesNet ? [` call void @scr_net_install()`, ` call void @scr_net_dyn_install()`] : []), ...(usesHttp ? [` call void @scr_http_dyn_install()`] : []), ...(usesDgram ? [` call void @scr_dgram_install()`] : []), ...(usesHttp2 ? [` call void @scr_http2_dyn_install()`] : []), ...(usesStream ? [` call void @scr_stream_install()`] : []), ` call void @scr_lib_init(i32 %argc, ptr %argv)`, ...(usesIsland
@@ -1520,7 +1564,9 @@ export class LlEmitter {
1520
1564
  }
1521
1565
  for (const e of lib.exports) {
1522
1566
  const params = [];
1523
- const body = [` call void @scr_library_entry(i1 zeroext ${autoReset ? "true" : "false"}, ptr ${symConst(e.symbol)})`];
1567
+ const body = [
1568
+ ` call void @scr_library_entry(i1 zeroext ${autoReset ? "true" : "false"}, ptr ${symConst(e.symbol)})`,
1569
+ ];
1524
1570
  const args = [];
1525
1571
  if (e.inboundBytesTrap !== undefined) {
1526
1572
  // The bytes-in helper's trap message: the compiler-assembled
@@ -1879,7 +1925,7 @@ export class LlEmitter {
1879
1925
  for (const fn of this.mod.functions) {
1880
1926
  if (fn.generator === undefined)
1881
1927
  continue;
1882
- const { definitions, pack, lifted, fieldTys, ret, tr, spawnParams, argPackLines, } = this.emitArgPackAndTrampolinePrologue(fn);
1928
+ const { definitions, pack, lifted, fieldTys, ret, tr, spawnParams, argPackLines } = this.emitArgPackAndTrampolinePrologue(fn);
1883
1929
  for (const line of definitions)
1884
1930
  out.push(line);
1885
1931
  this.declare(`declare zeroext i1 @scr_exc_genret_pending()`);
@@ -1995,7 +2041,9 @@ export class LlEmitter {
1995
2041
  lit = { sym: `sc_lit_${this.literals.size}`, len: Buffer.byteLength(text, "utf8") };
1996
2042
  this.literals.set(text, lit);
1997
2043
  }
1998
- return `@${lit.sym}`;
2044
+ const name = `@${lit.sym}`;
2045
+ this.immortalValues.add(name);
2046
+ return name;
1999
2047
  }
2000
2048
  /** Interned NUL-terminated C-string constant (the scr_jb_puts /
2001
2049
  * stringify-indent currency) — `@`-ref, first-use order. */
@@ -2025,7 +2073,9 @@ export class LlEmitter {
2025
2073
  sym = `sc_unit_${this.unitInstances.size}`;
2026
2074
  this.unitInstances.set(key, sym);
2027
2075
  }
2028
- return `@${sym}`;
2076
+ const name = `@${sym}`;
2077
+ this.immortalValues.add(name);
2078
+ return name;
2029
2079
  }
2030
2080
  declare(decl) {
2031
2081
  this.decls.add(decl);
@@ -2041,7 +2091,7 @@ export class LlEmitter {
2041
2091
  }
2042
2092
  /** Registers an owned refcounted value on the current statement frame. */
2043
2093
  own(v) {
2044
- if (isRefCounted(v.type))
2094
+ if (isRefCounted(v.type) && !this.immortalValues.has(v.name))
2045
2095
  this.currentFrame().push(v);
2046
2096
  return v;
2047
2097
  }
@@ -2053,7 +2103,7 @@ export class LlEmitter {
2053
2103
  }
2054
2104
  /** Strike a refcounted temp from its frame: ownership is being moved. */
2055
2105
  moveTemp(v) {
2056
- if (!isRefCounted(v.type))
2106
+ if (!isRefCounted(v.type) || this.immortalValues.has(v.name))
2057
2107
  return;
2058
2108
  for (let i = this.frames.length - 1; i >= 0; i--) {
2059
2109
  const idx = this.frames[i].findIndex((e) => e.name === v.name);
@@ -2067,6 +2117,8 @@ export class LlEmitter {
2067
2117
  /** The retained (+1) read of a refcounted value — type-directed through
2068
2118
  * the `_v` table (immortals skip, exactly the C retain calls). */
2069
2119
  retainValue(name, type) {
2120
+ if (this.immortalValues.has(name))
2121
+ return name;
2070
2122
  const t = this.B.tmp();
2071
2123
  this.B.line(`${t} = call ptr ${retainSym(this.shapeHost, type)}(ptr ${name})`);
2072
2124
  return t;
@@ -2074,6 +2126,8 @@ export class LlEmitter {
2074
2126
  /** The release call for one owned refcounted value — type-directed like
2075
2127
  * releaseCallC (all runtime releases are NULL-tolerant). */
2076
2128
  releaseValue(name, type) {
2129
+ if (this.immortalValues.has(name))
2130
+ return;
2077
2131
  this.B.line(`call void ${releaseSym(this.shapeHost, type)}(ptr ${name})`);
2078
2132
  }
2079
2133
  releaseFrame(frame) {
@@ -2167,9 +2221,14 @@ export class LlEmitter {
2167
2221
  }
2168
2222
  else {
2169
2223
  const t = this.currentReturnType;
2170
- terminator = t.kind === "void" ? "ret void"
2171
- : t.kind === "f64" || t.kind === "date" ? `ret double ${f64Lit(0)}`
2172
- : t.kind === "bool" ? "ret i1 false" : "ret ptr null";
2224
+ terminator =
2225
+ t.kind === "void"
2226
+ ? "ret void"
2227
+ : t.kind === "f64" || t.kind === "date"
2228
+ ? `ret double ${f64Lit(0)}`
2229
+ : t.kind === "bool"
2230
+ ? "ret i1 false"
2231
+ : "ret ptr null";
2173
2232
  }
2174
2233
  // Copy the entries now: later declarations extend these lexical scopes.
2175
2234
  // Release order and the handler are part of the shared block's identity.
@@ -2240,7 +2299,10 @@ export class LlEmitter {
2240
2299
  this.declare(`declare void @scr_throw_obj(ptr, ptr, ptr, ptr)`);
2241
2300
  B.line(`call void @scr_throw_obj(ptr ${v.name}, ptr ${rc.retain}, ptr ${rc.release}, ptr ${traceArg(this.shapeHost, t)})`);
2242
2301
  }
2243
- else if (t.kind === "symbol" || t.kind === "bigint" || t.kind === "func" || t.kind === "classval") {
2302
+ else if (t.kind === "symbol" ||
2303
+ t.kind === "bigint" ||
2304
+ t.kind === "func" ||
2305
+ t.kind === "classval") {
2244
2306
  const rc = vAdapters(this.shapeHost, t);
2245
2307
  this.declare(`declare void @scr_throw_primitive_ref(ptr, ptr, ptr, ptr)`);
2246
2308
  B.line(`call void @scr_throw_primitive_ref(ptr ${v.name}, ptr ${rc.retain}, ptr ${rc.release}, ptr null)`);
@@ -2911,21 +2973,30 @@ export class LlEmitter {
2911
2973
  this.unwindCleanups.clear();
2912
2974
  this.jumpTargets = [];
2913
2975
  this.currentLocals = new Map(fn.locals.map((l) => [l.id, l]));
2976
+ const initializerBindings = this.initializerBindings.get(fn.name) ?? [];
2977
+ const numericFn = withInitializerBindings(fn, initializerBindings);
2978
+ this.numericLocals = new Map(numericFn.locals.map((l) => [l.id, l]));
2914
2979
  this.borrowedParameters.clear();
2915
- const borrowedParameterIndexes = this.callLifetimes.parameters.get(fn.name);
2980
+ this.stableCallBindings = this.callLifetimes.bindings.get(fn.name) ?? new Set();
2981
+ const borrowedParameterIndexes = this.callLifetimes.borrowed.get(fn.name);
2916
2982
  if (borrowedParameterIndexes) {
2917
2983
  for (const index of borrowedParameterIndexes)
2918
2984
  this.borrowedParameters.add(fn.params[index].localId);
2919
2985
  }
2920
2986
  this.captureIds = new Set([...(fn.captures ?? []), ...(fn.classCaptures ?? [])].map((c) => c.localId));
2921
2987
  this.integerLoopBindings.clear();
2988
+ this.countedLoopsEnabled = this.debug === null && !fn.async && !fn.generator;
2989
+ this.integerViews.clear();
2922
2990
  this.fieldPointerTags.clear();
2923
2991
  this.integerArrayBindings.clear();
2924
- this.localArrayReads = findLocalArrayReads(fn, this.fnByName, this.unionsById, this.arrayPreservingFunctions, this.callLifetimes, this.optionalArrayReads);
2925
- this.callArrayReads = findCallArrayReads(fn, this.optionalArrayReads, this.arrayPreservingFunctions, this.callLifetimes);
2992
+ this.localArrayReads = findLocalArrayReads(fn, this.fnByName, this.unionsById, this.referenceEffects.functions, this.callLifetimes, this.optionalArrayReads);
2993
+ this.callArrayReads = findCallArrayReads(fn, this.optionalArrayReads, this.referenceEffects.functions, this.callLifetimes);
2926
2994
  this.mapReadLifetimes = findMapReadLifetimes(fn, this.unionsById, this.callLifetimes);
2927
2995
  this.localStackUnions = findLocalStackUnions(fn, this.callLifetimes, this.unionsById);
2928
- this.integerRanges = analyzeIntegerRanges(fn);
2996
+ this.localUnionStorageProofs = findLocalUnionStorage(fn, this.callLifetimes, this.unionsById);
2997
+ this.localUnionStorage = new Map();
2998
+ this.integerRanges = analyzeIntegerRanges(numericFn);
2999
+ this.bytesBounds = findBytesBounds(numericFn, this.integerRanges);
2929
3000
  this.chainSlots.clear();
2930
3001
  this.finallyStack = [];
2931
3002
  this.tryStack = [];
@@ -2967,6 +3038,20 @@ export class LlEmitter {
2967
3038
  };
2968
3039
  }
2969
3040
  const paramIds = new Set(fn.params.map((p) => p.localId));
3041
+ if (this.debug === null) {
3042
+ for (const id of findIntegerViews(numericFn)) {
3043
+ const slot = B.slot();
3044
+ B.entryAllocas.push(`${slot} = alloca i32 ; integer view ${this.numericLocals.get(id).name}`);
3045
+ this.integerViews.set(id, slot);
3046
+ }
3047
+ }
3048
+ for (const global of initializerBindings) {
3049
+ if (!this.integerViews.has(global.id))
3050
+ continue;
3051
+ const value = B.tmp();
3052
+ B.line(`${value} = load double, ptr @${mangleGlobal(global.id)}`);
3053
+ this.storeIntegerView(global.id, { name: value, type: global.type });
3054
+ }
2970
3055
  for (const local of fn.locals) {
2971
3056
  // Boxed locals' slots hold their capture BOX (a ptr); captured
2972
3057
  // (env-borrowed) locals bind the incoming box below. A caught-typed
@@ -3016,7 +3101,7 @@ export class LlEmitter {
3016
3101
  // params (callees own their params — callers passed +1). Boxed params
3017
3102
  // allocate the shared binding and move the raw value in.
3018
3103
  const fnScope = [];
3019
- const borrowed = this.callLifetimes.parameters.get(fn.name);
3104
+ const borrowed = this.callLifetimes.borrowed.get(fn.name);
3020
3105
  for (const [index, p] of fn.params.entries()) {
3021
3106
  const local = this.currentLocals.get(p.localId);
3022
3107
  const slot = `%${mangleLocal(p.localId)}`;
@@ -3029,6 +3114,7 @@ export class LlEmitter {
3029
3114
  continue;
3030
3115
  }
3031
3116
  B.line(`store ${this.llType(p.type)} %p_${mangleLocal(p.localId)}, ptr ${slot}`);
3117
+ this.storeIntegerView(p.localId, { name: `%p_${mangleLocal(p.localId)}`, type: p.type });
3032
3118
  if (isRefCounted(p.type) && !borrowed?.has(index))
3033
3119
  fnScope.push({ slot, type: p.type });
3034
3120
  }
@@ -3132,17 +3218,24 @@ export class LlEmitter {
3132
3218
  B.terminate(ret === "void" ? "ret void" : `ret ${ret} %result`);
3133
3219
  return `define internal ${ret} @${mangleFunction(fn.name)}(${params.join(", ")}) ${FN_ATTRS} {\n${B.render()}\n}`;
3134
3220
  }
3135
- /** A local immutable binding keeps its value alive while later arguments
3136
- * and the callee execute. Global, captured, TDZ and mutable bindings need
3137
- * an owned snapshot, even when the callee only inspects the value. */
3221
+ /** A local stable binding keeps its value alive while later arguments
3222
+ * and the callee execute. A proven local union box cannot escape or be
3223
+ * rebound during a call; its independent payload owner keeps it alive.
3224
+ * Other writable bindings need an owned snapshot. */
3138
3225
  canBorrowCallArgument(value) {
3139
3226
  if (value.kind === "strLit")
3140
3227
  return true;
3141
3228
  if (value.kind !== "varRef")
3142
3229
  return false;
3143
3230
  const binding = this.binding(value.localId);
3144
- return binding.kind === "local" && binding.local !== undefined &&
3145
- (!binding.local.mutable || this.borrowedParameters.has(value.localId)) && !binding.local.boxed && !binding.local.tdz;
3231
+ return (binding.kind === "local" &&
3232
+ binding.local !== undefined &&
3233
+ (!binding.local.mutable ||
3234
+ this.stableCallBindings.has(value.localId) ||
3235
+ this.borrowedParameters.has(value.localId) ||
3236
+ this.localUnionStorage.has(value.localId)) &&
3237
+ !binding.local.boxed &&
3238
+ !binding.local.tdz);
3146
3239
  }
3147
3240
  // ── statements ──────────────────────────────────────────────────────────
3148
3241
  emitStmts(stmts) {
@@ -3192,7 +3285,10 @@ export class LlEmitter {
3192
3285
  B.line(`store ptr ${union.value.name}, ptr ${b.slot}`);
3193
3286
  if (union.payload) {
3194
3287
  this.moveTemp(union.payload);
3195
- this.scopes[this.scopes.length - 1].push({ slot: union.payloadSlot, type: union.payload.type });
3288
+ this.scopes[this.scopes.length - 1].push({
3289
+ slot: union.payloadSlot,
3290
+ type: union.payload.type,
3291
+ });
3196
3292
  }
3197
3293
  break;
3198
3294
  }
@@ -3211,6 +3307,19 @@ export class LlEmitter {
3211
3307
  this.scopes[this.scopes.length - 1].push(result.owner);
3212
3308
  break;
3213
3309
  }
3310
+ const localStorage = this.localUnionStorageProofs.get(s.localId);
3311
+ if (localStorage && s.init) {
3312
+ const storage = allocateLocalUnion(this, localStorage);
3313
+ this.localUnionStorage.set(s.localId, storage);
3314
+ storeLocalUnion(this, storage, s.init);
3315
+ B.line(`store ptr ${storage.box}, ptr ${b.slot}`);
3316
+ if (storage.owner && storage.ownerType)
3317
+ this.scopes[this.scopes.length - 1].push({
3318
+ slot: storage.owner,
3319
+ type: storage.ownerType,
3320
+ });
3321
+ break;
3322
+ }
3214
3323
  if (b.kind === "boxed") {
3215
3324
  // Box FIRST, then evaluate the initializer: a named function
3216
3325
  // expression's closure captures this box during init evaluation.
@@ -3248,15 +3357,35 @@ export class LlEmitter {
3248
3357
  }
3249
3358
  break;
3250
3359
  }
3360
+ // A lexical const alias cannot outlive its unchanged local owner.
3361
+ // Whole-value uses still retain their own copies, so returning or
3362
+ // storing the alias preserves the ordinary heap representation.
3363
+ // Boxed captures, reassigned sources and projections need ownership.
3364
+ if (b.kind === "local" &&
3365
+ b.local &&
3366
+ !b.local.mutable &&
3367
+ isRefCounted(b.type) &&
3368
+ this.stableCallBindings.has(s.localId) &&
3369
+ this.canBorrowCallArgument(s.init)) {
3370
+ const v = this.emitReadReceiver(s.init);
3371
+ B.line(`store ptr ${v.name}, ptr ${b.slot}`);
3372
+ break;
3373
+ }
3251
3374
  const v = this.emitExpr(s.init);
3252
3375
  this.moveTemp(v);
3253
3376
  B.line(`store ${this.llType(b.type)} ${v.name}, ptr ${b.slot}`);
3377
+ this.storeIntegerView(s.localId, v, s.init);
3254
3378
  if (isRefCounted(b.type)) {
3255
3379
  this.scopes[this.scopes.length - 1].push({ slot: b.slot, type: b.type });
3256
3380
  }
3257
3381
  break;
3258
3382
  }
3259
3383
  case "assign": {
3384
+ const localStorage = this.localUnionStorage.get(s.localId);
3385
+ if (localStorage) {
3386
+ storeLocalUnion(this, localStorage, s.value);
3387
+ break;
3388
+ }
3260
3389
  const concat = s.value;
3261
3390
  const suffix = matchStringSelfConcat(s.localId, concat);
3262
3391
  if (suffix && concat.kind === "strConcat") {
@@ -3281,6 +3410,7 @@ export class LlEmitter {
3281
3410
  this.releaseValue(old, b.type);
3282
3411
  }
3283
3412
  B.line(`store ${this.llType(b.type)} ${v.name}, ptr ${b.slot}`);
3413
+ this.storeIntegerView(s.localId, v, s.value);
3284
3414
  break;
3285
3415
  }
3286
3416
  case "exprStmt":
@@ -3290,7 +3420,7 @@ export class LlEmitter {
3290
3420
  // Evaluation order matches JS: array, index, then value. Ownership
3291
3421
  // of a refcounted value moves into the array (the runtime releases
3292
3422
  // the replaced element itself).
3293
- const arr = this.emitExpr(s.arr);
3423
+ const arr = emitBorrowedInput(this, s.arr);
3294
3424
  const idx = this.emitExpr(s.index);
3295
3425
  const v = this.emitExpr(s.value);
3296
3426
  if (s.arr.type.kind !== "array")
@@ -3304,7 +3434,7 @@ export class LlEmitter {
3304
3434
  break;
3305
3435
  }
3306
3436
  case "arraySetLength": {
3307
- const arr = this.emitExpr(s.arr);
3437
+ const arr = emitBorrowedInput(this, s.arr);
3308
3438
  const length = this.emitExpr(s.length);
3309
3439
  if (s.arr.type.kind !== "array")
3310
3440
  throw new InternalCompilerError("llvm emitter bug: arraySetLength on non-array");
@@ -3315,7 +3445,7 @@ export class LlEmitter {
3315
3445
  }
3316
3446
  case "arraySetUndefined":
3317
3447
  case "arrayDelete": {
3318
- const arr = this.emitExpr(s.arr);
3448
+ const arr = emitBorrowedInput(this, s.arr);
3319
3449
  const idx = this.emitExpr(s.index);
3320
3450
  if (s.arr.type.kind !== "array")
3321
3451
  throw new InternalCompilerError(`llvm emitter bug: ${s.kind} on non-array`);
@@ -3334,12 +3464,11 @@ export class LlEmitter {
3334
3464
  // IrBytesElem is static, so never rediscover it through the
3335
3465
  // generic runtime switch in a hot loop.
3336
3466
  const arr = this.emitStableReceiver(s.arr, [s.index, s.value]);
3337
- const integerIndex = this.emitIntegerLoopIndex(s.index);
3338
- const idx = integerIndex ?? this.emitExpr(s.index).name;
3467
+ const idx = this.emitExpr(s.index);
3339
3468
  const v = this.emitExpr(s.value);
3340
3469
  if (s.arr.type.kind !== "bytes")
3341
3470
  throw new InternalCompilerError("llvm emitter bug: bytesSet on non-bytes");
3342
- this.emitBytesSet(s.arr.type.elem, arr.name, idx, v.name, integerIndex !== null);
3471
+ this.emitBytesSet(s.arr.type.elem, arr.name, idx, v, s.index, s.value, this.bytesBounds.has(s));
3343
3472
  break;
3344
3473
  }
3345
3474
  case "fieldSet":
@@ -3349,7 +3478,9 @@ export class LlEmitter {
3349
3478
  // release — a release can trigger a cycle collection, which must
3350
3479
  // never see a heap edge whose count was already given up).
3351
3480
  // Classes and records share the struct layout, so one emission.
3352
- const obj = isRefCounted(s.value.type) ? this.emitExpr(s.obj) : this.emitStableReceiver(s.obj, [s.value]);
3481
+ const obj = isRefCounted(s.value.type)
3482
+ ? this.emitExpr(s.obj)
3483
+ : this.emitStableReceiver(s.obj, [s.value]);
3353
3484
  const v = this.emitExpr(s.value);
3354
3485
  const { ptr, type } = s.kind === "fieldSet"
3355
3486
  ? this.classFieldPtr(obj.name, s.className, s.field)
@@ -3364,7 +3495,9 @@ export class LlEmitter {
3364
3495
  else {
3365
3496
  this.storeField(ptr, type, v.name);
3366
3497
  }
3367
- if (s.kind === "fieldSet" && s.field === "name" && this.classMeta.get(s.className)?.root.def.name === "%Error") {
3498
+ if (s.kind === "fieldSet" &&
3499
+ s.field === "name" &&
3500
+ this.classMeta.get(s.className)?.root.def.name === "%Error") {
3368
3501
  const present = this.classFieldPtr(obj.name, s.className, "%namePresent").ptr;
3369
3502
  const enumerable = this.classFieldPtr(obj.name, s.className, "%nameEnumerable").ptr;
3370
3503
  const wasPresent = B.tmp(), wasEnumerable = B.tmp(), isPresent = B.tmp(), nextEnumerable = B.tmp();
@@ -3610,10 +3743,33 @@ export class LlEmitter {
3610
3743
  case "for": {
3611
3744
  // The init's scope wraps the whole loop (break/continue must NOT
3612
3745
  // release it — scopeDepth captured after the push, C parity).
3613
- const integerArrayLoop = this.debug === null ? matchIntegerArrayForLoop(s, this.currentLocals, this.integerArrayBindings) : null;
3614
- const integerLoop = integerArrayLoop ?? (this.debug === null ? matchIntegerBytesForLoop(s, this.currentLocals) : null);
3746
+ const integerArrayLoop = this.debug === null
3747
+ ? matchIntegerArrayForLoop(s, this.currentLocals, this.integerArrayBindings)
3748
+ : null;
3749
+ const integerLoop = integerArrayLoop ??
3750
+ (this.debug === null ? matchIntegerBytesForLoop(s, this.numericLocals) : null);
3751
+ const countedLoop = !integerLoop && this.countedLoopsEnabled
3752
+ ? matchIntegerCountedForLoop(s, this.numericLocals, this.integerRanges)
3753
+ : null;
3754
+ let countedJoin = null;
3755
+ if (countedLoop?.guarded) {
3756
+ const bound = this.emitExpr(countedLoop.limit);
3757
+ const safe = B.tmp();
3758
+ const fast = B.newLabel("counted.fast");
3759
+ const slow = B.newLabel("counted.slow");
3760
+ countedJoin = B.newLabel("counted.done");
3761
+ B.line(`${safe} = fcmp ${countedLoop.step > 0 ? "ole" : "oge"} double ${bound.name}, ${f64Lit(countedLoop.guardLimit)}`);
3762
+ B.condBr(safe, fast, slow);
3763
+ B.startBlock(slow);
3764
+ this.countedLoopsEnabled = false;
3765
+ this.emitStmt(s);
3766
+ this.countedLoopsEnabled = true;
3767
+ B.br(countedJoin);
3768
+ B.startBlock(fast);
3769
+ }
3615
3770
  this.scopes.push([]);
3616
3771
  let integerSlot = null;
3772
+ let countedLimit = null;
3617
3773
  if (integerLoop) {
3618
3774
  integerSlot = B.slot();
3619
3775
  B.entryAllocas.push(`${integerSlot} = alloca ${this.sizeType} ; integer induction ${this.currentLocals.get(integerLoop.localId).name}`);
@@ -3625,7 +3781,26 @@ export class LlEmitter {
3625
3781
  this.integerArrayBindings.add(integerLoop.localId);
3626
3782
  }
3627
3783
  B.line(`store ${this.sizeType} ${start}, ptr ${integerSlot}`);
3628
- this.integerLoopBindings.set(integerLoop.localId, integerSlot);
3784
+ this.integerLoopBindings.set(integerLoop.localId, {
3785
+ slot: integerSlot,
3786
+ type: this.sizeType,
3787
+ range: { min: 0, max: integerArrayLoop ? 4294967294 : Number.MAX_SAFE_INTEGER - 1 },
3788
+ });
3789
+ }
3790
+ else if (countedLoop) {
3791
+ integerSlot = B.slot();
3792
+ B.entryAllocas.push(`${integerSlot} = alloca i64 ; integer induction ${this.currentLocals.get(countedLoop.localId).name}`);
3793
+ const startNumber = this.emitExpr(countedLoop.start);
3794
+ const start = B.tmp();
3795
+ B.line(`${start} = fptosi double ${startNumber.name} to i64`);
3796
+ B.line(`store i64 ${start}, ptr ${integerSlot}`);
3797
+ this.integerLoopBindings.set(countedLoop.localId, {
3798
+ slot: integerSlot,
3799
+ type: "i64",
3800
+ signed: true,
3801
+ range: countedLoop.range,
3802
+ });
3803
+ countedLimit = emitCountedLoopLimit(this, countedLoop);
3629
3804
  }
3630
3805
  else if (s.init) {
3631
3806
  // A multi-declarator head shares the loop's scope. Emitting its
@@ -3680,6 +3855,13 @@ export class LlEmitter {
3680
3855
  B.line(`${inBounds} = icmp ult ${this.sizeType} ${index}, ${len}`);
3681
3856
  B.condBr(inBounds, lb, le);
3682
3857
  }
3858
+ else if (countedLoop && integerSlot && countedLimit) {
3859
+ const index = B.tmp();
3860
+ const inBounds = B.tmp();
3861
+ B.line(`${index} = load i64, ptr ${integerSlot}`);
3862
+ B.line(`${inBounds} = icmp ${countedLoop.step > 0 ? "slt" : "sgt"} i64 ${index}, ${countedLimit}`);
3863
+ B.condBr(inBounds, lb, le);
3864
+ }
3683
3865
  else if (s.cond)
3684
3866
  B.condBr(this.emitCondition(s.cond), lb, le);
3685
3867
  else
@@ -3707,6 +3889,13 @@ export class LlEmitter {
3707
3889
  B.line(`${next} = add nuw ${this.sizeType} ${old}, 1`);
3708
3890
  B.line(`store ${this.sizeType} ${next}, ptr ${integerSlot}`);
3709
3891
  }
3892
+ else if (countedLoop && integerSlot) {
3893
+ const old = B.tmp();
3894
+ const next = B.tmp();
3895
+ B.line(`${old} = load i64, ptr ${integerSlot}`);
3896
+ B.line(`${next} = add nsw i64 ${old}, ${countedLoop.step}`);
3897
+ B.line(`store i64 ${next}, ptr ${integerSlot}`);
3898
+ }
3710
3899
  else if (s.update)
3711
3900
  this.emitStmt(s.update);
3712
3901
  B.br(lc);
@@ -3715,8 +3904,14 @@ export class LlEmitter {
3715
3904
  this.releaseScope(this.scopes.pop());
3716
3905
  if (integerLoop)
3717
3906
  this.integerLoopBindings.delete(integerLoop.localId);
3907
+ if (countedLoop)
3908
+ this.integerLoopBindings.delete(countedLoop.localId);
3718
3909
  if (integerArrayLoop)
3719
3910
  this.integerArrayBindings.delete(integerArrayLoop.localId);
3911
+ if (countedJoin) {
3912
+ B.br(countedJoin);
3913
+ B.startBlock(countedJoin);
3914
+ }
3720
3915
  break;
3721
3916
  }
3722
3917
  case "forOf": {
@@ -3941,7 +4136,10 @@ export class LlEmitter {
3941
4136
  const frame = this.frames.pop();
3942
4137
  // return/throw already released their frames on the jump path; the
3943
4138
  // fall-through releases after them would be dead double-release code.
3944
- if (s.kind !== "return" && s.kind !== "throw" && s.kind !== "rethrow" && s.kind !== "runtimeFence") {
4139
+ if (s.kind !== "return" &&
4140
+ s.kind !== "throw" &&
4141
+ s.kind !== "rethrow" &&
4142
+ s.kind !== "runtimeFence") {
3945
4143
  this.releaseFrame(frame);
3946
4144
  }
3947
4145
  }
@@ -4107,7 +4305,8 @@ export class LlEmitter {
4107
4305
  }
4108
4306
  /** JS-exact switch: lazily evaluated, arbitrary-expression case tests in
4109
4307
  * source order, bodies falling through in source order until a break —
4110
- * A chain of conditional branches. All case bodies
4308
+ * Literal-only tests can use native dispatch; other tests keep a chain
4309
+ * of conditional branches. All case bodies
4111
4310
  * share ONE scope; because dispatch can jump PAST a varDecl into a later
4112
4311
  * case, refcounted/boxed case-body locals are NULL-reset up front and
4113
4312
  * the scope-exit releases rely on NULL tolerance. */
@@ -4134,33 +4333,34 @@ export class LlEmitter {
4134
4333
  }
4135
4334
  const end = B.newLabel("sw.e");
4136
4335
  const caseLabels = s.cases.map(() => B.newLabel("sw.c"));
4137
- let defaultIdx = -1;
4138
- s.cases.forEach((c, i) => {
4139
- if (c.test === null) {
4140
- defaultIdx = i;
4141
- return;
4142
- }
4143
- // Lazy source-order test evaluation (a test after the match never
4144
- // runs). Each test's temps release right after its comparison.
4145
- this.frames.push([]);
4146
- const t = this.emitExpr(c.test);
4147
- const hit = B.tmp();
4148
- if (c.test.type.kind === "string") {
4149
- this.declare(`declare zeroext i1 @scr_str_eq(ptr, ptr)`);
4150
- B.line(`${hit} = call zeroext i1 @scr_str_eq(ptr ${disc.name}, ptr ${t.name})`);
4151
- }
4152
- else if (c.test.type.kind === "bool") {
4153
- B.line(`${hit} = icmp eq i1 ${disc.name}, ${t.name}`);
4154
- }
4155
- else {
4156
- B.line(`${hit} = fcmp oeq double ${disc.name}, ${t.name}`);
4157
- }
4158
- this.releaseFrame(this.frames.pop());
4159
- const next = B.newLabel("sw.t");
4160
- B.condBr(hit, caseLabels[i], next);
4161
- B.startBlock(next);
4162
- });
4163
- B.br(defaultIdx >= 0 ? caseLabels[defaultIdx] : end);
4336
+ const defaultIdx = s.cases.findIndex((c) => c.test === null);
4337
+ const fallback = defaultIdx >= 0 ? caseLabels[defaultIdx] : end;
4338
+ if (!emitLiteralSwitch(this, disc, s.cases, caseLabels, fallback)) {
4339
+ s.cases.forEach((c, i) => {
4340
+ if (c.test === null)
4341
+ return;
4342
+ // Lazy source-order test evaluation (a test after the match never
4343
+ // runs). Each test's temps release right after its comparison.
4344
+ this.frames.push([]);
4345
+ const t = this.emitExpr(c.test);
4346
+ const hit = B.tmp();
4347
+ if (c.test.type.kind === "string") {
4348
+ this.declare(`declare zeroext i1 @scr_str_eq(ptr, ptr)`);
4349
+ B.line(`${hit} = call zeroext i1 @scr_str_eq(ptr ${disc.name}, ptr ${t.name})`);
4350
+ }
4351
+ else if (c.test.type.kind === "bool") {
4352
+ B.line(`${hit} = icmp eq i1 ${disc.name}, ${t.name}`);
4353
+ }
4354
+ else {
4355
+ B.line(`${hit} = fcmp oeq double ${disc.name}, ${t.name}`);
4356
+ }
4357
+ this.releaseFrame(this.frames.pop());
4358
+ const next = B.newLabel("sw.t");
4359
+ B.condBr(hit, caseLabels[i], next);
4360
+ B.startBlock(next);
4361
+ });
4362
+ B.br(fallback);
4363
+ }
4164
4364
  this.jumpTargets.push({
4165
4365
  kind: "switch",
4166
4366
  brkLabel: end,
@@ -4202,12 +4402,15 @@ export class LlEmitter {
4202
4402
  * branch and moves the result into `slot`: the chosen value's ownership
4203
4403
  * transfers, every other temp the arm allocated releases inside the
4204
4404
  * branch. The shared core of ternary/logical. */
4205
- emitBranchInto(slot, expr) {
4405
+ emitBranchInto(slot, expr, integerSlot) {
4206
4406
  this.frames.push([]);
4207
4407
  const v = this.emitExpr(expr);
4208
4408
  this.moveTemp(v);
4209
4409
  this.B.line(`store ${this.llType(expr.type)} ${v.name}, ptr ${slot}`);
4410
+ if (integerSlot !== undefined && v.uint32 !== undefined)
4411
+ this.B.line(`store i32 ${v.uint32}, ptr ${integerSlot}`);
4210
4412
  this.releaseFrame(this.frames.pop());
4413
+ return v.uint32 !== undefined;
4211
4414
  }
4212
4415
  // ── expressions ─────────────────────────────────────────────────────────
4213
4416
  emitLiteralExpr(e) {
@@ -4221,7 +4424,12 @@ export class LlEmitter {
4221
4424
  this.scopes.push([]);
4222
4425
  const result = emitBorrowedFieldSequence(this, e) ?? emitOperatorExpr(this, e);
4223
4426
  for (const local of this.scopes.pop()) {
4224
- this.currentFrame().push({ name: local.slot, type: local.type, slot: true, ...(local.boxed ? { boxed: true } : {}) });
4427
+ this.currentFrame().push({
4428
+ name: local.slot,
4429
+ type: local.type,
4430
+ slot: true,
4431
+ ...(local.boxed ? { boxed: true } : {}),
4432
+ });
4225
4433
  }
4226
4434
  return result;
4227
4435
  }
@@ -4319,6 +4527,15 @@ export class LlEmitter {
4319
4527
  this.B.line(`${value} = load ptr, ptr ${binding.slot}`);
4320
4528
  return { name: value, type: e.type };
4321
4529
  }
4530
+ const read = matchMapRead(e, this.unionsById);
4531
+ if (read) {
4532
+ const result = emitStackMapRead(this, read);
4533
+ if (result.owner)
4534
+ this.ownSlot(result.owner.slot, result.owner.type);
4535
+ return result.value;
4536
+ }
4537
+ if (canStackUnion(e, this.unionsById))
4538
+ return emitStackUnion(this, e).value;
4322
4539
  if (e.kind === "unionNarrow") {
4323
4540
  const union = this.emitReadReceiver(e.value);
4324
4541
  return { name: this.unionPeek(union.name), type: e.type };
@@ -4339,7 +4556,10 @@ export class LlEmitter {
4339
4556
  B.entryAllocas.push(`${slot} = alloca ptr`);
4340
4557
  const yes = B.newLabel("read.then"), no = B.newLabel("read.else"), join = B.newLabel("read.join");
4341
4558
  B.condBr(cond.name, yes, no);
4342
- for (const [label, value] of [[yes, e.then], [no, e.else_]]) {
4559
+ for (const [label, value] of [
4560
+ [yes, e.then],
4561
+ [no, e.else_],
4562
+ ]) {
4343
4563
  B.startBlock(label);
4344
4564
  this.frames.push([]);
4345
4565
  const result = this.emitReadReceiver(value);
@@ -4356,15 +4576,21 @@ export class LlEmitter {
4356
4576
  }
4357
4577
  canBorrowReceiver(e) {
4358
4578
  switch (e.kind) {
4359
- case "varRef": return this.binding(e.localId).kind !== "boxed";
4360
- case "unionNarrow": return this.canBorrowReceiver(e.value);
4579
+ case "varRef":
4580
+ return this.binding(e.localId).kind !== "boxed";
4581
+ case "unionNarrow":
4582
+ return this.canBorrowReceiver(e.value);
4361
4583
  case "fieldGet":
4362
- case "recordGet": return this.canBorrowReceiver(e.obj);
4363
- case "ternary": return this.canBorrowReceiver(e.then) && this.canBorrowReceiver(e.else_);
4584
+ case "recordGet":
4585
+ return this.canBorrowReceiver(e.obj);
4586
+ case "ternary":
4587
+ return this.canBorrowReceiver(e.then) && this.canBorrowReceiver(e.else_);
4364
4588
  // The runtime always sets a pending exception; its unreachable
4365
4589
  // typed dummy is null and owns no receiver.
4366
- case "libCall": return e.fn === "error.nodeThrow";
4367
- default: return false;
4590
+ case "libCall":
4591
+ return e.fn === "error.nodeThrow";
4592
+ default:
4593
+ return false;
4368
4594
  }
4369
4595
  }
4370
4596
  emitExpr(e) {
@@ -4484,8 +4710,8 @@ export class LlEmitter {
4484
4710
  emitIntegerLoopIndex(expr) {
4485
4711
  return emitIntegerLoopIndex(this, expr);
4486
4712
  }
4487
- emitBytesIndex(receiver, index, integerIndex = false) {
4488
- return emitBytesIndex(this, receiver, index, integerIndex);
4713
+ emitBytesIndex(receiver, index, expr, inBounds = false) {
4714
+ return emitBytesIndex(this, receiver, index, expr, undefined, inBounds);
4489
4715
  }
4490
4716
  emitBytesData(receiver) {
4491
4717
  return emitBytesData(this, receiver);
@@ -4493,14 +4719,21 @@ export class LlEmitter {
4493
4719
  emitBytesLength(elem, receiver, bytes) {
4494
4720
  return emitBytesLength(this, elem, receiver, bytes);
4495
4721
  }
4496
- emitBytesGet(elem, receiver, index, integerIndex = false) {
4497
- return emitBytesGet(this, elem, receiver, index, integerIndex);
4722
+ emitBytesGet(elem, receiver, index, expr, inBounds = false) {
4723
+ return emitBytesGet(this, elem, receiver, index, expr, inBounds);
4724
+ }
4725
+ emitToUint32(value, expr, uint32) {
4726
+ return emitToUint32(this, value, expr, uint32);
4498
4727
  }
4499
- emitToUint32(value, expr) {
4500
- return emitToUint32(this, value, expr);
4728
+ storeIntegerView(localId, value, expr) {
4729
+ const slot = this.integerViews.get(localId);
4730
+ if (slot === undefined)
4731
+ return;
4732
+ const integer = this.emitToUint32(value.name, expr, value.uint32);
4733
+ this.B.line(`store i32 ${integer}, ptr ${slot}`);
4501
4734
  }
4502
- emitBytesSet(elem, receiver, index, value, integerIndex = false) {
4503
- return emitBytesSet(this, elem, receiver, index, value, integerIndex);
4735
+ emitBytesSet(elem, receiver, index, value, indexExpr, expr, inBounds = false) {
4736
+ return emitBytesSet(this, elem, receiver, index, value, indexExpr, expr, inBounds);
4504
4737
  }
4505
4738
  emitBytesIntrinsic(e) {
4506
4739
  return emitBytesIntrinsic(this, e);