@scriptc/compiler 0.4.2 → 0.4.3

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 (636) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +397 -37
  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 +473 -32
  38. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  39. package/dist/backend/llvm/bytes-loop-versions.test.js +258 -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/dense-array-access.d.ts +39 -8
  58. package/dist/backend/llvm/dense-array-access.js +222 -52
  59. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.test.js +36 -0
  61. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  62. package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
  63. package/dist/backend/llvm/dense-array-loops.js +194 -5
  64. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.test.js +90 -1
  66. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  67. package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
  68. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  69. package/dist/backend/llvm/dyn.d.ts +26 -0
  70. package/dist/backend/llvm/dyn.js +352 -61
  71. package/dist/backend/llvm/dyn.js.map +1 -1
  72. package/dist/backend/llvm/emit-function.js +11 -20
  73. package/dist/backend/llvm/emit-function.js.map +1 -1
  74. package/dist/backend/llvm/emit-journal.d.ts +93 -0
  75. package/dist/backend/llvm/emit-journal.js +170 -0
  76. package/dist/backend/llvm/emit-journal.js.map +1 -0
  77. package/dist/backend/llvm/emit-module.js +195 -27
  78. package/dist/backend/llvm/emit-module.js.map +1 -1
  79. package/dist/backend/llvm/emit-statements.d.ts +0 -4
  80. package/dist/backend/llvm/emit-statements.js +268 -84
  81. package/dist/backend/llvm/emit-statements.js.map +1 -1
  82. package/dist/backend/llvm/emitter-state.d.ts +7 -0
  83. package/dist/backend/llvm/emitter-state.js +14 -0
  84. package/dist/backend/llvm/emitter-state.js.map +1 -0
  85. package/dist/backend/llvm/emitter.d.ts +176 -37
  86. package/dist/backend/llvm/emitter.js +724 -85
  87. package/dist/backend/llvm/emitter.js.map +1 -1
  88. package/dist/backend/llvm/emitter.test.js +54 -5
  89. package/dist/backend/llvm/emitter.test.js.map +1 -1
  90. package/dist/backend/llvm/expr-bytes.js +34 -12
  91. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  92. package/dist/backend/llvm/expr-callbacks.js +47 -0
  93. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  94. package/dist/backend/llvm/expr-calls.js +28 -14
  95. package/dist/backend/llvm/expr-calls.js.map +1 -1
  96. package/dist/backend/llvm/expr-containers.d.ts +14 -2
  97. package/dist/backend/llvm/expr-containers.js +129 -37
  98. package/dist/backend/llvm/expr-containers.js.map +1 -1
  99. package/dist/backend/llvm/expr-context.d.ts +14 -0
  100. package/dist/backend/llvm/expr-dynamic.js +18 -11
  101. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  102. package/dist/backend/llvm/expr-primitives.js +100 -28
  103. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  104. package/dist/backend/llvm/expr-primitives.test.js +11 -6
  105. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  106. package/dist/backend/llvm/expr-records.d.ts +12 -0
  107. package/dist/backend/llvm/expr-records.js +106 -0
  108. package/dist/backend/llvm/expr-records.js.map +1 -1
  109. package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
  110. package/dist/backend/llvm/expr-stream-bridges.js +194 -65
  111. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  112. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  113. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  114. package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
  115. package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
  116. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  117. package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
  118. package/dist/backend/llvm/int32-kind-loops.js +106 -0
  119. package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
  120. package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
  121. package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
  122. package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
  123. package/dist/backend/llvm/integer-values.d.ts +20 -1
  124. package/dist/backend/llvm/integer-values.js +71 -0
  125. package/dist/backend/llvm/integer-values.js.map +1 -1
  126. package/dist/backend/llvm/js-ic.d.ts +1 -1
  127. package/dist/backend/llvm/js-ic.js +1 -1
  128. package/dist/backend/llvm/js-ic.js.map +1 -1
  129. package/dist/backend/llvm/key-orders.d.ts +7 -0
  130. package/dist/backend/llvm/key-orders.js +33 -0
  131. package/dist/backend/llvm/key-orders.js.map +1 -0
  132. package/dist/backend/llvm/lib-connect.js +4 -0
  133. package/dist/backend/llvm/lib-connect.js.map +1 -1
  134. package/dist/backend/llvm/lib-datagram.js +11 -0
  135. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  136. package/dist/backend/llvm/lib-dispatch.js +80 -2
  137. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  138. package/dist/backend/llvm/lib-filesystem.js +4 -4
  139. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  140. package/dist/backend/llvm/lib-http2.js +4 -0
  141. package/dist/backend/llvm/lib-http2.js.map +1 -1
  142. package/dist/backend/llvm/lib-lookup.js +16 -6
  143. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  144. package/dist/backend/llvm/lib-shared.js +73 -2
  145. package/dist/backend/llvm/lib-shared.js.map +1 -1
  146. package/dist/backend/llvm/lib-stream.js +35 -5
  147. package/dist/backend/llvm/lib-stream.js.map +1 -1
  148. package/dist/backend/llvm/local-array-reads.js +115 -19
  149. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  150. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  151. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  152. package/dist/backend/llvm/loop-state.d.ts +33 -0
  153. package/dist/backend/llvm/loop-state.js +42 -0
  154. package/dist/backend/llvm/loop-state.js.map +1 -0
  155. package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
  156. package/dist/backend/llvm/map-number-lookup.js +91 -31
  157. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  158. package/dist/backend/llvm/map-number-lookup.test.js +55 -0
  159. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  160. package/dist/backend/llvm/map-read-lifetimes.js +4 -2
  161. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  162. package/dist/backend/llvm/nullable-unions.d.ts +2 -1
  163. package/dist/backend/llvm/nullable-unions.js +15 -3
  164. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  165. package/dist/backend/llvm/publish.d.ts +10 -0
  166. package/dist/backend/llvm/publish.js +12 -0
  167. package/dist/backend/llvm/publish.js.map +1 -1
  168. package/dist/backend/llvm/receivers.js +6 -1
  169. package/dist/backend/llvm/receivers.js.map +1 -1
  170. package/dist/backend/llvm/record-results.d.ts +1 -9
  171. package/dist/backend/llvm/record-results.js +2 -11
  172. package/dist/backend/llvm/record-results.js.map +1 -1
  173. package/dist/backend/llvm/reference-writes.d.ts +7 -2
  174. package/dist/backend/llvm/reference-writes.js +89 -72
  175. package/dist/backend/llvm/reference-writes.js.map +1 -1
  176. package/dist/backend/llvm/running-extrema.d.ts +11 -0
  177. package/dist/backend/llvm/running-extrema.js +115 -0
  178. package/dist/backend/llvm/running-extrema.js.map +1 -0
  179. package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
  180. package/dist/backend/llvm/running-extrema.test.js +89 -0
  181. package/dist/backend/llvm/running-extrema.test.js.map +1 -0
  182. package/dist/backend/llvm/shapes.d.ts +71 -15
  183. package/dist/backend/llvm/shapes.js +222 -33
  184. package/dist/backend/llvm/shapes.js.map +1 -1
  185. package/dist/backend/llvm/shapes.test.js +53 -7
  186. package/dist/backend/llvm/shapes.test.js.map +1 -1
  187. package/dist/backend/llvm/speculative-integers.d.ts +6 -0
  188. package/dist/backend/llvm/speculative-integers.js +2 -2
  189. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  190. package/dist/backend/llvm/stack-objects.d.ts +3 -2
  191. package/dist/backend/llvm/stack-objects.js +5 -2
  192. package/dist/backend/llvm/stack-objects.js.map +1 -1
  193. package/dist/backend/llvm/string-reads.d.ts +12 -0
  194. package/dist/backend/llvm/string-reads.js +44 -0
  195. package/dist/backend/llvm/string-reads.js.map +1 -1
  196. package/dist/backend/llvm/walk-borrows.d.ts +3 -0
  197. package/dist/backend/llvm/walk-borrows.js +46 -41
  198. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  199. package/dist/backend/llvm/walkers.d.ts +3 -0
  200. package/dist/backend/llvm/walkers.js +88 -65
  201. package/dist/backend/llvm/walkers.js.map +1 -1
  202. package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
  203. package/dist/backend/llvm/wrapping-sums.js +126 -0
  204. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  205. package/dist/backend/may-throw.d.ts +8 -10
  206. package/dist/backend/may-throw.js +14 -10
  207. package/dist/backend/may-throw.js.map +1 -1
  208. package/dist/backend/native/contracts.d.ts +5 -0
  209. package/dist/backend/native/executable.js +7 -0
  210. package/dist/backend/native/executable.js.map +1 -1
  211. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  212. package/dist/backend/native/runtime-inputs.js +1 -0
  213. package/dist/backend/native/runtime-inputs.js.map +1 -1
  214. package/dist/backend/native-link-info-core.d.ts +4 -0
  215. package/dist/backend/native-link-info-core.js.map +1 -1
  216. package/dist/backend/publication.d.ts +12 -1
  217. package/dist/backend/publication.js +37 -14
  218. package/dist/backend/publication.js.map +1 -1
  219. package/dist/backend/publication.test.js +30 -0
  220. package/dist/backend/publication.test.js.map +1 -1
  221. package/dist/backend/result-slots.d.ts +16 -0
  222. package/dist/backend/result-slots.js +23 -0
  223. package/dist/backend/result-slots.js.map +1 -0
  224. package/dist/backend/runtime-abi.d.ts +2 -2
  225. package/dist/backend/runtime-abi.js +2 -2
  226. package/dist/backend/runtime-pack-core.d.ts +1 -0
  227. package/dist/backend/runtime-pack-core.js +1 -0
  228. package/dist/backend/runtime-pack-core.js.map +1 -1
  229. package/dist/backend/runtime-pack-targets.test.js +2 -1
  230. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  231. package/dist/backend/runtime-pack.test.js +2 -1
  232. package/dist/backend/runtime-pack.test.js.map +1 -1
  233. package/dist/backend/stack-observations.d.ts +2 -1
  234. package/dist/backend/stack-observations.js +67 -42
  235. package/dist/backend/stack-observations.js.map +1 -1
  236. package/dist/backend/target-diagnostics.js +5 -3
  237. package/dist/backend/target-diagnostics.js.map +1 -1
  238. package/dist/backend/warm-cache.js +1 -0
  239. package/dist/backend/warm-cache.js.map +1 -1
  240. package/dist/cli/usage.d.ts +1 -1
  241. package/dist/cli/usage.js +3 -3
  242. package/dist/compat/fetch-profile.js +1 -1
  243. package/dist/compat/fetch-profile.js.map +1 -1
  244. package/dist/contracts/check.js +4 -3
  245. package/dist/contracts/check.js.map +1 -1
  246. package/dist/contracts/int32-elements.js +10 -2
  247. package/dist/contracts/int32-elements.js.map +1 -1
  248. package/dist/coverage/report.js +12 -3
  249. package/dist/coverage/report.js.map +1 -1
  250. package/dist/diagnostics/diagnostic.d.ts +4 -0
  251. package/dist/diagnostics/diagnostic.js.map +1 -1
  252. package/dist/diagnostics/envelope.d.ts +3 -0
  253. package/dist/diagnostics/envelope.js +1 -0
  254. package/dist/diagnostics/envelope.js.map +1 -1
  255. package/dist/executable/executable-cache.d.ts +2 -0
  256. package/dist/executable/executable-cache.js +1 -0
  257. package/dist/executable/executable-cache.js.map +1 -1
  258. package/dist/executable/executable-cache.test.js +1 -0
  259. package/dist/executable/executable-cache.test.js.map +1 -1
  260. package/dist/frontend/decl-projection.d.ts +41 -0
  261. package/dist/frontend/decl-projection.js +854 -0
  262. package/dist/frontend/decl-projection.js.map +1 -0
  263. package/dist/frontend/decl-projection.test.d.ts +1 -0
  264. package/dist/frontend/decl-projection.test.js +30 -0
  265. package/dist/frontend/decl-projection.test.js.map +1 -0
  266. package/dist/frontend/dts-paths.d.ts +15 -0
  267. package/dist/frontend/dts-paths.js +25 -0
  268. package/dist/frontend/dts-paths.js.map +1 -1
  269. package/dist/frontend/input-tracker.d.ts +6 -0
  270. package/dist/frontend/input-tracker.js +51 -28
  271. package/dist/frontend/input-tracker.js.map +1 -1
  272. package/dist/frontend/input-tracker.test.js +19 -0
  273. package/dist/frontend/input-tracker.test.js.map +1 -1
  274. package/dist/frontend/lowering/array-values.js +100 -2
  275. package/dist/frontend/lowering/array-values.js.map +1 -1
  276. package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
  277. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  278. package/dist/frontend/lowering/builtins/child-process.js +13 -2
  279. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  280. package/dist/frontend/lowering/builtins/crypto.js +84 -9
  281. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
  283. package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
  284. package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
  285. package/dist/frontend/lowering/builtins/numbers.js +9 -1
  286. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
  288. package/dist/frontend/lowering/builtins/promises.js +88 -2
  289. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  290. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  291. package/dist/frontend/lowering/builtins/readline.js +35 -3
  292. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  293. package/dist/frontend/lowering/builtins/url.js +24 -1
  294. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  295. package/dist/frontend/lowering/builtins/webassembly.js +6 -3
  296. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  297. package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
  298. package/dist/frontend/lowering/class-callbacks.js +82 -12
  299. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  300. package/dist/frontend/lowering/class-construction.d.ts +4 -1
  301. package/dist/frontend/lowering/class-construction.js +17 -3
  302. package/dist/frontend/lowering/class-construction.js.map +1 -1
  303. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +39 -2
  304. package/dist/frontend/lowering/class-dynamic-dispatch.js +766 -108
  305. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  306. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
  307. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  308. package/dist/frontend/lowering/class-iterables.d.ts +2 -1
  309. package/dist/frontend/lowering/class-iterables.js +9 -1
  310. package/dist/frontend/lowering/class-iterables.js.map +1 -1
  311. package/dist/frontend/lowering/class-method-mutations.js +32 -9
  312. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  313. package/dist/frontend/lowering/class-prototypes.js +31 -2
  314. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  315. package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
  316. package/dist/frontend/lowering/class-runtime-statics.js +29 -4
  317. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  318. package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
  319. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  320. package/dist/frontend/lowering/coercions/structural.js +91 -1
  321. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  322. package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
  323. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  324. package/dist/frontend/lowering/containers/array-callbacks.js +338 -18
  325. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  326. package/dist/frontend/lowering/containers/array-concat.js +10 -0
  327. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  328. package/dist/frontend/lowering/containers/array-methods.js +15 -0
  329. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  330. package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
  331. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  332. package/dist/frontend/lowering/containers/bytes.js +2 -1
  333. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  334. package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
  335. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  336. package/dist/frontend/lowering/containers/collection-methods.js +7 -2
  337. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  338. package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
  339. package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
  340. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
  341. package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
  342. package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
  343. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  344. package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
  345. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  346. package/dist/frontend/lowering/containers/string-replacement.js +43 -19
  347. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  348. package/dist/frontend/lowering/dispatch-sites.js +15 -1
  349. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  350. package/dist/frontend/lowering/divergences.js +9 -1
  351. package/dist/frontend/lowering/divergences.js.map +1 -1
  352. package/dist/frontend/lowering/error-methods.js +47 -2
  353. package/dist/frontend/lowering/error-methods.js.map +1 -1
  354. package/dist/frontend/lowering/expressions/array-literals.js +47 -0
  355. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  356. package/dist/frontend/lowering/expressions/binary.js +36 -2
  357. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  358. package/dist/frontend/lowering/expressions/element-access.js +90 -13
  359. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  360. package/dist/frontend/lowering/expressions/identifiers.js +33 -4
  361. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  362. package/dist/frontend/lowering/expressions/narrowing.js +95 -1
  363. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  364. package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
  365. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  366. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  367. package/dist/frontend/lowering/expressions/object-literals.js +138 -51
  368. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  369. package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
  370. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  371. package/dist/frontend/lowering/expressions/property-access.js +113 -11
  372. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  373. package/dist/frontend/lowering/expressions/relational.js +212 -33
  374. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  375. package/dist/frontend/lowering/expressions/union-fields.js +4 -0
  376. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  377. package/dist/frontend/lowering/expressions/updates.js +22 -3
  378. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  379. package/dist/frontend/lowering/frozen-records.d.ts +28 -0
  380. package/dist/frontend/lowering/frozen-records.js +322 -0
  381. package/dist/frontend/lowering/frozen-records.js.map +1 -0
  382. package/dist/frontend/lowering/function-returns.js +49 -0
  383. package/dist/frontend/lowering/function-returns.js.map +1 -1
  384. package/dist/frontend/lowering/generic-functions.js +7 -2
  385. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  386. package/dist/frontend/lowering/iterable-values.d.ts +49 -0
  387. package/dist/frontend/lowering/iterable-values.js +297 -0
  388. package/dist/frontend/lowering/iterable-values.js.map +1 -0
  389. package/dist/frontend/lowering/iterator-adapters.js +186 -1
  390. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  391. package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
  392. package/dist/frontend/lowering/js-class-fields.js +45 -10
  393. package/dist/frontend/lowering/js-class-fields.js.map +1 -1
  394. package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
  395. package/dist/frontend/lowering/key-order-witness.js +770 -22
  396. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  397. package/dist/frontend/lowering/key-order-witness.test.js +428 -8
  398. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  399. package/dist/frontend/lowering/lower-async-iteration.js +4 -1
  400. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  401. package/dist/frontend/lowering/lower-calls.d.ts +7 -0
  402. package/dist/frontend/lowering/lower-calls.js +443 -41
  403. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  404. package/dist/frontend/lowering/lower-classes.d.ts +11 -2
  405. package/dist/frontend/lowering/lower-classes.js +302 -22
  406. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  407. package/dist/frontend/lowering/lower-dgram.js +3 -1
  408. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  409. package/dist/frontend/lowering/lower-exprs.js +10 -2
  410. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  411. package/dist/frontend/lowering/lower-functions.d.ts +11 -0
  412. package/dist/frontend/lowering/lower-functions.js +83 -0
  413. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  414. package/dist/frontend/lowering/lower-generators.js +41 -31
  415. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  416. package/dist/frontend/lowering/lower-global-value.js +6 -3
  417. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  418. package/dist/frontend/lowering/lower-inspect.js +18 -6
  419. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  420. package/dist/frontend/lowering/lower-modules.js +32 -0
  421. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  422. package/dist/frontend/lowering/lower-namespaces.js +5 -1
  423. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  424. package/dist/frontend/lowering/lower-server.js +2 -2
  425. package/dist/frontend/lowering/lower-server.js.map +1 -1
  426. package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
  427. package/dist/frontend/lowering/lower-stdlib.js +30 -0
  428. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  429. package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
  430. package/dist/frontend/lowering/lower-stmts.js +454 -48
  431. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  432. package/dist/frontend/lowering/lower-stream.d.ts +20 -2
  433. package/dist/frontend/lowering/lower-stream.js +1483 -156
  434. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  435. package/dist/frontend/lowering/lowerer.d.ts +77 -6
  436. package/dist/frontend/lowering/lowerer.js +313 -29
  437. package/dist/frontend/lowering/lowerer.js.map +1 -1
  438. package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
  439. package/dist/frontend/lowering/module-namespace-elements.js +82 -5
  440. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  441. package/dist/frontend/lowering/new-target.d.ts +12 -0
  442. package/dist/frontend/lowering/new-target.js +280 -0
  443. package/dist/frontend/lowering/new-target.js.map +1 -0
  444. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  445. package/dist/frontend/lowering/surfaces.js +18 -6
  446. package/dist/frontend/lowering/surfaces.js.map +1 -1
  447. package/dist/frontend/lowering/undefined-index.d.ts +27 -0
  448. package/dist/frontend/lowering/undefined-index.js +82 -0
  449. package/dist/frontend/lowering/undefined-index.js.map +1 -0
  450. package/dist/frontend/lowering/var-hoisting.js +29 -13
  451. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  452. package/dist/frontend/lowering/width-lift.d.ts +18 -0
  453. package/dist/frontend/npm-static-bundled-chunks.js +9 -11
  454. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  455. package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
  456. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  457. package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
  458. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  459. package/dist/frontend/npm-static.js +4 -20
  460. package/dist/frontend/npm-static.js.map +1 -1
  461. package/dist/frontend/package-shims.d.ts +3 -0
  462. package/dist/frontend/package-shims.js +71 -8
  463. package/dist/frontend/package-shims.js.map +1 -1
  464. package/dist/frontend/pipeline.js +18 -10
  465. package/dist/frontend/pipeline.js.map +1 -1
  466. package/dist/frontend/process-fork.d.ts +25 -0
  467. package/dist/frontend/process-fork.js +2 -0
  468. package/dist/frontend/process-fork.js.map +1 -0
  469. package/dist/frontend/program.d.ts +8 -1
  470. package/dist/frontend/program.js +484 -69
  471. package/dist/frontend/program.js.map +1 -1
  472. package/dist/frontend/program.test.js +43 -3
  473. package/dist/frontend/program.test.js.map +1 -1
  474. package/dist/frontend/token-equivalence.d.ts +3 -0
  475. package/dist/frontend/token-equivalence.js +409 -0
  476. package/dist/frontend/token-equivalence.js.map +1 -0
  477. package/dist/frontend/token-equivalence.test.d.ts +1 -0
  478. package/dist/frontend/token-equivalence.test.js +67 -0
  479. package/dist/frontend/token-equivalence.test.js.map +1 -0
  480. package/dist/frontend/ts7/ast-node.d.ts +22 -0
  481. package/dist/frontend/ts7/ast-node.js +1048 -103
  482. package/dist/frontend/ts7/ast-node.js.map +1 -1
  483. package/dist/frontend/ts7/ast-node.test.js +24 -0
  484. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  485. package/dist/frontend/ts7/ast-wire.d.ts +4 -3
  486. package/dist/frontend/ts7/ast-wire.js +34 -24
  487. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  488. package/dist/frontend/ts7/ast-wire.test.js +23 -0
  489. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  490. package/dist/frontend/ts7/checker-backend.d.ts +3 -4
  491. package/dist/frontend/ts7/checker-backend.js +2 -2
  492. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  493. package/dist/frontend/ts7/checker-backend.test.js +5 -9
  494. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  495. package/dist/frontend/ts7/checker.d.ts +4 -0
  496. package/dist/frontend/ts7/checker.js +7 -0
  497. package/dist/frontend/ts7/checker.js.map +1 -1
  498. package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
  499. package/dist/frontend/ts7/lib-diagnostics.js +307 -0
  500. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
  501. package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
  502. package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
  503. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
  504. package/dist/frontend/ts7/program-host.d.ts +7 -0
  505. package/dist/frontend/ts7/program-host.js +25 -2
  506. package/dist/frontend/ts7/program-host.js.map +1 -1
  507. package/dist/frontend/ts7/session.d.ts +14 -1
  508. package/dist/frontend/ts7/session.js +22 -0
  509. package/dist/frontend/ts7/session.js.map +1 -1
  510. package/dist/frontend/type-mapper.d.ts +13 -1
  511. package/dist/frontend/type-mapper.js +191 -11
  512. package/dist/frontend/type-mapper.js.map +1 -1
  513. package/dist/index.d.ts +0 -5
  514. package/dist/index.js +34 -4
  515. package/dist/index.js.map +1 -1
  516. package/dist/ir/analysis.js +5 -3
  517. package/dist/ir/analysis.js.map +1 -1
  518. package/dist/ir/array-length-stability.d.ts +4 -0
  519. package/dist/ir/array-length-stability.js +19 -6
  520. package/dist/ir/array-length-stability.js.map +1 -1
  521. package/dist/ir/array-length-stability.test.js +24 -0
  522. package/dist/ir/array-length-stability.test.js.map +1 -1
  523. package/dist/ir/builtin-effects.d.ts +7 -0
  524. package/dist/ir/builtin-effects.js +52 -0
  525. package/dist/ir/builtin-effects.js.map +1 -1
  526. package/dist/ir/builtin-signatures.d.ts +6 -4
  527. package/dist/ir/builtin-signatures.js +166 -13
  528. package/dist/ir/builtin-signatures.js.map +1 -1
  529. package/dist/ir/callback-specialization.d.ts +2 -1
  530. package/dist/ir/callback-specialization.js +23 -18
  531. package/dist/ir/callback-specialization.js.map +1 -1
  532. package/dist/ir/char-unit-locals.d.ts +19 -0
  533. package/dist/ir/char-unit-locals.js +185 -0
  534. package/dist/ir/char-unit-locals.js.map +1 -0
  535. package/dist/ir/char-unit-locals.test.d.ts +1 -0
  536. package/dist/ir/char-unit-locals.test.js +94 -0
  537. package/dist/ir/char-unit-locals.test.js.map +1 -0
  538. package/dist/ir/final-fields.d.ts +2 -1
  539. package/dist/ir/final-fields.js +14 -16
  540. package/dist/ir/final-fields.js.map +1 -1
  541. package/dist/ir/function-references.d.ts +2 -0
  542. package/dist/ir/function-references.js +2 -0
  543. package/dist/ir/function-references.js.map +1 -1
  544. package/dist/ir/function-references.test.js +3 -0
  545. package/dist/ir/function-references.test.js.map +1 -1
  546. package/dist/ir/initializer-bindings.d.ts +2 -1
  547. package/dist/ir/initializer-bindings.js +27 -20
  548. package/dist/ir/initializer-bindings.js.map +1 -1
  549. package/dist/ir/int32-arrays.d.ts +108 -0
  550. package/dist/ir/int32-arrays.js +831 -0
  551. package/dist/ir/int32-arrays.js.map +1 -0
  552. package/dist/ir/int32-slots.d.ts +24 -2
  553. package/dist/ir/int32-slots.js +259 -57
  554. package/dist/ir/int32-slots.js.map +1 -1
  555. package/dist/ir/integer-loops.d.ts +3 -3
  556. package/dist/ir/integer-loops.js +14 -6
  557. package/dist/ir/integer-loops.js.map +1 -1
  558. package/dist/ir/integer-loops.test.js +10 -0
  559. package/dist/ir/integer-loops.test.js.map +1 -1
  560. package/dist/ir/integer-ranges.d.ts +5 -0
  561. package/dist/ir/integer-ranges.js +125 -12
  562. package/dist/ir/integer-ranges.js.map +1 -1
  563. package/dist/ir/integer-ranges.test.js +30 -0
  564. package/dist/ir/integer-ranges.test.js.map +1 -1
  565. package/dist/ir/ir.d.ts +70 -7
  566. package/dist/ir/ir.js +58 -1
  567. package/dist/ir/ir.js.map +1 -1
  568. package/dist/ir/ir.test.js +21 -1
  569. package/dist/ir/ir.test.js.map +1 -1
  570. package/dist/ir/js-ic.d.ts +19 -2
  571. package/dist/ir/js-ic.js +95 -11
  572. package/dist/ir/js-ic.js.map +1 -1
  573. package/dist/ir/js-ic.test.js +188 -0
  574. package/dist/ir/js-ic.test.js.map +1 -1
  575. package/dist/ir/node-index.d.ts +57 -0
  576. package/dist/ir/node-index.js +215 -0
  577. package/dist/ir/node-index.js.map +1 -0
  578. package/dist/ir/paired-while-loops.d.ts +25 -0
  579. package/dist/ir/paired-while-loops.js +335 -0
  580. package/dist/ir/paired-while-loops.js.map +1 -0
  581. package/dist/ir/paired-while-loops.test.d.ts +1 -0
  582. package/dist/ir/paired-while-loops.test.js +163 -0
  583. package/dist/ir/paired-while-loops.test.js.map +1 -0
  584. package/dist/ir/parameter-versions.d.ts +25 -0
  585. package/dist/ir/parameter-versions.js +300 -0
  586. package/dist/ir/parameter-versions.js.map +1 -0
  587. package/dist/ir/runtime-features.d.ts +34 -13
  588. package/dist/ir/runtime-features.js +152 -38
  589. package/dist/ir/runtime-features.js.map +1 -1
  590. package/dist/ir/serialize.d.ts +12 -2
  591. package/dist/ir/serialize.js +16 -3
  592. package/dist/ir/serialize.js.map +1 -1
  593. package/dist/ir/serialize.test.js +17 -0
  594. package/dist/ir/serialize.test.js.map +1 -1
  595. package/dist/ir/traverse.js +18 -6
  596. package/dist/ir/traverse.js.map +1 -1
  597. package/dist/ir/validate.js +122 -36
  598. package/dist/ir/validate.js.map +1 -1
  599. package/dist/library/ir-policy.js +2 -0
  600. package/dist/library/ir-policy.js.map +1 -1
  601. package/dist/native/cache.d.ts +6 -1
  602. package/dist/native/cache.js +28 -5
  603. package/dist/native/cache.js.map +1 -1
  604. package/dist/native/cache.test.js +16 -2
  605. package/dist/native/cache.test.js.map +1 -1
  606. package/dist/native/cli.js +21 -1
  607. package/dist/native/cli.js.map +1 -1
  608. package/dist/native/compiler.js +8 -6
  609. package/dist/native/compiler.js.map +1 -1
  610. package/dist/native/executable-cache.d.ts +1 -1
  611. package/dist/native/executable-cache.js +2 -2
  612. package/dist/native/executable-cache.js.map +1 -1
  613. package/dist/native/prepare.d.ts +3 -1
  614. package/dist/native/prepare.js +119 -31
  615. package/dist/native/prepare.js.map +1 -1
  616. package/dist/native/prepare.test.js +78 -18
  617. package/dist/native/prepare.test.js.map +1 -1
  618. package/dist/native/sanitizer.test.js +2 -0
  619. package/dist/native/sanitizer.test.js.map +1 -1
  620. package/dist/native/text-file.d.ts +13 -3
  621. package/dist/native/text-file.js +63 -9
  622. package/dist/native/text-file.js.map +1 -1
  623. package/dist/native/text-file.test.d.ts +1 -0
  624. package/dist/native/text-file.test.js +49 -0
  625. package/dist/native/text-file.test.js.map +1 -0
  626. package/dist/native/toolchain.js +4 -4
  627. package/dist/native/toolchain.js.map +1 -1
  628. package/dist/native/toolchain.test.js +3 -3
  629. package/dist/native/toolchain.test.js.map +1 -1
  630. package/package.json +21 -21
  631. package/shims/chalk/v5.ts +688 -0
  632. package/shims/hono-node-server/v2.ts +645 -0
  633. package/shims/hot-shots/client.ts +1126 -0
  634. package/shims/hot-shots/v8-unix-dgram.ts +8 -0
  635. package/shims/hot-shots/v8.ts +8 -0
  636. package/surface-manifest.json +26 -4
