@scriptc/compiler 0.4.2 → 0.4.4

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 (726) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +470 -66
  2. package/dist/backend/cycle-analysis.d.ts +4 -1
  3. package/dist/backend/cycle-analysis.js +6 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-analysis.test.js +55 -0
  6. package/dist/backend/cycle-analysis.test.js.map +1 -1
  7. package/dist/backend/cycle-mutability.d.ts +7 -0
  8. package/dist/backend/cycle-mutability.js +19 -1
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +2 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.d.ts +6 -3
  13. package/dist/backend/immutability.js +33 -29
  14. package/dist/backend/immutability.js.map +1 -1
  15. package/dist/backend/library-pack.js +1 -0
  16. package/dist/backend/library-pack.js.map +1 -1
  17. package/dist/backend/llvm/alloc.d.ts +16 -1
  18. package/dist/backend/llvm/alloc.js +54 -4
  19. package/dist/backend/llvm/alloc.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
  21. package/dist/backend/llvm/appended-array-literals.js +44 -36
  22. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  23. package/dist/backend/llvm/appended-array-literals.test.js +4 -3
  24. package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
  25. package/dist/backend/llvm/array-search.d.ts +4 -3
  26. package/dist/backend/llvm/array-search.js +21 -9
  27. package/dist/backend/llvm/array-search.js.map +1 -1
  28. package/dist/backend/llvm/blocks.d.ts +1 -1
  29. package/dist/backend/llvm/blocks.js +2 -2
  30. package/dist/backend/llvm/blocks.js.map +1 -1
  31. package/dist/backend/llvm/byte-windows.js +2 -0
  32. package/dist/backend/llvm/byte-windows.js.map +1 -1
  33. package/dist/backend/llvm/bytes-alias.d.ts +6 -1
  34. package/dist/backend/llvm/bytes-alias.js +8 -2
  35. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  36. package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
  37. package/dist/backend/llvm/bytes-loop-versions.js +479 -32
  38. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  39. package/dist/backend/llvm/bytes-loop-versions.test.js +263 -2
  40. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  41. package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
  42. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  43. package/dist/backend/llvm/classes.d.ts +7 -5
  44. package/dist/backend/llvm/classes.js +44 -20
  45. package/dist/backend/llvm/classes.js.map +1 -1
  46. package/dist/backend/llvm/classes.test.js +167 -7
  47. package/dist/backend/llvm/classes.test.js.map +1 -1
  48. package/dist/backend/llvm/common.d.ts +9 -3
  49. package/dist/backend/llvm/common.js +9 -3
  50. package/dist/backend/llvm/common.js.map +1 -1
  51. package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
  52. package/dist/backend/llvm/constant-callbacks.js +83 -52
  53. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/counted-loops.d.ts +7 -0
  55. package/dist/backend/llvm/counted-loops.js +18 -0
  56. package/dist/backend/llvm/counted-loops.js.map +1 -1
  57. package/dist/backend/llvm/debug-info.js +2 -5
  58. package/dist/backend/llvm/debug-info.js.map +1 -1
  59. package/dist/backend/llvm/dense-array-access.d.ts +39 -8
  60. package/dist/backend/llvm/dense-array-access.js +222 -52
  61. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  62. package/dist/backend/llvm/dense-array-access.test.js +36 -0
  63. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  64. package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
  65. package/dist/backend/llvm/dense-array-loops.js +194 -5
  66. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  67. package/dist/backend/llvm/dense-array-loops.test.js +90 -1
  68. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  69. package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
  70. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  71. package/dist/backend/llvm/dyn.d.ts +30 -0
  72. package/dist/backend/llvm/dyn.js +373 -70
  73. package/dist/backend/llvm/dyn.js.map +1 -1
  74. package/dist/backend/llvm/emit-function.js +13 -28
  75. package/dist/backend/llvm/emit-function.js.map +1 -1
  76. package/dist/backend/llvm/emit-journal.d.ts +93 -0
  77. package/dist/backend/llvm/emit-journal.js +170 -0
  78. package/dist/backend/llvm/emit-journal.js.map +1 -0
  79. package/dist/backend/llvm/emit-module.js +211 -33
  80. package/dist/backend/llvm/emit-module.js.map +1 -1
  81. package/dist/backend/llvm/emit-statements.d.ts +0 -4
  82. package/dist/backend/llvm/emit-statements.js +268 -84
  83. package/dist/backend/llvm/emit-statements.js.map +1 -1
  84. package/dist/backend/llvm/emitter-state.d.ts +7 -0
  85. package/dist/backend/llvm/emitter-state.js +14 -0
  86. package/dist/backend/llvm/emitter-state.js.map +1 -0
  87. package/dist/backend/llvm/emitter.d.ts +186 -37
  88. package/dist/backend/llvm/emitter.js +733 -90
  89. package/dist/backend/llvm/emitter.js.map +1 -1
  90. package/dist/backend/llvm/emitter.test.js +65 -7
  91. package/dist/backend/llvm/emitter.test.js.map +1 -1
  92. package/dist/backend/llvm/expr-async.js +11 -13
  93. package/dist/backend/llvm/expr-async.js.map +1 -1
  94. package/dist/backend/llvm/expr-bytes.js +48 -20
  95. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  96. package/dist/backend/llvm/expr-callbacks.js +47 -0
  97. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  98. package/dist/backend/llvm/expr-calls.js +28 -14
  99. package/dist/backend/llvm/expr-calls.js.map +1 -1
  100. package/dist/backend/llvm/expr-containers.d.ts +14 -2
  101. package/dist/backend/llvm/expr-containers.js +143 -37
  102. package/dist/backend/llvm/expr-containers.js.map +1 -1
  103. package/dist/backend/llvm/expr-context.d.ts +14 -0
  104. package/dist/backend/llvm/expr-dynamic.js +18 -11
  105. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  106. package/dist/backend/llvm/expr-primitives.js +119 -38
  107. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  108. package/dist/backend/llvm/expr-primitives.test.js +11 -6
  109. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  110. package/dist/backend/llvm/expr-records.d.ts +12 -0
  111. package/dist/backend/llvm/expr-records.js +106 -0
  112. package/dist/backend/llvm/expr-records.js.map +1 -1
  113. package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
  114. package/dist/backend/llvm/expr-stream-bridges.js +210 -69
  115. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  116. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  117. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  118. package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
  119. package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
  120. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  121. package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
  122. package/dist/backend/llvm/int32-kind-loops.js +106 -0
  123. package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
  124. package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
  125. package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
  126. package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
  127. package/dist/backend/llvm/integer-values.d.ts +25 -1
  128. package/dist/backend/llvm/integer-values.js +95 -0
  129. package/dist/backend/llvm/integer-values.js.map +1 -1
  130. package/dist/backend/llvm/js-ic.d.ts +1 -1
  131. package/dist/backend/llvm/js-ic.js +1 -1
  132. package/dist/backend/llvm/js-ic.js.map +1 -1
  133. package/dist/backend/llvm/key-orders.d.ts +7 -0
  134. package/dist/backend/llvm/key-orders.js +33 -0
  135. package/dist/backend/llvm/key-orders.js.map +1 -0
  136. package/dist/backend/llvm/lib-connect.js +4 -0
  137. package/dist/backend/llvm/lib-connect.js.map +1 -1
  138. package/dist/backend/llvm/lib-datagram.js +11 -0
  139. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  140. package/dist/backend/llvm/lib-dispatch.js +213 -5
  141. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  142. package/dist/backend/llvm/lib-filesystem.js +4 -4
  143. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  144. package/dist/backend/llvm/lib-http2.js +4 -0
  145. package/dist/backend/llvm/lib-http2.js.map +1 -1
  146. package/dist/backend/llvm/lib-lookup.js +16 -6
  147. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  148. package/dist/backend/llvm/lib-process.js +37 -1
  149. package/dist/backend/llvm/lib-process.js.map +1 -1
  150. package/dist/backend/llvm/lib-shared.js +94 -2
  151. package/dist/backend/llvm/lib-shared.js.map +1 -1
  152. package/dist/backend/llvm/lib-stream.js +35 -5
  153. package/dist/backend/llvm/lib-stream.js.map +1 -1
  154. package/dist/backend/llvm/local-array-reads.js +115 -19
  155. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  156. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  157. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  158. package/dist/backend/llvm/loop-state.d.ts +33 -0
  159. package/dist/backend/llvm/loop-state.js +42 -0
  160. package/dist/backend/llvm/loop-state.js.map +1 -0
  161. package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
  162. package/dist/backend/llvm/map-number-lookup.js +91 -31
  163. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  164. package/dist/backend/llvm/map-number-lookup.test.js +55 -0
  165. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  166. package/dist/backend/llvm/map-read-lifetimes.js +4 -2
  167. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  168. package/dist/backend/llvm/nullable-unions.d.ts +2 -1
  169. package/dist/backend/llvm/nullable-unions.js +15 -3
  170. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  171. package/dist/backend/llvm/publish.d.ts +10 -0
  172. package/dist/backend/llvm/publish.js +15 -3
  173. package/dist/backend/llvm/publish.js.map +1 -1
  174. package/dist/backend/llvm/receivers.js +6 -1
  175. package/dist/backend/llvm/receivers.js.map +1 -1
  176. package/dist/backend/llvm/record-results.d.ts +1 -9
  177. package/dist/backend/llvm/record-results.js +2 -11
  178. package/dist/backend/llvm/record-results.js.map +1 -1
  179. package/dist/backend/llvm/reference-effects.js +3 -0
  180. package/dist/backend/llvm/reference-effects.js.map +1 -1
  181. package/dist/backend/llvm/reference-writes.d.ts +7 -2
  182. package/dist/backend/llvm/reference-writes.js +89 -72
  183. package/dist/backend/llvm/reference-writes.js.map +1 -1
  184. package/dist/backend/llvm/running-extrema.d.ts +11 -0
  185. package/dist/backend/llvm/running-extrema.js +115 -0
  186. package/dist/backend/llvm/running-extrema.js.map +1 -0
  187. package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
  188. package/dist/backend/llvm/running-extrema.test.js +89 -0
  189. package/dist/backend/llvm/running-extrema.test.js.map +1 -0
  190. package/dist/backend/llvm/shapes.d.ts +71 -15
  191. package/dist/backend/llvm/shapes.js +224 -40
  192. package/dist/backend/llvm/shapes.js.map +1 -1
  193. package/dist/backend/llvm/shapes.test.js +53 -7
  194. package/dist/backend/llvm/shapes.test.js.map +1 -1
  195. package/dist/backend/llvm/speculative-integers.d.ts +6 -0
  196. package/dist/backend/llvm/speculative-integers.js +2 -2
  197. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  198. package/dist/backend/llvm/stack-captures.js +1 -5
  199. package/dist/backend/llvm/stack-captures.js.map +1 -1
  200. package/dist/backend/llvm/stack-objects.d.ts +3 -2
  201. package/dist/backend/llvm/stack-objects.js +5 -2
  202. package/dist/backend/llvm/stack-objects.js.map +1 -1
  203. package/dist/backend/llvm/string-reads.d.ts +12 -0
  204. package/dist/backend/llvm/string-reads.js +44 -0
  205. package/dist/backend/llvm/string-reads.js.map +1 -1
  206. package/dist/backend/llvm/union-repr.d.ts +4 -3
  207. package/dist/backend/llvm/union-repr.js +6 -5
  208. package/dist/backend/llvm/union-repr.js.map +1 -1
  209. package/dist/backend/llvm/walk-borrows.d.ts +3 -0
  210. package/dist/backend/llvm/walk-borrows.js +46 -41
  211. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  212. package/dist/backend/llvm/walkers.d.ts +3 -0
  213. package/dist/backend/llvm/walkers.js +101 -65
  214. package/dist/backend/llvm/walkers.js.map +1 -1
  215. package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
  216. package/dist/backend/llvm/wrapping-sums.js +126 -0
  217. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  218. package/dist/backend/may-throw.d.ts +8 -10
  219. package/dist/backend/may-throw.js +14 -10
  220. package/dist/backend/may-throw.js.map +1 -1
  221. package/dist/backend/native/contracts.d.ts +5 -0
  222. package/dist/backend/native/executable.js +7 -0
  223. package/dist/backend/native/executable.js.map +1 -1
  224. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  225. package/dist/backend/native/runtime-inputs.js +1 -0
  226. package/dist/backend/native/runtime-inputs.js.map +1 -1
  227. package/dist/backend/native-codegen-core.d.ts +5 -3
  228. package/dist/backend/native-codegen-core.js +13 -6
  229. package/dist/backend/native-codegen-core.js.map +1 -1
  230. package/dist/backend/native-codegen.test.js +6 -4
  231. package/dist/backend/native-codegen.test.js.map +1 -1
  232. package/dist/backend/native-link-info-core.d.ts +4 -0
  233. package/dist/backend/native-link-info-core.js.map +1 -1
  234. package/dist/backend/publication.d.ts +12 -1
  235. package/dist/backend/publication.js +37 -14
  236. package/dist/backend/publication.js.map +1 -1
  237. package/dist/backend/publication.test.js +30 -0
  238. package/dist/backend/publication.test.js.map +1 -1
  239. package/dist/backend/result-slots.d.ts +16 -0
  240. package/dist/backend/result-slots.js +23 -0
  241. package/dist/backend/result-slots.js.map +1 -0
  242. package/dist/backend/runtime-abi.d.ts +2 -2
  243. package/dist/backend/runtime-abi.js +2 -2
  244. package/dist/backend/runtime-pack-core.d.ts +1 -0
  245. package/dist/backend/runtime-pack-core.js +1 -0
  246. package/dist/backend/runtime-pack-core.js.map +1 -1
  247. package/dist/backend/runtime-pack-targets.test.js +2 -1
  248. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  249. package/dist/backend/runtime-pack.test.js +2 -1
  250. package/dist/backend/runtime-pack.test.js.map +1 -1
  251. package/dist/backend/stack-observations.d.ts +2 -1
  252. package/dist/backend/stack-observations.js +67 -42
  253. package/dist/backend/stack-observations.js.map +1 -1
  254. package/dist/backend/target-cpu.d.ts +26 -0
  255. package/dist/backend/target-cpu.js +98 -0
  256. package/dist/backend/target-cpu.js.map +1 -0
  257. package/dist/backend/target-cpu.test.d.ts +1 -0
  258. package/dist/backend/target-cpu.test.js +38 -0
  259. package/dist/backend/target-cpu.test.js.map +1 -0
  260. package/dist/backend/target-diagnostics.js +5 -3
  261. package/dist/backend/target-diagnostics.js.map +1 -1
  262. package/dist/backend/warm-cache.js +1 -0
  263. package/dist/backend/warm-cache.js.map +1 -1
  264. package/dist/cli/command.js +20 -1
  265. package/dist/cli/command.js.map +1 -1
  266. package/dist/cli/usage.d.ts +4 -1
  267. package/dist/cli/usage.js +10 -3
  268. package/dist/cli/usage.js.map +1 -1
  269. package/dist/compat/fetch-profile.js +1 -1
  270. package/dist/compat/fetch-profile.js.map +1 -1
  271. package/dist/compile-types.d.ts +7 -0
  272. package/dist/contracts/check.js +4 -3
  273. package/dist/contracts/check.js.map +1 -1
  274. package/dist/contracts/int32-elements.js +10 -2
  275. package/dist/contracts/int32-elements.js.map +1 -1
  276. package/dist/coverage/report.js +12 -3
  277. package/dist/coverage/report.js.map +1 -1
  278. package/dist/diagnostics/diagnostic.d.ts +4 -0
  279. package/dist/diagnostics/diagnostic.js +1 -1
  280. package/dist/diagnostics/diagnostic.js.map +1 -1
  281. package/dist/diagnostics/envelope.d.ts +3 -0
  282. package/dist/diagnostics/envelope.js +1 -0
  283. package/dist/diagnostics/envelope.js.map +1 -1
  284. package/dist/executable/executable-cache.d.ts +5 -0
  285. package/dist/executable/executable-cache.js +5 -0
  286. package/dist/executable/executable-cache.js.map +1 -1
  287. package/dist/executable/executable-cache.test.js +3 -0
  288. package/dist/executable/executable-cache.test.js.map +1 -1
  289. package/dist/frontend/decl-projection.d.ts +41 -0
  290. package/dist/frontend/decl-projection.js +949 -0
  291. package/dist/frontend/decl-projection.js.map +1 -0
  292. package/dist/frontend/decl-projection.test.d.ts +1 -0
  293. package/dist/frontend/decl-projection.test.js +30 -0
  294. package/dist/frontend/decl-projection.test.js.map +1 -0
  295. package/dist/frontend/dts-paths.d.ts +15 -0
  296. package/dist/frontend/dts-paths.js +25 -0
  297. package/dist/frontend/dts-paths.js.map +1 -1
  298. package/dist/frontend/input-tracker.d.ts +6 -0
  299. package/dist/frontend/input-tracker.js +51 -28
  300. package/dist/frontend/input-tracker.js.map +1 -1
  301. package/dist/frontend/input-tracker.test.js +19 -0
  302. package/dist/frontend/input-tracker.test.js.map +1 -1
  303. package/dist/frontend/lowering/array-values.js +100 -2
  304. package/dist/frontend/lowering/array-values.js.map +1 -1
  305. package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
  306. package/dist/frontend/lowering/builtins/async-context.js +62 -3
  307. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  308. package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
  309. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  310. package/dist/frontend/lowering/builtins/child-process.js +13 -2
  311. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  312. package/dist/frontend/lowering/builtins/crypto.js +87 -10
  313. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  314. package/dist/frontend/lowering/builtins/dates.js +4 -1
  315. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  316. package/dist/frontend/lowering/builtins/filesystem-calls.js +3 -3
  317. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  318. package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
  319. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  320. package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
  321. package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
  322. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
  323. package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
  324. package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
  325. package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
  326. package/dist/frontend/lowering/builtins/module-calls.js +6 -3
  327. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  328. package/dist/frontend/lowering/builtins/numbers.js +9 -1
  329. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  330. package/dist/frontend/lowering/builtins/promises.d.ts +7 -1
  331. package/dist/frontend/lowering/builtins/promises.js +236 -139
  332. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  333. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  334. package/dist/frontend/lowering/builtins/readline.js +35 -3
  335. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  336. package/dist/frontend/lowering/builtins/url.js +24 -1
  337. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  338. package/dist/frontend/lowering/builtins/webassembly.js +6 -3
  339. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  340. package/dist/frontend/lowering/call-signatures.js +0 -1
  341. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  342. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  343. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  344. package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
  345. package/dist/frontend/lowering/cjs-inline-require.js +307 -4
  346. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  347. package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
  348. package/dist/frontend/lowering/class-callbacks.js +82 -12
  349. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  350. package/dist/frontend/lowering/class-construction.d.ts +4 -1
  351. package/dist/frontend/lowering/class-construction.js +17 -3
  352. package/dist/frontend/lowering/class-construction.js.map +1 -1
  353. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +49 -2
  354. package/dist/frontend/lowering/class-dynamic-dispatch.js +880 -108
  355. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  356. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
  357. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  358. package/dist/frontend/lowering/class-iterables.d.ts +2 -1
  359. package/dist/frontend/lowering/class-iterables.js +9 -1
  360. package/dist/frontend/lowering/class-iterables.js.map +1 -1
  361. package/dist/frontend/lowering/class-method-mutations.js +83 -24
  362. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  363. package/dist/frontend/lowering/class-protocols.d.ts +25 -0
  364. package/dist/frontend/lowering/class-protocols.js +183 -1
  365. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  366. package/dist/frontend/lowering/class-prototypes.js +31 -2
  367. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  368. package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
  369. package/dist/frontend/lowering/class-runtime-statics.js +29 -4
  370. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  371. package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
  372. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  373. package/dist/frontend/lowering/coercions/structural.js +91 -1
  374. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  375. package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
  376. package/dist/frontend/lowering/completion-callbacks.js +146 -0
  377. package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
  378. package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
  379. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  380. package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
  381. package/dist/frontend/lowering/containers/array-callbacks.js +345 -24
  382. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  383. package/dist/frontend/lowering/containers/array-concat.js +10 -0
  384. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  385. package/dist/frontend/lowering/containers/array-construction.js +5 -0
  386. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  387. package/dist/frontend/lowering/containers/array-methods.js +26 -3
  388. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  389. package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
  390. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  391. package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
  392. package/dist/frontend/lowering/containers/bytes.js +455 -46
  393. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  394. package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
  395. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  396. package/dist/frontend/lowering/containers/collection-methods.js +7 -2
  397. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  398. package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
  399. package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
  400. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
  401. package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
  402. package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
  403. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  404. package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
  405. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  406. package/dist/frontend/lowering/containers/string-replacement.js +43 -19
  407. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  408. package/dist/frontend/lowering/date-values.d.ts +11 -0
  409. package/dist/frontend/lowering/date-values.js +207 -0
  410. package/dist/frontend/lowering/date-values.js.map +1 -0
  411. package/dist/frontend/lowering/dispatch-sites.js +15 -1
  412. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  413. package/dist/frontend/lowering/divergences.js +9 -1
  414. package/dist/frontend/lowering/divergences.js.map +1 -1
  415. package/dist/frontend/lowering/error-methods.js +47 -2
  416. package/dist/frontend/lowering/error-methods.js.map +1 -1
  417. package/dist/frontend/lowering/expressions/array-literals.js +53 -0
  418. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  419. package/dist/frontend/lowering/expressions/binary.js +100 -28
  420. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  421. package/dist/frontend/lowering/expressions/element-access.js +169 -13
  422. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  423. package/dist/frontend/lowering/expressions/identifiers.js +64 -5
  424. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  425. package/dist/frontend/lowering/expressions/narrowing.js +95 -1
  426. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  427. package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
  428. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  429. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  430. package/dist/frontend/lowering/expressions/object-literals.js +138 -51
  431. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  432. package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
  433. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  434. package/dist/frontend/lowering/expressions/property-access.js +168 -10
  435. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  436. package/dist/frontend/lowering/expressions/relational.js +212 -33
  437. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  438. package/dist/frontend/lowering/expressions/typeof.js +6 -0
  439. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  440. package/dist/frontend/lowering/expressions/union-fields.js +4 -0
  441. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  442. package/dist/frontend/lowering/expressions/updates.js +39 -3
  443. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  444. package/dist/frontend/lowering/frozen-records.d.ts +28 -0
  445. package/dist/frontend/lowering/frozen-records.js +322 -0
  446. package/dist/frontend/lowering/frozen-records.js.map +1 -0
  447. package/dist/frontend/lowering/function-returns.js +64 -0
  448. package/dist/frontend/lowering/function-returns.js.map +1 -1
  449. package/dist/frontend/lowering/generic-functions.js +7 -2
  450. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  451. package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
  452. package/dist/frontend/lowering/indexed-unions.js +401 -0
  453. package/dist/frontend/lowering/indexed-unions.js.map +1 -0
  454. package/dist/frontend/lowering/iterable-values.d.ts +49 -0
  455. package/dist/frontend/lowering/iterable-values.js +297 -0
  456. package/dist/frontend/lowering/iterable-values.js.map +1 -0
  457. package/dist/frontend/lowering/iterator-adapters.js +186 -1
  458. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  459. package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
  460. package/dist/frontend/lowering/js-class-fields.js +45 -10
  461. package/dist/frontend/lowering/js-class-fields.js.map +1 -1
  462. package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
  463. package/dist/frontend/lowering/key-order-witness.js +974 -48
  464. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  465. package/dist/frontend/lowering/key-order-witness.test.js +530 -10
  466. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  467. package/dist/frontend/lowering/lower-assert.js +15 -3
  468. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  469. package/dist/frontend/lowering/lower-async-iteration.js +4 -1
  470. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  471. package/dist/frontend/lowering/lower-calls.d.ts +7 -0
  472. package/dist/frontend/lowering/lower-calls.js +462 -44
  473. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  474. package/dist/frontend/lowering/lower-classes.d.ts +11 -2
  475. package/dist/frontend/lowering/lower-classes.js +324 -69
  476. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  477. package/dist/frontend/lowering/lower-dgram.js +3 -1
  478. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  479. package/dist/frontend/lowering/lower-exprs.js +215 -3
  480. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  481. package/dist/frontend/lowering/lower-functions.d.ts +11 -0
  482. package/dist/frontend/lowering/lower-functions.js +83 -0
  483. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  484. package/dist/frontend/lowering/lower-generators.js +42 -32
  485. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  486. package/dist/frontend/lowering/lower-global-value.js +6 -3
  487. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  488. package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
  489. package/dist/frontend/lowering/lower-inspect.js +53 -17
  490. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  491. package/dist/frontend/lowering/lower-modules.js +53 -5
  492. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  493. package/dist/frontend/lowering/lower-namespaces.js +5 -1
  494. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  495. package/dist/frontend/lowering/lower-server.js +2 -2
  496. package/dist/frontend/lowering/lower-server.js.map +1 -1
  497. package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
  498. package/dist/frontend/lowering/lower-stdlib.js +30 -0
  499. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  500. package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
  501. package/dist/frontend/lowering/lower-stmts.js +553 -81
  502. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  503. package/dist/frontend/lowering/lower-stream.d.ts +20 -2
  504. package/dist/frontend/lowering/lower-stream.js +1483 -156
  505. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  506. package/dist/frontend/lowering/lowerer.d.ts +107 -8
  507. package/dist/frontend/lowering/lowerer.js +381 -36
  508. package/dist/frontend/lowering/lowerer.js.map +1 -1
  509. package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
  510. package/dist/frontend/lowering/module-namespace-elements.js +82 -5
  511. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  512. package/dist/frontend/lowering/new-target.d.ts +12 -0
  513. package/dist/frontend/lowering/new-target.js +280 -0
  514. package/dist/frontend/lowering/new-target.js.map +1 -0
  515. package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
  516. package/dist/frontend/lowering/object-factory-new.js +20 -6
  517. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  518. package/dist/frontend/lowering/overload-choice.d.ts +33 -0
  519. package/dist/frontend/lowering/overload-choice.js +190 -0
  520. package/dist/frontend/lowering/overload-choice.js.map +1 -0
  521. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  522. package/dist/frontend/lowering/surfaces.js +73 -8
  523. package/dist/frontend/lowering/surfaces.js.map +1 -1
  524. package/dist/frontend/lowering/undefined-index.d.ts +27 -0
  525. package/dist/frontend/lowering/undefined-index.js +82 -0
  526. package/dist/frontend/lowering/undefined-index.js.map +1 -0
  527. package/dist/frontend/lowering/var-hoisting.js +29 -13
  528. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  529. package/dist/frontend/lowering/width-lift.d.ts +18 -0
  530. package/dist/frontend/npm-static-bundled-chunks.js +9 -11
  531. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  532. package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
  533. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  534. package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
  535. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  536. package/dist/frontend/npm-static.js +4 -20
  537. package/dist/frontend/npm-static.js.map +1 -1
  538. package/dist/frontend/package-shims.d.ts +3 -0
  539. package/dist/frontend/package-shims.js +71 -8
  540. package/dist/frontend/package-shims.js.map +1 -1
  541. package/dist/frontend/pipeline.js +19 -11
  542. package/dist/frontend/pipeline.js.map +1 -1
  543. package/dist/frontend/process-fork.d.ts +25 -0
  544. package/dist/frontend/process-fork.js +2 -0
  545. package/dist/frontend/process-fork.js.map +1 -0
  546. package/dist/frontend/program-analysis.d.ts +5 -1
  547. package/dist/frontend/program-analysis.js +5 -0
  548. package/dist/frontend/program-analysis.js.map +1 -1
  549. package/dist/frontend/program.d.ts +21 -6
  550. package/dist/frontend/program.js +681 -83
  551. package/dist/frontend/program.js.map +1 -1
  552. package/dist/frontend/program.test.js +43 -3
  553. package/dist/frontend/program.test.js.map +1 -1
  554. package/dist/frontend/token-equivalence.d.ts +3 -0
  555. package/dist/frontend/token-equivalence.js +409 -0
  556. package/dist/frontend/token-equivalence.js.map +1 -0
  557. package/dist/frontend/token-equivalence.test.d.ts +1 -0
  558. package/dist/frontend/token-equivalence.test.js +67 -0
  559. package/dist/frontend/token-equivalence.test.js.map +1 -0
  560. package/dist/frontend/ts7/ast-node.d.ts +22 -0
  561. package/dist/frontend/ts7/ast-node.js +1048 -103
  562. package/dist/frontend/ts7/ast-node.js.map +1 -1
  563. package/dist/frontend/ts7/ast-node.test.js +24 -0
  564. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  565. package/dist/frontend/ts7/ast-wire.d.ts +4 -3
  566. package/dist/frontend/ts7/ast-wire.js +34 -24
  567. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  568. package/dist/frontend/ts7/ast-wire.test.js +23 -0
  569. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  570. package/dist/frontend/ts7/checker-backend.d.ts +3 -4
  571. package/dist/frontend/ts7/checker-backend.js +2 -2
  572. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  573. package/dist/frontend/ts7/checker-backend.test.js +5 -9
  574. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  575. package/dist/frontend/ts7/checker.d.ts +4 -0
  576. package/dist/frontend/ts7/checker.js +7 -0
  577. package/dist/frontend/ts7/checker.js.map +1 -1
  578. package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
  579. package/dist/frontend/ts7/lib-diagnostics.js +307 -0
  580. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
  581. package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
  582. package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
  583. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
  584. package/dist/frontend/ts7/program-host.d.ts +7 -0
  585. package/dist/frontend/ts7/program-host.js +25 -2
  586. package/dist/frontend/ts7/program-host.js.map +1 -1
  587. package/dist/frontend/ts7/semantic-model.d.ts +3 -0
  588. package/dist/frontend/ts7/semantic-model.js +5 -0
  589. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  590. package/dist/frontend/ts7/semantic-model.test.js +6 -1
  591. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  592. package/dist/frontend/ts7/semantic-types.d.ts +1 -1
  593. package/dist/frontend/ts7/semantic-types.js +1 -1
  594. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  595. package/dist/frontend/ts7/session.d.ts +14 -1
  596. package/dist/frontend/ts7/session.js +22 -0
  597. package/dist/frontend/ts7/session.js.map +1 -1
  598. package/dist/frontend/type-mapper.d.ts +13 -1
  599. package/dist/frontend/type-mapper.js +229 -20
  600. package/dist/frontend/type-mapper.js.map +1 -1
  601. package/dist/index.d.ts +0 -5
  602. package/dist/index.js +46 -4
  603. package/dist/index.js.map +1 -1
  604. package/dist/ir/analysis.js +5 -3
  605. package/dist/ir/analysis.js.map +1 -1
  606. package/dist/ir/array-length-stability.d.ts +4 -0
  607. package/dist/ir/array-length-stability.js +19 -6
  608. package/dist/ir/array-length-stability.js.map +1 -1
  609. package/dist/ir/array-length-stability.test.js +24 -0
  610. package/dist/ir/array-length-stability.test.js.map +1 -1
  611. package/dist/ir/builtin-effects.d.ts +7 -0
  612. package/dist/ir/builtin-effects.js +60 -0
  613. package/dist/ir/builtin-effects.js.map +1 -1
  614. package/dist/ir/builtin-signatures.d.ts +6 -4
  615. package/dist/ir/builtin-signatures.js +222 -13
  616. package/dist/ir/builtin-signatures.js.map +1 -1
  617. package/dist/ir/callback-specialization.d.ts +2 -1
  618. package/dist/ir/callback-specialization.js +23 -18
  619. package/dist/ir/callback-specialization.js.map +1 -1
  620. package/dist/ir/char-unit-locals.d.ts +19 -0
  621. package/dist/ir/char-unit-locals.js +185 -0
  622. package/dist/ir/char-unit-locals.js.map +1 -0
  623. package/dist/ir/char-unit-locals.test.d.ts +1 -0
  624. package/dist/ir/char-unit-locals.test.js +94 -0
  625. package/dist/ir/char-unit-locals.test.js.map +1 -0
  626. package/dist/ir/final-fields.d.ts +2 -1
  627. package/dist/ir/final-fields.js +14 -16
  628. package/dist/ir/final-fields.js.map +1 -1
  629. package/dist/ir/function-references.d.ts +2 -0
  630. package/dist/ir/function-references.js +2 -0
  631. package/dist/ir/function-references.js.map +1 -1
  632. package/dist/ir/function-references.test.js +3 -0
  633. package/dist/ir/function-references.test.js.map +1 -1
  634. package/dist/ir/initializer-bindings.d.ts +2 -1
  635. package/dist/ir/initializer-bindings.js +27 -20
  636. package/dist/ir/initializer-bindings.js.map +1 -1
  637. package/dist/ir/int32-arrays.d.ts +108 -0
  638. package/dist/ir/int32-arrays.js +831 -0
  639. package/dist/ir/int32-arrays.js.map +1 -0
  640. package/dist/ir/int32-slots.d.ts +24 -2
  641. package/dist/ir/int32-slots.js +266 -57
  642. package/dist/ir/int32-slots.js.map +1 -1
  643. package/dist/ir/int32-slots.test.js +33 -0
  644. package/dist/ir/int32-slots.test.js.map +1 -1
  645. package/dist/ir/integer-loops.d.ts +3 -3
  646. package/dist/ir/integer-loops.js +28 -10
  647. package/dist/ir/integer-loops.js.map +1 -1
  648. package/dist/ir/integer-loops.test.js +10 -0
  649. package/dist/ir/integer-loops.test.js.map +1 -1
  650. package/dist/ir/integer-ranges.d.ts +5 -0
  651. package/dist/ir/integer-ranges.js +125 -12
  652. package/dist/ir/integer-ranges.js.map +1 -1
  653. package/dist/ir/integer-ranges.test.js +30 -0
  654. package/dist/ir/integer-ranges.test.js.map +1 -1
  655. package/dist/ir/ir.d.ts +83 -10
  656. package/dist/ir/ir.js +77 -6
  657. package/dist/ir/ir.js.map +1 -1
  658. package/dist/ir/ir.test.js +23 -2
  659. package/dist/ir/ir.test.js.map +1 -1
  660. package/dist/ir/js-ic.d.ts +4 -0
  661. package/dist/ir/js-ic.js +17 -1
  662. package/dist/ir/js-ic.js.map +1 -1
  663. package/dist/ir/js-ic.test.js +46 -0
  664. package/dist/ir/js-ic.test.js.map +1 -1
  665. package/dist/ir/node-index.d.ts +57 -0
  666. package/dist/ir/node-index.js +215 -0
  667. package/dist/ir/node-index.js.map +1 -0
  668. package/dist/ir/paired-while-loops.d.ts +25 -0
  669. package/dist/ir/paired-while-loops.js +335 -0
  670. package/dist/ir/paired-while-loops.js.map +1 -0
  671. package/dist/ir/paired-while-loops.test.d.ts +1 -0
  672. package/dist/ir/paired-while-loops.test.js +163 -0
  673. package/dist/ir/paired-while-loops.test.js.map +1 -0
  674. package/dist/ir/parameter-versions.d.ts +25 -0
  675. package/dist/ir/parameter-versions.js +300 -0
  676. package/dist/ir/parameter-versions.js.map +1 -0
  677. package/dist/ir/runtime-features.d.ts +34 -13
  678. package/dist/ir/runtime-features.js +177 -39
  679. package/dist/ir/runtime-features.js.map +1 -1
  680. package/dist/ir/serialize.d.ts +12 -2
  681. package/dist/ir/serialize.js +16 -3
  682. package/dist/ir/serialize.js.map +1 -1
  683. package/dist/ir/serialize.test.js +17 -0
  684. package/dist/ir/serialize.test.js.map +1 -1
  685. package/dist/ir/traverse.js +18 -6
  686. package/dist/ir/traverse.js.map +1 -1
  687. package/dist/ir/validate.js +167 -40
  688. package/dist/ir/validate.js.map +1 -1
  689. package/dist/library/ir-policy.js +3 -0
  690. package/dist/library/ir-policy.js.map +1 -1
  691. package/dist/native/cache.d.ts +6 -1
  692. package/dist/native/cache.js +28 -5
  693. package/dist/native/cache.js.map +1 -1
  694. package/dist/native/cache.test.js +16 -2
  695. package/dist/native/cache.test.js.map +1 -1
  696. package/dist/native/cli.js +21 -1
  697. package/dist/native/cli.js.map +1 -1
  698. package/dist/native/compiler.js +8 -6
  699. package/dist/native/compiler.js.map +1 -1
  700. package/dist/native/executable-cache.d.ts +1 -1
  701. package/dist/native/executable-cache.js +2 -2
  702. package/dist/native/executable-cache.js.map +1 -1
  703. package/dist/native/prepare.d.ts +4 -2
  704. package/dist/native/prepare.js +130 -32
  705. package/dist/native/prepare.js.map +1 -1
  706. package/dist/native/prepare.test.js +96 -20
  707. package/dist/native/prepare.test.js.map +1 -1
  708. package/dist/native/sanitizer.test.js +2 -0
  709. package/dist/native/sanitizer.test.js.map +1 -1
  710. package/dist/native/text-file.d.ts +13 -3
  711. package/dist/native/text-file.js +63 -9
  712. package/dist/native/text-file.js.map +1 -1
  713. package/dist/native/text-file.test.d.ts +1 -0
  714. package/dist/native/text-file.test.js +49 -0
  715. package/dist/native/text-file.test.js.map +1 -0
  716. package/dist/native/toolchain.js +4 -4
  717. package/dist/native/toolchain.js.map +1 -1
  718. package/dist/native/toolchain.test.js +3 -3
  719. package/dist/native/toolchain.test.js.map +1 -1
  720. package/package.json +21 -21
  721. package/shims/chalk/v5.ts +688 -0
  722. package/shims/hono-node-server/v2.ts +645 -0
  723. package/shims/hot-shots/client.ts +1126 -0
  724. package/shims/hot-shots/v8-unix-dgram.ts +8 -0
  725. package/shims/hot-shots/v8.ts +8 -0
  726. package/surface-manifest.json +27 -7
