@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,4 +1,6 @@
1
+ import { lowerAsyncLocalStorageOptions } from "./builtins/async-context.js";
1
2
  import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
3
+ import { predeclareForwardClass } from "./lower-stmts.js";
2
4
  import { lowerDateStaticCall } from "./builtins/dates.js";
3
5
  import { keyedHelperName } from "./stable-names.js";
4
6
  import { lowerValueReturningConstructorNew } from "./js-dynamic-objects.js";
@@ -24,7 +26,7 @@ import { lowerZlibStreamNew, zlibClassName, zlibStreamModeOf } from "./builtins/
24
26
  import { everyStmtList } from "../../ir/traverse.js";
25
27
  import { builtinClassAliasOf, builtinClassRefOf, } from "./builtins/class-values.js";
26
28
  import { inlineNamespaceRequireOf, lowerWithInlineRequireInit } from "./cjs-inline-require.js";
27
- import { BOOL, canDynCheckTo, DATE_T, DYN, F64, bytesOf, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, STRING, classValueConstructor, UNDEFINED_T, VOID, arrayOf, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, typeEquals, } from "../../ir/ir.js";
29
+ import { BOOL, canDynCheckTo, DATE_T, DYN, F64, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, STRING, classValueConstructor, UNDEFINED_T, VOID, arrayOf, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, typeEquals, } from "../../ir/ir.js";
28
30
  import { genericCallInstance, implicitAnyParamSymbolsOf, implicitCallInstance, implicitMonoFile, genericLocalClassResult, } from "./generic-functions.js";
29
31
  import { extendInstantiationPath, MAX_INSTANTIATION_RECURSION, } from "./instantiation-path.js";
30
32
  import { appendImplicitUndefinedReturn, hasExplicitJsDocReturn } from "./function-returns.js";
@@ -40,13 +42,12 @@ import { isCjsRequireGlobal } from "./lower-node-module.js";
40
42
  import { lowerArrayConstructor } from "./containers/array-construction.js";
41
43
  import { lowerMapSeedNew, lowerSetSeedNew } from "./containers/collection-methods.js";
42
44
  import { lowerObjectConstructor } from "./containers/indexed-objects.js";
43
- import { knownBufEncoding, lowerNodeModulesBufferConstruct } from "./containers/bytes.js";
44
- import { isSafeToRepeat } from "./expressions/evaluation-safety.js";
45
+ import { knownBufEncoding, lowerBufferConstruct } from "./containers/bytes.js";
45
46
  import { lowerSearchParamsNew } from "./builtins/url.js";
46
47
  import { lowerTextCodecNew } from "./builtins/text-codecs.js";
47
48
  import { lowerBroadcastChannelNew, lowerMessageChannelNew, lowerWorkerNew, } from "./builtins/workers.js";
48
49
  import { unsupportedPackageValueDiag, unsupportedDiag, } from "../../diagnostics/diagnostic.js";
49
- import { STREAM_API_MEMBERS, STREAM_PROP_MEMBERS, STREAM_COMPLETION_CALLBACK_INDEX, UNDERSCORE_METHODS, lowerStreamNew, lowerStreamSuperCall, streamCtorShape, } from "./lower-stream.js";
50
+ import { STREAM_API_MEMBERS, STREAM_PROP_MEMBERS, STREAM_COMPLETION_CALLBACK_INDEX, UNDERSCORE_METHODS, streamExtraCallbacks, lowerStreamNew, lowerStreamSuperCall, streamCtorShape, } from "./lower-stream.js";
50
51
  import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod, eventTargetRootOf, eventTargetSuperCall, lowerEventTargetMethodCall, } from "./lower-event-target.js";
51
52
  import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
52
53
  import { declSymbolOf } from "./lower-modules.js";
@@ -58,7 +59,7 @@ import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./s
58
59
  import { lowerUrlNew } from "./lower-url.js";
59
60
  import { isNativeProxyInitializer, lowerNativeProxy } from "./expressions/native-proxy.js";
60
61
  import { classStaticDataFor } from "./class-static-data.js";
61
- import { construction, constructionPrefix } from "./js-class-fields.js";
62
+ import { accessorInterceptsBase, accessorNames, construction, constructionPrefix, } from "./js-class-fields.js";
62
63
  import { lowerObjectFactoryNew } from "./object-factory-new.js";
63
64
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
64
65
  import { lowerInstanceConstructorNew } from "./class-instance-constructor.js";
@@ -67,6 +68,7 @@ import { constructionEscape } from "./construction-escapes.js";
67
68
  import { checkedClassConstruction, checkedClassConstructionPacked } from "./class-construction.js";
68
69
  import { initializeRuntimeStatics, hasRuntimeStatics } from "./class-runtime-statics.js";
69
70
  import { reflectedClassStaticMethodValue } from "./class-method-values.js";