@@ -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();
@@ -677,7 +749,20 @@ into) {
677
749
  case "fill":
678
750
  case "fillUndefined": {
679
751
  const args = e.args.map((arg) => host.emitExpr(arg));
680
- host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
752
+ // fill's range is its last two arguments; copyWithin's target,
753
+ // start and end are its three.
754
+ if (e.method === "copyWithin")
755
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 9, args[0].name, args[1].name, args[2].name);
756
+ else
757
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 8, args[args.length - 2].name, args[args.length - 1].name);
758
+ if (host.checkedFills.has(e)) {
759
+ // A new int32 array with checked stores, filled with a value that
760
+ // may not be an int32: widen it first then.
761
+ const filled = B.newLabel("arr.fill.kind");
762
+ host.emitCheckedInt32Store(r.name, args[0].name, e.args[0], filled);
763
+ B.br(filled);
764
+ B.startBlock(filled);
765
+ }
681
766
  const helper = e.method === "copyWithin"
682
767
  ? "scr_arr_copy_within"
683
768
  : e.method === "fillUndefined"
@@ -726,7 +811,7 @@ into) {
726
811
  // removes to the end (+Infinity, the slice convention).
727
812
  const start = host.emitExpr(e.args[0]);
728
813
  const cnt = e.args[1] ? host.emitExpr(e.args[1]).name : F64_INF;
729
- host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
814
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, cnt, f64Lit(0));
730
815
  host.declare(`declare ptr @scr_arr_splice(ptr, double, double)`);