@@ -1,11 +1,15 @@
1
1
  import { type IrExpr, type IrType } from "../../ir/ir.js";
2
2
  import { type MapKeyAccess } from "./shapes.js";
3
3
  import type { LlvmEmitterContext, LlValue } from "./expr-context.js";
4
+ import { type ArrayAccess } from "./dense-array-access.js";
4
5
  export declare function resolveThunkFor(host: LlvmEmitterContext, inner: IrType): string;
5
6
  export declare function tagInSet(host: LlvmEmitterContext, uName: string, unionId: string, tags: number[]): string;
6
- export declare function arrPush(host: LlvmEmitterContext, arr: string, acc: "f64" | "bool" | "ref", value: string): string;
7
+ /** `element`: the array's element type, or null for arrays whose
8
+ * elements are not compact class references (dense-array-access.ts
9
+ * slotKind). */
10
+ export declare function arrPush(host: LlvmEmitterContext, arr: string, acc: ArrayAccess, value: string, element: IrType | null): string;
7
11
  /** Move evaluated values through one bounded slot buffer per call site. */
8
- export declare function emitArrayValues(host: LlvmEmitterContext, arr: string, acc: "f64" | "bool" | "ref", values: LlValue[], prepend?: boolean, sharedBuffer?: string): string;
12
+ export declare function emitArrayValues(host: LlvmEmitterContext, arr: string, acc: ArrayAccess, element: IrType, values: LlValue[], prepend?: boolean, sharedBuffer?: string): string;
9
13
  /** A splice whose removed-elements array is discarded (statement position)
10
14
  * and whose insertion items, if any, are plain evaluated values: evaluate
11
15
  * the receiver, start, count, and items in order, then splice the values in
@@ -13,6 +17,14 @@ export declare function emitArrayValues(host: LlvmEmitterContext, arr: string, a
13
17
  * which keeps the ordinary intrinsic. */
