@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,17 +1,20 @@
1
1
  import { keyedHelperName } from "../stable-names.js";
2
- import { boolLit, dynUndefinedExpr, numLit, varRef } from "../../../ir/build.js";
2
+ import { allBytesArms, indexedUnionArms, lowerIndexedUnionMethod } from "../indexed-unions.js";
3
+ import { boolLit, dynUndefinedExpr, nodeThrowExpr, numLit, varRef } from "../../../ir/build.js";
3
4
  import { BUF_NUM_METHODS } from "./buffer-numeric-methods.js";
4
5
  import * as ts from "../../ts7/adapter.js";
6
+ import { constituentTypes } from "../../ts7/checker.js";
5
7
  import { BIGINT_T, BOOL, BYTES_ELEMENT_NAME, BYTES_U8, DYN, F64, STRING, UNDEFINED_T, VOID, arrayOf, bytesOf, funcOf, isUnitType, typeEquals, } from "../../../ir/ir.js";
6
8
  import { isJsSourceFile, locOf } from "../../program.js";
7
9
  import { stdlibGlobalNameOf } from "../surfaces.js";
8
- import { newFnCtx, own } from "../lowerer.js";
10
+ import { ENTRY_NAME, newFnCtx, own } from "../lowerer.js";
11
+ import { everyStmt } from "../../../ir/traverse.js";
9
12
  import { buildBytesSortFn, closureKeyOrder } from "../lower-array-sort.js";
10
13
  import { isSafeToDiscard } from "../expressions/evaluation-safety.js";
11
14
  import { lowerDynObjectLiteral } from "../expressions/object-literals.js";
12
15
  import { defaultAfterUndefined, lowerOptionalArgument, lowerStaticallyUndefinedArgument, } from "../optional-arguments.js";
13
16
  import { lowerArraySpreadItems, lowerCheckedArrayFrom } from "./array-construction.js";
14
- import { lowerToNumberArgument } from "../lower-exprs.js";
17
+ import { lowerOptionalNumber, lowerToNumberArgument } from "../lower-exprs.js";
15
18
  import { lowerBytesIteratorValue } from "../iterator-adapters.js";
16
19
  import { lowerArrayCallback } from "./callback-arguments.js";
17
20
  import { callbackSite, findPredicateOk, predicateToBoolean } from "./array-callbacks.js";
@@ -726,6 +729,109 @@ function lowerDataViewNew(lowerer, expr) {
726
729
  lowerer.noLowering("DataView constructor argument count", expr);
727
730
  return lowerArrayBufferView(lowerer, args, "dv", locOf(expr));
728
731
  }
