@scriptc/compiler 0.4.7 → 0.4.8

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 (776) hide show
  1. package/ambient/node-fallback/child_process.d.ts +71 -22
  2. package/ambient/node-fallback/crypto.d.ts +15 -7
  3. package/ambient/node-fallback/events.d.ts +23 -5
  4. package/ambient/node-fallback/fs.d.ts +3 -2
  5. package/ambient/node-fallback/http.d.ts +23 -17
  6. package/ambient/node-fallback/https.d.ts +5 -2
  7. package/ambient/node-fallback/net.d.ts +6 -0
  8. package/ambient/node-fallback/os.d.ts +11 -1
  9. package/ambient/node-fallback/path-posix.d.ts +6 -0
  10. package/ambient/node-fallback/path-win32.d.ts +5 -0
  11. package/ambient/node-fallback/path.d.ts +2 -0
  12. package/ambient/node-fallback/zlib.d.ts +31 -2
  13. package/ambient/scriptc-node-fallback.d.ts +37 -7
  14. package/ambient/scriptc.d.ts +7 -2
  15. package/dist/backend/executable-features.js +11 -3
  16. package/dist/backend/executable-features.js.map +1 -1
  17. package/dist/backend/library-pack.d.ts +6 -0
  18. package/dist/backend/library-pack.js +17 -6
  19. package/dist/backend/library-pack.js.map +1 -1
  20. package/dist/backend/library-pack.test.d.ts +1 -0
  21. package/dist/backend/library-pack.test.js +28 -0
  22. package/dist/backend/library-pack.test.js.map +1 -0
  23. package/dist/backend/linker.d.ts +9 -2
  24. package/dist/backend/linker.js +190 -32
  25. package/dist/backend/linker.js.map +1 -1
  26. package/dist/backend/lld.d.ts +8 -4
  27. package/dist/backend/lld.js +19 -13
  28. package/dist/backend/lld.js.map +1 -1
  29. package/dist/backend/lld.test.js +3 -1
  30. package/dist/backend/lld.test.js.map +1 -1
  31. package/dist/backend/llvm/alloc.d.ts +15 -2
  32. package/dist/backend/llvm/alloc.js +172 -36
  33. package/dist/backend/llvm/alloc.js.map +1 -1
  34. package/dist/backend/llvm/alloc.test.js +69 -1
  35. package/dist/backend/llvm/alloc.test.js.map +1 -1
  36. package/dist/backend/llvm/arenas.d.ts +17 -4
  37. package/dist/backend/llvm/arenas.js +105 -10
  38. package/dist/backend/llvm/arenas.js.map +1 -1
  39. package/dist/backend/llvm/arenas.test.js +229 -0
  40. package/dist/backend/llvm/arenas.test.js.map +1 -1
  41. package/dist/backend/llvm/bytes-alias.js +10 -1
  42. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  43. package/dist/backend/llvm/bytes-headers.js +6 -0
  44. package/dist/backend/llvm/bytes-headers.js.map +1 -1
  45. package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
  46. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  47. package/dist/backend/llvm/call-lifetimes.js +10 -0
  48. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  49. package/dist/backend/llvm/classes.d.ts +16 -9
  50. package/dist/backend/llvm/classes.js +142 -37
  51. package/dist/backend/llvm/classes.js.map +1 -1
  52. package/dist/backend/llvm/classes.test.js +42 -0
  53. package/dist/backend/llvm/classes.test.js.map +1 -1
  54. package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
  55. package/dist/backend/llvm/cpu-dispatch.js +31 -7
  56. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  57. package/dist/backend/llvm/dyn.d.ts +12 -3
  58. package/dist/backend/llvm/dyn.js +31 -7
  59. package/dist/backend/llvm/dyn.js.map +1 -1
  60. package/dist/backend/llvm/emit-function.js +67 -4
  61. package/dist/backend/llvm/emit-function.js.map +1 -1
  62. package/dist/backend/llvm/emit-module.js +90 -39
  63. package/dist/backend/llvm/emit-module.js.map +1 -1
  64. package/dist/backend/llvm/emit-module.test.d.ts +1 -0
  65. package/dist/backend/llvm/emit-module.test.js +52 -0
  66. package/dist/backend/llvm/emit-module.test.js.map +1 -0
  67. package/dist/backend/llvm/emit-statements.js +99 -15
  68. package/dist/backend/llvm/emit-statements.js.map +1 -1
  69. package/dist/backend/llvm/emitter.d.ts +113 -8
  70. package/dist/backend/llvm/emitter.js +438 -67
  71. package/dist/backend/llvm/emitter.js.map +1 -1
  72. package/dist/backend/llvm/emitter.test.js +31 -3
  73. package/dist/backend/llvm/emitter.test.js.map +1 -1
  74. package/dist/backend/llvm/expr-async.js +19 -1
  75. package/dist/backend/llvm/expr-async.js.map +1 -1
  76. package/dist/backend/llvm/expr-bytes.js +16 -1
  77. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  78. package/dist/backend/llvm/expr-calls.js +18 -2
  79. package/dist/backend/llvm/expr-calls.js.map +1 -1
  80. package/dist/backend/llvm/expr-dynamic.js +31 -10
  81. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  82. package/dist/backend/llvm/expr-primitives.js +31 -3
  83. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  84. package/dist/backend/llvm/expr-records.d.ts +1 -1
  85. package/dist/backend/llvm/expr-records.js +124 -56
  86. package/dist/backend/llvm/expr-records.js.map +1 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js +17 -0
  88. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  89. package/dist/backend/llvm/js-groups.d.ts +21 -0
  90. package/dist/backend/llvm/js-groups.js +277 -0
  91. package/dist/backend/llvm/js-groups.js.map +1 -0
  92. package/dist/backend/llvm/js-ic.d.ts +19 -1
  93. package/dist/backend/llvm/js-ic.js +96 -23
  94. package/dist/backend/llvm/js-ic.js.map +1 -1
  95. package/dist/backend/llvm/lib-dispatch.js +132 -1
  96. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  97. package/dist/backend/llvm/lib-network.js +33 -6
  98. package/dist/backend/llvm/lib-network.js.map +1 -1
  99. package/dist/backend/llvm/lib-process.js +44 -3
  100. package/dist/backend/llvm/lib-process.js.map +1 -1
  101. package/dist/backend/llvm/lib-shared.js +69 -2
  102. package/dist/backend/llvm/lib-shared.js.map +1 -1
  103. package/dist/backend/llvm/local-union-storage.test.js +32 -0
  104. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  105. package/dist/backend/llvm/loop-state.js +7 -2
  106. package/dist/backend/llvm/loop-state.js.map +1 -1
  107. package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
  108. package/dist/backend/llvm/map-entry-fusion.js +3 -3
  109. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  110. package/dist/backend/llvm/map-number-lookup.test.js +6 -6
  111. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  112. package/dist/backend/llvm/nullable-unions.js +7 -6
  113. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  114. package/dist/backend/llvm/nullable-unions.test.js +4 -1
  115. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  116. package/dist/backend/llvm/receivers.js +3 -0
  117. package/dist/backend/llvm/receivers.js.map +1 -1
  118. package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
  119. package/dist/backend/llvm/record-entry-fusion.js +217 -0
  120. package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
  121. package/dist/backend/llvm/record-results.d.ts +5 -2
  122. package/dist/backend/llvm/record-results.js +13 -12
  123. package/dist/backend/llvm/record-results.js.map +1 -1
  124. package/dist/backend/llvm/record-views.js +12 -6
  125. package/dist/backend/llvm/record-views.js.map +1 -1
  126. package/dist/backend/llvm/reference-effects.js +1 -0
  127. package/dist/backend/llvm/reference-effects.js.map +1 -1
  128. package/dist/backend/llvm/reference-writes.js +3 -0
  129. package/dist/backend/llvm/reference-writes.js.map +1 -1
  130. package/dist/backend/llvm/region-ir.js +1 -0
  131. package/dist/backend/llvm/region-ir.js.map +1 -1
  132. package/dist/backend/llvm/region-sites.d.ts +18 -0
  133. package/dist/backend/llvm/region-sites.js +79 -1
  134. package/dist/backend/llvm/region-sites.js.map +1 -1
  135. package/dist/backend/llvm/runtime-registries.test.js +53 -6
  136. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  137. package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
  138. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  139. package/dist/backend/llvm/shapes.d.ts +33 -3
  140. package/dist/backend/llvm/shapes.js +183 -13
  141. package/dist/backend/llvm/shapes.js.map +1 -1
  142. package/dist/backend/llvm/stack-objects.d.ts +1 -2
  143. package/dist/backend/llvm/stack-objects.js +8 -5
  144. package/dist/backend/llvm/stack-objects.js.map +1 -1
  145. package/dist/backend/llvm/walkers.d.ts +12 -0
  146. package/dist/backend/llvm/walkers.js +46 -2
  147. package/dist/backend/llvm/walkers.js.map +1 -1
  148. package/dist/backend/may-throw.js +12 -2
  149. package/dist/backend/may-throw.js.map +1 -1
  150. package/dist/backend/may-throw.test.js +13 -0
  151. package/dist/backend/may-throw.test.js.map +1 -1
  152. package/dist/backend/native/contracts.d.ts +48 -8
  153. package/dist/backend/native/executable.js +55 -13
  154. package/dist/backend/native/executable.js.map +1 -1
  155. package/dist/backend/native/helper-identity-record.d.ts +11 -0
  156. package/dist/backend/native/helper-identity-record.js +76 -0
  157. package/dist/backend/native/helper-identity-record.js.map +1 -0
  158. package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
  159. package/dist/backend/native/helper-identity-record.test.js +101 -0
  160. package/dist/backend/native/helper-identity-record.test.js.map +1 -0
  161. package/dist/backend/native/library.js +9 -1
  162. package/dist/backend/native/library.js.map +1 -1
  163. package/dist/backend/native/runtime-inputs.js +4 -1
  164. package/dist/backend/native/runtime-inputs.js.map +1 -1
  165. package/dist/backend/native/vendor.d.ts +1 -1
  166. package/dist/backend/native/vendor.js +1 -1
  167. package/dist/backend/native/vendor.js.map +1 -1
  168. package/dist/backend/native-codegen-core.d.ts +13 -10
  169. package/dist/backend/native-codegen-core.js +26 -13
  170. package/dist/backend/native-codegen-core.js.map +1 -1
  171. package/dist/backend/native-codegen.js +27 -8
  172. package/dist/backend/native-codegen.js.map +1 -1
  173. package/dist/backend/native-codegen.test.js +110 -14
  174. package/dist/backend/native-codegen.test.js.map +1 -1
  175. package/dist/backend/native-link-info-core.d.ts +37 -8
  176. package/dist/backend/native-link-info-core.js.map +1 -1
  177. package/dist/backend/runtime-pack-core.d.ts +17 -2
  178. package/dist/backend/runtime-pack-core.js +18 -3
  179. package/dist/backend/runtime-pack-core.js.map +1 -1
  180. package/dist/backend/runtime-pack-targets.test.js +1 -1
  181. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  182. package/dist/backend/runtime-pack.test.js +211 -2
  183. package/dist/backend/runtime-pack.test.js.map +1 -1
  184. package/dist/backend/tree-classes.d.ts +42 -0
  185. package/dist/backend/tree-classes.js +723 -0
  186. package/dist/backend/tree-classes.js.map +1 -0
  187. package/dist/backend/tree-classes.test.d.ts +1 -0
  188. package/dist/backend/tree-classes.test.js +338 -0
  189. package/dist/backend/tree-classes.test.js.map +1 -0
  190. package/dist/backend/vendor-archives.d.ts +5 -1
  191. package/dist/backend/vendor-archives.js +51 -7
  192. package/dist/backend/vendor-archives.js.map +1 -1
  193. package/dist/backend/vendor-inputs.d.ts +25 -4
  194. package/dist/backend/vendor-inputs.js +68 -4
  195. package/dist/backend/vendor-inputs.js.map +1 -1
  196. package/dist/backend/vendor-inputs.test.js +35 -1
  197. package/dist/backend/vendor-inputs.test.js.map +1 -1
  198. package/dist/backend/warm-cache.js +1 -1
  199. package/dist/backend/warm-cache.js.map +1 -1
  200. package/dist/compat/fetch-profile.js +2 -2
  201. package/dist/coverage/report.js +47 -0
  202. package/dist/coverage/report.js.map +1 -1
  203. package/dist/coverage/surface-manifest.js +1 -1
  204. package/dist/diagnostics/codes.d.ts +8 -0
  205. package/dist/diagnostics/codes.js +8 -0
  206. package/dist/diagnostics/codes.js.map +1 -1
  207. package/dist/diagnostics/diagnostic.d.ts +27 -9
  208. package/dist/diagnostics/diagnostic.js +60 -19
  209. package/dist/diagnostics/diagnostic.js.map +1 -1
  210. package/dist/diagnostics/envelope.d.ts +18 -0
  211. package/dist/diagnostics/envelope.js.map +1 -1
  212. package/dist/executable/executable-cache.d.ts +21 -2
  213. package/dist/executable/executable-cache.js +21 -1
  214. package/dist/executable/executable-cache.js.map +1 -1
  215. package/dist/executable/executable-cache.test.js +123 -1
  216. package/dist/executable/executable-cache.test.js.map +1 -1
  217. package/dist/executable/prepare.js +199 -248
  218. package/dist/executable/prepare.js.map +1 -1
  219. package/dist/frontend/analysis.js +200 -18
  220. package/dist/frontend/analysis.js.map +1 -1
  221. package/dist/frontend/builtin-modules.d.ts +4 -0
  222. package/dist/frontend/builtin-modules.js +10 -0
  223. package/dist/frontend/builtin-modules.js.map +1 -1
  224. package/dist/frontend/early-errors.d.ts +12 -2
  225. package/dist/frontend/early-errors.js +535 -4
  226. package/dist/frontend/early-errors.js.map +1 -1
  227. package/dist/frontend/early-errors.test.js +165 -0
  228. package/dist/frontend/early-errors.test.js.map +1 -1
  229. package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
  230. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  231. package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
  232. package/dist/frontend/jsx-opinion-sites.test.js +86 -0
  233. package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
  234. package/dist/frontend/lib-exports.d.ts +23 -4
  235. package/dist/frontend/lib-exports.js +98 -26
  236. package/dist/frontend/lib-exports.js.map +1 -1
  237. package/dist/frontend/lowering/binding-analysis.js +21 -3
  238. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  239. package/dist/frontend/lowering/buffers.d.ts +8 -0
  240. package/dist/frontend/lowering/buffers.js +43 -0
  241. package/dist/frontend/lowering/buffers.js.map +1 -0
  242. package/dist/frontend/lowering/builtin-calls.js +4 -0
  243. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  244. package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
  245. package/dist/frontend/lowering/builtin-namespaces.js +24 -3
  246. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  247. package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
  248. package/dist/frontend/lowering/builtin-statics.js +407 -0
  249. package/dist/frontend/lowering/builtin-statics.js.map +1 -0
  250. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  251. package/dist/frontend/lowering/builtins/arguments.js +12 -0
  252. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  253. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
  254. package/dist/frontend/lowering/builtins/atomics.js +87 -1
  255. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  256. package/dist/frontend/lowering/builtins/child-process-methods.js +2 -2
  257. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
  259. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
  260. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  261. package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
  262. package/dist/frontend/lowering/builtins/child-process.js +560 -27
  263. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
  265. package/dist/frontend/lowering/builtins/compression.js +41 -21
  266. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/constants.js +7 -2
  268. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  270. package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
  271. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  272. package/dist/frontend/lowering/builtins/json.js +4 -0
  273. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  274. package/dist/frontend/lowering/builtins/module-calls.js +3 -1
  275. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  276. package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
  277. package/dist/frontend/lowering/builtins/numbers.js +10 -2
  278. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  279. package/dist/frontend/lowering/builtins/operating-system.d.ts +6 -3
  280. package/dist/frontend/lowering/builtins/operating-system.js +96 -16
  281. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  283. package/dist/frontend/lowering/builtins/process.js +103 -8
  284. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  285. package/dist/frontend/lowering/builtins/promises.js +169 -8
  286. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/properties.js +6 -2
  288. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  289. package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
  290. package/dist/frontend/lowering/builtins/readline.js +180 -36
  291. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  292. package/dist/frontend/lowering/builtins/url.js +35 -12
  293. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  294. package/dist/frontend/lowering/builtins/webassembly.js +2 -0
  295. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  296. package/dist/frontend/lowering/call-arguments.d.ts +10 -0
  297. package/dist/frontend/lowering/call-arguments.js +37 -2
  298. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  299. package/dist/frontend/lowering/call-signatures.d.ts +10 -0
  300. package/dist/frontend/lowering/call-signatures.js +103 -0
  301. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  302. package/dist/frontend/lowering/class-construction.d.ts +14 -2
  303. package/dist/frontend/lowering/class-construction.js +99 -5
  304. package/dist/frontend/lowering/class-construction.js.map +1 -1
  305. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +9 -0
  306. package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
  307. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  308. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
  309. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  310. package/dist/frontend/lowering/class-prototypes.js +20 -15
  311. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  312. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  313. package/dist/frontend/lowering/class-runtime-statics.js +20 -1
  314. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  315. package/dist/frontend/lowering/class-unions.js +21 -4
  316. package/dist/frontend/lowering/class-unions.js.map +1 -1
  317. package/dist/frontend/lowering/coercions/function-adapters.js +9 -0
  318. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  319. package/dist/frontend/lowering/coercions/state.d.ts +8 -0
  320. package/dist/frontend/lowering/coercions/state.js +17 -0
  321. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  322. package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
  323. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  324. package/dist/frontend/lowering/coercions/structural.js +10 -1
  325. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  326. package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
  327. package/dist/frontend/lowering/coercions/unions.js +54 -10
  328. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  329. package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
  330. package/dist/frontend/lowering/constructor-returns.js +284 -58
  331. package/dist/frontend/lowering/constructor-returns.js.map +1 -1
  332. package/dist/frontend/lowering/containers/array-callbacks.js +156 -62
  333. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  334. package/dist/frontend/lowering/containers/array-construction.js +21 -3
  335. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  336. package/dist/frontend/lowering/containers/array-from-async.js +139 -3
  337. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  338. package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
  339. package/dist/frontend/lowering/containers/array-iteration.js +24 -7
  340. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
  341. package/dist/frontend/lowering/containers/array-methods.js +14 -11
  342. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  343. package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
  344. package/dist/frontend/lowering/containers/bytes.js +446 -86
  345. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  346. package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
  347. package/dist/frontend/lowering/containers/callback-arguments.js +21 -12
  348. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  349. package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
  350. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  351. package/dist/frontend/lowering/containers/collection-methods.js +52 -17
  352. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  353. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
  354. package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
  355. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  356. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
  357. package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
  358. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  359. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  360. package/dist/frontend/lowering/crypto-tables.js +5 -5
  361. package/dist/frontend/lowering/dispatch-sites.js +3 -0
  362. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  363. package/dist/frontend/lowering/divergences.d.ts +40 -0
  364. package/dist/frontend/lowering/divergences.js +239 -20
  365. package/dist/frontend/lowering/divergences.js.map +1 -1
  366. package/dist/frontend/lowering/effect-free.d.ts +12 -0
  367. package/dist/frontend/lowering/effect-free.js +44 -0
  368. package/dist/frontend/lowering/effect-free.js.map +1 -0
  369. package/dist/frontend/lowering/expressions/array-literals.d.ts +10 -0
  370. package/dist/frontend/lowering/expressions/array-literals.js +62 -0
  371. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  372. package/dist/frontend/lowering/expressions/binary.js +115 -5
  373. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  374. package/dist/frontend/lowering/expressions/element-access.js +151 -7
  375. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  376. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
  377. package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
  378. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  379. package/dist/frontend/lowering/expressions/identifiers.js +31 -2
  380. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  381. package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
  382. package/dist/frontend/lowering/expressions/narrowing.js +175 -22
  383. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  384. package/dist/frontend/lowering/expressions/object-literals.js +173 -11
  385. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  386. package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
  387. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  388. package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
  389. package/dist/frontend/lowering/expressions/property-access.js +379 -109
  390. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  391. package/dist/frontend/lowering/expressions/relational.js +237 -7
  392. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  393. package/dist/frontend/lowering/expressions/typeof.js +8 -0
  394. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  395. package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
  396. package/dist/frontend/lowering/expressions/union-fields.js +103 -13
  397. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  398. package/dist/frontend/lowering/expressions/updates.js +74 -55
  399. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  400. package/dist/frontend/lowering/function-returns.js +37 -10
  401. package/dist/frontend/lowering/function-returns.js.map +1 -1
  402. package/dist/frontend/lowering/general-streams.js +5 -0
  403. package/dist/frontend/lowering/general-streams.js.map +1 -1
  404. package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
  405. package/dist/frontend/lowering/generator-delegation.js +301 -118
  406. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  407. package/dist/frontend/lowering/generic-functions.d.ts +27 -1
  408. package/dist/frontend/lowering/generic-functions.js +432 -18
  409. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  410. package/dist/frontend/lowering/global-function-values.d.ts +25 -0
  411. package/dist/frontend/lowering/global-function-values.js +193 -0
  412. package/dist/frontend/lowering/global-function-values.js.map +1 -0
  413. package/dist/frontend/lowering/global-values.d.ts +6 -4
  414. package/dist/frontend/lowering/global-values.js +24 -10
  415. package/dist/frontend/lowering/global-values.js.map +1 -1
  416. package/dist/frontend/lowering/host-global-values.d.ts +31 -0
  417. package/dist/frontend/lowering/host-global-values.js +121 -0
  418. package/dist/frontend/lowering/host-global-values.js.map +1 -0
  419. package/dist/frontend/lowering/host-globals.d.ts +74 -0
  420. package/dist/frontend/lowering/host-globals.js +344 -0
  421. package/dist/frontend/lowering/host-globals.js.map +1 -0
  422. package/dist/frontend/lowering/http2-constants.js +1 -1
  423. package/dist/frontend/lowering/iterator-adapters.js +46 -17
  424. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  425. package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
  426. package/dist/frontend/lowering/iterator-prototype.js +160 -0
  427. package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
  428. package/dist/frontend/lowering/key-order-witness.js +43 -22
  429. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  430. package/dist/frontend/lowering/key-order-witness.test.js +1 -0
  431. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  432. package/dist/frontend/lowering/lib-boundary.js +11 -3
  433. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  434. package/dist/frontend/lowering/lower-assert.js +30 -15
  435. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  436. package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
  437. package/dist/frontend/lowering/lower-async-iteration.js +15 -0
  438. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  439. package/dist/frontend/lowering/lower-builtin-values.js +11 -1
  440. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  441. package/dist/frontend/lowering/lower-calls.d.ts +25 -0
  442. package/dist/frontend/lowering/lower-calls.js +929 -227
  443. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  444. package/dist/frontend/lowering/lower-calls.test.js +59 -16
  445. package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
  446. package/dist/frontend/lowering/lower-classes.d.ts +20 -0
  447. package/dist/frontend/lowering/lower-classes.js +468 -44
  448. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  449. package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
  450. package/dist/frontend/lowering/lower-event-emitter.js +253 -83
  451. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  452. package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
  453. package/dist/frontend/lowering/lower-exprs.js +71 -20
  454. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  455. package/dist/frontend/lowering/lower-functions.js +25 -6
  456. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  457. package/dist/frontend/lowering/lower-generators.js +57 -10
  458. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  459. package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
  460. package/dist/frontend/lowering/lower-global-value.js +14 -5
  461. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  462. package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
  463. package/dist/frontend/lowering/lower-inspect.js +638 -64
  464. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  465. package/dist/frontend/lowering/lower-modules.js +48 -2
  466. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  467. package/dist/frontend/lowering/lower-namespaces.js +18 -0
  468. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  469. package/dist/frontend/lowering/lower-node-island.js +16 -6
  470. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  471. package/dist/frontend/lowering/lower-server.js +303 -87
  472. package/dist/frontend/lowering/lower-server.js.map +1 -1
  473. package/dist/frontend/lowering/lower-stdlib.js +45 -0
  474. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  475. package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
  476. package/dist/frontend/lowering/lower-stmts.js +270 -52
  477. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  478. package/dist/frontend/lowering/lower-timers.js +110 -27
  479. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  480. package/dist/frontend/lowering/lower-url.js +6 -3
  481. package/dist/frontend/lowering/lower-url.js.map +1 -1
  482. package/dist/frontend/lowering/lowerer.d.ts +227 -21
  483. package/dist/frontend/lowering/lowerer.js +651 -92
  484. package/dist/frontend/lowering/lowerer.js.map +1 -1
  485. package/dist/frontend/lowering/lowerer.test.js +18 -0
  486. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  487. package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
  488. package/dist/frontend/lowering/lowering-facts.js +323 -0
  489. package/dist/frontend/lowering/lowering-facts.js.map +1 -0
  490. package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
  491. package/dist/frontend/lowering/lowering-facts.test.js +100 -0
  492. package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
  493. package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
  494. package/dist/frontend/lowering/nan-coded-reads.js +112 -9
  495. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  496. package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
  497. package/dist/frontend/lowering/optional-arguments.js +26 -2
  498. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  499. package/dist/frontend/lowering/partial-assertions.d.ts +0 -3
  500. package/dist/frontend/lowering/partial-assertions.js +9 -15
  501. package/dist/frontend/lowering/partial-assertions.js.map +1 -1
  502. package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
  503. package/dist/frontend/lowering/primitive-throws.js +241 -0
  504. package/dist/frontend/lowering/primitive-throws.js.map +1 -0
  505. package/dist/frontend/lowering/primitive-wrappers.js +1 -0
  506. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
  507. package/dist/frontend/lowering/record-inherited.d.ts +17 -1
  508. package/dist/frontend/lowering/record-inherited.js +16 -2
  509. package/dist/frontend/lowering/record-inherited.js.map +1 -1
  510. package/dist/frontend/lowering/record-links.d.ts +73 -0
  511. package/dist/frontend/lowering/record-links.js +797 -0
  512. package/dist/frontend/lowering/record-links.js.map +1 -0
  513. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
  514. package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
  515. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  516. package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
  517. package/dist/frontend/lowering/runtime-optional-report.js +300 -0
  518. package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
  519. package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
  520. package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
  521. package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
  522. package/dist/frontend/lowering/static-typeof.d.ts +3 -1
  523. package/dist/frontend/lowering/static-typeof.js +6 -1
  524. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  525. package/dist/frontend/lowering/strict-mode.d.ts +1 -5
  526. package/dist/frontend/lowering/strict-mode.js +4 -30
  527. package/dist/frontend/lowering/strict-mode.js.map +1 -1
  528. package/dist/frontend/lowering/structural-instances.d.ts +7 -0
  529. package/dist/frontend/lowering/structural-instances.js +23 -0
  530. package/dist/frontend/lowering/structural-instances.js.map +1 -1
  531. package/dist/frontend/lowering/surfaces.d.ts +15 -1
  532. package/dist/frontend/lowering/surfaces.js +78 -10
  533. package/dist/frontend/lowering/surfaces.js.map +1 -1
  534. package/dist/frontend/lowering/union-retag.d.ts +13 -1
  535. package/dist/frontend/lowering/union-retag.js +55 -1
  536. package/dist/frontend/lowering/union-retag.js.map +1 -1
  537. package/dist/frontend/lowering/union-retag.test.js +51 -0
  538. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  539. package/dist/frontend/lowering/unit-journal.d.ts +8 -0
  540. package/dist/frontend/lowering/unit-journal.js +14 -0
  541. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  542. package/dist/frontend/lowering/unit-journal.test.js +36 -1
  543. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  544. package/dist/frontend/lowering/zlib-constants.js +3 -2
  545. package/dist/frontend/lowering/zlib-constants.js.map +1 -1
  546. package/dist/frontend/npm-static.js +78 -9
  547. package/dist/frontend/npm-static.js.map +1 -1
  548. package/dist/frontend/npm-static.test.js +95 -2
  549. package/dist/frontend/npm-static.test.js.map +1 -1
  550. package/dist/frontend/pipeline.d.ts +5 -4
  551. package/dist/frontend/pipeline.js +94 -31
  552. package/dist/frontend/pipeline.js.map +1 -1
  553. package/dist/frontend/pipeline.test.js +68 -11
  554. package/dist/frontend/pipeline.test.js.map +1 -1
  555. package/dist/frontend/program.d.ts +62 -2
  556. package/dist/frontend/program.js +695 -422
  557. package/dist/frontend/program.js.map +1 -1
  558. package/dist/frontend/program.test.js +37 -1
  559. package/dist/frontend/program.test.js.map +1 -1
  560. package/dist/frontend/services-node.d.ts +7 -0
  561. package/dist/frontend/services-node.js +32 -1
  562. package/dist/frontend/services-node.js.map +1 -1
  563. package/dist/frontend/services-node.test.js +51 -0
  564. package/dist/frontend/services-node.test.js.map +1 -1
  565. package/dist/frontend/shape-inference/overlay.js +68 -2
  566. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  567. package/dist/frontend/tier-analysis.d.ts +9 -0
  568. package/dist/frontend/tier-analysis.js +1 -0
  569. package/dist/frontend/tier-analysis.js.map +1 -1
  570. package/dist/frontend/tsc-codes.d.ts +57 -3
  571. package/dist/frontend/tsc-codes.js +935 -150
  572. package/dist/frontend/tsc-codes.js.map +1 -1
  573. package/dist/frontend/tsc-codes.test.js +221 -12
  574. package/dist/frontend/tsc-codes.test.js.map +1 -1
  575. package/dist/frontend/type-mapper.d.ts +91 -9
  576. package/dist/frontend/type-mapper.js +622 -181
  577. package/dist/frontend/type-mapper.js.map +1 -1
  578. package/dist/index.d.ts +1 -1
  579. package/dist/index.js +80 -15
  580. package/dist/index.js.map +1 -1
  581. package/dist/index.test.d.ts +1 -0
  582. package/dist/index.test.js +60 -0
  583. package/dist/index.test.js.map +1 -0
  584. package/dist/ir/builtin-effects.js +43 -0
  585. package/dist/ir/builtin-effects.js.map +1 -1
  586. package/dist/ir/builtin-signatures.d.ts +1 -1
  587. package/dist/ir/builtin-signatures.js +242 -16
  588. package/dist/ir/builtin-signatures.js.map +1 -1
  589. package/dist/ir/callback-specialization.d.ts +3 -2
  590. package/dist/ir/callback-specialization.js +35 -25
  591. package/dist/ir/callback-specialization.js.map +1 -1
  592. package/dist/ir/capture-values.d.ts +8 -4
  593. package/dist/ir/capture-values.js +9 -6
  594. package/dist/ir/capture-values.js.map +1 -1
  595. package/dist/ir/char-unit-locals.d.ts +6 -2
  596. package/dist/ir/char-unit-locals.js +11 -2
  597. package/dist/ir/char-unit-locals.js.map +1 -1
  598. package/dist/ir/class-key-index.d.ts +18 -0
  599. package/dist/ir/class-key-index.js +29 -0
  600. package/dist/ir/class-key-index.js.map +1 -0
  601. package/dist/ir/class-key-index.test.d.ts +1 -0
  602. package/dist/ir/class-key-index.test.js +25 -0
  603. package/dist/ir/class-key-index.test.js.map +1 -0
  604. package/dist/ir/codec.generated.d.ts +1 -1
  605. package/dist/ir/codec.generated.js +724 -648
  606. package/dist/ir/codec.generated.js.map +1 -1
  607. package/dist/ir/constant-globals.d.ts +5 -2
  608. package/dist/ir/constant-globals.js +25 -27
  609. package/dist/ir/constant-globals.js.map +1 -1
  610. package/dist/ir/expression-inlining.d.ts +4 -2
  611. package/dist/ir/expression-inlining.js +8 -2
  612. package/dist/ir/expression-inlining.js.map +1 -1
  613. package/dist/ir/field-values.d.ts +5 -2
  614. package/dist/ir/field-values.js +32 -21
  615. package/dist/ir/field-values.js.map +1 -1
  616. package/dist/ir/fields.generated.d.ts +11 -2
  617. package/dist/ir/fields.generated.js +8 -0
  618. package/dist/ir/fields.generated.js.map +1 -1
  619. package/dist/ir/final-fields.js +1 -1
  620. package/dist/ir/final-fields.js.map +1 -1
  621. package/dist/ir/function-references.d.ts +5 -4
  622. package/dist/ir/function-references.js +7 -4
  623. package/dist/ir/function-references.js.map +1 -1
  624. package/dist/ir/function-references.test.js +7 -0
  625. package/dist/ir/function-references.test.js.map +1 -1
  626. package/dist/ir/init-only-globals.d.ts +4 -2
  627. package/dist/ir/init-only-globals.js +17 -18
  628. package/dist/ir/init-only-globals.js.map +1 -1
  629. package/dist/ir/inline-array-views.js +1 -0
  630. package/dist/ir/inline-array-views.js.map +1 -1
  631. package/dist/ir/int32-slots.js +7 -0
  632. package/dist/ir/int32-slots.js.map +1 -1
  633. package/dist/ir/ir.d.ts +59 -4
  634. package/dist/ir/ir.js +7 -0
  635. package/dist/ir/ir.js.map +1 -1
  636. package/dist/ir/js-groups.d.ts +51 -0
  637. package/dist/ir/js-groups.js +394 -0
  638. package/dist/ir/js-groups.js.map +1 -0
  639. package/dist/ir/js-groups.test.d.ts +1 -0
  640. package/dist/ir/js-groups.test.js +555 -0
  641. package/dist/ir/js-groups.test.js.map +1 -0
  642. package/dist/ir/js-ic.js +30 -5
  643. package/dist/ir/js-ic.js.map +1 -1
  644. package/dist/ir/js-ic.test.js +27 -1
  645. package/dist/ir/js-ic.test.js.map +1 -1
  646. package/dist/ir/node-index.d.ts +23 -6
  647. package/dist/ir/node-index.js +126 -49
  648. package/dist/ir/node-index.js.map +1 -1
  649. package/dist/ir/numeric-call-specialization.d.ts +4 -2
  650. package/dist/ir/numeric-call-specialization.js +40 -26
  651. package/dist/ir/numeric-call-specialization.js.map +1 -1
  652. package/dist/ir/paired-while-loops.d.ts +4 -2
  653. package/dist/ir/paired-while-loops.js +8 -2
  654. package/dist/ir/paired-while-loops.js.map +1 -1
  655. package/dist/ir/parameter-versions.d.ts +13 -4
  656. package/dist/ir/parameter-versions.js +63 -42
  657. package/dist/ir/parameter-versions.js.map +1 -1
  658. package/dist/ir/property-bags.d.ts +4 -2
  659. package/dist/ir/property-bags.js +22 -17
  660. package/dist/ir/property-bags.js.map +1 -1
  661. package/dist/ir/row-pairs.d.ts +4 -2
  662. package/dist/ir/row-pairs.js +12 -11
  663. package/dist/ir/row-pairs.js.map +1 -1
  664. package/dist/ir/runtime-features.d.ts +87 -12
  665. package/dist/ir/runtime-features.js +263 -160
  666. package/dist/ir/runtime-features.js.map +1 -1
  667. package/dist/ir/runtime-features.test.js +109 -139
  668. package/dist/ir/runtime-features.test.js.map +1 -1
  669. package/dist/ir/runtime-jam-loops.d.ts +35 -0
  670. package/dist/ir/runtime-jam-loops.js +604 -0
  671. package/dist/ir/runtime-jam-loops.js.map +1 -0
  672. package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
  673. package/dist/ir/runtime-jam-loops.test.js +565 -0
  674. package/dist/ir/runtime-jam-loops.test.js.map +1 -0
  675. package/dist/ir/saturating-loop-jams.d.ts +4 -2
  676. package/dist/ir/saturating-loop-jams.js +11 -10
  677. package/dist/ir/saturating-loop-jams.js.map +1 -1
  678. package/dist/ir/scalar-records.d.ts +5 -2
  679. package/dist/ir/scalar-records.js +12 -2
  680. package/dist/ir/scalar-records.js.map +1 -1
  681. package/dist/ir/self-captures.d.ts +4 -2
  682. package/dist/ir/self-captures.js +32 -27
  683. package/dist/ir/self-captures.js.map +1 -1
  684. package/dist/ir/serialize.d.ts +6 -1
  685. package/dist/ir/serialize.js +87 -23
  686. package/dist/ir/serialize.js.map +1 -1
  687. package/dist/ir/serialize.test.js +26 -0
  688. package/dist/ir/serialize.test.js.map +1 -1
  689. package/dist/ir/tiers.js +1 -0
  690. package/dist/ir/tiers.js.map +1 -1
  691. package/dist/ir/traverse.js +4 -0
  692. package/dist/ir/traverse.js.map +1 -1
  693. package/dist/ir/typed-argument-clones.d.ts +30 -0
  694. package/dist/ir/typed-argument-clones.js +789 -0
  695. package/dist/ir/typed-argument-clones.js.map +1 -0
  696. package/dist/ir/union-arm-loops.d.ts +3 -0
  697. package/dist/ir/union-arm-loops.js +373 -0
  698. package/dist/ir/union-arm-loops.js.map +1 -0
  699. package/dist/ir/union-arm-loops.test.d.ts +1 -0
  700. package/dist/ir/union-arm-loops.test.js +230 -0
  701. package/dist/ir/union-arm-loops.test.js.map +1 -0
  702. package/dist/ir/validate.js +88 -18
  703. package/dist/ir/validate.js.map +1 -1
  704. package/dist/library/compiler-self-identity.d.ts +8 -2
  705. package/dist/library/compiler-self-identity.js +92 -18
  706. package/dist/library/compiler-self-identity.js.map +1 -1
  707. package/dist/library/compiler-self-identity.test.js +150 -3
  708. package/dist/library/compiler-self-identity.test.js.map +1 -1
  709. package/dist/library/int-infer.d.ts +5 -0
  710. package/dist/library/int-infer.js +15 -3
  711. package/dist/library/int-infer.js.map +1 -1
  712. package/dist/library/ir-policy.js +1 -0
  713. package/dist/library/ir-policy.js.map +1 -1
  714. package/dist/library/library-cache.d.ts +4 -0
  715. package/dist/library/library-cache.js +2 -0
  716. package/dist/library/library-cache.js.map +1 -1
  717. package/dist/library/library-cache.test.js +26 -0
  718. package/dist/library/library-cache.test.js.map +1 -1
  719. package/dist/library/prepare.js +99 -31
  720. package/dist/library/prepare.js.map +1 -1
  721. package/dist/native/cache.d.ts +7 -0
  722. package/dist/native/cache.js +47 -0
  723. package/dist/native/cache.js.map +1 -1
  724. package/dist/native/cache.test.js +13 -1
  725. package/dist/native/cache.test.js.map +1 -1
  726. package/dist/native/cli.js +1 -1
  727. package/dist/native/cli.js.map +1 -1
  728. package/dist/native/compiler.js +18 -3
  729. package/dist/native/compiler.js.map +1 -1
  730. package/dist/native/executable-cache-open.test.js +31 -5
  731. package/dist/native/executable-cache-open.test.js.map +1 -1
  732. package/dist/native/executable-cache.d.ts +6 -1
  733. package/dist/native/executable-cache.js +7 -1
  734. package/dist/native/executable-cache.js.map +1 -1
  735. package/dist/native/prepare.d.ts +3 -0
  736. package/dist/native/prepare.js +43 -26
  737. package/dist/native/prepare.js.map +1 -1
  738. package/dist/native/prepare.test.js +25 -3
  739. package/dist/native/prepare.test.js.map +1 -1
  740. package/dist/native/sanitizer.js +10 -1
  741. package/dist/native/sanitizer.js.map +1 -1
  742. package/dist/native/sanitizer.test.js +7 -2
  743. package/dist/native/sanitizer.test.js.map +1 -1
  744. package/dist/node-islands/boundary.d.ts +12 -0
  745. package/dist/node-islands/boundary.js +38 -6
  746. package/dist/node-islands/boundary.js.map +1 -1
  747. package/dist/node-islands/boundary.test.d.ts +1 -0
  748. package/dist/node-islands/boundary.test.js +76 -0
  749. package/dist/node-islands/boundary.test.js.map +1 -0
  750. package/dist/node-islands/detect.d.ts +9 -0
  751. package/dist/node-islands/detect.js +110 -0
  752. package/dist/node-islands/detect.js.map +1 -1
  753. package/dist/node-islands/detect.test.js +24 -0
  754. package/dist/node-islands/detect.test.js.map +1 -1
  755. package/dist/node-islands/graph-islands.d.ts +40 -0
  756. package/dist/node-islands/graph-islands.js +128 -0
  757. package/dist/node-islands/graph-islands.js.map +1 -0
  758. package/dist/node-islands/growth.d.ts +57 -0
  759. package/dist/node-islands/growth.js +205 -0
  760. package/dist/node-islands/growth.js.map +1 -0
  761. package/dist/node-islands/report.d.ts +12 -0
  762. package/dist/node-islands/report.js +28 -0
  763. package/dist/node-islands/report.js.map +1 -1
  764. package/dist/node-islands/report.test.js +2 -0
  765. package/dist/node-islands/report.test.js.map +1 -1
  766. package/dist/node-islands/rules.js +5 -0
  767. package/dist/node-islands/rules.js.map +1 -1
  768. package/dist/node-islands/scan.d.ts +11 -2
  769. package/dist/node-islands/scan.js +61 -9
  770. package/dist/node-islands/scan.js.map +1 -1
  771. package/dist/wasm/translate.js +11 -5
  772. package/dist/wasm/translate.js.map +1 -1
  773. package/dist/wasm/translate.test.js +35 -0
  774. package/dist/wasm/translate.test.js.map +1 -1
  775. package/package.json +20 -20
  776. package/surface-manifest.json +184 -117