14
18
  export declare function emitDiscardedSplice(host: LlvmEmitterContext, e: IrExpr): boolean;
15
19
  export declare function emitArrayCopyLoop(host: LlvmEmitterContext, dst: string, src: string, acc: "f64" | "bool" | "ref"): void;
20
+ /** `s.charCodeAt(i)` in place of `s.charAt(i)`, the same index read as a
21
+ * code unit. The emitter records the charAt it stands for
22
+ * (charAtUnitReads), so a loop version's proof for the charAt covers it. */
23
+ export declare function charAtUnitRead(host: LlvmEmitterContext, charAt: IrExpr & {
24
+ kind: "strIntrinsic";
25
+ }): IrExpr & {
26
+ kind: "strIntrinsic";
27
+ };
16
28
  export declare function emitStrIntrinsic(host: LlvmEmitterContext, e: IrExpr & {
17
29
  kind: "strIntrinsic";
18
30
  }): LlValue;
@@ -2,30 +2,34 @@
2
2
  import { arraySearchHelperName, arraySearchKind } from "./array-search.js";
3
3
  import { InternalCompilerError } from "../../errors.js";
4
4
  import { isStableReceiverOperand, undefinedArmTag } from "../../ir/analysis.js";
5
- import { isRefCounted, typeEquals, typeKey } from "../../ir/ir.js";
5
+ import { F64, isRefCounted, typeEquals, typeKey } from "../../ir/ir.js";
6
6
  import { mangleResolveThunk } from "../mangle.js";