732
+ /** `receiver.set(src, offset?)` on a lowered typed-array receiver. */
733
+ function bytesSetIntrinsic(lowerer, receiver, argNodes, loc) {
734
+ const src = lowerer.lowerExpr(argNodes[0]);
735
+ const method = src.type.kind === "bytes" ? "setFrom" : "setFromDyn";
736
+ const args = [src.type.kind === "bytes" ? src : lowerer.coerceInto(argNodes[0], src, DYN)];
737
+ if (argNodes.length === 2)
738
+ args.push(lowerOptionalArgument(lowerer, argNodes[1], F64, {
739
+ kind: "numLit",
740
+ value: 0,
741
+ type: F64,
742
+ loc,
743
+ }));
744
+ return { kind: "bytesIntrinsic", method, receiver, args, type: VOID, loc };
745
+ }
746
+ /** `Uint8Array.prototype.set.call(target, src, offset?)`, through any typed
747
+ * array constructor's prototype (they share %TypedArray%.prototype.set). A
748
+ * target the checker types as a typed array or Buffer lowers like
749
+ * `target.set(src, offset)`. Any other target, a DataView included, is
750
+ * checked at run time: a typed array calls its `set`, and
751
+ * anything else throws Node's TypeError "this is not a typed array.",
752
+ * after every argument is evaluated. */
753
+ export function lowerBytesPrototypeSetCall(lowerer, call, access) {
754
+ if (call.questionDotToken ||
755
+ access.questionDotToken ||
756
+ access.name.text !== "call" ||
757
+ !ts.isPropertyAccessExpression(access.expression))
758
+ return null;
759
+ const method = access.expression;
760
+ const proto = method.expression;
761
+ if (method.questionDotToken ||
762
+ method.name.text !== "set" ||
763
+ !ts.isPropertyAccessExpression(proto) ||
764
+ proto.questionDotToken ||
765
+ proto.name.text !== "prototype" ||
766
+ !ts.isIdentifier(proto.expression) ||
767
+ !lowerer.isStdlibMember(method))
768
+ return null;
769
+ const ctor = lowerer.resolveValueSymbol(proto.expression);
770
+ if (!ctor || !lowerer.isStdlibSymbol(ctor) || !own(BYTES_CTORS, ts.symbolName(ctor)))
771
+ return null;
772
+ const argNodes = call.arguments.nodes;
773
+ if (argNodes.length < 2 || argNodes.length > 3 || argNodes.some(ts.isSpreadElement))
774
+ return null;
775
+ const loc = locOf(call);
776
+ const target = lowerer.lowerExpr(argNodes[0]);
777
+ // A DataView lowers to the same bytes type, so the checker type decides:
778
+ // only a typed array (or a Buffer) takes the method's path.
779
+ const targetSymbol = lowerer.typeOf(argNodes[0]).getSymbol();
780
+ if (target.type.kind === "bytes" &&
781
+ targetSymbol !== undefined &&
782
+ lowerer.isStdlibSymbol(targetSymbol) &&
783
+ (own(BYTES_CTORS, ts.symbolName(targetSymbol)) !== undefined ||
784
+ ts.symbolName(targetSymbol) === "Buffer"))
785
+ return bytesSetIntrinsic(lowerer, target, argNodes.slice(1), loc);
786
+ const slot = (value) => {
787
+ const local = lowerer.declareHiddenLocal("%setArg", DYN);
788
+ return {
789
+ decl: { kind: "varDecl", localId: local.id, init: value, loc },
790
+ read: varRef(local.id, DYN, loc),
791
+ };
792
+ };
793
+ const slots = [
794
+ slot(lowerer.coerceInto(argNodes[0], target, DYN)),
795
+ ...argNodes.slice(1).map((arg) => slot(lowerer.lowerExprExpecting(arg, DYN))),
796
+ ];
797
+ const isTypedArray = {
798
+ kind: "libCall",
799
+ fn: "util.typeIs",
800
+ args: [slots[0].read, { kind: "strLit", value: "isTypedArray", type: STRING, loc }],
801
+ type: BOOL,
802
+ loc,
803
+ };
804
+ return {
805
+ kind: "seqExpr",
806
+ stmts: [
807
+ ...slots.map((s) => s.decl),
808
+ {
809
+ kind: "if",
810
+ cond: { kind: "unary", op: "!", operand: isTypedArray, type: BOOL, loc },
811
+ then: [
812
+ {
813
+ kind: "exprStmt",
814
+ expr: nodeThrowExpr(1, "", "this is not a typed array.", VOID, loc),
815
+ loc,
816
+ },
817
+ ],
818
+ else_: null,
819
+ loc,
820
+ },
821
+ ],
822
+ result: {
823
+ kind: "dynInvoke",
824
+ recv: slots[0].read,
825
+ method: "set",
826
+ calleeName: ts.getTextOfNode(method),
827
+ args: slots.slice(1).map((s) => s.read),
828
+ type: DYN,
829
+ loc,
830
+ },
831
+ type: DYN,
832
+ loc,
833
+ };
834
+ }
729
835
  /** Method calls on typed-array/Buffer receivers: slice (copy), subarray
730
836
  * (shared view), toReversed, copyWithin, set(src,
731
837
  * offset?), and the u8-only Buffer surface: toString(enc?) plus the
@@ -733,11 +839,131 @@ function lowerDataViewNew(lowerer, expr) {
733
839
  * variable-width read/writeUIntLE quartet — BUF_NUM_METHODS). Everything
734
840
  * else the lib declares (fill, indexOf, reverse, ...) falls through to
735
841
  * the SC2020 member fence. Null when this isn't a bytes method call. */