@@ -38,6 +38,7 @@ export function lowerArrayHofCall(lowerer, call, access, method, elem) {
38
38
  lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(argNode) ?? undefined);
39
39
  const present = !booleanFilter && presentElements(lowerer, call, elem);
40
40
  const valueT = callbackValueType(lowerer, elem, present);
41
+ const thisArg = hofThisArg(lowerer, call);
41
42
  if (booleanFilter) {
42
43
  if (valueT.kind === "union")
43
44
  lowerer.requireTruthyUnion(valueT.unionId, argNode);
@@ -82,15 +83,19 @@ export function lowerArrayHofCall(lowerer, call, access, method, elem) {
82
83
  const outElem = filtered !== null ? filtered.elem : callbackArrayElement(lowerer, call, fnRet);
83
84
  // A filter that re-tags its elements keeps the single union-typed visit.
84
85
  // A callback that never reads its element has no use for a typed one.
85
- const fast = present || booleanFilter || unread || (method === "filter" && !typeEquals(outElem, elem))
86
+ const fast = present ||
87
+ booleanFilter ||
88
+ unread ||
89
+ thisArg !== null ||
90
+ (method === "filter" && !typeEquals(outElem, elem))
86
91
  ? null
87
92
  : lowerFastCallback(lowerer, argNode, [valueT], 0, elem, arrayOf(elem), callback);
88
- const helper = arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread);
93
+ const helper = arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread, thisArg !== null);
89
94
  const resultType = method === "map" || method === "filter" ? arrayOf(outElem) : VOID;