7
7
  import { arrOps, elemAccess, FN_ATTRS, mapKeyAccess, mapKeyKindNum, mapKeyParamType, mapValKindNum, traceArg, vAdapters, } from "./shapes.js";
8
8
  import { F64_INF, f64Lit, loadArrCount, sizeToDouble } from "./common.js";
9
9
  import { MUTATING_COLLECTION_METHODS } from "../publication.js";
10
10
  import { borrowsStringInputs, emitStringInputs } from "./string-lifetimes.js";
11
11
  import { emitMapLookupKey, borrowsMapReadInputs, borrowsMapMutationReceiver, inlineNumberKey, entryStringKey, } from "./map-read-lifetimes.js";
12
- import { emitMapIterCount, emitMapIterEntry, emitMapIterSlot, mapEntryLayout, emitMapIterStart, emitNumberMapGetRef, emitNumberMapGetScalar, emitNumberMapHas, emitNumberMapSetScalar, emitStringMapGetRef, emitStringMapGetScalar, emitStringMapHas, } from "./map-number-lookup.js";
12
+ import { emitMapIterCount, emitMapIterEntry, emitMapIterSlot, compactMapValues, mapEntryLayout, emitMapIterStart, emitMapSize, emitNumberMapGetRef, emitNumberMapGetScalar, emitNumberMapHas, emitNumberMapSetScalar, emitStringMapGetRef, emitStringMapGetScalar, emitStringMapHas, } from "./map-number-lookup.js";
13
13
  import { emitBorrowedInput } from "./borrowed-inputs.js";