842
+ /** The [needle, fromIndex] arguments of TypedArray indexOf, lastIndexOf
843
+ * and includes. A present fromIndex converts even when it is undefined
844
+ * (NaN, which ToIntegerOrInfinity makes 0); an absent one is 0, or
845
+ * +Infinity for lastIndexOf, which starts at the last element. */
846
+ function elementSearchArgs(lowerer, call, name) {
847
+ const nodes = call.arguments.nodes;
848
+ const loc = locOf(call);
849
+ const needle = lowerer.lowerExprExpecting(nodes[0], F64);
850
+ const from = nodes[1]
851
+ ? lowerOptionalNumber(lowerer, lowerer.lowerExpr(nodes[1]), locOf(nodes[1]), nodes[1])
852
+ : {
853
+ kind: "numLit",
854
+ value: name === "lastIndexOf" ? Infinity : 0,
855
+ type: F64,
856
+ loc,
857
+ };
858
+ // An undefined fromIndex is NaN once converted, which starts at 0.
859
+ if (from.kind === "unitLit")
860
+ return [needle, { kind: "numLit", value: NaN, type: F64, loc }];
861
+ if (from.type.kind === "undefinedT" || from.type.kind === "void")
862
+ return [
863
+ needle,
864
+ {
865
+ kind: "seqExpr",
866
+ stmts: [{ kind: "exprStmt", expr: from, loc }],
867
+ result: { kind: "numLit", value: NaN, type: F64, loc },
868
+ type: F64,
869
+ loc,
870
+ },
871
+ ];
872
+ if (from.type.kind !== "f64")
873
+ lowerer.noLowering(`.${name} with a non-number fromIndex`, call);
874
+ return [needle, from];
875
+ }
876
+ const ELEMENT_SEARCHES = {
877
+ indexOf: "indexOfElem",
878
+ lastIndexOf: "lastIndexOfElem",
879
+ includes: "includesElem",
880
+ };
881
+ /** Whether a union has a Buffer arm, under any alias name: each arm's own
882
+ * symbol names it. */
883
+ function hasBufferArm(type) {
884
+ const arms = type.flags & ts.TypeFlags.Union ? constituentTypes(type) : [type];
885
+ return arms.some((arm) => {
886
+ const symbol = arm.getSymbol();
887
+ return symbol !== undefined && ts.symbolName(symbol) === "Buffer";
888
+ });
889
+ }
890
+ /** The element-kind-generic typed-array methods on a union of typed
891
+ * arrays (indexed-unions.ts): the arguments lower as for one typed array,
892
+ * and each arm runs the method on its own receiver. Null for the methods
893
+ * that need a narrowing to one kind first. */
894
+ function lowerUnionBytesMethodCall(lowerer, call, access, name) {
895
+ if (isJsSourceFile(ts.getSourceFileOfNode(call)))
896
+ return null;
897
+ // A Buffer arm's methods differ from a typed array's (slice aliases, fill
898
+ // checks its range, searches take strings and wrap numbers), so such a
899
+ // union narrows to its arms first.
900
+ if (hasBufferArm(lowerer.typeOf(access.expression)))
901
+ return null;
902
+ const nodes = call.arguments.nodes;
903
+ if (nodes.some(ts.isSpreadElement))
904
+ return null;
905
+ const loc = locOf(call);
906
+ const num = (value) => ({ kind: "numLit", value, type: F64, loc });
907
+ const optional = (i, fallback, type = F64) => nodes[i] ? lowerOptionalArgument(lowerer, nodes[i], type, fallback) : fallback;
908
+ let method;
909
+ let args;
910
+ let result;
911
+ if ((name === "slice" || name === "subarray") && nodes.length <= 2) {
912
+ method = name;
913
+ args = () => [optional(0, num(0)), optional(1, num(Infinity))];
914
+ result = "receiver";
915
+ }
916
+ else if (name === "fill" && nodes.length <= 3) {
917
+ method = "fillElem";
918
+ args = () => [optional(0, num(0)), optional(1, num(0)), optional(2, num(Infinity))];
919
+ result = "receiver";
920
+ }
921
+ else if (name === "copyWithin" && nodes.length <= 3) {
922
+ method = "copyWithin";
923
+ args = () => [optional(0, num(0)), optional(1, num(0)), optional(2, num(Infinity))];
924
+ result = "receiver";
925
+ }
926
+ else if (name === "toReversed" && nodes.length === 0) {
927
+ method = "toReversed";
928
+ args = () => [];
929
+ result = "receiver";
930
+ }
931
+ else if (Object.hasOwn(ELEMENT_SEARCHES, name) && (nodes.length === 1 || nodes.length === 2)) {
932
+ method = ELEMENT_SEARCHES[name];
933
+ args = () => elementSearchArgs(lowerer, call, name);
934
+ result = name === "includes" ? BOOL : F64;
935
+ }
936
+ else if (name === "join" && nodes.length <= 1) {
937
+ method = "join";
938
+ args = () => [optional(0, { kind: "strLit", value: ",", type: STRING, loc }, STRING)];
939
+ result = STRING;
940
+ }
941
+ else if (name === "set" && (nodes.length === 1 || nodes.length === 2)) {
942
+ const source = lowerer.mapTypeOf(lowerer.typeOf(nodes[0]));
943
+ method = source?.kind === "bytes" ? "setFrom" : "setFromDyn";
944
+ args = () => {
945
+ const src = lowerer.lowerExpr(nodes[0]);
946
+ const first = src.type.kind === "bytes" ? src : lowerer.coerceInto(nodes[0], src, DYN);
947
+ return nodes.length === 2 ? [first, optional(1, num(0))] : [first];
948
+ };
949
+ result = VOID;
950
+ }
951
+ else
952
+ return null;
953
+ const receiver = lowerer.lowerExpr(access.expression);
954
+ const arms = indexedUnionArms(lowerer, receiver.type);
955
+ if (!arms || !allBytesArms(arms))
956
+ return null;
957
+ return lowerIndexedUnionMethod(lowerer, receiver, arms, method, args(), result, loc);
958
+ }
736
959
  export function lowerBytesMethodCall(lowerer, call, access) {
737
960
  if (lowerer.chainBlocked(access, call))
738
961
  return null;
739
962
  const name = access.name.text;
740
963
  const receiverIr = lowerer.mapTypeOf(lowerer.typeOf(access.expression));
964
+ const unionArms = receiverIr ? indexedUnionArms(lowerer, receiverIr) : null;
965
+ if (unionArms && allBytesArms(unionArms) && lowerer.isStdlibMember(access))
966
+ return lowerUnionBytesMethodCall(lowerer, call, access, name);
741
967
  if (receiverIr?.kind !== "bytes")
742
968
  return null;
743
969
  if (!lowerer.isStdlibMember(access))
@@ -780,6 +1006,25 @@ export function lowerBytesMethodCall(lowerer, call, access) {
780
1006
  return value;
781
1007
  }
782
1008
  }