90
95
  const result = {
91
96
  kind: "call",
92
97
  callee: helper,
93
- args: [receiver, fnArg, ...(fast ? [fast] : [])],
98
+ args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
94
99
  type: resultType,
95
100
  loc,
96
101
  };
@@ -105,6 +110,20 @@ export function lowerArrayHofCall(lowerer, call, access, method, elem) {
105
110
  loc,
106
111
  };
107
112
  }
113
+ /** The thisArg of a callback HOF call (`a.map(f, thisArg)`), lowered as the
114
+ * checked-dynamic value the helper hands the callback as its call-site
115
+ * receiver. Null when the call has no second argument, in which case the
116
+ * helper keeps the two-slot frame and the callback's `this` is the ambient
117
+ * one, exactly as before. */
118
+ function hofThisArg(lowerer, call) {
119
+ const node = call.arguments.nodes[1];
120
+ if (node === undefined)
121
+ return null;
122
+ if (call.arguments.nodes.length > 2) {
123
+ lowerer.noLowering(`.${ts.isPropertyAccessExpression(call.expression) ? call.expression.name.text : ""} with ${call.arguments.nodes.length} arguments`, call, "the supported form takes the callback and an optional thisArg");
124
+ }
125
+ return lowerer.lowerExprExpecting(node, DYN);
126
+ }
108
127
  /** The element a filter keeps, and the checked conversion of the result
109
128
  * to the checker's narrower element when the predicate does not prove it.
110
129
  * An inferred inline type predicate proves one source arm, or a class
@@ -452,8 +471,8 @@ const FILTER_SNAPSHOT = { isForeign: "vf.0", value: "v.0", foreign: "vd.0" };
452
471
  * combo. Named `%arr.<method>.<n>` ('%' keeps it out of the user
453
472
  * namespace); rides `liftedFns` into the module like a lifted lambda (it
454
473
  * is a plain function — no captures). */