731
816
  const t = B.tmp();
732
817
  B.line(`${t} = call ptr @scr_arr_splice(ptr ${r.name}, double ${start.name}, double ${cnt})`);
@@ -736,7 +821,12 @@ into) {
736
821
  const start = host.emitExpr(e.args[0]);
737
822
  const count = host.emitExpr(e.args[1]);
738
823
  const items = emitBorrowedInput(host, e.args[2]);
739
- host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
824
+ if (host.publishedTypes?.containerGuarded(e.receiver.type) === true) {
825
+ host.declare(`declare double @scr_arr_len(ptr)`);
826
+ const n = B.tmp();
827
+ B.line(`${n} = call double @scr_arr_len(ptr ${items.name})`);
828
+ host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, count.name, n);
829
+ }
740
830
  host.declare(`declare ptr @scr_arr_splice_insert(ptr, double, double, ptr)`);
741
831
  const t = B.tmp();
742
832
  B.line(`${t} = call ptr @scr_arr_splice_insert(ptr ${r.name}, double ${start.name}, double ${count.name}, ptr ${items.name})`);
@@ -823,7 +913,9 @@ function newCollection(host, key, value) {
823
913
  const kind = mapKeyKindNum(key, arms);
824
914
  const m = B.tmp();
825
915
  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)})`);
916
+ // SCR_MAP_VAL_CREF (3): string keys and compact values (compactMapValues).
917
+ const valKind = compactMapValues(host, key, value) ? 3 : mapValKindNum(value);
918
+ B.line(`${m} = call ptr @scr_map_new(i32 ${kind}, i32 ${valKind}, ptr ${collectionOps(host, key, value)})`);
827
919
  return m;
828
920
  }
829
921
  export function emitMapNew(host, e) {
@@ -870,6 +962,9 @@ export function emitMapLikeIntrinsic(host, e) {
870
962
  const key = receiverType.kind === "map" ? receiverType.key : receiverType.elem;
871
963
  const kAcc = mapKeyAccess(key);
872
964
  const kTy = mapKeyParamType(kAcc);
965
+ // The map keeps compact values in 16-byte entries (SCR_MAP_VAL_CREF).
966
+ const compact = receiverType.kind === "map" && compactMapValues(host, key, receiverType.value);
967
+ const layout = mapEntryLayout(key, compact);
873
968
  const method = e.method;
874
969
  // A published Map or Set rejects mutation (the guard precedes the
875
970
  // operands, which each method evaluates itself).
@@ -1025,7 +1120,7 @@ export function emitMapLikeIntrinsic(host, e) {
1025
1120
  raw = emitNumberMapGetRef(host, r.name, numberKey, value);
1026
1121
  }
1027
1122
  else if (stringKey !== null) {
1028
- raw = emitStringMapGetRef(host, r.name, stringKey, value);
1123
+ raw = emitStringMapGetRef(host, r.name, stringKey, value, compact);
1029
1124
  }
1030
1125
  else {
1031
1126
  host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
@@ -1098,7 +1193,7 @@ export function emitMapLikeIntrinsic(host, e) {
1098
1193
  return host.wrapNullable(raw, raw, value, valueTag, e.type, undefTag);
1099
1194
  }
1100
1195
  if (stringKey !== null && isRefCounted(value)) {
1101
- const raw = emitStringMapGetRef(host, r.name, stringKey, value);
1196
+ const raw = emitStringMapGetRef(host, r.name, stringKey, value, compact);
1102
1197
  return host.wrapNullable(raw, raw, value, valueTag, e.type, undefTag);
1103
1198
  }
1104
1199
  host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
@@ -1147,7 +1242,7 @@ export function emitMapLikeIntrinsic(host, e) {
1147
1242
  if (kAcc === "f64")
1148
1243
  return { name: emitNumberMapHas(host, r.name, k.name), type: e.type };
1149
1244
  if (kAcc === "str")
1150
- return { name: emitStringMapHas(host, r.name, k.name), type: e.type };
1245
+ return { name: emitStringMapHas(host, r.name, k.name, compact), type: e.type };
1151
1246
  host.declare(`declare zeroext i1 @scr_map_has_${kAcc}(ptr, ${kTy})`);
1152
1247
  const t = B.tmp();
1153
1248
  B.line(`${t} = call zeroext i1 @scr_map_has_${kAcc}(ptr ${r.name}, ${kTy} ${k.name})`);
@@ -1160,12 +1255,8 @@ export function emitMapLikeIntrinsic(host, e) {
1160
1255
  B.line(`${t} = call zeroext i1 @scr_map_delete_${kAcc}(ptr ${r.name}, ${kTy} ${k.name})`);
1161
1256
  return { name: t, type: e.type };
1162
1257
  }
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
- }
1258
+ case "size":
1259
+ return { name: emitMapSize(host, r.name), type: e.type };
1169
1260
  case "clear":
1170
1261
  host.declare(`declare void @scr_map_clear(ptr)`);
1171
1262
  B.line(`call void @scr_map_clear(ptr ${r.name})`);
@@ -1176,7 +1267,7 @@ export function emitMapLikeIntrinsic(host, e) {
1176
1267
  return { name: emitMapIterStart(host, r.name), type: e.type };
1177
1268
  case "iterLive": {
1178
1269
  const i = host.emitExpr(e.args[0]);
1179
- const entry = emitMapIterEntry(host, r.name, i.name, mapEntryLayout(key));
1270
+ const entry = emitMapIterEntry(host, r.name, i.name, layout);
1180
1271
  const t = B.tmp();
1181
1272
  B.line(`${t} = icmp ne ptr ${entry}, null`);
1182
1273
  return { name: t, type: e.type };
@@ -1187,7 +1278,7 @@ export function emitMapLikeIntrinsic(host, e) {
1187
1278
  if (kAcc !== "ref") {
1188
1279
  const retTy = kAcc === "f64" ? "double" : kAcc === "bool" ? "zeroext i1" : "ptr";
1189
1280
  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));
1281
+ const t = emitMapIterSlot(host, r.name, i.name, 0, kAcc === "str" ? "ref" : kAcc, key, { decl: `declare ${retTy} @${symbol}(ptr, double)`, symbol }, layout);
1191
1282
  return host.own({ name: t, type: e.type });
1192
1283
  }
1193
1284
  const retTy = "ptr";
@@ -1206,7 +1297,7 @@ export function emitMapLikeIntrinsic(host, e) {
1206
1297
  const t = emitMapIterSlot(host, r.name, i.name, 1, vAcc, receiverType.value, {
1207
1298
  decl: `declare ${vAcc === "bool" ? "zeroext i1" : retTy} @${symbol}(ptr, double)`,
1208
1299
  symbol,
1209
- }, mapEntryLayout(key));
1300
+ }, layout);
1210
1301
  return host.own({ name: t, type: e.type });
1211
1302
  }
1212
1303
  case "iterEnter":
@@ -1255,4 +1346,5 @@ export function emitSetNew(host, e) {
1255
1346
  }
1256
1347
  return out;
1257
1348
  }
1349
+ registerReplay("resolveThunkFor", (host, args) => resolveThunkFor(host, args[0]));
1258
1350
  //# sourceMappingURL=expr-containers.js.map