1009
+ // TypedArray indexOf / lastIndexOf / includes (the Buffer-declared forms,
1010
+ // which also take string and Buffer needles, lowered above).
1011
+ if (Object.hasOwn(ELEMENT_SEARCHES, name) &&
1012
+ !lowerer.checker
1013
+ .getSymbolAtLocation(access.name)
1014
+ ?.declarations.some((d) => ts.isInterfaceDeclaration(d.parent) && d.parent.name.text === "Buffer")) {
1015
+ if (nArgs < 1 || nArgs > 2 || call.arguments.nodes.some(ts.isSpreadElement)) {
1016
+ lowerer.noLowering(`.${name} with ${nArgs} arguments on typed arrays`, call);
1017
+ }
1018
+ const receiver = lowerer.lowerExprExpecting(access.expression, receiverIr);
1019
+ return {
1020
+ kind: "bytesIntrinsic",
1021
+ method: ELEMENT_SEARCHES[name],
1022
+ receiver,
1023
+ args: elementSearchArgs(lowerer, call, name),
1024
+ type: name === "includes" ? BOOL : F64,
1025
+ loc,
1026
+ };
1027
+ }
783
1028
  if (name === "toReversed") {
784
1029
  if (nArgs !== 0) {
785
1030
  lowerer.noLowering(`.toReversed with ${nArgs} arguments on typed arrays`, call);
@@ -906,19 +1151,7 @@ export function lowerBytesMethodCall(lowerer, call, access) {
906
1151
  lowerer.noLowering(`.set with ${nArgs} arguments on typed arrays`, call);
907
1152
  }
908
1153
  const receiver = lowerer.lowerExprExpecting(access.expression, receiverIr);
909
- const src = lowerer.lowerExpr(call.arguments.nodes[0]);
910
- const method = src.type.kind === "bytes" ? "setFrom" : "setFromDyn";
911
- const args = [
912
- src.type.kind === "bytes" ? src : lowerer.coerceInto(call.arguments.nodes[0], src, DYN),
913
- ];
914
- if (nArgs === 2)
915
- args.push(lowerOptionalArgument(lowerer, call.arguments.nodes[1], F64, {
916
- kind: "numLit",
917
- value: 0,
918
- type: F64,
919
- loc,
920
- }));
921
- return { kind: "bytesIntrinsic", method, receiver, args, type: VOID, loc };
1154
+ return bytesSetIntrinsic(lowerer, receiver, call.arguments.nodes, loc);
922
1155
  }
923
1156
  if (name === "toString") {
924
1157
  // Buffer's toString(encoding?) — utf8 by default. A 0-arg toString
@@ -1055,6 +1288,8 @@ export function lowerBytesMethodCall(lowerer, call, access) {
1055
1288
  if (receiverIr.elem !== "u8") {
1056
1289
  lowerer.noLowering(`.${name} on a '${lowerer.fmt(receiverIr)}'`, call, "the numeric families read/write Buffer bytes");
1057
1290
  }
1291
+ if (!numericArguments(lowerer, call))
1292
+ return dynNumericCall(lowerer, call, access, name, receiverIr, loc);
1058
1293
  const write = name.startsWith("write");
1059
1294
  const required = write ? 1 : 0; // value; offset defaults to 0
1060
1295
  if (nArgs < required || nArgs > required + 1) {
@@ -1196,7 +1431,8 @@ const BUF_ENCODINGS = {
1196
1431
  * does not know — the ladder callers (stream options) turn unknown
1197
1432
  * literals into Node's runtime ERR_UNKNOWN_ENCODING throw. */
1198
1433
  export function knownBufEncoding(name) {
1199
- return own(BUF_ENCODINGS, name);
1434
+ // Buffer.isEncoding: any letter case
1435
+ return own(BUF_ENCODINGS, name) ?? own(BUF_ENCODINGS, name.toLowerCase());
1200
1436
  }
1201
1437
  /** The literal encoding argument of a Buffer surface, normalized — or a
1202
1438
  * fence when it isn't a literal alias Node knows. */
@@ -1222,6 +1458,30 @@ const BUF_BIGINT_METHODS = {
1222
1458
  writeBigUint64BE: { sign: false, le: false },
1223
1459
  writeBigUint64LE: { sign: false, le: true },
1224
1460
  };
1461
+ /** Whether every argument of a numeric read/write is statically a number. */
1462
+ function numericArguments(lowerer, call) {
1463
+ return call.arguments.nodes.every((a) => lowerer.mapTypeOf(lowerer.typeOf(a))?.kind === "f64");
1464
+ }
1465
+ /** A numeric read/write with an argument that is not a number (a string
1466
+ * offset from untyped JavaScript): the checked-dynamic Buffer method runs
1467
+ * Node's argument validation at runtime. */
1468
+ function dynNumericCall(lowerer, call, access, name, receiverIr, loc) {
1469
+ const receiver = lowerer.lowerExprExpecting(access.expression, receiverIr);
1470
+ return {
1471
+ kind: "dynCheck",
1472
+ value: {
1473
+ kind: "dynInvoke",
1474
+ recv: { kind: "dynFrom", value: receiver, type: DYN, loc, liveRef: true },
1475
+ method: name,
1476
+ calleeName: ts.getTextOfNode(access),
1477
+ args: call.arguments.nodes.map((a) => lowerer.lowerExprExpecting(a, DYN)),
1478
+ type: DYN,
1479
+ loc,
1480
+ },
1481
+ type: F64,
1482
+ loc,
1483
+ };
1484
+ }
1225
1485
  /** The variable-width quartet (offset + byteLength) → sign/endian token. */
1226
1486
  const BUF_NUM_VAR_METHODS = {
1227
1487
  readUIntBE: "ube",
@@ -1564,7 +1824,7 @@ function knownBufferProducer(lowerer, source, seen = new Set()) {
1564
1824
  * or empty encoding and throws ERR_UNKNOWN_ENCODING for an unknown name; an
1565
1825
  * ArrayBuffer takes the second argument as its byte offset; other sources
1566
1826
  * ignore it. */
1567
- function dynBufferFromParts(source, encoding, loc) {
1827
+ function dynBufferFromParts(source, encoding, loc, length) {
1568
1828
  const utf8 = { kind: "strLit", value: "utf8", type: STRING, loc };
1569
1829
  const isString = (x) => ({
1570
1830
  kind: "dynTest",
@@ -1605,19 +1865,39 @@ function dynBufferFromParts(source, encoding, loc) {
1605
1865
  type: BYTES_U8,
1606
1866
  loc,
1607
1867
  },
1608
- // An ArrayBuffer takes the second argument as its byte offset
1609
- // (scr_buffer_from_dyn_offset_pooled); other values convert with utf8.
1610
- else_: {
1611
- kind: "libCall",
1612
- fn: "buffer.poolFromDynOffset",
1613
- args: [source, encoding],
1614
- type: BYTES_U8,
1615
- loc,
1616
- },
1868
+ // An ArrayBuffer takes the second argument as its byte offset and the
1869
+ // third as its length (scr_buffer_from_dyn_range_pooled); other values
1870
+ // convert with utf8.
1871
+ else_: length
1872
+ ? {
1873
+ kind: "libCall",
1874
+ fn: "buffer.poolFromDynRange",
1875
+ args: [source, encoding, length],
1876
+ type: BYTES_U8,
1877
+ loc,
1878
+ }
1879
+ : {
1880
+ kind: "libCall",
1881
+ fn: "buffer.poolFromDynOffset",
1882
+ args: [source, encoding],
1883
+ type: BYTES_U8,
1884
+ loc,
1885
+ },
1617
1886
  type: BYTES_U8,
1618
1887
  loc,
1619
1888
  };
1620
1889
  }
1890
+ /** Buffer.from(arrayBuffer, byteOffset[, length]): each argument in order
1891
+ * as a checked-dynamic value, read by the runtime as Node's
1892
+ * fromArrayBuffer reads them. */
1893
+ function bufferFromArrayBufferRange(lowerer, args, loc, first) {
1894
+ const operands = [0, 1, 2].map((i) => i === 0 && first
1895
+ ? first
1896
+ : args[i]
1897
+ ? lowerer.lowerExprExpecting(args[i], DYN)
1898
+ : dynUndefinedExpr(loc));
1899
+ return { kind: "libCall", fn: "buffer.poolFromDynRange", args: operands, type: BYTES_U8, loc };
1900
+ }
1621
1901
  /** Lowers `source` and `encNode` (or undefined) into hidden dyn locals, in
1622
1902
  * source order, and builds the result from their references. */
1623
1903
  function withDynBufferArguments(lowerer, source, encNode, loc, build) {
@@ -1650,30 +1930,37 @@ function dynBufferFromRuntimeEncoding(lowerer, value, encNode, loc) {
1650
1930
  return null;
1651
1931
  return withDynBufferArguments(lowerer, value, encNode, loc, (source, encoding) => dynBufferFromParts(source, encoding, loc));
1652
1932
  }
1653
- /** The deprecated `new Buffer(arg[, encoding])` in a dependency's
1654
- * JavaScript, through the global or an alias of it (buffer-crc32 and yazl
1655
- * keep it as the fallback for runtimes without Buffer.alloc/Buffer.from).
1656
- * Node never emits DEP0005 for calls from node_modules, so the construction
1657
- * is exactly Node's: a number allocates zero-filled bytes (and throws
1658
- * ERR_INVALID_ARG_TYPE beside a string second argument), anything else
1659
- * converts as Buffer.from does. Null elsewhere: other callers owe the
1660
- * deprecation warning. */
1661
- export function lowerNodeModulesBufferConstruct(lowerer, expr) {
1662
- const sf = expr.getSourceFile();
1663
- if (!isJsSourceFile(sf) || !/[\\/]node_modules[\\/]/.test(sf.fileName))
1933
+ /** The deprecated `Buffer(arg[, encodingOrOffset[, length]])`, called or
1934
+ * constructed through the global or an alias of it, as Node's Buffer
1935
+ * function runs it: the arguments evaluate in order, DEP0005 is reported
1936
+ * on the next tick (once, and never for a call made from node_modules,
1937
+ * which only counts toward Node's 10000-call check), then a number
1938
+ * allocates zero-filled bytes (and throws ERR_INVALID_ARG_TYPE beside a
1939
+ * string second argument) and anything else converts as Buffer.from does.
1940
+ * Null for spread arguments and more than three. */
1941
+ export function lowerBufferConstruct(lowerer, expr) {
1942
+ if (ts.isCallExpression(expr) && expr.questionDotToken)
1664
1943
  return null;
1665
1944
  const args = expr.arguments?.nodes ?? [];
1666
- if (args.length < 1 || args.length > 2 || args.some(ts.isSpreadElement))
1945
+ if (args.length > 3 || args.some(ts.isSpreadElement))
1667
1946
  return null;
1668
1947
  if (stdlibGlobalNameOf(lowerer, expr.expression) !== "Buffer")
1669
1948
  return null;
1670
1949
  const loc = locOf(expr);
1671
- const value = withDynBufferArguments(lowerer, lowerer.lowerExpr(args[0]), args[1], loc, (source, encoding) => ({
1950
+ const locals = [0, 1, 2].slice(0, Math.max(args.length, 2)).map((i) => {
1951
+ const local = lowerer.declareHiddenLocal("%bufferArgument", DYN);
1952
+ const node = args[i];
1953
+ const init = node === undefined ? dynUndefinedExpr(loc) : lowerer.lowerExprExpecting(node, DYN);
1954
+ return { local, init };
1955
+ });
1956
+ const [source, second, third] = locals.map(({ local }) => varRef(local.id, DYN, loc));
1957
+ const inNodeModules = /[\\/]node_modules[\\/]/.test(expr.getSourceFile().fileName);
1958
+ const value = {
1672
1959
  kind: "ternary",
1673
1960
  cond: { kind: "dynTest", test: "number", value: source, type: BOOL, loc },
1674
1961
  then: {
1675
1962
  kind: "ternary",
1676
- cond: { kind: "dynTest", test: "string", value: encoding, type: BOOL, loc },
1963
+ cond: { kind: "dynTest", test: "string", value: second, type: BOOL, loc },
1677
1964
  then: { kind: "libCall", fn: "buffer.newStringFail", args: [source], type: BYTES_U8, loc },
1678
1965
  else_: {
1679
1966
  kind: "libCall",
@@ -1685,11 +1972,35 @@ export function lowerNodeModulesBufferConstruct(lowerer, expr) {
1685
1972
  type: BYTES_U8,
1686
1973
  loc,
1687
1974
  },
1688
- else_: dynBufferFromParts(source, encoding, loc),
1975
+ else_: dynBufferFromParts(source, second, loc, third),
1689
1976
  type: BYTES_U8,
1690
1977
  loc,
1691
- }));
1692
- return { kind: "libCall", fn: "buffer.brand", args: [value], type: BYTES_U8, loc };
1978
+ };
1979
+ return {
1980
+ kind: "seqExpr",
1981
+ stmts: [
1982
+ ...locals.map(({ local, init }) => ({
1983
+ kind: "varDecl",
1984
+ localId: local.id,
1985
+ init,
1986
+ loc,
1987
+ })),
1988
+ {
1989
+ kind: "exprStmt",
1990
+ expr: {
1991
+ kind: "libCall",
1992
+ fn: inNodeModules ? "buffer.deprecationCount" : "buffer.deprecation",
1993
+ args: [],
1994
+ type: VOID,
1995
+ loc,
1996
+ },
1997
+ loc,
1998
+ },
1999
+ ],
2000
+ result: { kind: "libCall", fn: "buffer.brand", args: [value], type: BYTES_U8, loc },
2001
+ type: BYTES_U8,
2002
+ loc,
2003
+ };
1693
2004
  }
1694
2005
  /** Buffer.from(array or bytes, extra): Node copies an array-like source and
1695
2006
  * ignores the encoding/offset argument (yazl passes its `encoding` through
@@ -1736,7 +2047,18 @@ function lowerBufferStaticValue(lowerer, call, access) {
1736
2047
  !args.some(ts.isSpreadElement) &&
1737
2048
  ((symbol) => symbol != null &&
1738
2049
  (ts.symbolName(symbol) === "ArrayBuffer" || ts.symbolName(symbol) === "SharedArrayBuffer"))(lowerer.typeOf(args[0]).getSymbol())) {
1739
- return lowerArrayBufferView(lowerer, args, "u8", loc);
2050
+ // A byte offset or length follows Node's fromArrayBuffer (its
2051
+ // conversions and ERR_BUFFER_OUT_OF_BOUNDS), not the typed-array view.
2052
+ if (args.length === 1)
2053
+ return lowerArrayBufferView(lowerer, args, "u8", loc);
2054
+ return bufferFromArrayBufferRange(lowerer, args, loc);
2055
+ }
2056
+ // Buffer.from(value, byteOffset, length) over an untyped value: an
2057
+ // ArrayBuffer's range, or the two-argument conversion of other values.
2058
+ if (args.length === 3 && !args.some(ts.isSpreadElement)) {
2059
+ const first = lowerer.lowerExpr(args[0]);
2060
+ if (first.type.kind === "dyn")
2061
+ return bufferFromArrayBufferRange(lowerer, args, loc, first);
1740
2062
  }
1741
2063
  // Buffer.from(x.buffer[, byteOffset[, length]]): a u8 VIEW sharing
1742
2064
  // x's storage (Node shares the ArrayBuffer; length is in BYTES).
@@ -2131,8 +2453,95 @@ function lowerBufferStaticValue(lowerer, call, access) {
2131
2453
  const s = lowerer.lowerExprExpecting(args[0], STRING);
2132
2454
  return { kind: "libCall", fn: "buffer.isEncoding", args: [s], type: BOOL, loc };
2133
2455
  }
2134
- lowerer.noLowering("Buffer.isEncoding with this argument shape", call, "one string-typed argument is the lowered form");
2456
+ // Any other single argument: Node answers false for non-strings.
2457
+ if (args.length === 1 && !ts.isSpreadElement(args[0])) {
2458
+ const value = lowerer.declareHiddenLocal("%bufferEncoding", DYN);
2459
+ const ref = varRef(value.id, DYN, loc);
2460
+ return {
2461
+ kind: "seqExpr",
2462
+ stmts: [
2463
+ {
2464
+ kind: "varDecl",
2465
+ localId: value.id,
2466
+ init: lowerer.lowerExprExpecting(args[0], DYN),
2467
+ loc,
2468
+ },
2469
+ ],
2470
+ result: {
2471
+ kind: "logical",
2472
+ op: "&&",
2473
+ left: { kind: "dynTest", test: "string", value: ref, type: BOOL, loc },
2474
+ right: {
2475
+ kind: "libCall",
2476
+ fn: "buffer.isEncoding",
2477
+ args: [{ kind: "dynCheck", value: ref, type: STRING, loc }],
2478
+ type: BOOL,
2479
+ loc,
2480
+ },
2481
+ type: BOOL,
2482
+ loc,
2483
+ },
2484
+ type: BOOL,
2485
+ loc,
2486
+ };
2487
+ }
2488
+ lowerer.noLowering("Buffer.isEncoding with this argument shape", call, "one argument is the lowered form");
2135
2489
  }
2136
2490
  return null; // of, copyBytesFrom, ... → the SC2020 member fence
2137
2491
  }
2492
+ /** `Buffer.prototype.<name>` or `Buffer.prototype[key]` read in JavaScript
2493
+ * (smart-buffer's `typeof Buffer.prototype[method]` probe): the member as
2494
+ * scr_buffer_prototype_member answers it. Null for other expressions. */
2495
+ export function lowerBufferPrototypeMember(lowerer, expr) {
2496
+ if (expr.questionDotToken || !isJsSourceFile(expr.getSourceFile()))
2497
+ return null;
2498
+ const receiver = expr.expression;
2499
+ if (!ts.isPropertyAccessExpression(receiver) ||
2500
+ receiver.questionDotToken ||
2501
+ receiver.name.text !== "prototype" ||
2502
+ stdlibGlobalNameOf(lowerer, receiver.expression) !== "Buffer")
2503
+ return null;
2504
+ const loc = locOf(expr);
2505
+ const key = ts.isPropertyAccessExpression(expr)
2506
+ ? {
2507
+ kind: "dynFrom",
2508
+ value: { kind: "strLit", value: expr.name.text, type: STRING, loc },
2509
+ type: DYN,
2510
+ loc,
2511
+ }
2512
+ : lowerer.lowerExprExpecting(expr.argumentExpression, DYN);
2513
+ return { kind: "libCall", fn: "buffer.prototypeMember", args: [key], type: DYN, loc };
2514
+ }
2515
+ const BUFFER_VALUE_FNS = new Set([
2516
+ "buffer.constructor",
2517
+ "buffer.staticValue",
2518
+ "buffer.prototypeMember",
2519
+ ]);
2520
+ /** A program that reads the Buffer function's value installs it in %main,
2521
+ * so a Buffer's `.constructor` answers the same function. */
2522
+ export function installBufferValue(functions) {
2523
+ let found = false;
2524
+ const visitor = {
2525
+ expr: (e) => {
2526
+ if (e.kind === "libCall" && BUFFER_VALUE_FNS.has(e.fn))
2527
+ found = true;
2528
+ return !found;
2529
+ },
2530
+ stmt: () => !found,
2531
+ };
2532
+ for (const fn of functions) {
2533
+ for (const s of fn.body)
2534
+ everyStmt(s, visitor);
2535
+ if (found)
2536
+ break;
2537
+ }
2538
+ const main = functions.find((fn) => fn.name === ENTRY_NAME);
2539
+ if (!found || !main)
2540
+ return;
2541
+ main.body.unshift({
2542
+ kind: "exprStmt",
2543
+ expr: { kind: "libCall", fn: "buffer.installValue", args: [], type: VOID, loc: main.loc },
2544
+ loc: main.loc,
2545
+ });
2546
+ }
2138
2547
  //# sourceMappingURL=bytes.js.map