455
- function arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem = fnRet, site = "", fastT = null, present = false, unread = false) {
456
- const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}:${typeKey(outElem)}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
474
+ function arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem = fnRet, site = "", fastT = null, present = false, unread = false, withThis = false) {
475
+ const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}:${typeKey(outElem)}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
457
476
  const existing = lowerer.arrHofHelpers.get(key);
458
477
  if (existing)
459
478
  return existing;
@@ -469,7 +488,7 @@ function arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem = fnRe
469
488
  split: !!fastT,
470
489
  unread,
471
490
  });
472
- const fn = buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT, present, unread);
491
+ const fn = buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT, present, unread, withThis);
473
492
  lowerer.liftedFns.push(fastT ? withFastCallback(fn, fastT, elem) : fn);
474
493
  return name;
475
494
  }
@@ -706,13 +725,13 @@ function filterRetainedValue(lowerer, v, elem, outElem, loc) {
706
725
  * `arity` is the callback's declared parameter count (1–3): the loop
707
726
  * passes the index and the receiver itself after the element when the
708
727
  * callback names them, exactly the arguments JS supplies. */
709
- function buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT = null, present = false, unread = false) {
728
+ function buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem, fastT = null, present = false, unread = false, withThis = false) {
710
729
  const arrT = arrayOf(elem);
711
730
  const valueT = callbackValueType(lowerer, elem, present);
712
731
  const fnT = funcOf([valueT, F64, arrT].slice(0, arity), fnRet);
713
- const locals = arrayCallbackLocals(arrT, fnT);
714
- const params = arrayCallbackParams(arrT, fnT);
715
- const callF = (arg) => callArrayCallback(arrT, fnT, fnRet, arity, arg, loc);
732
+ const locals = arrayCallbackLocals(arrT, fnT, withThis);
733
+ const params = arrayCallbackParams(arrT, fnT, withThis);
734
+ const callF = (arg) => callArrayCallback(arrT, fnT, fnRet, arity, arg, loc, withThis);
716
735
  const getElem = callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc);