14
14
  import { emitFusedMapSet, rememberMapEntry } from "./map-entry-fusion.js";
15
15
  import { emitScratchStringSlice, emitStringSliceRead } from "./string-slices.js";
16
- import { STRING_CHAR_AT_DECL, STRING_CHAR_AT_INT_MARKER, STRING_CHAR_CODE_AT_DECL, STRING_CHAR_CODE_AT_INT_MARKER, STRING_UTF16_LEN_DECL, } from "./string-reads.js";
16
+ import { STRING_CHAR_AT_DECL, STRING_CHAR_AT_INT_MARKER, STRING_CHAR_CODE_AT_DECL, STRING_CHAR_CODE_AT_INT_MARKER, emitAsciiChar, emitAsciiCharCode, STRING_UTF16_LEN_DECL, } from "./string-reads.js";
17
17
  import { exactInteger, widenInteger } from "./integer-values.js";
18
- import { emitDenseArrayNumber, emitDenseArrayPop, emitDenseArrayPush, } from "./dense-array-access.js";
18
+ import { emitDenseArrayNumber, emitDenseArrayPop, emitDenseArrayPush, runtimeAccess, } from "./dense-array-access.js";
19
+ import { INT32_ARRAY_METHODS } from "../../ir/int32-arrays.js";
19
20
  import { emitUnionWiden } from "./expr-records.js";