71
+ import { identifierReadSymbol } from "./surfaces.js";
70
72
  export function returnsOnlyThis(member) {
71
73
  const body = member.body;
72
74
  const last = body?.statements?.nodes.at(-1);
@@ -122,7 +124,7 @@ export function returnsOnlyThisValue(member) {
122
124
  ts.forEachChild(body, visit);
123
125
  return valid;
124
126
  }
125
- function functionLocalClass(decl) {
127
+ export function functionLocalClass(decl) {
126
128
  for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent) {
127
129
  if (ts.isFunctionLike(parent))
128
130
  return true;
@@ -889,7 +891,7 @@ function undefArmedFieldType(lowerer, p) {
889
891
  const byKey = new Map();
890
892
  const arms = mapped.kind === "union" ? (lowerer.unions.get(mapped.unionId)?.arms ?? []) : [mapped];
891
893
  for (const a of arms) {
892
- if (a.kind === "map" || a.kind === "regex" || a.kind === "date" || a.kind === "generator") {
894
+ if (a.kind === "map" || a.kind === "regex" || a.kind === "generator") {
893
895
  return null;
894
896
  }
895
897
  byKey.set(typeKey(a), a);
@@ -1693,6 +1695,7 @@ mixin) {
1693
1695
  // receiver-sensitive getters and setters inherited by subclasses.
1694
1696
  const checkedStatics = isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
1695
1697
  ((base && hasRuntimeStatics(base)) ||
1698
+ definedThroughReflection(lowerer, decl) ||
1696
1699
  decl.members.nodes.some((member) => ts.isAccessor(member) &&
1697
1700
  !ts.isPrivateIdentifier(member.name) &&
1698
1701
  member.modifiers?.nodes.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) &&
@@ -2007,8 +2010,8 @@ mixin) {
2007
2010
  // state, so an override or shadowing field would split-brain.
2008
2011
  // Underscore methods are the SUPPORTED override form — but only
2009
2012
  // the ones the class's own base consumes (a `_read` on a
2010
- // Transform, or `_writev`/`_construct` anywhere, would be consumed
2011
- // by Node machinery that has no lowering here).
2013
+ // Transform, or `_writev` on a Readable, would be consumed by Node
2014
+ // machinery that has no lowering here).
2012
2015
  if (memberName && ts.isIdentifier(memberName)) {
2013
2016
  const streamBase = (() => {
2014
2017
  for (let c = base; c; c = c.base)
@@ -2021,8 +2024,8 @@ mixin) {
2021
2024
  if (STREAM_API_MEMBERS.has(name) || STREAM_PROP_MEMBERS.has(name)) {
2022
2025
  lowerer.unsupported("SC1090", memberName, `overriding the stream member '${name}' (the runtime owns the stream surface)`);
2023
2026
  }
2024
- if (name === "_writev" || name === "_construct") {
2025
- lowerer.unsupported("SC1090", memberName, `declaring '${name}' on a stream subclass (${name === "_writev" ? "batched writes are" : "deferred construction is"} not lowered — writes deliver one chunk at a time)`);
2027
+ if (name === "_writev" && !streamExtraCallbacks(streamBase.def.name).includes("writev")) {
2028
+ lowerer.unsupported("SC1090", memberName, `declaring '_writev' on a ${streamBase.def.name.slice(1)} subclass (a Readable has no writable side)`);
2026
2029
  }
2027
2030
  const accepted = streamCtorShape(streamBase.def.name).accepted;
2028
2031
  for (const [option, methodName] of UNDERSCORE_METHODS) {
@@ -3039,7 +3042,6 @@ mixin) {
3039
3042
  declared.kind !== "union" &&
3040
3043
  declared.kind !== "dyn" &&
3041
3044
  declared.kind !== "map" &&
3042
- declared.kind !== "date" &&
3043
3045
  declared.kind !== "generator" &&
3044
3046
  declared.kind !== "void" &&
3045
3047
  declared.kind !== "caught";
@@ -3167,7 +3169,7 @@ mixin) {
3167
3169
  }
3168
3170
  // A subclass field created before anything can observe the instance
3169
3171
  // keeps its type: super() cannot run code that reads it earlier.
3170
- const baseConstruction = base && ![...methods.keys()].some((m) => m.startsWith("get:") || m.startsWith("set:"))
3172
+ const baseConstruction = base && !accessorInterceptsBase(accessorNames(methods.keys()), base)
3171
3173
  ? construction(base)
3172
3174
  : null;
3173
3175
  const sealedPrefix = baseConstruction
@@ -3195,7 +3197,7 @@ mixin) {
3195
3197
  // An own JS callable shadows its prototype declaration.
3196
3198
  // Keep the method in the prototype and store the assigned
3197
3199
  // value in the instance property bag.
3198
- lowerer.prototypeMethodAccesses.set(name, assign);
3200
+ lowerer.noteMethodAccess(name, assign);
3199
3201
  continue;
3200
3202
  }
3201
3203
  const sym = lowerer.checker.getSymbolAtLocation(assign);
@@ -3272,7 +3274,7 @@ mixin) {
3272
3274
  if (!key && (fields.has(fieldName) || hasAccessor(fieldName)))
3273
3275
  continue;
3274
3276
  if (!key && (methods.has(fieldName) || lowerer.findMethodOn(base, fieldName))) {
3275
- lowerer.prototypeMethodAccesses.set(fieldName, lhs);
3277
+ lowerer.noteMethodAccess(fieldName, lhs);
3276
3278
  continue;
3277
3279
  }
3278
3280
  // A key already declared (own or inherited) makes later
@@ -4429,7 +4431,13 @@ export function classValueRef(lowerer, info, blame) {
4429
4431
  const display = info.def.name.replace(/^%|^%m\d+\./, "");
4430
4432
  fenceDecorationThrows(lowerer, info, blame);
4431
4433
  if (info.localClass && ts.isIdentifier(blame)) {
4432
- const stored = lowerer.resolveLocal(blame);
4434
+ let stored = lowerer.resolveLocal(blame);
4435
+ // A reference from a function hoisted above the class statement.
4436
+ if (!stored) {
4437
+ const symbol = lowerer.resolveValueSymbol(blame);
4438
+ if (symbol && predeclareForwardClass(lowerer, symbol))
4439
+ stored = lowerer.resolveLocal(blame);
4440
+ }
4433
4441
  if (stored)
4434
4442
  return lowerer.coerceToExpected({ kind: "varRef", localId: stored.id, type: stored.type, loc: locOf(blame) }, { kind: "classval", className: info.def.name });
4435
4443
  }
@@ -4917,6 +4925,31 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4917
4925
  }
4918
4926
  return info;
4919
4927
  }
4928
+ /** True when a named class expression's body refers to the class value by
4929
+ * its own name (`class Box { static of() { return new Box(); } }`, a
4930
+ * shorthand property `{ Box }` included); type annotations naming it
4931
+ * (`again(): Box`) do not count. */
4932
+ function classExpressionNamesItself(lowerer, expr) {
4933
+ const name = expr.name;
4934
+ if (!name)
4935
+ return false;
4936
+ const symbol = lowerer.checker.getSymbolAtLocation(name);
4937
+ if (!symbol)
4938
+ return false;
4939
+ let found = false;
4940
+ for (const member of expr.members.nodes) {
4941
+ ts.walkPreorder(member, (n) => {
4942
+ if (found || ts.isTypeNode(n))
4943
+ return "skip";
4944
+ if (ts.isIdentifier(n) && n.text === name.text && identifierReadSymbol(lowerer, n) === symbol)
4945
+ found = true;
4946
+ return undefined;
4947
+ });
4948
+ if (found)
4949
+ return true;
4950
+ }
4951
+ return false;
4952
+ }
4920
4953
  /** `class {…}` in expression position: a class definition bound to no
4921
4954
  * statement — once the static side is a value, the expression IS the
4922
4955
  * definition plus a classRef over it. A DECORATED class expression
@@ -4924,8 +4957,12 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4924
4957
  * mints a class at all: evaluating the expression IS the
4925
4958
  * ReferenceError, so it lowers to exactly that read — every evaluation
4926
4959
  * throws identically, which is why the once-evaluated restriction and
4927
- * the member fences don't apply. */
4928
- export function lowerClassExpression(lowerer, expr) {
4960
+ * the member fences don't apply.
4961
+ *
4962
+ * `binding` is the local of a function-local class declaration's name,
4963
+ * declared without a value; the class value assigns it before the class's
4964
+ * static members are defined (see initializeRuntimeStatics). */
4965
+ export function lowerClassExpression(lowerer, expr, binding) {
4929
4966
  if (decoratorNodesOf(expr).length > 0 ||
4930
4967
  expr.members.nodes.some((m) => decoratorNodesOf(m).length > 0)) {
4931
4968
  if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) && expr.typeParameters === undefined) {
@@ -4939,6 +4976,28 @@ export function lowerClassExpression(lowerer, expr) {
4939
4976
  }
4940
4977
  }
4941
4978
  const info = lowerClassExpressionInfo(lowerer, expr);
4979
+ // A function-local class expression's own name is a binding of its body:
4980
+ // declared before the members lower, so their references to the name
4981
+ // resolve to it. The class value captures it before it is assigned, as
4982
+ // it captures a class declaration's binding.
4983
+ if (!binding &&
4984
+ info.localClass &&
4985
+ ts.isClassExpression(expr) &&
4986
+ expr.name &&
4987
+ classExpressionNamesItself(lowerer, expr)) {
4988
+ const own = lowerer.declareLocal(expr.name, expr.name.text, { kind: "classval", className: info.def.name }, true);
4989
+ const value = lowerClassValue(lowerer, expr, info, own);
4990
+ return {
4991
+ kind: "seqExpr",
4992
+ stmts: [{ kind: "varDecl", localId: own.id, init: null, loc: value.loc }],
4993
+ result: value,
4994
+ type: value.type,
4995
+ loc: value.loc,
4996
+ };
4997
+ }
4998
+ return lowerClassValue(lowerer, expr, info, binding);
4999
+ }
5000
+ function lowerClassValue(lowerer, expr, info, binding) {
4942
5001
  if (!info.localClass &&
4943
5002
  !info.expressionInitializationEmitted &&
4944
5003
  (info.callableBase ||
@@ -4985,7 +5044,7 @@ export function lowerClassExpression(lowerer, expr) {
4985
5044
  const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
4986
5045
  const boxed = { kind: "dynFrom", value: clsRef, type: DYN, loc };
4987
5046
  info.localPrototypeData = true;
4988
- return initializeRuntimeStatics(lowerer, info, {
5047
+ const built = {
4989
5048
  kind: "seqExpr",
4990
5049
  stmts: [
4991
5050
  { kind: "varDecl", localId: baseLocal.id, init: base, loc },
@@ -5018,7 +5077,8 @@ export function lowerClassExpression(lowerer, expr) {
5018
5077
  result: clsRef,
5019
5078
  type: value.type,
5020
5079
  loc,
5021
- });
5080
+ };
5081
+ return initializeRuntimeStatics(lowerer, info, built, binding);
5022
5082
  }
5023
5083
  if (info.localClass?.baseExpression && info.base && value.kind === "classRef") {
5024
5084
  const loc = locOf(expr);
@@ -5033,7 +5093,7 @@ export function lowerClassExpression(lowerer, expr) {
5033
5093
  const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
5034
5094
  const basePrototype = classPrototypeData(lowerer, info.base, loc, baseRef);
5035
5095
  info.localPrototypeData = true;
5036
- return initializeRuntimeStatics(lowerer, info, {
5096
+ const built = {
5037
5097
  kind: "seqExpr",
5038
5098
  stmts: [
5039
5099
  { kind: "varDecl", localId: baseLocal.id, init: base, loc },
@@ -5072,11 +5132,12 @@ export function lowerClassExpression(lowerer, expr) {
5072
5132
  result: clsRef,
5073
5133
  type: value.type,
5074
5134
  loc,
5075
- });
5135
+ };
5136
+ return initializeRuntimeStatics(lowerer, info, built, binding);
5076
5137
  }
5077
5138
  if (!info.localClass)
5078
5139
  return value;
5079
- const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value);
5140
+ const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value, binding);
5080
5141
  // The base resolves statically here, but Node still evaluates the
5081
5142
  // heritage expression each time the class definition runs, first.
5082
5143
  const heritage = heritageWithEffects(expr);
@@ -5418,7 +5479,7 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5418
5479
  // through-a-VALUE shadowing fence as plain statics.
5419
5480
  const gfound = findGenericStaticOn(lowerer, info, access.name.text);
5420
5481
  if (!gfound)
5421
- return null;
5482
+ return classConstructorCall(lowerer, call, access, info);
5422
5483
  if (throughValue && staticShadowBelow(info, access.name.text)) {
5423
5484
  lowerer.unsupported("SC1090", call, `calling the static member '${access.name.text}' through a class value (a subclass of '${info.def.name.replace(/^%|^%m\d+\./, "")}' redeclares it, so the runtime class decides which declaration answers)`);
5424
5485
  }
@@ -5487,6 +5548,74 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5487
5548
  const args = lowerer.completeArgs(call.arguments.nodes, found.method.params, loc, call);
5488
5549
  return { kind: "call", callee: fnName, args, type: found.method.ret, loc };
5489
5550
  }
5551
+ /** `C.call(thisArg, ...)` / `C.apply(thisArg, args)` on a program class that
5552
+ * declares no such static: Function.prototype.call/apply invoke the class
5553
+ * constructor without `new`, which throws Node's TypeError "Class
5554
+ * constructor C cannot be invoked without 'new'" after the arguments are
5555
+ * evaluated (and, for apply, after the argument list is read). The boxed
5556
+ * class value's call path throws exactly that. Neither expando statics nor
5557
+ * writes through untyped values can give a class an own `call` or `apply`.
5558
+ * A receiver that may hold a subclass at run time (a class value, `this` in
5559
+ * a static method) needs every subclass to lack such a static too. The
5560
+ * receiver must be one the caller does not evaluate again (a name, `this`,
5561
+ * or a namespace member). Null otherwise. */
5562
+ function classConstructorCall(lowerer, call, access, info) {
5563
+ const name = access.name.text;
5564
+ const receiver = access.expression;
5565
+ if ((name !== "call" && name !== "apply") ||
5566
+ !info.decl ||
5567
+ info.def.runtime ||
5568
+ info.builtinError ||
5569
+ info.builtinEmitter ||
5570
+ info.builtinStream ||
5571
+ info.builtinEventTarget ||
5572
+ info.runtimeStatics?.length ||
5573
+ declaresStaticAbove(info, name) ||
5574
+ (exactClassOfReceiver(lowerer, receiver) !== info &&
5575
+ info.subclasses.some((subclass) => declaresStaticBelow(subclass, name))) ||
5576
+ call.arguments.nodes.some(ts.isSpreadElement) ||
5577
+ !(ts.isIdentifier(receiver) ||
5578
+ receiver.kind === ts.SyntaxKind.ThisKeyword ||
5579
+ (ts.isPropertyAccessExpression(receiver) && nsMemberIdentOf(lowerer, receiver) !== null)))
5580
+ return null;
5581
+ return {
5582
+ kind: "dynInvoke",
5583
+ recv: lowerer.lowerExprExpecting(receiver, DYN),
5584
+ method: name,
5585
+ calleeName: ts.getTextOfNode(access),
5586
+ args: call.arguments.nodes.map((argument) => lowerer.lowerExprExpecting(argument, DYN)),
5587
+ type: DYN,
5588
+ loc: locOf(call),
5589
+ };
5590
+ }
5591
+ /** Whether `info`'s declaration has a static member that may be named `name`
5592
+ * (a method, field or accessor of that name, or a computed name), or `info`
5593
+ * has no declaration to tell. */
5594
+ function declaresStatic(info, name) {
5595
+ if (!info.decl)
5596
+ return true;
5597
+ return info.decl.members.nodes.some((member) => member.name !== undefined &&
5598
+ ts.canHaveModifiers(member) &&
5599
+ ts.getModifiers(member)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) ===
5600
+ true &&
5601
+ (ts.isComputedPropertyName(member.name) ||
5602
+ ((ts.isIdentifier(member.name) || ts.isStringLiteral(member.name)) &&
5603
+ member.name.text === name)));
5604
+ }
5605
+ /** declaresStatic over `info` and its bases, which it inherits statics from. */
5606
+ function declaresStaticAbove(info, name) {
5607
+ for (let c = info; c; c = c.base)
5608
+ if (declaresStatic(c, name))
5609
+ return true;
5610
+ return false;
5611
+ }
5612
+ /** declaresStatic over `info` and its subclasses, or runtime statics, which a
5613
+ * function-local JavaScript class defines at run time. */
5614
+ function declaresStaticBelow(info, name) {
5615
+ return (declaresStatic(info, name) ||
5616
+ !!info.runtimeStatics?.length ||
5617
+ info.subclasses.some((subclass) => declaresStaticBelow(subclass, name)));
5618
+ }
5490
5619
  /** `C.m(...)` where `m` is a static method that a function-local
5491
5620
  * JavaScript class defines at runtime (a factory's `class extends base`),
5492
5621
  * inherited by `C` through its statically known base chain. When the body
@@ -5874,11 +6003,94 @@ export function inHierarchy(lowerer, info) {
5874
6003
  * dynamically. Abstract re-declarations don't count (they carry no
5875
6004
  * implementation; the concrete ones below them do, via the recursion). */
5876
6005
  export function overrideBelow(lowerer, info, name) {
6006
+ if (info.decl !== null && localOverrideBelow(lowerer, info.decl, name))
6007
+ return true;
5877
6008
  return info.subclasses.some((s) => {
5878
6009
  const m = s.methods.get(name);
5879
6010
  return (m !== undefined && m.abstract !== true) || lowerer.overrideBelow(s, name);
5880
6011
  });
5881
6012
  }
6013
+ /** The class node an `extends` clause names: a class declaration, or the
6014
+ * class expression a variable is initialized with. */
6015
+ function extendedClassNode(lowerer, decl) {
6016
+ const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
6017
+ if (!heritage || !ts.isIdentifier(heritage))
6018
+ return null;
6019
+ let symbol = lowerer.checker.getSymbolAtLocation(heritage);
6020
+ if (symbol && symbol.flags & ts.SymbolFlags.Alias)
6021
+ symbol = lowerer.checker.getAliasedSymbol(symbol);
6022
+ const target = symbol?.valueDeclaration;
6023
+ if (!target)
6024
+ return null;
6025
+ if (ts.isClassDeclaration(target) || ts.isClassExpression(target))
6026
+ return target;
6027
+ if (ts.isVariableDeclaration(target) && target.initializer) {
6028
+ let init = target.initializer;
6029
+ while (ts.isParenthesizedExpression(init))
6030
+ init = init.expression;
6031
+ if (ts.isClassExpression(init))
6032
+ return init;
6033
+ }
6034
+ return null;
6035
+ }
6036
+ /** The function-local classes that extend the class node `base`. Function
6037
+ * bodies lower on demand, after code that may already call methods of a
6038
+ * class their local classes extend, so such a subclass is not yet in its
6039
+ * base's `subclasses` when those calls lower. */
6040
+ function localSubclassesOf(lowerer, base) {
6041
+ let index = lowerer.localSubclassIndex;
6042
+ if (index === null) {
6043
+ index = new Map();
6044
+ const files = lowerer.moduleOrder.length > 0 ? lowerer.moduleOrder : [lowerer.entry];
6045
+ for (const sf of files) {
6046
+ if (!sf.text.includes("extends"))
6047
+ continue;
6048
+ ts.walkPreorder(sf, (node) => {
6049
+ if ((ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&
6050
+ node.heritageClauses !== undefined &&
6051
+ functionLocalClass(node)) {
6052
+ const extended = extendedClassNode(lowerer, node);
6053
+ if (extended) {
6054
+ const list = index.get(extended);
6055
+ if (list)
6056
+ list.push(node);
6057
+ else
6058
+ index.set(extended, [node]);
6059
+ }
6060
+ }
6061
+ return undefined;
6062
+ });
6063
+ }
6064
+ lowerer.localSubclassIndex = index;
6065
+ }
6066
+ return index.get(base) ?? [];
6067
+ }
6068
+ /** True when a function-local class below the class node `base` declares
6069
+ * a concrete instance method or accessor `name` (accessors are keyed
6070
+ * `get:x` and `set:x`). A call on `base`'s class then dispatches on the
6071
+ * receiver; devirtualization turns it back into a direct call when no such
6072
+ * override is reachable. */
6073
+ function localOverrideBelow(lowerer, base, name, visited) {
6074
+ const subclasses = localSubclassesOf(lowerer, base);
6075
+ if (subclasses.length === 0)
6076
+ return false;
6077
+ visited ??= new Set();
6078
+ if (visited.has(base))
6079
+ return false;
6080
+ visited.add(base);
6081
+ const accessor = name.startsWith("get:") ? "get" : name.startsWith("set:") ? "set" : null;
6082
+ const member = accessor ? name.slice(4) : name;
6083
+ return subclasses.some((sub) => sub.members.nodes.some((m) => (accessor === null
6084
+ ? ts.isMethodDeclaration(m)
6085
+ : accessor === "get"
6086
+ ? ts.isGetAccessorDeclaration(m)
6087
+ : ts.isSetAccessorDeclaration(m)) &&
6088
+ m.body !== undefined &&
6089
+ m.name !== undefined &&
6090
+ (ts.isIdentifier(m.name) || ts.isStringLiteral(m.name)) &&
6091
+ m.name.text === member &&
6092
+ !ts.getModifiers(m)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)) || localOverrideBelow(lowerer, sub, name, visited));
6093
+ }
5882
6094
  /** The nearest GENERIC-method declaration of `name` at/above `info` —
5883
6095
  * findMethodOn's twin over the genericMethods tables. */
5884
6096
  export function findGenericMethodOn(lowerer, info, name) {
@@ -7571,8 +7783,10 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7571
7783
  // The SYNTHESIZED constructor of a ctor-less stream subclass:
7572
7784
  // super() with default options (underscore methods still bind; a
7573
7785
  // construction passing options requires a declared constructor —
7574
- // lowerNew fences that). Zero options ⇒ exactly one init stmt.
7575
- return lowerStreamSuperCall(lowerer, info, base, [], thisLocal, loc, info.decl ?? info.ctor)[0];
7786
+ // lowerNew fences that). Zero options ⇒ the init stmt, then the
7787
+ // class's _writev/_construct follow-ups.
7788
+ const stmts = lowerStreamSuperCall(lowerer, info, base, [], thisLocal, loc, info.decl ?? info.ctor);
7789
+ return stmts.length === 1 ? stmts[0] : { kind: "block", body: stmts, loc };
7576
7790
  }
7577
7791
  lowerer.noteSuperConstructorEdge(`%${base.def.name}.constructor`);
7578
7792
  const call = {
@@ -8032,9 +8246,9 @@ function isCollectionOrErrorClass(ref) {
8032
8246
  }
8033
8247
  export function lowerNew(lowerer, expr) {
8034
8248
  const loc = locOf(expr);
8035
- // A dependency's deprecated `new Buffer(...)` fallback (containers/bytes.ts).
8249
+ // The deprecated `new Buffer(...)` (containers/bytes.ts).
8036
8250
  {
8037
- const buffer = lowerNodeModulesBufferConstruct(lowerer, expr);
8251
+ const buffer = lowerBufferConstruct(lowerer, expr);
8038
8252
  if (buffer)
8039
8253
  return buffer;
8040
8254
  }
@@ -8610,8 +8824,10 @@ export function lowerNew(lowerer, expr) {
8610
8824
  if (arg.type.kind === "string") {
8611
8825
  return { kind: "libCall", fn: "date.newString", args: [arg], type: DATE_T, loc };
8612
8826
  }
8827
+ // new Date(date): a new Date object with the same time value.
8613
8828
  if (arg.type.kind === "date") {
8614
- return arg;
8829
+ const time = { kind: "libCall", fn: "date.getTime", args: [arg], type: F64, loc };
8830
+ return { kind: "libCall", fn: "date.newMs", args: [time], type: DATE_T, loc };
8615
8831
  }
8616
8832
  lowerer.noLowering(`new Date of '${lowerer.fmt(arg.type)}' values`, args[0], "pass milliseconds, a date string, or another Date value", symbol);
8617
8833
  }
@@ -8790,7 +9006,7 @@ export function lowerNew(lowerer, expr) {
8790
9006
  if (targs[1]) {
8791
9007
  lowerer.unsupported("SC1090", expr, `Map values of type '${lowerer.checker.typeToString(targs[1])}' ` +
8792
9008
  `(Map values must be number, string, boolean, records, class instances, functions, ` +
8793
- `typed arrays, arrays, promises, Maps, Sets, or supported unions and checked values)`);
9009
+ `typed arrays, arrays, promises, Dates, Maps, Sets, or supported unions and checked values)`);
8794
9010
  }
8795
9011
  lowerer.badType(expr, tsType);
8796
9012
  }
@@ -8810,6 +9026,40 @@ export function lowerNew(lowerer, expr) {
8810
9026
  loc,
8811
9027
  };
8812
9028
  }
9029
+ // A FinalizationRegistry construction: register and unregister keep
9030
+ // their bookkeeping, and the cleanup callback never runs, which
9031
+ // ECMAScript allows (scr_finalization_registry_new).
9032
+ if (symbol !== null &&
9033
+ ts.symbolName(symbol) === "FinalizationRegistry" &&
9034
+ lowerer.isStdlibSymbol(symbol)) {
9035
+ const args = expr.arguments?.nodes ?? [];
9036
+ if (args.some(ts.isSpreadElement)) {
9037
+ lowerer.unsupported("SC1090", expr, "FinalizationRegistry construction with spread arguments");
9038
+ }
9039
+ const cleanup = args[0] ? lowerer.lowerExprExpecting(args[0], DYN) : dynUndefinedExpr(loc);
9040
+ const surplus = args.slice(1).map((arg) => lowerer.lowerExpr(arg));
9041
+ const created = {
9042
+ kind: "libCall",
9043
+ fn: "finalizationRegistry.new",
9044
+ args: [cleanup],
9045
+ type: DYN,
9046
+ loc,
9047
+ };
9048
+ if (surplus.length === 0)
9049
+ return created;
9050
+ // Surplus arguments evaluate after the cleanup argument and are ignored.
9051
+ const local = lowerer.declareHiddenLocal("%finalizationCleanup", DYN);
9052
+ return {
9053
+ kind: "seqExpr",
9054
+ stmts: [
9055
+ { kind: "varDecl", localId: local.id, init: cleanup, loc },
9056
+ ...surplus.map((value) => ({ kind: "exprStmt", expr: value, loc })),
9057
+ ],
9058
+ result: { ...created, args: [varRef(local.id, DYN, loc)] },
9059
+ type: DYN,
9060
+ loc,
9061
+ };
9062
+ }
8813
9063
  // `new Set<T>()`: construct + bulk add from supported values,
8814
9064
  // including live collection cursors. Duplicates collapse in insertion order.
8815
9065
  if (ts.isIdentifier(identifier) && lowerer.isStdlibGlobal(identifier, "Set")) {
@@ -8874,15 +9124,21 @@ export function lowerNew(lowerer, expr) {
8874
9124
  lowerer.badType(expr, tsType);
8875
9125
  }
8876
9126
  // `new AsyncLocalStorage()` (node:async_hooks): a fresh store id —
8877
- // an f64 handle (type-mapper.ts), the Channel story. Construction options
8878
- // ({ defaultValue, name }) have no lowering yet.
9127
+ // an f64 handle (type-mapper.ts), the Channel story. The options form
9128
+ // ({ defaultValue, name }) passes the options object as a dyn value.
8879
9129
  if (symbol !== null &&
8880
9130
  ts.symbolName(symbol) === "AsyncLocalStorage" &&
8881
9131
  lowerer.isStdlibSymbol(symbol)) {
8882
- if ((expr.arguments?.nodes.length ?? 0) > 0) {
8883
- lowerer.noLowering("new AsyncLocalStorage(options)", expr, "the zero-argument constructor is the supported form (defaultValue/name options have no lowering yet)");
8884
- }
8885
- return { kind: "libCall", fn: "als.new", args: [], type: F64, loc };
9132
+ const options = expr.arguments?.nodes[0];
9133
+ if (options === undefined)
9134
+ return { kind: "libCall", fn: "als.new", args: [], type: F64, loc };
9135
+ return {
9136
+ kind: "libCall",
9137
+ fn: "als.newOptions",
9138
+ args: [lowerAsyncLocalStorageOptions(lowerer, options)],
9139
+ type: F64,
9140
+ loc,
9141
+ };
8886
9142
  }
8887
9143
  // `new Promise<T>((resolve) => ...)`: the ambient Promise constructor.
8888
9144
  if (symbol !== null && ts.symbolName(symbol) === "Promise" && lowerer.isStdlibSymbol(symbol)) {
@@ -8952,45 +9208,12 @@ export function lowerNew(lowerer, expr) {
8952
9208
  // families carry pointed hints: each states WHY no honest static
8953
9209
  // lowering exists (or what to use instead).
8954
9210
  if (lowerer.isStdlibSymbol(symbol ?? undefined)) {
8955
- // The deprecated `new Buffer(string, encoding?)` ctor's string arm
8956
- // with a NON-STRING first argument and a string second: Node
8957
- // throws ERR_INVALID_ARG_TYPE synchronously (and DEP0005 never
8958
- // fires on this throwing path, so the compiled silence matches).
8959
- // Every other new Buffer form keeps the fence below — the
8960
- // constructing forms would owe the deprecation warning.
8961
- if (expr.expression.text === "Buffer" &&
8962
- expr.arguments?.nodes.length === 2 &&
8963
- !expr.arguments.nodes.some(ts.isSpreadElement) &&
8964
- lowerer.mapTypeOf(lowerer.typeOf(expr.arguments.nodes[0]))?.kind !== "string" &&
8965
- lowerer.mapTypeOf(lowerer.typeOf(expr.arguments.nodes[1]))?.kind === "string") {
8966
- const first = lowerer.lowerExpr(expr.arguments.nodes[0]);
8967
- if (first.kind === "unitLit" ||
8968
- first.type.kind === "dyn" ||
8969
- lowerer.dynConvertible(first.type)) {
8970
- const got = first.type.kind === "dyn" ? first : { kind: "dynFrom", value: first, type: DYN, loc };
8971
- // The encoding argument still evaluates in Node before the
8972
- // throw only via the ctor body's later reads — it does NOT
8973
- // observe it before throwing, so dropping it is exact for
8974
- // effect-free operands; effectful ones keep the fence.
8975
- const enc = lowerer.lowerExpr(expr.arguments.nodes[1]);
8976
- if (enc.kind === "strLit" || isSafeToRepeat(enc)) {
8977
- return {
8978
- kind: "libCall",
8979
- fn: "buffer.newStringFail",
8980
- args: [got],
8981
- type: bytesOf("u8"),
8982
- loc,
8983
- };
8984
- }
8985
- }
8986
- }
8987
9211
  const ctorHints = {
8988
9212
  RegExp: "use a regex literal (/pattern/flags) — constructed regexes have no lowering",
8989
9213
  String: "boxed wrapper objects have no lowering — use the string primitive (the box is only distinguishable via typeof/identity, which nothing here can honor)",
8990
9214
  Number: "boxed wrapper objects have no lowering — use the number primitive",
8991
9215
  Boolean: "boxed wrapper objects have no lowering — use the boolean primitive",
8992
9216
  WeakRef: "deref()-after-collect exposes GC timing — genuinely dynamic; hold a strong reference instead",
8993
- FinalizationRegistry: "finalization callbacks expose GC timing — genuinely dynamic; release resources explicitly instead",
8994
9217
  SharedArrayBuffer: "no shared-memory threads exist in a compiled program — Uint8Array is the byte storage",
8995
9218
  ArrayBuffer: "native ArrayBuffer construction supports fixed-length storage; resizable buffers remain unsupported",
8996
9219
  Proxy: "native Proxy construction requires checked-native plain targets and handlers",
@@ -9279,4 +9502,36 @@ function genericFieldFnNodeOf(member) {
9279
9502
  }
9280
9503
  return null;
9281
9504
  }
9505
+ /** Whether a JavaScript class's own binding is the target of
9506
+ * `Object.defineProperty`/`defineProperties` in its file
9507
+ * (`Object.defineProperty(Definition, "name", { value })`): its constructor
9508
+ * then needs a live own-property table. */
9509
+ function definedThroughReflection(lowerer, decl) {
9510
+ const name = decl.name;
9511
+ const sf = ts.getSourceFileOfNode(decl);
9512
+ if (name === undefined || !sf.text.includes("definePropert"))
9513
+ return false;
9514
+ const symbol = lowerer.checker.getSymbolAtLocation(name);
9515
+ if (symbol === undefined)
9516
+ return false;
9517
+ let found = false;
9518
+ ts.walkPreorder(sf, (node) => {
9519
+ if (found)
9520
+ return "stop";
9521
+ if (ts.isCallExpression(node) &&
9522
+ ts.isPropertyAccessExpression(node.expression) &&
9523
+ (node.expression.name.text === "defineProperty" ||
9524
+ node.expression.name.text === "defineProperties") &&
9525
+ lowerer.stdlibGlobalMember(node.expression, "Object") !== null) {
9526
+ const target = node.arguments.nodes[0];
9527
+ if (target !== undefined &&
9528
+ ts.isIdentifier(target) &&
9529
+ target.text === name.text &&
9530
+ lowerer.checker.getSymbolAtLocation(target) === symbol)
9531
+ found = true;
9532
+ }
9533
+ return undefined;
9534
+ });
9535
+ return found;
9536
+ }
9282
9537
  //# sourceMappingURL=lower-classes.js.map