717
736
  // What the callback takes: the element, or a placeholder for one it
718
737
  // ignores (callbackValueRead's `unread`).
@@ -981,6 +1000,7 @@ export function lowerArrayFindLikeCall(lowerer, call, access, method, elem, bind
981
1000
  const argNode = call.arguments.nodes[0];
982
1001
  if (!argNode)
983
1002
  lowerer.unsupported("SC1090", call, "this call form"); // tsc-guarded
1003
+ const thisArg = hofThisArg(lowerer, call);
984
1004
  // find's result must be reachable from the element itself; a predicate
985
1005
  // that narrows to another layout keeps the optional element visit.
986
1006
  const present = presentElements(lowerer, call, elem) &&
@@ -1004,17 +1024,17 @@ export function lowerArrayFindLikeCall(lowerer, call, access, method, elem, bind
1004
1024
  method === "every" ||
1005
1025
  method === "findIndex" ||
1006
1026
  method === "findLastIndex") {
1007
- const fast = present || unread
1027
+ const fast = present || unread || thisArg !== null
1008
1028
  ? null
1009
1029
  : lowerFastCallback(lowerer, argNode, [arrayValueType(lowerer, elem)], 0, elem, arrT, { fnArg, arity }, bindUntyped);
1010
1030
  const fastT = fast?.type ?? null;
1011
1031
  const helper = method === "findIndex" || method === "findLastIndex"
1012
- ? findIndexHelper(lowerer, elem, fnRet, arity, last, loc, callbackSite(fast ?? fnArg), fastT, present, unread)
1013
- : someEveryHelper(lowerer, method, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fastT, present, unread);
1032
+ ? findIndexHelper(lowerer, elem, fnRet, arity, last, loc, callbackSite(fast ?? fnArg), fastT, present, unread, thisArg !== null)
1033
+ : someEveryHelper(lowerer, method, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fastT, present, unread, thisArg !== null);
1014
1034
  return {
1015
1035
  kind: "call",
1016
1036
  callee: helper,
1017
- args: [receiver, fnArg, ...(fast ? [fast] : [])],
1037
+ args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
1018
1038
  type: method === "findIndex" || method === "findLastIndex" ? F64 : BOOL,
1019
1039
  loc,
1020
1040
  };
@@ -1036,8 +1056,14 @@ export function lowerArrayFindLikeCall(lowerer, call, access, method, elem, bind
1036
1056
  if (undefTag < 0)
1037
1057
  lowerer.badType(call, lowerer.typeOf(call));
1038
1058
  const retag = findResultRetag(lowerer, call, argNode, method, valueT, resultT, unchangedElement);
1039
- const helper = findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, callbackSite(fnArg), present, unread);
1040
- return { kind: "call", callee: helper, args: [receiver, fnArg], type: resultT, loc };
1059
+ const helper = findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, callbackSite(fnArg), present, unread, thisArg !== null);
1060
+ return {
1061
+ kind: "call",
1062
+ callee: helper,
1063
+ args: [receiver, fnArg, ...(thisArg ? [thisArg] : [])],
1064
+ type: resultT,
1065
+ loc,
1066
+ };
1041
1067
  }