21
+ import { registerReplay } from "./emit-journal.js";
20
22
  export function resolveThunkFor(host, inner) {
21
23
  const key = typeKey(inner);
22
24
  let sym = host.resolveThunks.get(key);
23
25
  if (!sym) {
24
26
  sym = mangleResolveThunk(host.resolveThunks.size);
25
27
  host.resolveThunks.set(key, sym);
28
+ host.journal?.allocated(sym, "resolveThunkFor", [inner]);
26
29
  const v = vAdapters(host.shapeHost, inner);
27
30
  host.declare(`declare void @scr_resolve_ref_impl(ptr, ptr, ptr, ptr, ptr)`);
28
31
  host.resolveThunkDefs.push(`define internal void @${sym}(ptr %self, ptr %v) ${FN_ATTRS} { ; resolve<${key}>`, `entry:`, ` call void @scr_resolve_ref_impl(ptr %self, ptr %v, ptr ${v.retain}, ptr ${v.release}, ptr ${traceArg(host.shapeHost, inner)})`, ` ret void`, `}`, ``);
32
+ host.journal?.built();
29
33
  }
30
34
  return sym;
31
35
  }
@@ -47,11 +51,14 @@ export function tagInSet(host, uName, unionId, tags) {
47
51
  }
48
52
  return acc;
49
53
  }