1042
1068
  /** The retag helper that converts a found element into find's result union,
1043
1069
  * or null when the element converts directly. Only an inline callback with
@@ -1091,9 +1117,9 @@ export function predicateToBoolean(e) {
1091
1117
  * for (i = 0; i < n; i++) { v = a[i]; if (f(v)) return <v as result arm>; }
1092
1118
  * return <undefined arm>;
1093
1119
  */
1094
- function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, site = "", present = false, unread = false) {
1120
+ function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, retag, site = "", present = false, unread = false, withThis = false) {
1095
1121
  const method = last ? "findLast" : "find";
1096
- const key = `${method}:${typeKey(elem)}:${typeKey(resultT)}:${typeKey(fnRet)}:${arity}${site}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
1122
+ const key = `${method}:${typeKey(elem)}:${typeKey(resultT)}:${typeKey(fnRet)}:${arity}${site}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
1097
1123
  const existing = lowerer.arrHofHelpers.get(key);
1098
1124
  if (existing)
1099
1125
  return existing;
@@ -1130,7 +1156,7 @@ function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, r
1130
1156
  ...arraySlotSnapshot(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, FILTER_SNAPSHOT, loc),
1131
1157
  {
1132
1158
  kind: "if",
1133
- cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, placeholder ?? v, loc)),
1159
+ cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, placeholder ?? v, loc, withThis)),
1134
1160
  then: [
1135
1161
  {
1136
1162
  kind: "return",
@@ -1146,7 +1172,7 @@ function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, r
1146
1172
  read,
1147
1173
  {
1148
1174
  kind: "if",
1149
- cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, v, loc)),
1175
+ cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, v, loc, withThis)),
1150
1176
  then: [{ kind: "return", value: found, loc }],
1151
1177
  else_: null,
1152
1178
  loc,
@@ -1163,10 +1189,10 @@ function findHelper(lowerer, elem, resultT, undefTag, fnRet, arity, last, loc, r
1163
1189
  ];
1164
1190
  lowerer.liftedFns.push({
1165
1191
  name,
1166
- params: arrayCallbackParams(arrT, fnT),
1192
+ params: arrayCallbackParams(arrT, fnT, withThis),
1167
1193
  returnType: resultT,
1168
1194
  locals: [
1169
- ...arrayCallbackLocals(arrT, fnT),
1195
+ ...arrayCallbackLocals(arrT, fnT, withThis),
1170
1196
  { id: "v.0", name: "v", type: valueT, mutable: false },
1171
1197
  ...(ignored
1172
1198
  ? slotSnapshotLocals(lowerer, elem, FILTER_SNAPSHOT).filter((l) => l.id !== "v.0")
@@ -1194,9 +1220,9 @@ function findFoundValue(lowerer, v, resultT, retag, loc) {
1194
1220
  *
1195
1221
  * n = a.length; for (...) if (f(a[i], i, a)) return i; return -1;
1196
1222
  */
1197
- function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fastT = null, present = false, unread = false) {
1223
+ function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fastT = null, present = false, unread = false, withThis = false) {
1198
1224
  const method = last ? "findLastIndex" : "findIndex";
1199
- const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
1225
+ const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
1200
1226
  const existing = lowerer.arrHofHelpers.get(key);
1201
1227
  if (existing)
1202
1228
  return existing;
@@ -1218,7 +1244,7 @@ function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fast
1218
1244
  const visit = [
1219
1245
  {
1220
1246
  kind: "if",
1221
- cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc)),
1247
+ cond: predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc, withThis)),
1222
1248
  then: [{ kind: "return", value: varRef("i.0", F64, loc), loc }],
1223
1249
  else_: null,
1224
1250
  loc,
@@ -1234,9 +1260,9 @@ function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fast
1234
1260
  ];
1235
1261
  lowerer.liftedFns.push(withFastCallback({
1236
1262
  name,
1237
- params: arrayCallbackParams(arrT, fnT),
1263
+ params: arrayCallbackParams(arrT, fnT, withThis),
1238
1264
  returnType: F64,
1239
- locals: [...arrayCallbackLocals(arrT, fnT)],
1265
+ locals: [...arrayCallbackLocals(arrT, fnT, withThis)],
1240
1266
  body,
1241
1267
  loc,
1242
1268
  }, fastT, elem));
@@ -1247,8 +1273,8 @@ function findIndexHelper(lowerer, elem, fnRet, arity, last, loc, site = "", fast
1247
1273
  * some: n = a.length; for (...) if (f(a[i])) return true; return false;
1248
1274
  * every: n = a.length; for (...) if (!f(a[i])) return false; return true;
1249
1275
  */
1250
- function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false) {
1251
- const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
1276
+ function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false, withThis = false) {
1277
+ const key = `${method}:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
1252
1278
  const existing = lowerer.arrHofHelpers.get(key);
1253
1279
  if (existing)
1254
1280
  return existing;
@@ -1266,7 +1292,7 @@ function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fa
1266
1292
  });
1267
1293
  const arrT = arrayOf(elem);
1268
1294
  const fnT = funcOf([callbackValueType(lowerer, elem, present), F64, arrT].slice(0, arity), fnRet);
1269
- const callF = predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc));
1295
+ const callF = predicateToBoolean(callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc, withThis));
1270
1296
  const body = [
1271
1297
  arrayLengthDeclaration(arrT, loc),
1272
1298
  countedFor(loc, varRef("n.0", F64, loc), () => [
@@ -1292,9 +1318,9 @@ function someEveryHelper(lowerer, method, elem, fnRet, arity, loc, site = "", fa
1292
1318
  ];
1293
1319
  lowerer.liftedFns.push(withFastCallback({
1294
1320
  name,
1295
- params: arrayCallbackParams(arrT, fnT),
1321
+ params: arrayCallbackParams(arrT, fnT, withThis),
1296
1322
  returnType: BOOL,
1297
- locals: [...arrayCallbackLocals(arrT, fnT)],
1323
+ locals: [...arrayCallbackLocals(arrT, fnT, withThis)],
1298
1324
  body,
1299
1325
  loc,
1300
1326
  }, fastT, elem));
@@ -1313,6 +1339,7 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
1313
1339
  const argNode = call.arguments.nodes[0];
1314
1340
  if (!argNode)
1315
1341
  lowerer.unsupported("SC1090", call, "this call form"); // tsc-guarded
1342
+ const thisArg = hofThisArg(lowerer, call);
1316
1343
  const present = presentElements(lowerer, call, elem);
1317
1344
  const lowered = lowerArrayCallback(lowerer, argNode, [callbackValueType(lowerer, elem, present)], arrT);
1318
1345
  const { fnArg, arity } = lowered;
@@ -1327,7 +1354,7 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
1327
1354
  recv: { kind: "dynFrom", value: receiver, liveRef: true, type: DYN, loc },
1328
1355
  method: "flatMap",
1329
1356
  calleeName: ts.getTextOfNode(access),
1330
- args: [{ kind: "dynFrom", value: fnArg, type: DYN, loc }],
1357
+ args: [{ kind: "dynFrom", value: fnArg, type: DYN, loc }, ...(thisArg ? [thisArg] : [])],
1331
1358
  type: DYN,
1332
1359
  loc,
1333
1360
  };
@@ -1338,11 +1365,11 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
1338
1365
  ? flatMapUnionPlan(lowerer, call, argNode, fnRet)
1339
1366
  : null;
1340
1367
  if (plan) {
1341
- const helper = flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present);
1368
+ const helper = flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present, thisArg !== null);
1342
1369
  return {
1343
1370
  kind: "call",
1344
1371
  callee: helper,
1345
- args: [receiver, fnArg],
1372
+ args: [receiver, fnArg, ...(thisArg ? [thisArg] : [])],
1346
1373
  type: arrayOf(plan.outElem),
1347
1374
  loc,
1348
1375
  };
@@ -1358,32 +1385,32 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
1358
1385
  lowerer.badType(call, lowerer.typeOf(call));
1359
1386
  requireProducedArrayElement(lowerer, call, "'.flatMap()'", fnRet);
1360
1387
  const outElem = callbackArrayElement(lowerer, call, fnRet);
1361
- const fast = present || unread
1388
+ const fast = present || unread || thisArg !== null
1362
1389
  ? null
1363
1390
  : lowerFastCallback(lowerer, argNode, [arrayValueType(lowerer, elem)], 0, elem, arrT, {
1364
1391
  fnArg,
1365
1392
  arity,
1366
1393
  });
1367
- const helper = arrayHofHelper(lowerer, "flatMap", elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread);
1394
+ const helper = arrayHofHelper(lowerer, "flatMap", elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread, thisArg !== null);
1368
1395
  return {
1369
1396
  kind: "call",
1370
1397
  callee: helper,
1371
- args: [receiver, fnArg, ...(fast ? [fast] : [])],
1398
+ args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
1372
1399
  type: arrayOf(outElem),
1373
1400
  loc,
1374
1401
  };
1375
1402
  }
1376
- const fast = present || unread
1403
+ const fast = present || unread || thisArg !== null
1377
1404
  ? null
1378
1405
  : lowerFastCallback(lowerer, argNode, [arrayValueType(lowerer, elem)], 0, elem, arrT, {
1379
1406
  fnArg,
1380
1407
  arity,
1381
1408
  });
1382
- const helper = flatMapHelper(lowerer, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread);
1409
+ const helper = flatMapHelper(lowerer, elem, fnRet, arity, loc, callbackSite(fast ?? fnArg), fast?.type ?? null, present, unread, thisArg !== null);
1383
1410
  return {
1384
1411
  kind: "call",
1385
1412
  callee: helper,
1386
- args: [receiver, fnArg, ...(fast ? [fast] : [])],
1413
+ args: [receiver, fnArg, ...(fast ? [fast] : []), ...(thisArg ? [thisArg] : [])],
1387
1414
  type: fnRet,
1388
1415
  loc,
1389
1416
  };
@@ -1453,10 +1480,10 @@ function flatMapUnionPlan(lowerer, call, argNode, fnRet) {
1453
1480
  /** The flatMap loop over a union-returning callback: each result tests
1454
1481
  * its arm and appends its elements, nothing, or itself (Node's
1455
1482
  * IsArray decision per value). */
1456
- function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
1483
+ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present, withThis = false) {
1457
1484
  // The plan is part of the key: one union result type can carry an empty
1458
1485
  // `never[]` arm in one callback and a populated array arm in another.
1459
- const key = `flatMapUnion:${typeKey(elem)}:${typeKey(fnRet)}:${typeKey(plan.outElem)}:${plan.arms.join(",")}:${arity}${present ? ":present" : ""}`;
1486
+ const key = `flatMapUnion:${typeKey(elem)}:${typeKey(fnRet)}:${typeKey(plan.outElem)}:${plan.arms.join(",")}:${arity}${present ? ":present" : ""}${withThis ? ":this" : ""}`;
1460
1487
  const existing = lowerer.arrHofHelpers.get(key);
1461
1488
  if (existing)
1462
1489
  return existing;
@@ -1477,7 +1504,7 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
1477
1504
  loc,
1478
1505
  });
1479
1506
  const locals = [
1480
- ...arrayCallbackLocals(arrT, fnT),
1507
+ ...arrayCallbackLocals(arrT, fnT, withThis),
1481
1508
  { id: "out.0", name: "out", type: outT, mutable: false },
1482
1509
  { id: "r.0", name: "r", type: fnRet, mutable: false },
1483
1510
  ];
@@ -1622,7 +1649,7 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
1622
1649
  {
1623
1650
  kind: "varDecl",
1624
1651
  localId: "r.0",
1625
- init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc), loc),
1652
+ init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc), loc, withThis),
1626
1653
  loc,
1627
1654
  },
1628
1655
  ...dispatch,
@@ -1635,7 +1662,7 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
1635
1662
  ];
1636
1663
  lowerer.liftedFns.push({
1637
1664
  name,
1638
- params: arrayCallbackParams(arrT, fnT),
1665
+ params: arrayCallbackParams(arrT, fnT, withThis),
1639
1666
  returnType: outT,
1640
1667
  locals,
1641
1668
  body,
@@ -1652,8 +1679,8 @@ function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
1652
1679
  * }
1653
1680
  * return out;
1654
1681
  */
1655
- function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false) {
1656
- const key = `flatMap:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}`;
1682
+ function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null, present = false, unread = false, withThis = false) {
1683
+ const key = `flatMap:${typeKey(elem)}:${typeKey(fnRet)}:${arity}${site}${fastT ? ":split" : ""}${present ? ":present" : ""}${unread ? ":unread" : ""}${withThis ? ":this" : ""}`;
1657
1684
  const existing = lowerer.arrHofHelpers.get(key);
1658
1685
  if (existing)
1659
1686
  return existing;
@@ -1738,7 +1765,7 @@ function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null
1738
1765
  {
1739
1766
  kind: "varDecl",
1740
1767
  localId: "r.0",
1741
- init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc),
1768
+ init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc, unread), loc, withThis),
1742
1769
  loc,
1743
1770
  },
1744
1771
  {
@@ -1764,10 +1791,10 @@ function flatMapHelper(lowerer, elem, fnRet, arity, loc, site = "", fastT = null
1764
1791
  ];
1765
1792
  lowerer.liftedFns.push(withFastCallback({
1766
1793
  name,
1767
- params: arrayCallbackParams(arrT, fnT),
1794
+ params: arrayCallbackParams(arrT, fnT, withThis),
1768
1795
  returnType: fnRet,
1769
1796
  locals: [
1770
- ...arrayCallbackLocals(arrT, fnT),
1797
+ ...arrayCallbackLocals(arrT, fnT, withThis),
1771
1798
  { id: "out.0", name: "out", type: fnRet, mutable: false },
1772
1799
  { id: "r.0", name: "r", type: fnRet, mutable: false },
1773
1800
  { id: "m.0", name: "m", type: F64, mutable: false },
@@ -1792,19 +1819,46 @@ export function lowerArrayReduceCall(lowerer, call, access, method, elem) {
1792
1819
  if (!argNode)
1793
1820
  lowerer.unsupported("SC1090", call, "this call form"); // tsc-guarded
1794
1821
  const hasInit = call.arguments.nodes.length === 2;
1795
- const accT = lowerer.runtimeOptionalReduceTypes.get(call) ??
1796
- (hasInit ? lowerer.irTypeOf(call) : arrayValueType(lowerer, elem));
1797
- if (accT.kind === "void" || accT.kind === "func")
1822
+ const overrideT = lowerer.runtimeOptionalReduceTypes.get(call) ?? null;
1823
+ const staticAccT = overrideT ?? (hasInit ? lowerer.irTypeOf(call) : arrayValueType(lowerer, elem));
1824
+ if (staticAccT.kind === "void" || staticAccT.kind === "func")
1798
1825
  lowerer.badType(call, lowerer.typeOf(call));
1799
- const lowered = lowerArrayCallback(lowerer, argNode, [accT, arrayValueType(lowerer, elem)], arrT, false, accT);
1826
+ const lowered = lowerArrayCallback(lowerer, argNode, [staticAccT, arrayValueType(lowerer, elem)], arrT, false, staticAccT);
1800
1827
  const { fnArg, arity } = lowered;
1828
+ // A JavaScript function with NO declared parameters whose body reads
1829
+ // `arguments` has that hidden slot as its whole ABI, which the synthetic
1830
+ // loop cannot fill: `callValue` passes exactly the declared parameters
1831
+ // (none), so the callback would see an empty `arguments` where JavaScript
1832
+ // passes (accumulator, element, index, array). Name the parameters
1833
+ // instead; that is the same value with a checkable type. Read the
1834
+ // callback's OWN type: the slot adaptation above (a dyn function boundary)
1835
+ // erases the hidden slot from `fnArg.type`. A callback that names its
1836
+ // parameters keeps working — `arguments` is built from the call's
1837
+ // arguments there, not from a hidden slot.
1838
+ if (lowered.rawType.kind === "func" &&
1839
+ lowered.rawType.params.length === 0 &&
1840
+ lowered.rawType.rest === true &&
1841
+ lowered.rawType.restAbi === undefined)
1842
+ lowerer.unsupported("SC1090", argNode, "a reduce callback that reads 'arguments' (name the parameters the callback uses)");
1843
+ // The callback's own answer is what the accumulator receives. An inline
1844
+ // lambda is contextually typed by the call (its returns coerce inside its
1845
+ // own lowering), but a function DECLARATION keeps its declared return. When
1846
+ // the checker's accumulator type cannot hold that value — `xs.reduce(function
1847
+ // () { count++ }, 1)` answers undefined, a program the checker already
1848
+ // diagnosed — the accumulator is the checked-dynamic value JavaScript
1849
+ // produces instead of a miscast (the untyped-reduce shape; see
1850
+ // accumulatorAdmitsAnswer).
1851
+ const accT = overrideT !== null || accumulatorAdmitsAnswer(lowerer, staticAccT, fnArg.type.ret)
1852
+ ? staticAccT
1853
+ : DYN;
1801
1854
  // Only an array that can hold elements outside its element type needs to
1802
- // leave an element its callback ignores unread.
1855
+ // leave an element its callback ignores unread. A dynamic accumulator is
1856
+ // the untyped shape; it keeps the single visit and the callback's own ABI.
1803
1857
  const unread = lowered.unread && elementMayBeForeign(lowerer, elem);
1804
- const fast = unread
1858
+ const fast = unread || accT.kind === "dyn"
1805
1859
  ? null
1806
1860
  : lowerFastCallback(lowerer, argNode, [accT, arrayValueType(lowerer, elem)], 1, elem, arrT, { fnArg, arity }, false, accT);
1807
- const helper = reduceHelper(lowerer, method, elem, accT, fnArg.type.ret, arity, hasInit, loc, callbackSite(fast ?? fnArg), fast?.type ?? null, unread);
1861
+ const helper = reduceHelper(lowerer, method, elem, accT, fnArg.type, hasInit, loc, callbackSite(fast ?? fnArg), fast?.type ?? null, unread);
1808
1862
  const args = [receiver, fnArg];
1809
1863
  if (hasInit)
1810
1864
  args.push(lowerer.lowerExprExpecting(call.arguments.nodes[1], accT));
@@ -1814,6 +1868,33 @@ export function lowerArrayReduceCall(lowerer, call, access, method, elem) {
1814
1868
  args.push(fast);
1815
1869
  return { kind: "call", callee: helper, args, type: accT, loc };
1816
1870
  }
1871
+ /** The accumulator's value as the callback's first parameter declares it.
1872
+ * Equal types pass the local straight through; a dynamic accumulator handed
1873
+ * to a typed parameter converts at the call (the callback is lowered first,
1874
+ * so its ABI is a fact and a value of another kind throws — "types don't
1875
+ * lie"). */
1876
+ function accumulatorArgument(lowerer, param, accT, loc) {
1877
+ const value = varRef("acc.0", accT, loc);
1878
+ return param === undefined || typeEquals(param, accT)
1879
+ ? value
1880
+ : lowerer.coerceToExpected(value, param);
1881
+ }
1882
+ /** Whether the checker's accumulator type stores the callback's answer
1883
+ * itself. A scalar accumulator holds only its own scalar, and a void answer
1884
+ * (a callback with no return statement) is `undefined`; both leave the
1885
+ * checker's type unable to carry the value (a program the checker already
1886
+ * diagnosed), which the reduction accumulates dynamically instead of
1887
+ * miscasting. Every other pair keeps `coerceToExpected`'s static plan. */
1888
+ function accumulatorAdmitsAnswer(lowerer, accT, fnRet) {
1889
+ if (lowerer.coercibleValue(fnRet, accT))
1890
+ return true;
1891
+ if (fnRet.kind === "void" || isUnitType(fnRet))
1892
+ return false;
1893
+ return !(scalarKind(accT) && scalarKind(fnRet));
1894
+ }
1895
+ function scalarKind(t) {
1896
+ return t.kind === "f64" || t.kind === "string" || t.kind === "bool";
1897
+ }
1817
1898
  /** The reduce/reduceRight loops, from existing IR nodes:
1818
1899
  *
1819
1900
  * with init: acc = z; n = a.length; for (...) acc = f(acc, a[i]); return acc;
@@ -1824,14 +1905,23 @@ export function lowerArrayReduceCall(lowerer, call, access, method, elem) {
1824
1905
  * reduce walks 0→n-1, reduceRight n-1→0; the seed without an initial
1825
1906
  * value is a[0] / a[n-1] and the loop starts one past it. The empty-array
1826
1907
  * TypeError message is Node's exact message. */
1827
- function reduceHelper(lowerer, method, elem, accT, fnRet, arity, hasInit, loc, site = "", fastT = null, unread = false) {
1908
+ function reduceHelper(lowerer, method, elem, accT, fnArg, hasInit, loc, site = "", fastT = null, unread = false) {
1909
+ // The callback's own ABI decides the helper's `f` slot: a dynamic
1910
+ // accumulator (accT) is coerced at the call and the store, so the closure
1911
+ // keeps the parameter types its lowering produced.
1912
+ const fnT = fnArg;
1913
+ const fnRet = fnT.ret;
1914
+ const arity = fnT.params.length;
1828
1915
  const key = `${method}:${typeKey(elem)}:${typeKey(accT)}:${typeKey(fnRet)}:${arity}:${hasInit ? "init" : "seed"}${site}${fastT ? ":split" : ""}${unread ? ":unread" : ""}`;
1829
1916
  const existing = lowerer.arrHofHelpers.get(key);
1830
1917
  if (existing)
1831
1918
  return existing;
1832
1919
  const name = keyedHelperName(lowerer, `%arr.${method}`, key);
1833
1920
  lowerer.arrHofHelpers.set(key, name);
1834
- if (method === "reduce")
1921
+ // A dynamic accumulator stays out of the pipeline registry: the fused
1922
+ // loops type their accumulator from the checker's view (arrHofInfo), which
1923
+ // this shape contradicts.
1924
+ if (method === "reduce" && accT.kind !== "dyn")
1835
1925
  lowerer.arrHofInfo.set(name, {
1836
1926
  method,
1837
1927
  elem,
@@ -1844,7 +1934,6 @@ function reduceHelper(lowerer, method, elem, accT, fnRet, arity, hasInit, loc, s
1844
1934
  unread,
1845
1935
  });
1846
1936
  const arrT = arrayOf(elem);
1847
- const fnT = funcOf([accT, arrayValueType(lowerer, elem), F64, arrT].slice(0, arity), fnRet);
1848
1937
  const n = varRef("n.0", F64, loc);
1849
1938
  const i = varRef("i.0", F64, loc);
1850
1939
  const right = method === "reduceRight";
@@ -1961,7 +2050,12 @@ function reduceHelper(lowerer, method, elem, accT, fnRet, arity, hasInit, loc, s
1961
2050
  value: lowerer.coerceToExpected({
1962
2051
  kind: "callValue",
1963
2052
  callee: varRef("f.0", fnT, loc),
1964
- args: [varRef("acc.0", accT, loc), visited(), i, varRef("a.0", arrT, loc)].slice(0, arity),
2053
+ args: [
2054
+ accumulatorArgument(lowerer, fnT.params[0], accT, loc),
2055
+ visited(),
2056
+ i,
2057
+ varRef("a.0", arrT, loc),
2058
+ ].slice(0, arity),
1965
2059
  type: fnRet,
1966
2060
  loc,
1967
2061
  }, accT),