50
- export function arrPush(host, arr, acc, value) {
51
- return emitDenseArrayPush(host, arr, acc, value);
54
+ /** `element`: the array's element type, or null for arrays whose
55
+ * elements are not compact class references (dense-array-access.ts
56
+ * slotKind). */
57
+ export function arrPush(host, arr, acc, value, element) {
58
+ return emitDenseArrayPush(host, arr, acc, element, value);
52
59
  }
53
60
  /** Move evaluated values through one bounded slot buffer per call site. */
54
- export function emitArrayValues(host, arr, acc, values, prepend = false, sharedBuffer) {
61
+ export function emitArrayValues(host, arr, acc, element, values, prepend = false, sharedBuffer) {
55
62
  const B = host.B;
56
63
  if (acc === "ref")
57
64
  values.forEach((value) => host.toHeap(value));
@@ -63,11 +70,12 @@ export function emitArrayValues(host, arr, acc, values, prepend = false, sharedB
63
70
  }
64
71
  if (values.length === 1) {
65
72
  if (!prepend)
66
- return arrPush(host, arr, acc, values[0].name);
67
- const ty = acc === "f64" ? "double" : acc === "bool" ? "i1" : "ptr";
68
- host.declare(`declare double @scr_arr_unshift_${acc}(ptr, ${ty}${acc === "bool" ? " zeroext" : ""})`);
73
+ return arrPush(host, arr, acc, values[0].name, element);
74
+ const flat = runtimeAccess(acc);
75
+ const ty = flat === "f64" ? "double" : flat === "bool" ? "i1" : "ptr";
76
+ host.declare(`declare double @scr_arr_unshift_${flat}(ptr, ${ty}${flat === "bool" ? " zeroext" : ""})`);
69
77
  const result = B.tmp();
70
- B.line(`${result} = call double @scr_arr_unshift_${acc}(ptr ${arr}, ${ty} ${values[0].name})`);
78
+ B.line(`${result} = call double @scr_arr_unshift_${flat}(ptr ${arr}, ${ty} ${values[0].name})`);
71
79
  return result;
72
80
  }
73
81
  const capacity = Math.min(values.length, 64);
@@ -85,7 +93,8 @@ export function emitArrayValues(host, arr, acc, values, prepend = false, sharedB
85
93
  for (let i = 0; i < count; i++) {
86
94
  const slot = B.tmp(), pointer = B.tmp();
87
95
  const value = values[start + i].name;
88
- const pack = acc === "f64"
96
+ // The runtime takes double bits for int32 arrays too, and converts.
97
+ const pack = acc === "f64" || acc === "i32"
89
98
  ? `bitcast double ${value} to i64`
90
99
  : acc === "bool"
91
100
  ? `zext i1 ${value} to i64`
@@ -169,6 +178,9 @@ function emitDiscarded(host, e) {
169
178
  const start = host.emitExpr(e.args[0]);
170
179
  const count = e.args[1] ? host.emitExpr(e.args[1]).name : F64_INF;
171
180
  const values = items.map((item) => host.emitExpr(item));
181
+ // Before the values move into the buffer: a throw releases them with the
182
+ // frame.
183
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, count, f64Lit(values.length));
172
184
  if (acc === "ref")
173
185
  values.forEach((value) => host.toHeap(value));
174
186
  let buffer = "null";
@@ -195,6 +207,29 @@ export function emitArrayCopyLoop(host, dst, src, acc) {
195
207
  host.declare(`declare double @scr_arr_push_spread(ptr, ptr)`);
196
208
  host.B.line(`call double @scr_arr_push_spread(ptr ${dst}, ptr ${src})`);
197
209
  }
210
+ /** `s.charCodeAt(i)` in place of `s.charAt(i)`, the same index read as a
211
+ * code unit. The emitter records the charAt it stands for
212
+ * (charAtUnitReads), so a loop version's proof for the charAt covers it. */
213
+ export function charAtUnitRead(host, charAt) {
214
+ const read = {
215
+ kind: "strIntrinsic",
216
+ method: "charCodeAt",
217
+ receiver: charAt.receiver,
218
+ args: charAt.args,
219
+ type: F64,
220
+ loc: charAt.loc,
221
+ };
222
+ host.charAtUnitReads.set(read, charAt);
223
+ return read;
224
+ }
225
+ /** An enclosing loop version proved the string of `e` ASCII and its index
226
+ * below the length (bytes-loop-versions.ts). */
227
+ function provenStringRead(host, e) {
228
+ if (host.bytesBounds.has(e))
229
+ return true;
230
+ const origin = host.charAtUnitReads.get(e);
231
+ return origin !== undefined && host.bytesBounds.has(origin);
232
+ }
198
233
  export function emitStrIntrinsic(host, e) {
199
234
  // String/array-returning methods hand back a +1 reference, including
200
235
  // identity returns. Inputs keep either a proven owner or a frame temp.
@@ -233,8 +268,10 @@ export function emitStrIntrinsic(host, e) {
233
268
  const t = B.tmp();
234
269
  const index = e.args[0] ? exactInteger(host, args[0], e.args[0]) : null;
235
270
  if (index) {
236
- host.declare(STRING_CHAR_CODE_AT_INT_MARKER);
237
271
  const wide = widenInteger(host, index);
272
+ if (provenStringRead(host, e))
273
+ return { name: emitAsciiCharCode(host, r.name, wide), type: e.type };
274
+ host.declare(STRING_CHAR_CODE_AT_INT_MARKER);
238
275
  B.line(`${t} = call double @sc_str_char_code_at_int(ptr ${r.name}, i64 ${wide})`);
239
276
  return { name: t, type: e.type };
240
277
  }
@@ -247,8 +284,11 @@ export function emitStrIntrinsic(host, e) {
247
284
  const t = B.tmp();
248
285
  const index = e.args[0] ? exactInteger(host, args[0], e.args[0]) : null;
249
286
  if (index) {
250
- host.declare(STRING_CHAR_AT_INT_MARKER);
251
287
  const wide = widenInteger(host, index);
288
+ // The table entry is immortal: nothing owns it.
289
+ if (provenStringRead(host, e))
290
+ return host.markImmortal({ name: emitAsciiChar(host, r.name, wide), type: e.type });
291
+ host.declare(STRING_CHAR_AT_INT_MARKER);
252
292
  B.line(`${t} = call ptr @sc_str_char_at_int(ptr ${r.name}, i64 ${wide})`);
253
293
  }
254
294
  else {
@@ -373,7 +413,15 @@ into) {
373
413
  if (e.receiver.type.kind !== "array")
374
414
  throw new InternalCompilerError("llvm emitter bug: arrIntrinsic on non-array");
375
415
  const elem = e.receiver.type.elem;
376
- const acc = elemAccess(elem);
416
+ // Int32 arrays (ir/int32-arrays.ts) reach only these methods; the others
417
+ // take the runtime family's flat access. One with checked stores tests
418
+ // its kind at each inline access (emitByElementKind) and otherwise takes
419
+ // the double entry points, which serve both kinds.
420
+ const checked = host.checkedInt32Array(e.receiver);
421
+ const access = checked ? "f64" : host.arrayAccess(e.receiver, elem);
422
+ if ((access === "i32" || checked) && !INT32_ARRAY_METHODS.has(e.method))
423
+ throw new InternalCompilerError(`llvm emitter bug: ${e.method} on an int32 array`);
424
+ const acc = runtimeAccess(access);
377
425
  const accTy = acc === "f64" ? "double" : acc === "bool" ? "i1" : "ptr";
378
426
  const accArg = acc === "bool" ? "i1 zeroext" : accTy;
379
427
  const method = e.method;
@@ -391,9 +439,14 @@ into) {
391
439
  const table = e.receiver.kind === "varRef"
392
440
  ? host.constantNumericTables.get(e.receiver.localId)
393
441
  : undefined;
442
+ if (!table && elem.kind === "f64" && checked) {
443
+ const proven = host.provenDenseIndex(e.receiver, e.args[0]);
444
+ const value = host.emitByElementKind(r.name, "double", (kind) => emitDenseArrayNumber(host, r.name, index, e.args[0], proven, kind));
445
+ return { name: value, type: e.type };
446
+ }
394
447
  if (!table && elem.kind === "f64")
395
448
  return {
396
- name: emitDenseArrayNumber(host, r.name, index, e.args[0], host.provenDenseIndex(e.receiver, e.args[0])),
449
+ name: emitDenseArrayNumber(host, r.name, index, e.args[0], host.provenDenseIndex(e.receiver, e.args[0]), access === "i32" ? "i32" : "f64"),
397
450
  type: e.type,
398
451
  };
399
452
  host.declare(`declare double @scr_arr_get_number(ptr, double)`);
@@ -425,7 +478,23 @@ into) {
425
478
  // no-op zero-argument call.
426
479
  const vs = e.args.map((a) => host.emitExpr(a));
427
480
  host.emitPublishedArrayGuard(r.name, e.receiver.type, 1, f64Lit(0), f64Lit(vs.length));
428
- return { name: emitArrayValues(host, r.name, acc, vs), type: e.type };
481
+ if (checked && vs.length > 0) {
482
+ // Each value appends in its own kind test: one that is not an int32
483
+ // widens the array before it is pushed.
484
+ let length = "";
485
+ vs.forEach((v, i) => {
486
+ length = host.emitByElementKind(r.name, "double", (kind, widened) => {
487
+ if (kind === "i32")
488
+ host.emitCheckedInt32Store(r.name, v.name, e.args[i], widened);
489
+ return arrPush(host, r.name, kind, v.name, elem);
490
+ });
491
+ });
492
+ return { name: length, type: e.type };
493
+ }
494
+ // In an int32 kind loop's fast copy, every value is checked before
495
+ // the first appends.
496
+ vs.forEach((v, i) => host.emitInt32KindStoreCheck(e.receiver, v, e.args[i]));
497
+ return { name: emitArrayValues(host, r.name, access, elem, vs), type: e.type };
429
498
  }
430
499
  case "pushSpread": {
431
500
  // `a.push(...src)`: append src's elements in order (borrowed src,
@@ -457,7 +526,7 @@ into) {
457
526
  // from right to left so the final front order is source order.
458
527
  const vs = e.args.map((a) => host.emitExpr(a));
459
528
  host.emitPublishedArrayGuard(r.name, e.receiver.type, 4, f64Lit(0), f64Lit(vs.length));
460
- return { name: emitArrayValues(host, r.name, acc, vs, true), type: e.type };
529
+ return { name: emitArrayValues(host, r.name, acc, elem, vs, true), type: e.type };
461
530
  }
462
531
  case "unshiftSpread": {
463
532
  // The runtime snapshots the borrowed source and handles self-spread.
@@ -499,7 +568,10 @@ into) {
499
568
  let slowLabel = "";
500
569
  if (method === "pop") {
501
570
  slowLabel = B.newLabel("remove.slow");
502
- denseRaw = emitDenseArrayPop(host, r.name, acc, la, slowLabel);
571
+ const empty = la, slow = slowLabel;
572
+ denseRaw = checked
573
+ ? host.emitByElementKind(r.name, "i64", (kind) => emitDenseArrayPop(host, r.name, kind, elem, empty, slow))
574
+ : emitDenseArrayPop(host, r.name, access, elem, la, slowLabel);
503
575
  denseLabel = B.currentLabel();
504
576
  B.br(lp);
505
577
  B.startBlock(slowLabel);
@@ -568,7 +640,7 @@ into) {
568
640
  // by content, everything else by pointer). Strict equality. Arrays of
569
641
  // objects and strings scan inline (array-search.ts).
570
642
  const v = host.emitExpr(e.args[0]);
571
- const search = acc === "ref" ? arraySearchKind(elem) : null;
643
+ const search = acc === "ref" ? arraySearchKind(elem, host.compactArrayElem(elem)) : null;
572
644
  if (search !== null) {
573
645
  host.arraySearchKinds.add(search);
574
646
  const t = B.tmp();
@@ -584,7 +656,7 @@ into) {
584
656
  // Borrowed needle, SameValueZero (NaN matches NaN). For the inline
585
657
  // searches SameValueZero is strict equality.
586
658
  const v = host.emitExpr(e.args[0]);
587
- const search = acc === "ref" ? arraySearchKind(elem) : null;
659
+ const search = acc === "ref" ? arraySearchKind(elem, host.compactArrayElem(elem)) : null;
588
660
  if (search !== null) {
589
661
  host.arraySearchKinds.add(search);
590
662
  const at = B.tmp(), t = B.tmp();
@@ -608,6 +680,12 @@ into) {
608
680
  B.line(`${t} = call ptr @${helper}(ptr ${r.name}, ptr ${sep.name})`);
609
681
  return host.own({ name: t, type: e.type });
610
682
  }
683
+ if (elem.kind === "date") {
684
+ host.declare(`declare ptr @scr_date_arr_join(ptr, ptr)`);
685
+ const t = B.tmp();
686
+ B.line(`${t} = call ptr @scr_date_arr_join(ptr ${r.name}, ptr ${sep.name})`);
687
+ return host.own({ name: t, type: e.type });
688
+ }
611
689
  host.declare(`declare ptr @scr_arr_join(ptr, ptr)`);
612
690
  const t = B.tmp();
613
691
  B.line(`${t} = call ptr @scr_arr_join(ptr ${r.name}, ptr ${sep.name})`);
@@ -633,6 +711,14 @@ into) {
633
711
  case "toSortedPrimitive": {
634
712
  if (e.method === "sortPrimitive")
635
713
  host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
714
+ if (elem.kind === "date") {
715
+ // Dates order by their toString() text.
716
+ host.declare(`declare ptr @scr_arr_sort_by_text(ptr, i1 zeroext, ptr)`);
717
+ host.declare(`declare ptr @scr_date_object_to_string(ptr)`);
718
+ const sorted = B.tmp();
719
+ B.line(`${sorted} = call ptr @scr_arr_sort_by_text(ptr ${r.name}, i1 ${e.method === "toSortedPrimitive" ? 1 : 0}, ptr @scr_date_object_to_string)`);
720
+ return host.own({ name: sorted, type: e.type });
721
+ }
636
722
  host.declare(`declare ptr @scr_arr_sort_primitive(ptr, i1 zeroext)`);
637
723
  const result = B.tmp();
638
724
  B.line(`${result} = call ptr @scr_arr_sort_primitive(ptr ${r.name}, i1 ${e.method === "toSortedPrimitive" ? 1 : 0})`);
@@ -677,7 +763,20 @@ into) {
677
763
  case "fill":
678
764
  case "fillUndefined": {
679
765
  const args = e.args.map((arg) => host.emitExpr(arg));
680
- host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
766
+ // fill's range is its last two arguments; copyWithin's target,
767
+ // start and end are its three.
768
+ if (e.method === "copyWithin")
769
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 9, args[0].name, args[1].name, args[2].name);
770
+ else
771
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 8, args[args.length - 2].name, args[args.length - 1].name);
772
+ if (host.checkedFills.has(e)) {
773
+ // A new int32 array with checked stores, filled with a value that
774
+ // may not be an int32: widen it first then.
775
+ const filled = B.newLabel("arr.fill.kind");
776
+ host.emitCheckedInt32Store(r.name, args[0].name, e.args[0], filled);
777
+ B.br(filled);
778
+ B.startBlock(filled);
779
+ }
681
780
  const helper = e.method === "copyWithin"
682
781
  ? "scr_arr_copy_within"
683
782
  : e.method === "fillUndefined"
@@ -726,7 +825,7 @@ into) {
726
825
  // removes to the end (+Infinity, the slice convention).
727
826
  const start = host.emitExpr(e.args[0]);
728
827
  const cnt = e.args[1] ? host.emitExpr(e.args[1]).name : F64_INF;
729
- host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
828
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, cnt, f64Lit(0));
730
829
  host.declare(`declare ptr @scr_arr_splice(ptr, double, double)`);
731
830
  const t = B.tmp();
732
831
  B.line(`${t} = call ptr @scr_arr_splice(ptr ${r.name}, double ${start.name}, double ${cnt})`);
@@ -736,7 +835,12 @@ into) {
736
835
  const start = host.emitExpr(e.args[0]);
737
836
  const count = host.emitExpr(e.args[1]);
738
837
  const items = emitBorrowedInput(host, e.args[2]);
739
- host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
838
+ if (host.publishedTypes?.containerGuarded(e.receiver.type) === true) {
839
+ host.declare(`declare double @scr_arr_len(ptr)`);
840
+ const n = B.tmp();
841
+ B.line(`${n} = call double @scr_arr_len(ptr ${items.name})`);
842
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, count.name, n);
843
+ }
740
844
  host.declare(`declare ptr @scr_arr_splice_insert(ptr, double, double, ptr)`);
741
845
  const t = B.tmp();
742
846
  B.line(`${t} = call ptr @scr_arr_splice_insert(ptr ${r.name}, double ${start.name}, double ${count.name}, ptr ${items.name})`);
@@ -823,7 +927,9 @@ function newCollection(host, key, value) {
823
927
  const kind = mapKeyKindNum(key, arms);
824
928
  const m = B.tmp();
825
929
  host.declare(`declare ptr @scr_map_new(i32, i32, ptr)`);
826
- B.line(`${m} = call ptr @scr_map_new(i32 ${kind}, i32 ${mapValKindNum(value)}, ptr ${collectionOps(host, key, value)})`);
930
+ // SCR_MAP_VAL_CREF (3): string keys and compact values (compactMapValues).
931
+ const valKind = compactMapValues(host, key, value) ? 3 : mapValKindNum(value);
932
+ B.line(`${m} = call ptr @scr_map_new(i32 ${kind}, i32 ${valKind}, ptr ${collectionOps(host, key, value)})`);
827
933
  return m;
828
934
  }
829
935
  export function emitMapNew(host, e) {
@@ -870,6 +976,9 @@ export function emitMapLikeIntrinsic(host, e) {
870
976
  const key = receiverType.kind === "map" ? receiverType.key : receiverType.elem;
871
977
  const kAcc = mapKeyAccess(key);
872
978
  const kTy = mapKeyParamType(kAcc);
979
+ // The map keeps compact values in 16-byte entries (SCR_MAP_VAL_CREF).
980
+ const compact = receiverType.kind === "map" && compactMapValues(host, key, receiverType.value);
981
+ const layout = mapEntryLayout(key, compact);
873
982
  const method = e.method;
874
983
  // A published Map or Set rejects mutation (the guard precedes the
875
984
  // operands, which each method evaluates itself).
@@ -1025,7 +1134,7 @@ export function emitMapLikeIntrinsic(host, e) {
1025
1134
  raw = emitNumberMapGetRef(host, r.name, numberKey, value);
1026
1135
  }
1027
1136
  else if (stringKey !== null) {
1028
- raw = emitStringMapGetRef(host, r.name, stringKey, value);
1137
+ raw = emitStringMapGetRef(host, r.name, stringKey, value, compact);
1029
1138
  }
1030
1139
  else {
1031
1140
  host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
@@ -1098,7 +1207,7 @@ export function emitMapLikeIntrinsic(host, e) {
1098
1207
  return host.wrapNullable(raw, raw, value, valueTag, e.type, undefTag);
1099
1208
  }
1100
1209
  if (stringKey !== null && isRefCounted(value)) {
1101
- const raw = emitStringMapGetRef(host, r.name, stringKey, value);
1210
+ const raw = emitStringMapGetRef(host, r.name, stringKey, value, compact);
1102
1211
  return host.wrapNullable(raw, raw, value, valueTag, e.type, undefTag);
1103
1212
  }
1104
1213
  host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
@@ -1147,7 +1256,7 @@ export function emitMapLikeIntrinsic(host, e) {
1147
1256
  if (kAcc === "f64")
1148
1257
  return { name: emitNumberMapHas(host, r.name, k.name), type: e.type };
1149
1258
  if (kAcc === "str")
1150
- return { name: emitStringMapHas(host, r.name, k.name), type: e.type };
1259
+ return { name: emitStringMapHas(host, r.name, k.name, compact), type: e.type };
1151
1260
  host.declare(`declare zeroext i1 @scr_map_has_${kAcc}(ptr, ${kTy})`);
1152
1261
  const t = B.tmp();
1153
1262
  B.line(`${t} = call zeroext i1 @scr_map_has_${kAcc}(ptr ${r.name}, ${kTy} ${k.name})`);
@@ -1160,12 +1269,8 @@ export function emitMapLikeIntrinsic(host, e) {
1160
1269
  B.line(`${t} = call zeroext i1 @scr_map_delete_${kAcc}(ptr ${r.name}, ${kTy} ${k.name})`);
1161
1270
  return { name: t, type: e.type };
1162
1271
  }
1163
- case "size": {
1164
- host.declare(`declare double @scr_map_size(ptr)`);
1165
- const t = B.tmp();
1166
- B.line(`${t} = call double @scr_map_size(ptr ${r.name})`);
1167
- return { name: t, type: e.type };
1168
- }
1272
+ case "size":
1273
+ return { name: emitMapSize(host, r.name), type: e.type };
1169
1274
  case "clear":
1170
1275
  host.declare(`declare void @scr_map_clear(ptr)`);
1171
1276
  B.line(`call void @scr_map_clear(ptr ${r.name})`);
@@ -1176,7 +1281,7 @@ export function emitMapLikeIntrinsic(host, e) {
1176
1281
  return { name: emitMapIterStart(host, r.name), type: e.type };
1177
1282
  case "iterLive": {
1178
1283
  const i = host.emitExpr(e.args[0]);
1179
- const entry = emitMapIterEntry(host, r.name, i.name, mapEntryLayout(key));
1284
+ const entry = emitMapIterEntry(host, r.name, i.name, layout);
1180
1285
  const t = B.tmp();
1181
1286
  B.line(`${t} = icmp ne ptr ${entry}, null`);
1182
1287
  return { name: t, type: e.type };
@@ -1187,7 +1292,7 @@ export function emitMapLikeIntrinsic(host, e) {
1187
1292
  if (kAcc !== "ref") {
1188
1293
  const retTy = kAcc === "f64" ? "double" : kAcc === "bool" ? "zeroext i1" : "ptr";
1189
1294
  const symbol = `scr_map_iter_key_${kAcc}`;
1190
- const t = emitMapIterSlot(host, r.name, i.name, 0, kAcc === "str" ? "ref" : kAcc, key, { decl: `declare ${retTy} @${symbol}(ptr, double)`, symbol }, mapEntryLayout(key));
1295
+ const t = emitMapIterSlot(host, r.name, i.name, 0, kAcc === "str" ? "ref" : kAcc, key, { decl: `declare ${retTy} @${symbol}(ptr, double)`, symbol }, layout);
1191
1296
  return host.own({ name: t, type: e.type });
1192
1297
  }
1193
1298
  const retTy = "ptr";
@@ -1206,7 +1311,7 @@ export function emitMapLikeIntrinsic(host, e) {
1206
1311
  const t = emitMapIterSlot(host, r.name, i.name, 1, vAcc, receiverType.value, {
1207
1312
  decl: `declare ${vAcc === "bool" ? "zeroext i1" : retTy} @${symbol}(ptr, double)`,
1208
1313
  symbol,
1209
- }, mapEntryLayout(key));
1314
+ }, layout);
1210
1315
  return host.own({ name: t, type: e.type });
1211
1316
  }
1212
1317
  case "iterEnter":
@@ -1255,4 +1360,5 @@ export function emitSetNew(host, e) {
1255
1360
  }
1256
1361
  return out;
1257
1362
  }
1363
+ registerReplay("resolveThunkFor", (host, args) => resolveThunkFor(host, args[0]));
1258
1364
  //# sourceMappingURL=expr-containers.js.map