@scriptc/compiler 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (999) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +977 -113
  2. package/dist/backend/cycle-analysis.d.ts +5 -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 +9 -1
  8. package/dist/backend/cycle-mutability.js +21 -3
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +6 -1
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.d.ts +7 -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 +5 -0
  16. package/dist/backend/library-pack.js.map +1 -1
  17. package/dist/backend/llvm/alloc.d.ts +23 -4
  18. package/dist/backend/llvm/alloc.js +61 -8
  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 +23 -10
  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 +70 -7
  37. package/dist/backend/llvm/bytes-loop-versions.js +567 -30
  38. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  39. package/dist/backend/llvm/bytes-loop-versions.test.js +389 -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 +74 -1
  44. package/dist/backend/llvm/classes.js +364 -54
  45. package/dist/backend/llvm/classes.js.map +1 -1
  46. package/dist/backend/llvm/classes.test.js +384 -17
  47. package/dist/backend/llvm/classes.test.js.map +1 -1
  48. package/dist/backend/llvm/common.d.ts +10 -6
  49. package/dist/backend/llvm/common.js +10 -6
  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 +91 -56
  53. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  55. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  56. package/dist/backend/llvm/counted-loops.d.ts +11 -1
  57. package/dist/backend/llvm/counted-loops.js +80 -23
  58. package/dist/backend/llvm/counted-loops.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 +35 -16
  65. package/dist/backend/llvm/dense-array-loops.js +237 -12
  66. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  67. package/dist/backend/llvm/dense-array-loops.test.js +140 -15
  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 +51 -1
  72. package/dist/backend/llvm/dyn.js +683 -69
  73. package/dist/backend/llvm/dyn.js.map +1 -1
  74. package/dist/backend/llvm/emit-function.js +33 -26
  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 +208 -34
  80. package/dist/backend/llvm/emit-module.js.map +1 -1
  81. package/dist/backend/llvm/emit-statements.d.ts +0 -27
  82. package/dist/backend/llvm/emit-statements.js +577 -93
  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 +314 -49
  88. package/dist/backend/llvm/emitter.js +1241 -129
  89. package/dist/backend/llvm/emitter.js.map +1 -1
  90. package/dist/backend/llvm/emitter.test.js +54 -5
  91. package/dist/backend/llvm/emitter.test.js.map +1 -1
  92. package/dist/backend/llvm/expr-async.js +19 -0
  93. package/dist/backend/llvm/expr-async.js.map +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  95. package/dist/backend/llvm/expr-bytes.js +144 -52
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.js +47 -0
  98. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  99. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  100. package/dist/backend/llvm/expr-calls.js +62 -36
  101. package/dist/backend/llvm/expr-calls.js.map +1 -1
  102. package/dist/backend/llvm/expr-containers.d.ts +14 -2
  103. package/dist/backend/llvm/expr-containers.js +148 -40
  104. package/dist/backend/llvm/expr-containers.js.map +1 -1
  105. package/dist/backend/llvm/expr-context.d.ts +14 -0
  106. package/dist/backend/llvm/expr-control.js +2 -3
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dynamic.js +71 -16
  109. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  110. package/dist/backend/llvm/expr-primitives.js +126 -36
  111. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  112. package/dist/backend/llvm/expr-primitives.test.js +11 -6
  113. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  114. package/dist/backend/llvm/expr-records.d.ts +12 -0
  115. package/dist/backend/llvm/expr-records.js +106 -0
  116. package/dist/backend/llvm/expr-records.js.map +1 -1
  117. package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
  118. package/dist/backend/llvm/expr-stream-bridges.js +225 -64
  119. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  121. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +200 -50
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
  126. package/dist/backend/llvm/int32-kind-loops.js +106 -0
  127. package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
  128. package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
  129. package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
  130. package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
  131. package/dist/backend/llvm/integer-values.d.ts +20 -1
  132. package/dist/backend/llvm/integer-values.js +71 -0
  133. package/dist/backend/llvm/integer-values.js.map +1 -1
  134. package/dist/backend/llvm/js-ic.d.ts +1 -1
  135. package/dist/backend/llvm/js-ic.js +1 -1
  136. package/dist/backend/llvm/js-ic.js.map +1 -1
  137. package/dist/backend/llvm/key-orders.d.ts +7 -0
  138. package/dist/backend/llvm/key-orders.js +33 -0
  139. package/dist/backend/llvm/key-orders.js.map +1 -0
  140. package/dist/backend/llvm/lib-connect.js +4 -0
  141. package/dist/backend/llvm/lib-connect.js.map +1 -1
  142. package/dist/backend/llvm/lib-datagram.js +11 -0
  143. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  144. package/dist/backend/llvm/lib-dispatch.js +90 -2
  145. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  146. package/dist/backend/llvm/lib-filesystem.js +65 -4
  147. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  148. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  149. package/dist/backend/llvm/lib-http2.js +24 -17
  150. package/dist/backend/llvm/lib-http2.js.map +1 -1
  151. package/dist/backend/llvm/lib-lookup.js +16 -6
  152. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  153. package/dist/backend/llvm/lib-process.js +65 -14
  154. package/dist/backend/llvm/lib-process.js.map +1 -1
  155. package/dist/backend/llvm/lib-shared.js +126 -3
  156. package/dist/backend/llvm/lib-shared.js.map +1 -1
  157. package/dist/backend/llvm/lib-stream.js +97 -30
  158. package/dist/backend/llvm/lib-stream.js.map +1 -1
  159. package/dist/backend/llvm/lib-tls.js +23 -0
  160. package/dist/backend/llvm/lib-tls.js.map +1 -1
  161. package/dist/backend/llvm/local-array-reads.js +181 -64
  162. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  163. package/dist/backend/llvm/local-array-reads.test.js +28 -0
  164. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  165. package/dist/backend/llvm/loop-state.d.ts +33 -0
  166. package/dist/backend/llvm/loop-state.js +42 -0
  167. package/dist/backend/llvm/loop-state.js.map +1 -0
  168. package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
  169. package/dist/backend/llvm/map-number-lookup.js +91 -31
  170. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  171. package/dist/backend/llvm/map-number-lookup.test.js +55 -0
  172. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  173. package/dist/backend/llvm/map-read-lifetimes.js +4 -2
  174. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  175. package/dist/backend/llvm/nullable-unions.d.ts +2 -1
  176. package/dist/backend/llvm/nullable-unions.js +15 -3
  177. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  178. package/dist/backend/llvm/publish.d.ts +18 -1
  179. package/dist/backend/llvm/publish.js +76 -25
  180. package/dist/backend/llvm/publish.js.map +1 -1
  181. package/dist/backend/llvm/publish.test.js +3 -0
  182. package/dist/backend/llvm/publish.test.js.map +1 -1
  183. package/dist/backend/llvm/receivers.js +7 -2
  184. package/dist/backend/llvm/receivers.js.map +1 -1
  185. package/dist/backend/llvm/record-results.d.ts +1 -9
  186. package/dist/backend/llvm/record-results.js +2 -11
  187. package/dist/backend/llvm/record-results.js.map +1 -1
  188. package/dist/backend/llvm/reference-writes.d.ts +7 -2
  189. package/dist/backend/llvm/reference-writes.js +91 -72
  190. package/dist/backend/llvm/reference-writes.js.map +1 -1
  191. package/dist/backend/llvm/regex-matchers.js +161 -14
  192. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  193. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  194. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  195. package/dist/backend/llvm/running-extrema.d.ts +11 -0
  196. package/dist/backend/llvm/running-extrema.js +115 -0
  197. package/dist/backend/llvm/running-extrema.js.map +1 -0
  198. package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
  199. package/dist/backend/llvm/running-extrema.test.js +89 -0
  200. package/dist/backend/llvm/running-extrema.test.js.map +1 -0
  201. package/dist/backend/llvm/shapes.d.ts +79 -21
  202. package/dist/backend/llvm/shapes.js +233 -42
  203. package/dist/backend/llvm/shapes.js.map +1 -1
  204. package/dist/backend/llvm/shapes.test.js +53 -7
  205. package/dist/backend/llvm/shapes.test.js.map +1 -1
  206. package/dist/backend/llvm/speculative-integers.d.ts +6 -0
  207. package/dist/backend/llvm/speculative-integers.js +2 -2
  208. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  209. package/dist/backend/llvm/stack-objects.d.ts +3 -2
  210. package/dist/backend/llvm/stack-objects.js +5 -2
  211. package/dist/backend/llvm/stack-objects.js.map +1 -1
  212. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  213. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  214. package/dist/backend/llvm/string-reads.d.ts +15 -0
  215. package/dist/backend/llvm/string-reads.js +128 -0
  216. package/dist/backend/llvm/string-reads.js.map +1 -1
  217. package/dist/backend/llvm/walk-borrows.d.ts +3 -0
  218. package/dist/backend/llvm/walk-borrows.js +46 -41
  219. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  220. package/dist/backend/llvm/walkers.d.ts +3 -0
  221. package/dist/backend/llvm/walkers.js +88 -65
  222. package/dist/backend/llvm/walkers.js.map +1 -1
  223. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  224. package/dist/backend/llvm/wasm-modules.js +32 -9
  225. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  226. package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
  227. package/dist/backend/llvm/wrapping-sums.js +126 -0
  228. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  229. package/dist/backend/mangle.d.ts +3 -0
  230. package/dist/backend/mangle.js +5 -0
  231. package/dist/backend/mangle.js.map +1 -1
  232. package/dist/backend/may-throw.d.ts +8 -10
  233. package/dist/backend/may-throw.js +14 -10
  234. package/dist/backend/may-throw.js.map +1 -1
  235. package/dist/backend/native/contracts.d.ts +27 -4
  236. package/dist/backend/native/executable.js +31 -8
  237. package/dist/backend/native/executable.js.map +1 -1
  238. package/dist/backend/native/library.js +1 -0
  239. package/dist/backend/native/library.js.map +1 -1
  240. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  241. package/dist/backend/native/runtime-inputs.js +1 -0
  242. package/dist/backend/native/runtime-inputs.js.map +1 -1
  243. package/dist/backend/native-codegen.d.ts +11 -6
  244. package/dist/backend/native-codegen.js +36 -9
  245. package/dist/backend/native-codegen.js.map +1 -1
  246. package/dist/backend/native-codegen.test.js +0 -23
  247. package/dist/backend/native-codegen.test.js.map +1 -1
  248. package/dist/backend/native-link-info-core.d.ts +18 -4
  249. package/dist/backend/native-link-info-core.js.map +1 -1
  250. package/dist/backend/optimization.d.ts +2 -2
  251. package/dist/backend/publication.d.ts +12 -1
  252. package/dist/backend/publication.js +37 -14
  253. package/dist/backend/publication.js.map +1 -1
  254. package/dist/backend/publication.test.js +30 -0
  255. package/dist/backend/publication.test.js.map +1 -1
  256. package/dist/backend/result-slots.d.ts +16 -0
  257. package/dist/backend/result-slots.js +23 -0
  258. package/dist/backend/result-slots.js.map +1 -0
  259. package/dist/backend/runtime-abi.d.ts +2 -2
  260. package/dist/backend/runtime-abi.js +2 -2
  261. package/dist/backend/runtime-pack-core.d.ts +2 -1
  262. package/dist/backend/runtime-pack-core.js +2 -1
  263. package/dist/backend/runtime-pack-core.js.map +1 -1
  264. package/dist/backend/runtime-pack-targets.test.js +5 -1
  265. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  266. package/dist/backend/runtime-pack.d.ts +0 -21
  267. package/dist/backend/runtime-pack.js +0 -29
  268. package/dist/backend/runtime-pack.js.map +1 -1
  269. package/dist/backend/runtime-pack.test.js +10 -69
  270. package/dist/backend/runtime-pack.test.js.map +1 -1
  271. package/dist/backend/stack-observations.d.ts +2 -1
  272. package/dist/backend/stack-observations.js +67 -42
  273. package/dist/backend/stack-observations.js.map +1 -1
  274. package/dist/backend/target-diagnostics.js +33 -1
  275. package/dist/backend/target-diagnostics.js.map +1 -1
  276. package/dist/backend/warm-cache.js +4 -0
  277. package/dist/backend/warm-cache.js.map +1 -1
  278. package/dist/cli/command.js +26 -6
  279. package/dist/cli/command.js.map +1 -1
  280. package/dist/cli/usage.d.ts +5 -1
  281. package/dist/cli/usage.js +10 -5
  282. package/dist/cli/usage.js.map +1 -1
  283. package/dist/compat/fetch-profile.js +1 -1
  284. package/dist/compat/fetch-profile.js.map +1 -1
  285. package/dist/contracts/check.js +5 -4
  286. package/dist/contracts/check.js.map +1 -1
  287. package/dist/contracts/int32-elements.js +10 -2
  288. package/dist/contracts/int32-elements.js.map +1 -1
  289. package/dist/coverage/report.d.ts +7 -2
  290. package/dist/coverage/report.js +30 -3
  291. package/dist/coverage/report.js.map +1 -1
  292. package/dist/coverage/verdict-cache.d.ts +1 -0
  293. package/dist/coverage/verdict-cache.js +4 -0
  294. package/dist/coverage/verdict-cache.js.map +1 -1
  295. package/dist/coverage/verdict-semantic.js +4 -0
  296. package/dist/coverage/verdict-semantic.js.map +1 -1
  297. package/dist/diagnostics/diagnostic.d.ts +4 -0
  298. package/dist/diagnostics/diagnostic.js.map +1 -1
  299. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  300. package/dist/diagnostics/dynamic-tier.js +57 -0
  301. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  302. package/dist/diagnostics/envelope.d.ts +5 -1
  303. package/dist/diagnostics/envelope.js +6 -2
  304. package/dist/diagnostics/envelope.js.map +1 -1
  305. package/dist/executable/executable-cache.d.ts +25 -1
  306. package/dist/executable/executable-cache.js +60 -7
  307. package/dist/executable/executable-cache.js.map +1 -1
  308. package/dist/executable/executable-cache.test.js +46 -3
  309. package/dist/executable/executable-cache.test.js.map +1 -1
  310. package/dist/executable/prepare.js +3 -1
  311. package/dist/executable/prepare.js.map +1 -1
  312. package/dist/frontend/analysis.js +1 -0
  313. package/dist/frontend/analysis.js.map +1 -1
  314. package/dist/frontend/decl-projection.d.ts +41 -0
  315. package/dist/frontend/decl-projection.js +854 -0
  316. package/dist/frontend/decl-projection.js.map +1 -0
  317. package/dist/frontend/decl-projection.test.d.ts +1 -0
  318. package/dist/frontend/decl-projection.test.js +30 -0
  319. package/dist/frontend/decl-projection.test.js.map +1 -0
  320. package/dist/frontend/dispose-hook.d.ts +2 -0
  321. package/dist/frontend/dispose-hook.js +14 -0
  322. package/dist/frontend/dispose-hook.js.map +1 -0
  323. package/dist/frontend/dts-paths.d.ts +15 -0
  324. package/dist/frontend/dts-paths.js +25 -0
  325. package/dist/frontend/dts-paths.js.map +1 -1
  326. package/dist/frontend/input-tracker.d.ts +6 -0
  327. package/dist/frontend/input-tracker.js +51 -28
  328. package/dist/frontend/input-tracker.js.map +1 -1
  329. package/dist/frontend/input-tracker.test.js +19 -0
  330. package/dist/frontend/input-tracker.test.js.map +1 -1
  331. package/dist/frontend/jsx-entities.d.ts +4 -0
  332. package/dist/frontend/jsx-entities.js +259 -0
  333. package/dist/frontend/jsx-entities.js.map +1 -0
  334. package/dist/frontend/jsx-source.d.ts +71 -0
  335. package/dist/frontend/jsx-source.js +781 -0
  336. package/dist/frontend/jsx-source.js.map +1 -0
  337. package/dist/frontend/jsx-source.test.d.ts +1 -0
  338. package/dist/frontend/jsx-source.test.js +200 -0
  339. package/dist/frontend/jsx-source.test.js.map +1 -0
  340. package/dist/frontend/literal-values.test.js +8 -9
  341. package/dist/frontend/literal-values.test.js.map +1 -1
  342. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  343. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  344. package/dist/frontend/lowering/array-values.js +103 -4
  345. package/dist/frontend/lowering/array-values.js.map +1 -1
  346. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  347. package/dist/frontend/lowering/binding-analysis.js +2 -2
  348. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  349. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  350. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  351. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  353. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  355. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  356. package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
  357. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  358. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  359. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  360. package/dist/frontend/lowering/builtins/child-process.js +13 -2
  361. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  362. package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
  363. package/dist/frontend/lowering/builtins/crypto.js +136 -5
  364. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  365. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  366. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  367. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  368. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  369. package/dist/frontend/lowering/builtins/dates.js +55 -26
  370. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  372. package/dist/frontend/lowering/builtins/dh.js +151 -0
  373. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  374. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  375. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  376. package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
  377. package/dist/frontend/lowering/builtins/ecdh.js +7 -7
  378. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
  379. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  380. package/dist/frontend/lowering/builtins/errors.js +110 -0
  381. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  382. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  383. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  384. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  385. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  386. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  387. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  388. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  389. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  390. package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
  391. package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
  392. package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
  393. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  394. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  395. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/json.js +2 -1
  397. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  398. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  399. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  400. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  401. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  402. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  403. package/dist/frontend/lowering/builtins/numbers.js +18 -6
  404. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  405. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  406. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  407. package/dist/frontend/lowering/builtins/performance.js +3 -2
  408. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  409. package/dist/frontend/lowering/builtins/process.js +3 -2
  410. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  411. package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
  412. package/dist/frontend/lowering/builtins/promises.js +91 -4
  413. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  414. package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
  415. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  416. package/dist/frontend/lowering/builtins/readline.d.ts +7 -2
  417. package/dist/frontend/lowering/builtins/readline.js +58 -9
  418. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/strings.js +13 -5
  420. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  421. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  422. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  423. package/dist/frontend/lowering/builtins/timers.js +1 -1
  424. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  425. package/dist/frontend/lowering/builtins/url.js +28 -4
  426. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/v8.js +2 -1
  428. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  429. package/dist/frontend/lowering/builtins/webassembly.js +6 -3
  430. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  431. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  432. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  433. package/dist/frontend/lowering/call-arguments.js +2 -1
  434. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  435. package/dist/frontend/lowering/call-signatures.js +13 -6
  436. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  437. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  438. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  439. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  440. package/dist/frontend/lowering/class-assertions.js +3 -2
  441. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  442. package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
  443. package/dist/frontend/lowering/class-callbacks.js +82 -12
  444. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  445. package/dist/frontend/lowering/class-construction.d.ts +6 -2
  446. package/dist/frontend/lowering/class-construction.js +25 -16
  447. package/dist/frontend/lowering/class-construction.js.map +1 -1
  448. package/dist/frontend/lowering/class-descriptors.js +1 -1
  449. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  450. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +73 -2
  451. package/dist/frontend/lowering/class-dynamic-dispatch.js +1334 -259
  452. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  453. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +124 -0
  454. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  455. package/dist/frontend/lowering/class-iterables.d.ts +2 -1
  456. package/dist/frontend/lowering/class-iterables.js +9 -1
  457. package/dist/frontend/lowering/class-iterables.js.map +1 -1
  458. package/dist/frontend/lowering/class-method-mutations.js +35 -9
  459. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  460. package/dist/frontend/lowering/class-method-values.js +1 -1
  461. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  462. package/dist/frontend/lowering/class-protocols.d.ts +7 -0
  463. package/dist/frontend/lowering/class-protocols.js +64 -4
  464. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  465. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  466. package/dist/frontend/lowering/class-prototypes.js +67 -5
  467. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  468. package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
  469. package/dist/frontend/lowering/class-runtime-statics.js +29 -4
  470. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  471. package/dist/frontend/lowering/class-to-primitive.js +25 -5
  472. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  473. package/dist/frontend/lowering/class-unions.js +2 -1
  474. package/dist/frontend/lowering/class-unions.js.map +1 -1
  475. package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
  476. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  477. package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
  478. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  479. package/dist/frontend/lowering/coercions/structural.js +99 -8
  480. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  481. package/dist/frontend/lowering/coercions/unions.js +8 -7
  482. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  483. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  484. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  485. package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
  486. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  487. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
  488. package/dist/frontend/lowering/containers/array-callbacks.js +352 -31
  489. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  490. package/dist/frontend/lowering/containers/array-concat.js +12 -1
  491. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  492. package/dist/frontend/lowering/containers/array-construction.js +25 -4
  493. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  494. package/dist/frontend/lowering/containers/array-methods.js +21 -5
  495. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  496. package/dist/frontend/lowering/containers/array-pipelines.js +21 -9
  497. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  498. package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
  499. package/dist/frontend/lowering/containers/bytes.js +131 -29
  500. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  501. package/dist/frontend/lowering/containers/callback-arguments.js +55 -2
  502. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  503. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  504. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  505. package/dist/frontend/lowering/containers/collection-methods.js +15 -9
  506. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  507. package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
  508. package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
  509. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
  510. package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
  511. package/dist/frontend/lowering/containers/indexed-objects.js +54 -14
  512. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  513. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  514. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  515. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  516. package/dist/frontend/lowering/containers/string-and-regexp.js +87 -14
  517. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  518. package/dist/frontend/lowering/containers/string-replacement.js +45 -20
  519. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  520. package/dist/frontend/lowering/cycle-initialization.js +25 -4
  521. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  522. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  523. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  524. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  525. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  526. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  527. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  528. package/dist/frontend/lowering/dispatch-sites.js +218 -0
  529. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  530. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  531. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  532. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  533. package/dist/frontend/lowering/divergences.js +9 -1
  534. package/dist/frontend/lowering/divergences.js.map +1 -1
  535. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  536. package/dist/frontend/lowering/dyn-streams.js +1 -1
  537. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  538. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  539. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  540. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  541. package/dist/frontend/lowering/error-methods.js +51 -2
  542. package/dist/frontend/lowering/error-methods.js.map +1 -1
  543. package/dist/frontend/lowering/expressions/array-literals.js +62 -0
  544. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  545. package/dist/frontend/lowering/expressions/binary.js +81 -5
  546. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  547. package/dist/frontend/lowering/expressions/element-access.js +107 -14
  548. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  549. package/dist/frontend/lowering/expressions/identifiers.js +79 -11
  550. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  551. package/dist/frontend/lowering/expressions/narrowing.js +130 -6
  552. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  553. package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
  554. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  555. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -3
  556. package/dist/frontend/lowering/expressions/object-literals.js +164 -56
  557. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  558. package/dist/frontend/lowering/expressions/optional-chains.js +17 -5
  559. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  560. package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
  561. package/dist/frontend/lowering/expressions/property-access.js +211 -17
  562. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  563. package/dist/frontend/lowering/expressions/relational.js +267 -30
  564. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  565. package/dist/frontend/lowering/expressions/union-fields.js +4 -0
  566. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  567. package/dist/frontend/lowering/expressions/updates.js +85 -12
  568. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  569. package/dist/frontend/lowering/frozen-records.d.ts +28 -0
  570. package/dist/frontend/lowering/frozen-records.js +322 -0
  571. package/dist/frontend/lowering/frozen-records.js.map +1 -0
  572. package/dist/frontend/lowering/function-returns.js +49 -0
  573. package/dist/frontend/lowering/function-returns.js.map +1 -1
  574. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  575. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  576. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  577. package/dist/frontend/lowering/generic-functions.d.ts +42 -1
  578. package/dist/frontend/lowering/generic-functions.js +455 -20
  579. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  580. package/dist/frontend/lowering/intern-tables.js +2 -1
  581. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  582. package/dist/frontend/lowering/iterable-values.d.ts +49 -0
  583. package/dist/frontend/lowering/iterable-values.js +297 -0
  584. package/dist/frontend/lowering/iterable-values.js.map +1 -0
  585. package/dist/frontend/lowering/iterator-adapters.js +195 -9
  586. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  587. package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
  588. package/dist/frontend/lowering/js-class-fields.js +45 -10
  589. package/dist/frontend/lowering/js-class-fields.js.map +1 -1
  590. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  591. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  592. package/dist/frontend/lowering/json-require.js +2 -1
  593. package/dist/frontend/lowering/json-require.js.map +1 -1
  594. package/dist/frontend/lowering/key-order-witness.d.ts +24 -4
  595. package/dist/frontend/lowering/key-order-witness.js +790 -25
  596. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  597. package/dist/frontend/lowering/key-order-witness.test.js +466 -10
  598. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  599. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  600. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  601. package/dist/frontend/lowering/lower-assert.js +6 -5
  602. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  603. package/dist/frontend/lowering/lower-async-iteration.js +7 -2
  604. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  605. package/dist/frontend/lowering/lower-calls.d.ts +11 -0
  606. package/dist/frontend/lowering/lower-calls.js +776 -126
  607. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  608. package/dist/frontend/lowering/lower-classes.d.ts +29 -2
  609. package/dist/frontend/lowering/lower-classes.js +581 -46
  610. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  611. package/dist/frontend/lowering/lower-dgram.js +6 -3
  612. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  613. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  614. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  615. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  616. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  617. package/dist/frontend/lowering/lower-exprs.js +126 -13
  618. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  619. package/dist/frontend/lowering/lower-functions.d.ts +11 -0
  620. package/dist/frontend/lowering/lower-functions.js +387 -72
  621. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  622. package/dist/frontend/lowering/lower-generators.js +41 -31
  623. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  624. package/dist/frontend/lowering/lower-global-value.js +6 -3
  625. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  626. package/dist/frontend/lowering/lower-inspect.js +28 -12
  627. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  628. package/dist/frontend/lowering/lower-mixins.js +2 -1
  629. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  630. package/dist/frontend/lowering/lower-mock.js +2 -1
  631. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  632. package/dist/frontend/lowering/lower-modules.js +47 -5
  633. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  634. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  635. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  636. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  637. package/dist/frontend/lowering/lower-namespaces.js +9 -4
  638. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  639. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  640. package/dist/frontend/lowering/lower-server.js +239 -61
  641. package/dist/frontend/lowering/lower-server.js.map +1 -1
  642. package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
  643. package/dist/frontend/lowering/lower-stdlib.js +42 -10
  644. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  645. package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
  646. package/dist/frontend/lowering/lower-stmts.js +622 -68
  647. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  648. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  649. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  650. package/dist/frontend/lowering/lower-stream.d.ts +20 -2
  651. package/dist/frontend/lowering/lower-stream.js +2055 -318
  652. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  653. package/dist/frontend/lowering/lower-timers.js +4 -3
  654. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  655. package/dist/frontend/lowering/lowerer.d.ts +197 -29
  656. package/dist/frontend/lowering/lowerer.js +862 -84
  657. package/dist/frontend/lowering/lowerer.js.map +1 -1
  658. package/dist/frontend/lowering/lowerer.test.js +21 -9
  659. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  660. package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
  661. package/dist/frontend/lowering/module-namespace-elements.js +82 -5
  662. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  663. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  664. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  665. package/dist/frontend/lowering/native-ffi.js +1 -1
  666. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  667. package/dist/frontend/lowering/new-target.d.ts +12 -0
  668. package/dist/frontend/lowering/new-target.js +280 -0
  669. package/dist/frontend/lowering/new-target.js.map +1 -0
  670. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  671. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  672. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  673. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  674. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  675. package/dist/frontend/lowering/private-brands.js +66 -15
  676. package/dist/frontend/lowering/private-brands.js.map +1 -1
  677. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  678. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  679. package/dist/frontend/lowering/require-initialization.js +2 -1
  680. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  681. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  682. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  683. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  684. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  685. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  686. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  687. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  688. package/dist/frontend/lowering/site-dependencies.js +84 -0
  689. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  690. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  691. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  692. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  693. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  694. package/dist/frontend/lowering/stable-names.js +35 -0
  695. package/dist/frontend/lowering/stable-names.js.map +1 -0
  696. package/dist/frontend/lowering/static-typeof.d.ts +2 -2
  697. package/dist/frontend/lowering/static-typeof.js +42 -3
  698. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  699. package/dist/frontend/lowering/strict-equality.js +2 -1
  700. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  701. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  702. package/dist/frontend/lowering/structural-positions.js +108 -0
  703. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  704. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  705. package/dist/frontend/lowering/surfaces.js +60 -32
  706. package/dist/frontend/lowering/surfaces.js.map +1 -1
  707. package/dist/frontend/lowering/undefined-index.d.ts +27 -0
  708. package/dist/frontend/lowering/undefined-index.js +82 -0
  709. package/dist/frontend/lowering/undefined-index.js.map +1 -0
  710. package/dist/frontend/lowering/var-hoisting.js +66 -16
  711. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  712. package/dist/frontend/lowering/width-lift.d.ts +18 -0
  713. package/dist/frontend/npm-static-bundled-chunks.js +9 -11
  714. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  715. package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
  716. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  717. package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
  718. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  719. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  720. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  721. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  722. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  723. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  724. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  725. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  726. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  727. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  728. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  729. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  730. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  731. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  732. package/dist/frontend/npm-static-type-exports.js +261 -0
  733. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  734. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  735. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  736. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  737. package/dist/frontend/npm-static-umd.d.ts +6 -0
  738. package/dist/frontend/npm-static-umd.js +203 -0
  739. package/dist/frontend/npm-static-umd.js.map +1 -0
  740. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  741. package/dist/frontend/npm-static-umd.test.js +105 -0
  742. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  743. package/dist/frontend/npm-static.d.ts +8 -0
  744. package/dist/frontend/npm-static.js +51 -22
  745. package/dist/frontend/npm-static.js.map +1 -1
  746. package/dist/frontend/package-shims.d.ts +3 -0
  747. package/dist/frontend/package-shims.js +71 -8
  748. package/dist/frontend/package-shims.js.map +1 -1
  749. package/dist/frontend/pipeline.js +18 -10
  750. package/dist/frontend/pipeline.js.map +1 -1
  751. package/dist/frontend/process-fork.d.ts +25 -0
  752. package/dist/frontend/process-fork.js +2 -0
  753. package/dist/frontend/process-fork.js.map +1 -0
  754. package/dist/frontend/program.d.ts +21 -1
  755. package/dist/frontend/program.js +586 -74
  756. package/dist/frontend/program.js.map +1 -1
  757. package/dist/frontend/program.test.js +44 -4
  758. package/dist/frontend/program.test.js.map +1 -1
  759. package/dist/frontend/services.d.ts +6 -0
  760. package/dist/frontend/services.js +18 -0
  761. package/dist/frontend/services.js.map +1 -1
  762. package/dist/frontend/token-equivalence.d.ts +3 -0
  763. package/dist/frontend/token-equivalence.js +409 -0
  764. package/dist/frontend/token-equivalence.js.map +1 -0
  765. package/dist/frontend/token-equivalence.test.d.ts +1 -0
  766. package/dist/frontend/token-equivalence.test.js +67 -0
  767. package/dist/frontend/token-equivalence.test.js.map +1 -0
  768. package/dist/frontend/ts7/ast-node.d.ts +43 -7
  769. package/dist/frontend/ts7/ast-node.js +1176 -129
  770. package/dist/frontend/ts7/ast-node.js.map +1 -1
  771. package/dist/frontend/ts7/ast-node.test.js +84 -0
  772. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  773. package/dist/frontend/ts7/ast-wire.d.ts +29 -3
  774. package/dist/frontend/ts7/ast-wire.js +144 -31
  775. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  776. package/dist/frontend/ts7/ast-wire.test.js +23 -0
  777. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  778. package/dist/frontend/ts7/ast.d.ts +23 -2
  779. package/dist/frontend/ts7/ast.js +143 -2
  780. package/dist/frontend/ts7/ast.js.map +1 -1
  781. package/dist/frontend/ts7/checker-backend.d.ts +3 -4
  782. package/dist/frontend/ts7/checker-backend.js +2 -2
  783. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  784. package/dist/frontend/ts7/checker-backend.test.js +5 -9
  785. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  786. package/dist/frontend/ts7/checker.d.ts +17 -1
  787. package/dist/frontend/ts7/checker.js +82 -1
  788. package/dist/frontend/ts7/checker.js.map +1 -1
  789. package/dist/frontend/ts7/checker.test.js +9 -6
  790. package/dist/frontend/ts7/checker.test.js.map +1 -1
  791. package/dist/frontend/ts7/enums.d.ts +3 -3
  792. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  793. package/dist/frontend/ts7/enums.generated.js +21 -0
  794. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  795. package/dist/frontend/ts7/enums.js +19 -0
  796. package/dist/frontend/ts7/enums.js.map +1 -1
  797. package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
  798. package/dist/frontend/ts7/lib-diagnostics.js +307 -0
  799. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
  800. package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
  801. package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
  802. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
  803. package/dist/frontend/ts7/program-host.d.ts +7 -0
  804. package/dist/frontend/ts7/program-host.js +30 -4
  805. package/dist/frontend/ts7/program-host.js.map +1 -1
  806. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  807. package/dist/frontend/ts7/semantic-checker.js +25 -20
  808. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  809. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  810. package/dist/frontend/ts7/semantic-json.js +146 -0
  811. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  812. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  813. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  814. package/dist/frontend/ts7/semantic-model.d.ts +15 -0
  815. package/dist/frontend/ts7/semantic-model.js +67 -19
  816. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  817. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  818. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  819. package/dist/frontend/ts7/session.d.ts +14 -1
  820. package/dist/frontend/ts7/session.js +23 -1
  821. package/dist/frontend/ts7/session.js.map +1 -1
  822. package/dist/frontend/tsc-codes.d.ts +1 -1
  823. package/dist/frontend/tsc-codes.js +7 -0
  824. package/dist/frontend/tsc-codes.js.map +1 -1
  825. package/dist/frontend/type-mapper.d.ts +51 -7
  826. package/dist/frontend/type-mapper.js +456 -43
  827. package/dist/frontend/type-mapper.js.map +1 -1
  828. package/dist/frontend/type-mapper.test.js +1 -1
  829. package/dist/frontend/type-mapper.test.js.map +1 -1
  830. package/dist/frontend-process-args.d.ts +4 -0
  831. package/dist/frontend-process-args.js +52 -0
  832. package/dist/frontend-process-args.js.map +1 -0
  833. package/dist/frontend-process-args.test.d.ts +1 -0
  834. package/dist/frontend-process-args.test.js +47 -0
  835. package/dist/frontend-process-args.test.js.map +1 -0
  836. package/dist/frontend-process.d.ts +1 -0
  837. package/dist/frontend-process.js +23 -0
  838. package/dist/frontend-process.js.map +1 -0
  839. package/dist/heap-collection.d.ts +16 -0
  840. package/dist/heap-collection.js +42 -0
  841. package/dist/heap-collection.js.map +1 -0
  842. package/dist/heap-collection.test.d.ts +1 -0
  843. package/dist/heap-collection.test.js +59 -0
  844. package/dist/heap-collection.test.js.map +1 -0
  845. package/dist/heap-pressure.d.ts +2 -0
  846. package/dist/heap-pressure.js +12 -0
  847. package/dist/heap-pressure.js.map +1 -0
  848. package/dist/index.d.ts +2 -0
  849. package/dist/index.js +435 -89
  850. package/dist/index.js.map +1 -1
  851. package/dist/ir/analysis.js +5 -3
  852. package/dist/ir/analysis.js.map +1 -1
  853. package/dist/ir/array-length-stability.d.ts +4 -0
  854. package/dist/ir/array-length-stability.js +26 -6
  855. package/dist/ir/array-length-stability.js.map +1 -1
  856. package/dist/ir/array-length-stability.test.js +49 -0
  857. package/dist/ir/array-length-stability.test.js.map +1 -1
  858. package/dist/ir/builtin-effects.d.ts +7 -0
  859. package/dist/ir/builtin-effects.js +80 -0
  860. package/dist/ir/builtin-effects.js.map +1 -1
  861. package/dist/ir/builtin-signatures.d.ts +7 -1
  862. package/dist/ir/builtin-signatures.js +303 -21
  863. package/dist/ir/builtin-signatures.js.map +1 -1
  864. package/dist/ir/callback-specialization.d.ts +2 -1
  865. package/dist/ir/callback-specialization.js +23 -18
  866. package/dist/ir/callback-specialization.js.map +1 -1
  867. package/dist/ir/char-unit-locals.d.ts +19 -0
  868. package/dist/ir/char-unit-locals.js +185 -0
  869. package/dist/ir/char-unit-locals.js.map +1 -0
  870. package/dist/ir/char-unit-locals.test.d.ts +1 -0
  871. package/dist/ir/char-unit-locals.test.js +94 -0
  872. package/dist/ir/char-unit-locals.test.js.map +1 -0
  873. package/dist/ir/final-fields.d.ts +3 -1
  874. package/dist/ir/final-fields.js +15 -17
  875. package/dist/ir/final-fields.js.map +1 -1
  876. package/dist/ir/function-references.d.ts +2 -0
  877. package/dist/ir/function-references.js +2 -0
  878. package/dist/ir/function-references.js.map +1 -1
  879. package/dist/ir/function-references.test.js +5 -0
  880. package/dist/ir/function-references.test.js.map +1 -1
  881. package/dist/ir/initializer-bindings.d.ts +2 -1
  882. package/dist/ir/initializer-bindings.js +27 -20
  883. package/dist/ir/initializer-bindings.js.map +1 -1
  884. package/dist/ir/int32-arrays.d.ts +108 -0
  885. package/dist/ir/int32-arrays.js +831 -0
  886. package/dist/ir/int32-arrays.js.map +1 -0
  887. package/dist/ir/int32-slots.d.ts +36 -6
  888. package/dist/ir/int32-slots.js +370 -171
  889. package/dist/ir/int32-slots.js.map +1 -1
  890. package/dist/ir/int32-slots.test.js +3 -1
  891. package/dist/ir/int32-slots.test.js.map +1 -1
  892. package/dist/ir/integer-loop-facts.d.ts +9 -4
  893. package/dist/ir/integer-loop-facts.js +93 -18
  894. package/dist/ir/integer-loop-facts.js.map +1 -1
  895. package/dist/ir/integer-loops.d.ts +49 -0
  896. package/dist/ir/integer-loops.js +202 -40
  897. package/dist/ir/integer-loops.js.map +1 -1
  898. package/dist/ir/integer-loops.test.js +211 -1
  899. package/dist/ir/integer-loops.test.js.map +1 -1
  900. package/dist/ir/integer-ranges.d.ts +5 -0
  901. package/dist/ir/integer-ranges.js +125 -12
  902. package/dist/ir/integer-ranges.js.map +1 -1
  903. package/dist/ir/integer-ranges.test.js +94 -0
  904. package/dist/ir/integer-ranges.test.js.map +1 -1
  905. package/dist/ir/ir.d.ts +87 -9
  906. package/dist/ir/ir.js +61 -2
  907. package/dist/ir/ir.js.map +1 -1
  908. package/dist/ir/ir.test.js +21 -1
  909. package/dist/ir/ir.test.js.map +1 -1
  910. package/dist/ir/js-ic.d.ts +19 -2
  911. package/dist/ir/js-ic.js +95 -11
  912. package/dist/ir/js-ic.js.map +1 -1
  913. package/dist/ir/js-ic.test.js +188 -0
  914. package/dist/ir/js-ic.test.js.map +1 -1
  915. package/dist/ir/node-index.d.ts +57 -0
  916. package/dist/ir/node-index.js +215 -0
  917. package/dist/ir/node-index.js.map +1 -0
  918. package/dist/ir/paired-while-loops.d.ts +25 -0
  919. package/dist/ir/paired-while-loops.js +335 -0
  920. package/dist/ir/paired-while-loops.js.map +1 -0
  921. package/dist/ir/paired-while-loops.test.d.ts +1 -0
  922. package/dist/ir/paired-while-loops.test.js +163 -0
  923. package/dist/ir/paired-while-loops.test.js.map +1 -0
  924. package/dist/ir/parameter-versions.d.ts +25 -0
  925. package/dist/ir/parameter-versions.js +300 -0
  926. package/dist/ir/parameter-versions.js.map +1 -0
  927. package/dist/ir/runtime-features.d.ts +60 -15
  928. package/dist/ir/runtime-features.js +276 -35
  929. package/dist/ir/runtime-features.js.map +1 -1
  930. package/dist/ir/serialize.d.ts +12 -2
  931. package/dist/ir/serialize.js +16 -3
  932. package/dist/ir/serialize.js.map +1 -1
  933. package/dist/ir/serialize.test.js +17 -0
  934. package/dist/ir/serialize.test.js.map +1 -1
  935. package/dist/ir/tiers.js +1 -0
  936. package/dist/ir/tiers.js.map +1 -1
  937. package/dist/ir/traverse.d.ts +2 -0
  938. package/dist/ir/traverse.js +29 -5
  939. package/dist/ir/traverse.js.map +1 -1
  940. package/dist/ir/validate.js +171 -45
  941. package/dist/ir/validate.js.map +1 -1
  942. package/dist/library/ir-policy.js +12 -0
  943. package/dist/library/ir-policy.js.map +1 -1
  944. package/dist/library/library-cache.d.ts +2 -0
  945. package/dist/library/library-cache.js.map +1 -1
  946. package/dist/library/prepare.js +2 -0
  947. package/dist/library/prepare.js.map +1 -1
  948. package/dist/native/cache.d.ts +6 -1
  949. package/dist/native/cache.js +28 -5
  950. package/dist/native/cache.js.map +1 -1
  951. package/dist/native/cache.test.js +16 -2
  952. package/dist/native/cache.test.js.map +1 -1
  953. package/dist/native/cli.js +26 -1
  954. package/dist/native/cli.js.map +1 -1
  955. package/dist/native/compiler.js +8 -6
  956. package/dist/native/compiler.js.map +1 -1
  957. package/dist/native/executable-cache.d.ts +1 -1
  958. package/dist/native/executable-cache.js +2 -2
  959. package/dist/native/executable-cache.js.map +1 -1
  960. package/dist/native/prepare.d.ts +3 -1
  961. package/dist/native/prepare.js +123 -31
  962. package/dist/native/prepare.js.map +1 -1
  963. package/dist/native/prepare.test.js +78 -18
  964. package/dist/native/prepare.test.js.map +1 -1
  965. package/dist/native/sanitizer.test.js +6 -1
  966. package/dist/native/sanitizer.test.js.map +1 -1
  967. package/dist/native/text-file.d.ts +13 -3
  968. package/dist/native/text-file.js +63 -9
  969. package/dist/native/text-file.js.map +1 -1
  970. package/dist/native/text-file.test.d.ts +1 -0
  971. package/dist/native/text-file.test.js +49 -0
  972. package/dist/native/text-file.test.js.map +1 -0
  973. package/dist/native/toolchain.js +4 -4
  974. package/dist/native/toolchain.js.map +1 -1
  975. package/dist/native/toolchain.test.js +3 -3
  976. package/dist/native/toolchain.test.js.map +1 -1
  977. package/dist/startup-cache.d.ts +1 -0
  978. package/dist/startup-cache.js +1 -0
  979. package/dist/startup-cache.js.map +1 -1
  980. package/dist/text-parts.d.ts +7 -0
  981. package/dist/text-parts.js +44 -0
  982. package/dist/text-parts.js.map +1 -1
  983. package/dist/text-parts.test.d.ts +1 -0
  984. package/dist/text-parts.test.js +46 -0
  985. package/dist/text-parts.test.js.map +1 -0
  986. package/dist/timing.d.ts +9 -2
  987. package/dist/timing.js +7 -4
  988. package/dist/timing.js.map +1 -1
  989. package/dist/wasm/translate.d.ts +4 -0
  990. package/dist/wasm/translate.js +2 -2
  991. package/dist/wasm/translate.js.map +1 -1
  992. package/package.json +21 -21
  993. package/shims/chalk/v5.ts +688 -0
  994. package/shims/hono-node-server/v2.ts +645 -0
  995. package/shims/hot-shots/client.ts +1126 -0
  996. package/shims/hot-shots/v8-unix-dgram.ts +8 -0
  997. package/shims/hot-shots/v8.ts +8 -0
  998. package/shims/undici/core/client.ts +4 -4
  999. package/surface-manifest.json +44 -52
@@ -1,3 +1,7 @@
1
+ import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
2
+ import { predeclareForwardClass } from "./lower-stmts.js";
3
+ import { lowerDateStaticCall } from "./builtins/dates.js";
4
+ import { keyedHelperName } from "./stable-names.js";
1
5
  import { lowerValueReturningConstructorNew } from "./js-dynamic-objects.js";
2
6
  import { adaptPromiseExecutor } from "./promise-executor-adapter.js";
3
7
  import { dynUndefinedExpr, nodeThrowExpr, varRef } from "../../ir/build.js";
@@ -29,7 +33,7 @@ import { bodyReadsArguments } from "../arguments-usage.js";
29
33
  import { errorNameAfterField, errorViewFields } from "./error-name-order.js";
30
34
  import { checkedJsDocumentedParameter, documentedParameter, generatorMeta, } from "./call-signatures.js";
31
35
  import { omittedArgFor } from "./call-arguments.js";
32
- import { isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
36
+ import { checkerTypeDescription, isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
33
37
  import { canonicalBuiltinModule, cjsClassExprWholeExportOf, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, locOf, requireSpecOf, } from "../program.js";
34
38
  import { PoisonError, dynFallbackType, jsFuncNameOf, newFnCtx, own } from "./lowerer.js";
35
39
  import { isAssertClassNew } from "./assert-instances.js";
@@ -43,19 +47,19 @@ import { lowerSearchParamsNew } from "./builtins/url.js";
43
47
  import { lowerTextCodecNew } from "./builtins/text-codecs.js";
44
48
  import { lowerBroadcastChannelNew, lowerMessageChannelNew, lowerWorkerNew, } from "./builtins/workers.js";
45
49
  import { unsupportedPackageValueDiag, unsupportedDiag, } from "../../diagnostics/diagnostic.js";
46
- 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";
47
51
  import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod, eventTargetRootOf, eventTargetSuperCall, lowerEventTargetMethodCall, } from "./lower-event-target.js";
48
52
  import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
49
53
  import { declSymbolOf } from "./lower-modules.js";
50
54
  import { classSymbolKeyOf, classSymbolKeyOfSymbol, symbolFieldDisplayName, } from "./symbol-fields.js";
51
- import { lowerHttpAgentNew, lowerHttpServerNew } from "./lower-server.js";
55
+ import { lowerHttpAgentNew, lowerHttpServerNew, lowerTlsSocketNew } from "./lower-server.js";
52
56
  import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, ambientUndefinedFnSymbolOf, contextualUndefReadType, fenceEarlyAliasUse, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "./lower-namespaces.js";
53
57
  import { mixinResultBindingClassOf } from "./lower-mixins.js";
54
58
  import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./static-this.js";
55
59
  import { lowerUrlNew } from "./lower-url.js";
56
60
  import { isNativeProxyInitializer, lowerNativeProxy } from "./expressions/native-proxy.js";
57
61
  import { classStaticDataFor } from "./class-static-data.js";
58
- import { construction, constructionPrefix } from "./js-class-fields.js";
62
+ import { accessorInterceptsBase, accessorNames, construction, constructionPrefix, } from "./js-class-fields.js";
59
63
  import { lowerObjectFactoryNew } from "./object-factory-new.js";
60
64
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
61
65
  import { lowerInstanceConstructorNew } from "./class-instance-constructor.js";
@@ -64,6 +68,7 @@ import { constructionEscape } from "./construction-escapes.js";
64
68
  import { checkedClassConstruction, checkedClassConstructionPacked } from "./class-construction.js";
65
69
  import { initializeRuntimeStatics, hasRuntimeStatics } from "./class-runtime-statics.js";
66
70
  import { reflectedClassStaticMethodValue } from "./class-method-values.js";
71
+ import { identifierReadSymbol } from "./surfaces.js";
67
72
  export function returnsOnlyThis(member) {
68
73
  const body = member.body;
69
74
  const last = body?.statements?.nodes.at(-1);
@@ -119,7 +124,7 @@ export function returnsOnlyThisValue(member) {
119
124
  ts.forEachChild(body, visit);
120
125
  return valid;
121
126
  }
122
- function functionLocalClass(decl) {
127
+ export function functionLocalClass(decl) {
123
128
  for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent) {
124
129
  if (ts.isFunctionLike(parent))
125
130
  return true;
@@ -493,8 +498,10 @@ export function registerBuiltinErrorClasses(lowerer) {
493
498
  throwingSetters: [],
494
499
  staticFields: [],
495
500
  };
496
- if (base)
501
+ if (base) {
497
502
  base.subclasses.push(info);
503
+ lowerer.subclassLinks++;
504
+ }
498
505
  lowerer.classes.set(irName, info);
499
506
  }
500
507
  }
@@ -575,8 +582,10 @@ export function registerBuiltinStreamClasses(lowerer) {
575
582
  throwingSetters: [],
576
583
  staticFields: [],
577
584
  };
578
- if (base)
585
+ if (base) {
579
586
  base.subclasses.push(info);
587
+ lowerer.subclassLinks++;
588
+ }
580
589
  lowerer.classes.set(irName, info);
581
590
  }
582
591
  }
@@ -1358,6 +1367,7 @@ mixin) {
1358
1367
  : (computedBase?.classInfo ?? null);
1359
1368
  let genericBase;
1360
1369
  let callableBase;
1370
+ let extendsDate = false;
1361
1371
  let factoryBaseExpression;
1362
1372
  const adoptCallableBase = (expression) => {
1363
1373
  if (familyMode || inst || mixin)
@@ -1538,6 +1548,12 @@ mixin) {
1538
1548
  continue;
1539
1549
  lowerer.unsupported("SC1090", clause, "extending computed expressions");
1540
1550
  }
1551
+ if (!familyMode && !inst && !mixin && lowerer.isStdlibGlobal(t.expression, "Date")) {
1552
+ if (t.typeArguments?.nodes)
1553
+ lowerer.unsupported("SC1090", t, "extending generic classes");
1554
+ extendsDate = true;
1555
+ continue;
1556
+ }
1541
1557
  const symbol = lowerer.resolveValueSymbol(t.expression);
1542
1558
  // Extending a REBINDABLE decorated class (analysis already ran —
1543
1559
  // this collection is a class expression or a generic
@@ -1679,6 +1695,7 @@ mixin) {
1679
1695
  // receiver-sensitive getters and setters inherited by subclasses.
1680
1696
  const checkedStatics = isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
1681
1697
  ((base && hasRuntimeStatics(base)) ||
1698
+ definedThroughReflection(lowerer, decl) ||
1682
1699
  decl.members.nodes.some((member) => ts.isAccessor(member) &&
1683
1700
  !ts.isPrivateIdentifier(member.name) &&
1684
1701
  member.modifiers?.nodes.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) &&
@@ -1738,7 +1755,8 @@ mixin) {
1738
1755
  };
1739
1756
  for (const member of decl.members.nodes) {
1740
1757
  if ((functionLocalClass(decl) || checkedStatics) &&
1741
- isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
1758
+ (isJsSourceFile(ts.getSourceFileOfNode(decl)) ||
1759
+ (functionLocalClass(decl) && ts.isMethodDeclaration(member))) &&
1742
1760
  (ts.isClassStaticBlockDeclaration(member) ||
1743
1761
  ts
1744
1762
  .getModifiers(member)
@@ -1992,8 +2010,8 @@ mixin) {
1992
2010
  // state, so an override or shadowing field would split-brain.
1993
2011
  // Underscore methods are the SUPPORTED override form — but only
1994
2012
  // the ones the class's own base consumes (a `_read` on a
1995
- // Transform, or `_writev`/`_construct` anywhere, would be consumed
1996
- // 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).
1997
2015
  if (memberName && ts.isIdentifier(memberName)) {
1998
2016
  const streamBase = (() => {
1999
2017
  for (let c = base; c; c = c.base)
@@ -2006,8 +2024,8 @@ mixin) {
2006
2024
  if (STREAM_API_MEMBERS.has(name) || STREAM_PROP_MEMBERS.has(name)) {
2007
2025
  lowerer.unsupported("SC1090", memberName, `overriding the stream member '${name}' (the runtime owns the stream surface)`);
2008
2026
  }
2009
- if (name === "_writev" || name === "_construct") {
2010
- 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)`);
2011
2029
  }
2012
2030
  const accepted = streamCtorShape(streamBase.def.name).accepted;
2013
2031
  for (const [option, methodName] of UNDERSCORE_METHODS) {
@@ -3152,7 +3170,7 @@ mixin) {
3152
3170
  }
3153
3171
  // A subclass field created before anything can observe the instance
3154
3172
  // keeps its type: super() cannot run code that reads it earlier.
3155
- const baseConstruction = base && ![...methods.keys()].some((m) => m.startsWith("get:") || m.startsWith("set:"))
3173
+ const baseConstruction = base && !accessorInterceptsBase(accessorNames(methods.keys()), base)
3156
3174
  ? construction(base)
3157
3175
  : null;
3158
3176
  const sealedPrefix = baseConstruction
@@ -3180,7 +3198,7 @@ mixin) {
3180
3198
  // An own JS callable shadows its prototype declaration.
3181
3199
  // Keep the method in the prototype and store the assigned
3182
3200
  // value in the instance property bag.
3183
- lowerer.prototypeMethodAccesses.set(name, assign);
3201
+ lowerer.noteMethodAccess(name, assign);
3184
3202
  continue;
3185
3203
  }
3186
3204
  const sym = lowerer.checker.getSymbolAtLocation(assign);
@@ -3257,7 +3275,7 @@ mixin) {
3257
3275
  if (!key && (fields.has(fieldName) || hasAccessor(fieldName)))
3258
3276
  continue;
3259
3277
  if (!key && (methods.has(fieldName) || lowerer.findMethodOn(base, fieldName))) {
3260
- lowerer.prototypeMethodAccesses.set(fieldName, lhs);
3278
+ lowerer.noteMethodAccess(fieldName, lhs);
3261
3279
  continue;
3262
3280
  }
3263
3281
  // A key already declared (own or inherited) makes later
@@ -3394,7 +3412,8 @@ mixin) {
3394
3412
  // synthesized constructor forwards the same params to super).
3395
3413
  const ctorParams = ctor && !mixinForwarding
3396
3414
  ? lowerer.paramShapes(ctor.parameters.nodes)
3397
- : (base?.ctorParams ?? (callableBase ? [{ type: DYN, mode: "dynRest" }] : []));
3415
+ : (base?.ctorParams ??
3416
+ (callableBase || extendsDate ? [{ type: DYN, mode: "dynRest" }] : []));
3398
3417
  if (ctor &&
3399
3418
  !mixinForwarding &&
3400
3419
  isJsSourceFile(ts.getSourceFileOfNode(ctor)) &&
@@ -3421,6 +3440,7 @@ mixin) {
3421
3440
  // Redeclared INHERITED fields contribute no slot (their
3422
3441
  // initializers assign the prefix slot).
3423
3442
  fields: [
3443
+ ...(extendsDate ? [{ name: DATE_TIME_FIELD, type: DATE_T }] : []),
3424
3444
  ...(base?.def.fields ?? []),
3425
3445
  ...fieldOrder
3426
3446
  .filter((f) => f.redeclared !== true)
@@ -3452,6 +3472,7 @@ mixin) {
3452
3472
  base,
3453
3473
  ...(genericBase ? { genericBase } : {}),
3454
3474
  ...(callableBase ? { callableBase } : {}),
3475
+ ...(extendsDate ? { extendsDate: true } : {}),
3455
3476
  ...(factoryBaseExpression ? { factoryBaseExpression } : {}),
3456
3477
  subclasses: [],
3457
3478
  throwingSetters,
@@ -3492,6 +3513,7 @@ mixin) {
3492
3513
  path: inst.path,
3493
3514
  family: inst.family,
3494
3515
  bindings: inst.bindings,
3516
+ tsBindings: inst.tsBindings,
3495
3517
  typeArgsText: inst.typeArgsText,
3496
3518
  ordinal: inst.ordinal,
3497
3519
  };
@@ -3522,8 +3544,10 @@ mixin) {
3522
3544
  };
3523
3545
  lowerer.genericClassByDecl.set(decl, info.generic);
3524
3546
  }
3525
- if (base)
3547
+ if (base) {
3526
3548
  base.subclasses.push(info);
3549
+ lowerer.subclassLinks++;
3550
+ }
3527
3551
  lowerer.classes.set(className, info);
3528
3552
  if (computedBase && !functionLocalClass(decl)) {
3529
3553
  info.def.baseValueGlobal = `%g.${className}.computedBase`;
@@ -3625,8 +3649,10 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3625
3649
  .getTypeArguments(ref)
3626
3650
  .slice(0, gci.typeParams.length);
3627
3651
  const mapped = [];
3652
+ const tsArgs = [];
3628
3653
  if (args.length === gci.typeParams.length) {
3629
3654
  for (const a of args) {
3655
+ tsArgs.push(lowerer.typeParamTsResolver(a) ?? a);
3630
3656
  const m = lowerer.mapTypeOf(a, mapArgument);
3631
3657
  if (!m || m.kind === "void") {
3632
3658
  // An UNBOUND type parameter argument (`Box<T>` outside any
@@ -3647,9 +3673,34 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3647
3673
  if (!b)
3648
3674
  return null;
3649
3675
  mapped.push(b);
3650
- }
3651
- }
3652
- const key = mapped.map(typeKey).join(",");
3676
+ const bound = lowerer.typeParamTsBindings?.get(tp);
3677
+ if (bound)
3678
+ tsArgs.push(bound);
3679
+ }
3680
+ }
3681
+ // A type parameter that a conditional type in the class depends on
3682
+ // (`K extends "required" ? T : T | undefined`) is bound to its checker
3683
+ // type for the members, and that type keys the instance: mapType alone
3684
+ // widens a literal, so Field<string, "required"> and Field<string,
3685
+ // "optional"> would otherwise share one layout. The other parameters get
3686
+ // no checker binding, so nothing in the members depends on a literal
3687
+ // the key does not carry.
3688
+ gci.literalSensitive ??= literalSensitiveTypeParams(lowerer, gci);
3689
+ const sensitive = (i) => tsArgs.length === gci.typeParams.length && gci.literalSensitive.has(gci.typeParams[i]);
3690
+ const checkerKey = gci.typeParams
3691
+ .map((_, i) => (sensitive(i) ? `#${tsArgs[i].id}` : "*"))
3692
+ .join(",");
3693
+ const key = mapped.map(typeKey).join(",") + (gci.literalSensitive.size > 0 ? `@${checkerKey}` : "");
3694
+ const literalText = (i) => {
3695
+ const arg = sensitive(i) ? tsArgs[i] : undefined;
3696
+ if (arg?.isStringLiteralType())
3697
+ return JSON.stringify(arg.value);
3698
+ if (arg?.isNumberLiteralType())
3699
+ return String(arg.value);
3700
+ if (arg && arg.flags & ts.TypeFlags.BooleanLiteral)
3701
+ return lowerer.checker.typeToString(arg);
3702
+ return null;
3703
+ };
3653
3704
  const existing = gci.instances.get(key);
3654
3705
  if (existing) {
3655
3706
  if (existing.info)
@@ -3663,18 +3714,40 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3663
3714
  lowerer.unsupported("SC1090", decl, `unbounded generic class instantiation ('${gci.baseName}' exceeded ${MAX_INSTANTIATION_RECURSION} recursive specializations on one demand path)`);
3664
3715
  }
3665
3716
  const ordinal = gci.instances.size;
3666
- const name = `${gci.family.def.name}%${ordinal}`;
3717
+ // The name does not take the checker type ids of the key: a literal
3718
+ // argument is named by its text, another checker type by its
3719
+ // description. Two keys that still describe alike number the later one.
3720
+ const nameKey = mapped.map(typeKey).join(",") +
3721
+ (gci.literalSensitive.size > 0
3722
+ ? `@${gci.typeParams
3723
+ .map((_, i) => sensitive(i)
3724
+ ? (literalText(i) ?? checkerTypeDescription(tsArgs[i], lowerer.typeCtx))
3725
+ : "*")
3726
+ .join(",")}`
3727
+ : "");
3728
+ const prefix = `${gci.family.def.name}%`;
3729
+ const taken = new Set([...gci.instances.values()].map((instance) => instance.name));
3730
+ let name = keyedHelperName(lowerer, prefix, nameKey, "");
3731
+ for (let n = 1; taken.has(name); n++)
3732
+ name = keyedHelperName(lowerer, prefix, `${nameKey}#${n}`, "");
3667
3733
  const entry = { name, info: null };
3668
3734
  gci.instances.set(key, entry);
3669
3735
  const bindings = new Map();
3670
3736
  gci.typeParams.forEach((tp, i) => bindings.set(tp, mapped[i]));
3671
- const rendered = mapped.map((m) => lowerer.fmt(m)).join(", ");
3737
+ const tsBindings = new Map();
3738
+ gci.typeParams.forEach((tp, i) => {
3739
+ if (sensitive(i))
3740
+ tsBindings.set(tp, tsArgs[i]);
3741
+ });
3742
+ const rendered = mapped.map((m, i) => literalText(i) ?? lowerer.fmt(m)).join(", ");
3672
3743
  const typeArgsText = `<${rendered.length > 80 ? rendered.slice(0, 77) + "..." : rendered}>`;
3673
3744
  const prevBindings = lowerer.typeParamBindings;
3745
+ const prevTsBindings = lowerer.typeParamTsBindings;
3674
3746
  const prevContext = lowerer.instantiationContext;
3675
3747
  const previousPath = lowerer.genericInstantiationPath;
3676
3748
  lowerer.genericInstantiationPath = path;
3677
3749
  lowerer.typeParamBindings = bindings;
3750
+ lowerer.typeParamTsBindings = tsBindings;
3678
3751
  lowerer.instantiationContext = `instantiating class '${gci.baseName}' with ${typeArgsText}`;
3679
3752
  try {
3680
3753
  lowerer.collectClassShapeInner(decl, undefined, {
@@ -3682,6 +3755,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3682
3755
  family: gci.family,
3683
3756
  name,
3684
3757
  bindings,
3758
+ tsBindings,
3685
3759
  typeArgsText,
3686
3760
  ordinal,
3687
3761
  });
@@ -3696,6 +3770,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3696
3770
  }
3697
3771
  finally {
3698
3772
  lowerer.typeParamBindings = prevBindings;
3773
+ lowerer.typeParamTsBindings = prevTsBindings;
3699
3774
  lowerer.instantiationContext = prevContext;
3700
3775
  lowerer.genericInstantiationPath = previousPath;
3701
3776
  }
@@ -3710,6 +3785,65 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3710
3785
  lowerer.onLateClassCollected?.(info);
3711
3786
  return { kind: "object", className: name };
3712
3787
  }
3788
+ /** The class's type parameters that a conditional type inside it depends
3789
+ * on: the parameters named within a type node that is a conditional type
3790
+ * or reaches one through the type aliases and interfaces it refers to
3791
+ * (`get(): Value<T, K>` with `type Value<T, K> = K extends "required" ? T
3792
+ * : T | undefined`, also when the alias wraps the conditional in a union
3793
+ * or another alias). Their arguments pick the conditional's branch. */
3794
+ function literalSensitiveTypeParams(lowerer, gci) {
3795
+ const params = new Set(gci.typeParams);
3796
+ const found = new Set();
3797
+ const reaches = new Map();
3798
+ const declarationsReach = (symbol) => {
3799
+ const target = symbol.flags & ts.SymbolFlags.Alias ? lowerer.checker.getAliasedSymbol(symbol) : symbol;
3800
+ const known = reaches.get(target);
3801
+ if (known !== undefined)
3802
+ return known;
3803
+ reaches.set(target, false); // a recursive alias reaches through its other parts
3804
+ const result = target.declarations.some((d) => ts.isTypeAliasDeclaration(d)
3805
+ ? reachesConditional(d.type)
3806
+ : ts.isInterfaceDeclaration(d)
3807
+ ? d.members.nodes.some(reachesConditional)
3808
+ : false);
3809
+ reaches.set(target, result);
3810
+ return result;
3811
+ };
3812
+ const reachesConditional = (node) => {
3813
+ if (ts.isConditionalTypeNode(node))
3814
+ return true;
3815
+ if (ts.isTypeReferenceNode(node)) {
3816
+ const name = ts.isIdentifier(node.typeName) ? node.typeName : node.typeName.right;
3817
+ const symbol = lowerer.checker.getSymbolAtLocation(name);
3818
+ if (symbol && !params.has(symbol) && declarationsReach(symbol))
3819
+ return true;
3820
+ }
3821
+ let found = false;
3822
+ ts.forEachChild(node, (child) => {
3823
+ if (!found && reachesConditional(child))
3824
+ found = true;
3825
+ });
3826
+ return found;
3827
+ };
3828
+ const collect = (node) => {
3829
+ if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName)) {
3830
+ const symbol = lowerer.checker.getSymbolAtLocation(node.typeName);
3831
+ if (symbol && params.has(symbol))
3832
+ found.add(symbol);
3833
+ }
3834
+ ts.forEachChild(node, collect);
3835
+ };
3836
+ const visit = (node) => {
3837
+ if (ts.isTypeNode(node) && reachesConditional(node)) {
3838
+ collect(node);
3839
+ return;
3840
+ }
3841
+ ts.forEachChild(node, visit);
3842
+ };
3843
+ for (const member of gci.decl.members.nodes)
3844
+ visit(member);
3845
+ return found;
3846
+ }
3713
3847
  /** Runs a member-lowering thunk under an INSTANTIATION's type-parameter
3714
3848
  * bindings (the generic-fn typeParamResolver mechanism) — the checker
3715
3849
  * keeps reporting the unsubstituted `T`s inside the shared body AST.
@@ -3745,11 +3879,13 @@ function withInstanceBindings(lowerer, info, fn) {
3745
3879
  }
3746
3880
  }
3747
3881
  const prevBindings = lowerer.typeParamBindings;
3882
+ const prevTsBindings = lowerer.typeParamTsBindings;
3748
3883
  const prevContext = lowerer.instantiationContext;
3749
3884
  const prevSuppress = lowerer.suppressStats;
3750
3885
  const previousPath = lowerer.genericInstantiationPath;
3751
3886
  lowerer.genericInstantiationPath = gi.path;
3752
3887
  lowerer.typeParamBindings = gi.bindings;
3888
+ lowerer.typeParamTsBindings = gi.tsBindings;
3753
3889
  lowerer.instantiationContext = `instantiating class '${gi.family.generic?.baseName ?? info.def.jsName ?? ""}' with ${gi.typeArgsText}`;
3754
3890
  lowerer.suppressStats = prevSuppress || gi.ordinal > 0;
3755
3891
  try {
@@ -3757,6 +3893,7 @@ function withInstanceBindings(lowerer, info, fn) {
3757
3893
  }
3758
3894
  finally {
3759
3895
  lowerer.typeParamBindings = prevBindings;
3896
+ lowerer.typeParamTsBindings = prevTsBindings;
3760
3897
  lowerer.instantiationContext = prevContext;
3761
3898
  lowerer.suppressStats = prevSuppress;
3762
3899
  lowerer.genericInstantiationPath = previousPath;
@@ -4295,7 +4432,13 @@ export function classValueRef(lowerer, info, blame) {
4295
4432
  const display = info.def.name.replace(/^%|^%m\d+\./, "");
4296
4433
  fenceDecorationThrows(lowerer, info, blame);
4297
4434
  if (info.localClass && ts.isIdentifier(blame)) {
4298
- const stored = lowerer.resolveLocal(blame);
4435
+ let stored = lowerer.resolveLocal(blame);
4436
+ // A reference from a function hoisted above the class statement.
4437
+ if (!stored) {
4438
+ const symbol = lowerer.resolveValueSymbol(blame);
4439
+ if (symbol && predeclareForwardClass(lowerer, symbol))
4440
+ stored = lowerer.resolveLocal(blame);
4441
+ }
4299
4442
  if (stored)
4300
4443
  return lowerer.coerceToExpected({ kind: "varRef", localId: stored.id, type: stored.type, loc: locOf(blame) }, { kind: "classval", className: info.def.name });
4301
4444
  }
@@ -4484,6 +4627,13 @@ export function lowerStaticFieldRead(lowerer, expr) {
4484
4627
  return null;
4485
4628
  const loc = locOf(expr);
4486
4629
  const found = findStaticOn(lowerer, info, expr.name.text);
4630
+ // A Date static read as a value through a class declared `extends Date`:
4631
+ // the statics lower only as calls.
4632
+ if (!found &&
4633
+ dateRootOf(info) &&
4634
+ ["now", "parse", "UTC"].includes(expr.name.text) &&
4635
+ !(ts.isCallExpression(expr.parent) && expr.parent.expression === expr))
4636
+ lowerer.noLowering(`Date.${expr.name.text} read through a class that extends Date`, expr);
4487
4637
  if (hasRuntimeStatics(info) && !found?.field)
4488
4638
  return {
4489
4639
  kind: "dynKeyGet",
@@ -4687,9 +4837,10 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4687
4837
  expr.members.nodes.some((member) => decoratorNodesOf(member).length ||
4688
4838
  (!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
4689
4839
  (ts.isClassStaticBlockDeclaration(member) ||
4690
- ts
4691
- .getModifiers(member)
4692
- ?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) ||
4840
+ (!ts.isMethodDeclaration(member) &&
4841
+ ts
4842
+ .getModifiers(member)
4843
+ ?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)))) ||
4693
4844
  (ts.isMethodDeclaration(member) && member.typeParameters?.nodes.length)))) {
4694
4845
  lowerer.unsupported("SC1090", expr, "function-local classes with statics, decorators, or generic members");
4695
4846
  }
@@ -4775,6 +4926,31 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4775
4926
  }
4776
4927
  return info;
4777
4928
  }
4929
+ /** True when a named class expression's body refers to the class value by
4930
+ * its own name (`class Box { static of() { return new Box(); } }`, a
4931
+ * shorthand property `{ Box }` included); type annotations naming it
4932
+ * (`again(): Box`) do not count. */
4933
+ function classExpressionNamesItself(lowerer, expr) {
4934
+ const name = expr.name;
4935
+ if (!name)
4936
+ return false;
4937
+ const symbol = lowerer.checker.getSymbolAtLocation(name);
4938
+ if (!symbol)
4939
+ return false;
4940
+ let found = false;
4941
+ for (const member of expr.members.nodes) {
4942
+ ts.walkPreorder(member, (n) => {
4943
+ if (found || ts.isTypeNode(n))
4944
+ return "skip";
4945
+ if (ts.isIdentifier(n) && n.text === name.text && identifierReadSymbol(lowerer, n) === symbol)
4946
+ found = true;
4947
+ return undefined;
4948
+ });
4949
+ if (found)
4950
+ return true;
4951
+ }
4952
+ return false;
4953
+ }
4778
4954
  /** `class {…}` in expression position: a class definition bound to no
4779
4955
  * statement — once the static side is a value, the expression IS the
4780
4956
  * definition plus a classRef over it. A DECORATED class expression
@@ -4782,8 +4958,12 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4782
4958
  * mints a class at all: evaluating the expression IS the
4783
4959
  * ReferenceError, so it lowers to exactly that read — every evaluation
4784
4960
  * throws identically, which is why the once-evaluated restriction and
4785
- * the member fences don't apply. */
4786
- export function lowerClassExpression(lowerer, expr) {
4961
+ * the member fences don't apply.
4962
+ *
4963
+ * `binding` is the local of a function-local class declaration's name,
4964
+ * declared without a value; the class value assigns it before the class's
4965
+ * static members are defined (see initializeRuntimeStatics). */
4966
+ export function lowerClassExpression(lowerer, expr, binding) {
4787
4967
  if (decoratorNodesOf(expr).length > 0 ||
4788
4968
  expr.members.nodes.some((m) => decoratorNodesOf(m).length > 0)) {
4789
4969
  if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) && expr.typeParameters === undefined) {
@@ -4797,6 +4977,28 @@ export function lowerClassExpression(lowerer, expr) {
4797
4977
  }
4798
4978
  }
4799
4979
  const info = lowerClassExpressionInfo(lowerer, expr);
4980
+ // A function-local class expression's own name is a binding of its body:
4981
+ // declared before the members lower, so their references to the name
4982
+ // resolve to it. The class value captures it before it is assigned, as
4983
+ // it captures a class declaration's binding.
4984
+ if (!binding &&
4985
+ info.localClass &&
4986
+ ts.isClassExpression(expr) &&
4987
+ expr.name &&
4988
+ classExpressionNamesItself(lowerer, expr)) {
4989
+ const own = lowerer.declareLocal(expr.name, expr.name.text, { kind: "classval", className: info.def.name }, true);
4990
+ const value = lowerClassValue(lowerer, expr, info, own);
4991
+ return {
4992
+ kind: "seqExpr",
4993
+ stmts: [{ kind: "varDecl", localId: own.id, init: null, loc: value.loc }],
4994
+ result: value,
4995
+ type: value.type,
4996
+ loc: value.loc,
4997
+ };
4998
+ }
4999
+ return lowerClassValue(lowerer, expr, info, binding);
5000
+ }
5001
+ function lowerClassValue(lowerer, expr, info, binding) {
4800
5002
  if (!info.localClass &&
4801
5003
  !info.expressionInitializationEmitted &&
4802
5004
  (info.callableBase ||
@@ -4843,7 +5045,7 @@ export function lowerClassExpression(lowerer, expr) {
4843
5045
  const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
4844
5046
  const boxed = { kind: "dynFrom", value: clsRef, type: DYN, loc };
4845
5047
  info.localPrototypeData = true;
4846
- return initializeRuntimeStatics(lowerer, info, {
5048
+ const built = {
4847
5049
  kind: "seqExpr",
4848
5050
  stmts: [
4849
5051
  { kind: "varDecl", localId: baseLocal.id, init: base, loc },
@@ -4876,7 +5078,8 @@ export function lowerClassExpression(lowerer, expr) {
4876
5078
  result: clsRef,
4877
5079
  type: value.type,
4878
5080
  loc,
4879
- });
5081
+ };
5082
+ return initializeRuntimeStatics(lowerer, info, built, binding);
4880
5083
  }
4881
5084
  if (info.localClass?.baseExpression && info.base && value.kind === "classRef") {
4882
5085
  const loc = locOf(expr);
@@ -4891,7 +5094,7 @@ export function lowerClassExpression(lowerer, expr) {
4891
5094
  const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
4892
5095
  const basePrototype = classPrototypeData(lowerer, info.base, loc, baseRef);
4893
5096
  info.localPrototypeData = true;
4894
- return initializeRuntimeStatics(lowerer, info, {
5097
+ const built = {
4895
5098
  kind: "seqExpr",
4896
5099
  stmts: [
4897
5100
  { kind: "varDecl", localId: baseLocal.id, init: base, loc },
@@ -4930,11 +5133,52 @@ export function lowerClassExpression(lowerer, expr) {
4930
5133
  result: clsRef,
4931
5134
  type: value.type,
4932
5135
  loc,
4933
- });
5136
+ };
5137
+ return initializeRuntimeStatics(lowerer, info, built, binding);
4934
5138
  }
4935
- return info.localClass
4936
- ? initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value)
4937
- : value;
5139
+ if (!info.localClass)
5140
+ return value;
5141
+ const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value, binding);
5142
+ // The base resolves statically here, but Node still evaluates the
5143
+ // heritage expression each time the class definition runs, first.
5144
+ const heritage = heritageWithEffects(expr);
5145
+ if (heritage === undefined)
5146
+ return classValue;
5147
+ return {
5148
+ kind: "seqExpr",
5149
+ stmts: [lowerer.lowerExprStatement(heritage)],
5150
+ result: classValue,
5151
+ type: classValue.type,
5152
+ loc: classValue.loc,
5153
+ };
5154
+ }
5155
+ /** The `extends` expression of `decl` when evaluating it can have effects
5156
+ * (a call, construction, assignment, update, delete, await or yield
5157
+ * outside nested functions). */
5158
+ function heritageWithEffects(decl) {
5159
+ const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
5160
+ if (heritage === undefined)
5161
+ return undefined;
5162
+ const effects = (node) => {
5163
+ if (ts.isFunctionLike(node) || ts.isClassDeclaration(node) || ts.isClassExpression(node))
5164
+ return false;
5165
+ if (ts.isCallExpression(node) ||
5166
+ ts.isNewExpression(node) ||
5167
+ ts.isTaggedTemplateExpression(node) ||
5168
+ ts.isDeleteExpression(node) ||
5169
+ ts.isAwaitExpression(node) ||
5170
+ ts.isYieldExpression(node) ||
5171
+ (ts.isPrefixUnaryExpression(node) &&
5172
+ (node.operator === ts.SyntaxKind.PlusPlusToken ||
5173
+ node.operator === ts.SyntaxKind.MinusMinusToken)) ||
5174
+ ts.isPostfixUnaryExpression(node) ||
5175
+ (ts.isBinaryExpression(node) &&
5176
+ node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
5177
+ node.operatorToken.kind <= ts.SyntaxKind.LastAssignment))
5178
+ return true;
5179
+ return ts.forEachChild(node, (child) => effects(child) || undefined) ?? false;
5180
+ };
5181
+ return effects(heritage) ? heritage : undefined;
4938
5182
  }
4939
5183
  /** The EXACT class a receiver expression is statically known to BE (not
4940
5184
  * merely be typed by): the class name itself, or a `const` binding
@@ -5195,6 +5439,13 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5195
5439
  const runtimeStatic = directRuntimeStaticCall(lowerer, call, access, info, throughValue);
5196
5440
  if (runtimeStatic)
5197
5441
  return runtimeStatic;
5442
+ // Date's statics through a class declared `extends Date`
5443
+ // (`Moment.UTC(...)`), which inherits them.
5444
+ if (dateRootOf(info) && !findStaticOn(lowerer, info, access.name.text)) {
5445
+ const date = lowerDateStaticCall(lowerer, call, access.name.text);
5446
+ if (date)
5447
+ return date;
5448
+ }
5198
5449
  if ((hasRuntimeStatics(info) && !findStaticOn(lowerer, info, access.name.text)?.field) ||
5199
5450
  (info.callableBase &&
5200
5451
  !findStaticOn(lowerer, info, access.name.text) &&
@@ -5229,7 +5480,7 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5229
5480
  // through-a-VALUE shadowing fence as plain statics.
5230
5481
  const gfound = findGenericStaticOn(lowerer, info, access.name.text);
5231
5482
  if (!gfound)
5232
- return null;
5483
+ return classConstructorCall(lowerer, call, access, info);
5233
5484
  if (throughValue && staticShadowBelow(info, access.name.text)) {
5234
5485
  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)`);
5235
5486
  }
@@ -5298,6 +5549,74 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5298
5549
  const args = lowerer.completeArgs(call.arguments.nodes, found.method.params, loc, call);
5299
5550
  return { kind: "call", callee: fnName, args, type: found.method.ret, loc };
5300
5551
  }
5552
+ /** `C.call(thisArg, ...)` / `C.apply(thisArg, args)` on a program class that
5553
+ * declares no such static: Function.prototype.call/apply invoke the class
5554
+ * constructor without `new`, which throws Node's TypeError "Class
5555
+ * constructor C cannot be invoked without 'new'" after the arguments are
5556
+ * evaluated (and, for apply, after the argument list is read). The boxed
5557
+ * class value's call path throws exactly that. Neither expando statics nor
5558
+ * writes through untyped values can give a class an own `call` or `apply`.
5559
+ * A receiver that may hold a subclass at run time (a class value, `this` in
5560
+ * a static method) needs every subclass to lack such a static too. The
5561
+ * receiver must be one the caller does not evaluate again (a name, `this`,
5562
+ * or a namespace member). Null otherwise. */
5563
+ function classConstructorCall(lowerer, call, access, info) {
5564
+ const name = access.name.text;
5565
+ const receiver = access.expression;
5566
+ if ((name !== "call" && name !== "apply") ||
5567
+ !info.decl ||
5568
+ info.def.runtime ||
5569
+ info.builtinError ||
5570
+ info.builtinEmitter ||
5571
+ info.builtinStream ||
5572
+ info.builtinEventTarget ||
5573
+ info.runtimeStatics?.length ||
5574
+ declaresStaticAbove(info, name) ||
5575
+ (exactClassOfReceiver(lowerer, receiver) !== info &&
5576
+ info.subclasses.some((subclass) => declaresStaticBelow(subclass, name))) ||
5577
+ call.arguments.nodes.some(ts.isSpreadElement) ||
5578
+ !(ts.isIdentifier(receiver) ||
5579
+ receiver.kind === ts.SyntaxKind.ThisKeyword ||
5580
+ (ts.isPropertyAccessExpression(receiver) && nsMemberIdentOf(lowerer, receiver) !== null)))
5581
+ return null;
5582
+ return {
5583
+ kind: "dynInvoke",
5584
+ recv: lowerer.lowerExprExpecting(receiver, DYN),
5585
+ method: name,
5586
+ calleeName: ts.getTextOfNode(access),
5587
+ args: call.arguments.nodes.map((argument) => lowerer.lowerExprExpecting(argument, DYN)),
5588
+ type: DYN,
5589
+ loc: locOf(call),
5590
+ };
5591
+ }
5592
+ /** Whether `info`'s declaration has a static member that may be named `name`
5593
+ * (a method, field or accessor of that name, or a computed name), or `info`
5594
+ * has no declaration to tell. */
5595
+ function declaresStatic(info, name) {
5596
+ if (!info.decl)
5597
+ return true;
5598
+ return info.decl.members.nodes.some((member) => member.name !== undefined &&
5599
+ ts.canHaveModifiers(member) &&
5600
+ ts.getModifiers(member)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) ===
5601
+ true &&
5602
+ (ts.isComputedPropertyName(member.name) ||
5603
+ ((ts.isIdentifier(member.name) || ts.isStringLiteral(member.name)) &&
5604
+ member.name.text === name)));
5605
+ }
5606
+ /** declaresStatic over `info` and its bases, which it inherits statics from. */
5607
+ function declaresStaticAbove(info, name) {
5608
+ for (let c = info; c; c = c.base)
5609
+ if (declaresStatic(c, name))
5610
+ return true;
5611
+ return false;
5612
+ }
5613
+ /** declaresStatic over `info` and its subclasses, or runtime statics, which a
5614
+ * function-local JavaScript class defines at run time. */
5615
+ function declaresStaticBelow(info, name) {
5616
+ return (declaresStatic(info, name) ||
5617
+ !!info.runtimeStatics?.length ||
5618
+ info.subclasses.some((subclass) => declaresStaticBelow(subclass, name)));
5619
+ }
5301
5620
  /** `C.m(...)` where `m` is a static method that a function-local
5302
5621
  * JavaScript class defines at runtime (a factory's `class extends base`),
5303
5622
  * inherited by `C` through its statically known base chain. When the body
@@ -5685,11 +6004,94 @@ export function inHierarchy(lowerer, info) {
5685
6004
  * dynamically. Abstract re-declarations don't count (they carry no
5686
6005
  * implementation; the concrete ones below them do, via the recursion). */
5687
6006
  export function overrideBelow(lowerer, info, name) {
6007
+ if (info.decl !== null && localOverrideBelow(lowerer, info.decl, name))
6008
+ return true;
5688
6009
  return info.subclasses.some((s) => {
5689
6010
  const m = s.methods.get(name);
5690
6011
  return (m !== undefined && m.abstract !== true) || lowerer.overrideBelow(s, name);
5691
6012
  });
5692
6013
  }
6014
+ /** The class node an `extends` clause names: a class declaration, or the
6015
+ * class expression a variable is initialized with. */
6016
+ function extendedClassNode(lowerer, decl) {
6017
+ const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
6018
+ if (!heritage || !ts.isIdentifier(heritage))
6019
+ return null;
6020
+ let symbol = lowerer.checker.getSymbolAtLocation(heritage);
6021
+ if (symbol && symbol.flags & ts.SymbolFlags.Alias)
6022
+ symbol = lowerer.checker.getAliasedSymbol(symbol);
6023
+ const target = symbol?.valueDeclaration;
6024
+ if (!target)
6025
+ return null;
6026
+ if (ts.isClassDeclaration(target) || ts.isClassExpression(target))
6027
+ return target;
6028
+ if (ts.isVariableDeclaration(target) && target.initializer) {
6029
+ let init = target.initializer;
6030
+ while (ts.isParenthesizedExpression(init))
6031
+ init = init.expression;
6032
+ if (ts.isClassExpression(init))
6033
+ return init;
6034
+ }
6035
+ return null;
6036
+ }
6037
+ /** The function-local classes that extend the class node `base`. Function
6038
+ * bodies lower on demand, after code that may already call methods of a
6039
+ * class their local classes extend, so such a subclass is not yet in its
6040
+ * base's `subclasses` when those calls lower. */
6041
+ function localSubclassesOf(lowerer, base) {
6042
+ let index = lowerer.localSubclassIndex;
6043
+ if (index === null) {
6044
+ index = new Map();
6045
+ const files = lowerer.moduleOrder.length > 0 ? lowerer.moduleOrder : [lowerer.entry];
6046
+ for (const sf of files) {
6047
+ if (!sf.text.includes("extends"))
6048
+ continue;
6049
+ ts.walkPreorder(sf, (node) => {
6050
+ if ((ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&
6051
+ node.heritageClauses !== undefined &&
6052
+ functionLocalClass(node)) {
6053
+ const extended = extendedClassNode(lowerer, node);
6054
+ if (extended) {
6055
+ const list = index.get(extended);
6056
+ if (list)
6057
+ list.push(node);
6058
+ else
6059
+ index.set(extended, [node]);
6060
+ }
6061
+ }
6062
+ return undefined;
6063
+ });
6064
+ }
6065
+ lowerer.localSubclassIndex = index;
6066
+ }
6067
+ return index.get(base) ?? [];
6068
+ }
6069
+ /** True when a function-local class below the class node `base` declares
6070
+ * a concrete instance method or accessor `name` (accessors are keyed
6071
+ * `get:x` and `set:x`). A call on `base`'s class then dispatches on the
6072
+ * receiver; devirtualization turns it back into a direct call when no such
6073
+ * override is reachable. */
6074
+ function localOverrideBelow(lowerer, base, name, visited) {
6075
+ const subclasses = localSubclassesOf(lowerer, base);
6076
+ if (subclasses.length === 0)
6077
+ return false;
6078
+ visited ??= new Set();
6079
+ if (visited.has(base))
6080
+ return false;
6081
+ visited.add(base);
6082
+ const accessor = name.startsWith("get:") ? "get" : name.startsWith("set:") ? "set" : null;
6083
+ const member = accessor ? name.slice(4) : name;
6084
+ return subclasses.some((sub) => sub.members.nodes.some((m) => (accessor === null
6085
+ ? ts.isMethodDeclaration(m)
6086
+ : accessor === "get"
6087
+ ? ts.isGetAccessorDeclaration(m)
6088
+ : ts.isSetAccessorDeclaration(m)) &&
6089
+ m.body !== undefined &&
6090
+ m.name !== undefined &&
6091
+ (ts.isIdentifier(m.name) || ts.isStringLiteral(m.name)) &&
6092
+ m.name.text === member &&
6093
+ !ts.getModifiers(m)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)) || localOverrideBelow(lowerer, sub, name, visited));
6094
+ }
5693
6095
  /** The nearest GENERIC-method declaration of `name` at/above `info` —
5694
6096
  * findMethodOn's twin over the genericMethods tables. */
5695
6097
  export function findGenericMethodOn(lowerer, info, name) {
@@ -6288,7 +6690,7 @@ function lowerClassCtorInner(lowerer, info) {
6288
6690
  lowerer.ctx.argumentsLocal = local;
6289
6691
  }
6290
6692
  body.push(...declared.prologue);
6291
- if (!ctorBase && !info.callableBase) {
6693
+ if (!ctorBase && !info.callableBase && !info.extendsDate) {
6292
6694
  // Node's base-class order: field initializers run at the start
6293
6695
  // of construction, the parameter-property assignments open the
6294
6696
  // constructor body (probed — a field initializer reading a
@@ -6303,7 +6705,7 @@ function lowerClassCtorInner(lowerer, info) {
6303
6705
  }
6304
6706
  }
6305
6707
  else {
6306
- if (ctorBase || info.callableBase) {
6708
+ if (ctorBase || info.callableBase || info.extendsDate) {
6307
6709
  // Synthetic forwarding params (the inherited ABI signature).
6308
6710
  // Nothing references them by symbol — only the super call below,
6309
6711
  // which forwards the already-completed values UNCHANGED (defaults
@@ -6486,7 +6888,7 @@ export function classIteratorDrainCall(lowerer, src, loc, elemT) {
6486
6888
  const key = `${cit.className}:${typeKey(outElem)}`;
6487
6889
  let name = lowerer.iterDrainHelpers.get(key);
6488
6890
  if (!name) {
6489
- name = `%iter.drain.${lowerer.iterDrainHelpers.size}`;
6891
+ name = keyedHelperName(lowerer, "%iter.drain", key);
6490
6892
  lowerer.iterDrainHelpers.set(key, name);
6491
6893
  const recvT = { kind: "object", className: cit.className };
6492
6894
  const recvRef = { kind: "varRef", localId: "r.0", type: recvT, loc };
@@ -6594,7 +6996,7 @@ export function classIteratorRestDrainCall(lowerer, cit, itVal, loc) {
6594
6996
  const key = `it:${cit.iterT.className}`;
6595
6997
  let name = lowerer.iterDrainHelpers.get(key);
6596
6998
  if (!name) {
6597
- name = `%iter.drain.${lowerer.iterDrainHelpers.size}`;
6999
+ name = keyedHelperName(lowerer, "%iter.drain", key);
6598
7000
  lowerer.iterDrainHelpers.set(key, name);
6599
7001
  const itRef = { kind: "varRef", localId: "it.0", type: cit.iterT, loc };
6600
7002
  const outRef = { kind: "varRef", localId: "out.0", type: outT, loc };
@@ -7089,12 +7491,39 @@ function superCallInStatementPosition(call) {
7089
7491
  const parent = node.parent;
7090
7492
  if (ts.isExpressionStatement(parent))
7091
7493
  return true;
7494
+ if (ts.isIfStatement(parent)) {
7495
+ const lead = superConditionLead(parent.expression);
7496
+ return lead !== null && call.pos >= lead.left.pos && call.end <= lead.left.end;
7497
+ }
7092
7498
  const comma = ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.CommaToken;
7093
7499
  if (!comma && !ts.isParenthesizedExpression(parent))
7094
7500
  return false;
7095
7501
  node = parent;
7096
7502
  }
7097
7503
  }
7504
+ /** The comma chain of an `if` condition whose leading operands hold a
7505
+ * super() call (`if (super(), r === 0) throw ...`, as minifiers join a
7506
+ * super statement with the next test), or null. The if statement runs the
7507
+ * chain's left operand as a statement first and tests its right operand,
7508
+ * which is what the comma evaluates. */
7509
+ export function superConditionLead(cond) {
7510
+ let expr = cond;
7511
+ while (ts.isParenthesizedExpression(expr))
7512
+ expr = expr.expression;
7513
+ if (!ts.isBinaryExpression(expr) || expr.operatorToken.kind !== ts.SyntaxKind.CommaToken)
7514
+ return null;
7515
+ const holdsSuperCall = (operand) => {
7516
+ let e = operand;
7517
+ while (ts.isParenthesizedExpression(e))
7518
+ e = e.expression;
7519
+ if (ts.isCallExpression(e))
7520
+ return e.expression.kind === ts.SyntaxKind.SuperKeyword;
7521
+ return (ts.isBinaryExpression(e) &&
7522
+ e.operatorToken.kind === ts.SyntaxKind.CommaToken &&
7523
+ (holdsSuperCall(e.left) || holdsSuperCall(e.right)));
7524
+ };
7525
+ return holdsSuperCall(expr.left) ? expr : null;
7526
+ }
7098
7527
  /** Super statements initialize the base and then the derived fields on
7099
7528
  * whichever control-flow path executes. Repeated calls are explicitly
7100
7529
  * refused until native layouts can allocate a second receiver. */
@@ -7126,9 +7555,11 @@ export function lowerDerivedCtorBody(lowerer, info, thisLocal, forward) {
7126
7555
  loc,
7127
7556
  },
7128
7557
  ];
7129
- if (info.callableBase) {
7558
+ if (info.callableBase || info.extendsDate) {
7130
7559
  if (superCall.arguments.nodes.some(ts.isSpreadElement))
7131
- lowerer.unsupported("SC1090", superCall, "spreading explicit super arguments into an ordinary constructor");
7560
+ lowerer.unsupported("SC1090", superCall, info.extendsDate
7561
+ ? "spreading super arguments into the Date constructor"
7562
+ : "spreading explicit super arguments into an ordinary constructor");
7132
7563
  const pack = {
7133
7564
  kind: "dynArrLit",
7134
7565
  elems: superCall.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
@@ -7271,6 +7702,8 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7271
7702
  type: { kind: "object", className: info.def.name },
7272
7703
  loc,
7273
7704
  };
7705
+ if (info.extendsDate)
7706
+ return dateSuperCall(thisRef, info, args[0], loc);
7274
7707
  if (info.callableBase)
7275
7708
  return {
7276
7709
  kind: "exprStmt",
@@ -7351,8 +7784,10 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7351
7784
  // The SYNTHESIZED constructor of a ctor-less stream subclass:
7352
7785
  // super() with default options (underscore methods still bind; a
7353
7786
  // construction passing options requires a declared constructor —
7354
- // lowerNew fences that). Zero options ⇒ exactly one init stmt.
7355
- return lowerStreamSuperCall(lowerer, info, base, [], thisLocal, loc, info.decl ?? info.ctor)[0];
7787
+ // lowerNew fences that). Zero options ⇒ the init stmt, then the
7788
+ // class's _writev/_construct follow-ups.
7789
+ const stmts = lowerStreamSuperCall(lowerer, info, base, [], thisLocal, loc, info.decl ?? info.ctor);
7790
+ return stmts.length === 1 ? stmts[0] : { kind: "block", body: stmts, loc };
7356
7791
  }
7357
7792
  lowerer.noteSuperConstructorEdge(`%${base.def.name}.constructor`);
7358
7793
  const call = {
@@ -7373,6 +7808,22 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7373
7808
  * super dispatch is static in JS too, never through the dynamic class. */
7374
7809
  export function lowerSuperMethodCall(lowerer, call, access) {
7375
7810
  const cls = lowerer.currentClass;
7811
+ // `super.toISOString()` in a class declared `extends Date`.
7812
+ if (cls?.extendsDate && !cls.base) {
7813
+ const thisL = lowerer.resolveThis();
7814
+ if (!thisL)
7815
+ lowerer.unsupported("SC1080", access);
7816
+ const thisRef = {
7817
+ kind: "varRef",
7818
+ localId: thisL.id,
7819
+ type: thisL.type,
7820
+ loc: locOf(call),
7821
+ };
7822
+ const date = lowerDateSuperMethodCall(lowerer, call, access.name.text, cls, thisRef);
7823
+ if (date)
7824
+ return date;
7825
+ lowerer.unsupported("SC1090", access, `'super.${access.name.text}' (Date.prototype does not declare it)`);
7826
+ }
7376
7827
  if (!cls?.base) {
7377
7828
  // tsc rejects super outside derived-class bodies first; defensive.
7378
7829
  lowerer.unsupported("SC1090", access, "'super' outside a derived class");
@@ -7420,6 +7871,18 @@ export function lowerSuperMethodCall(lowerer, call, access) {
7420
7871
  // `super.dispatchEvent(e)`, `super.preventDefault()`: the inherited
7421
7872
  // runtime members over this method's own `this` (subclasses cannot
7422
7873
  // override them, so the static answer is the runtime's).
7874
+ if (dateRootOf(cls.base) && isDatePrototypeMethod(access.name.text)) {
7875
+ const thisL = lowerer.resolveThis();
7876
+ if (!thisL)
7877
+ lowerer.unsupported("SC1080", access);
7878
+ const thisRef = {
7879
+ kind: "varRef",
7880
+ localId: thisL.id,
7881
+ type: thisL.type,
7882
+ loc: locOf(call),
7883
+ };
7884
+ return lowerDateSuperMethodCall(lowerer, call, access.name.text, cls.base, thisRef);
7885
+ }
7423
7886
  if (eventTargetApiMethod(cls.base, access.name.text)) {
7424
7887
  const thisL = lowerer.resolveThis();
7425
7888
  if (!thisL)
@@ -8057,6 +8520,13 @@ export function lowerNew(lowerer, expr) {
8057
8520
  if (httpServer)
8058
8521
  return httpServer;
8059
8522
  }
8523
+ // `new tls.TLSSocket(socket, options)` — the server-mode wrap of an open
8524
+ // socket (lower-server).
8525
+ {
8526
+ const tlsSocket = lowerTlsSocketNew(lowerer, expr);
8527
+ if (tlsSocket)
8528
+ return tlsSocket;
8529
+ }
8060
8530
  // `new http.Agent(opts?)` / `new https.Agent(opts?)` — the Agent
8061
8531
  // handle (lower-server): getName/destroy/counters through the dyn
8062
8532
  // handle ops, requests thread it via the agent option.
@@ -8555,6 +9025,40 @@ export function lowerNew(lowerer, expr) {
8555
9025
  loc,
8556
9026
  };
8557
9027
  }
9028
+ // A FinalizationRegistry construction: register and unregister keep
9029
+ // their bookkeeping, and the cleanup callback never runs, which
9030
+ // ECMAScript allows (scr_finalization_registry_new).
9031
+ if (symbol !== null &&
9032
+ ts.symbolName(symbol) === "FinalizationRegistry" &&
9033
+ lowerer.isStdlibSymbol(symbol)) {
9034
+ const args = expr.arguments?.nodes ?? [];
9035
+ if (args.some(ts.isSpreadElement)) {
9036
+ lowerer.unsupported("SC1090", expr, "FinalizationRegistry construction with spread arguments");
9037
+ }
9038
+ const cleanup = args[0] ? lowerer.lowerExprExpecting(args[0], DYN) : dynUndefinedExpr(loc);
9039
+ const surplus = args.slice(1).map((arg) => lowerer.lowerExpr(arg));
9040
+ const created = {
9041
+ kind: "libCall",
9042
+ fn: "finalizationRegistry.new",
9043
+ args: [cleanup],
9044
+ type: DYN,
9045
+ loc,
9046
+ };
9047
+ if (surplus.length === 0)
9048
+ return created;
9049
+ // Surplus arguments evaluate after the cleanup argument and are ignored.
9050
+ const local = lowerer.declareHiddenLocal("%finalizationCleanup", DYN);
9051
+ return {
9052
+ kind: "seqExpr",
9053
+ stmts: [
9054
+ { kind: "varDecl", localId: local.id, init: cleanup, loc },
9055
+ ...surplus.map((value) => ({ kind: "exprStmt", expr: value, loc })),
9056
+ ],
9057
+ result: { ...created, args: [varRef(local.id, DYN, loc)] },
9058
+ type: DYN,
9059
+ loc,
9060
+ };
9061
+ }
8558
9062
  // `new Set<T>()`: construct + bulk add from supported values,
8559
9063
  // including live collection cursors. Duplicates collapse in insertion order.
8560
9064
  if (ts.isIdentifier(identifier) && lowerer.isStdlibGlobal(identifier, "Set")) {
@@ -8735,7 +9239,6 @@ export function lowerNew(lowerer, expr) {
8735
9239
  Number: "boxed wrapper objects have no lowering — use the number primitive",
8736
9240
  Boolean: "boxed wrapper objects have no lowering — use the boolean primitive",
8737
9241
  WeakRef: "deref()-after-collect exposes GC timing — genuinely dynamic; hold a strong reference instead",
8738
- FinalizationRegistry: "finalization callbacks expose GC timing — genuinely dynamic; release resources explicitly instead",
8739
9242
  SharedArrayBuffer: "no shared-memory threads exist in a compiled program — Uint8Array is the byte storage",
8740
9243
  ArrayBuffer: "native ArrayBuffer construction supports fixed-length storage; resizable buffers remain unsupported",
8741
9244
  Proxy: "native Proxy construction requires checked-native plain targets and handlers",
@@ -8782,7 +9285,7 @@ export function lowerNew(lowerer, expr) {
8782
9285
  const key = `x509.record:${isBytes ? "bytes" : "str"}`;
8783
9286
  let helper = lowerer.valueHelpers.get(key);
8784
9287
  if (!helper) {
8785
- helper = `%x509.record.${lowerer.valueHelpers.size}`;
9288
+ helper = keyedHelperName(lowerer, "%x509.record", key);
8786
9289
  lowerer.valueHelpers.set(key, helper);
8787
9290
  const dataT = data.type;
8788
9291
  const dRef = { kind: "varRef", localId: "d.0", type: dataT, loc };
@@ -9024,4 +9527,36 @@ function genericFieldFnNodeOf(member) {
9024
9527
  }
9025
9528
  return null;
9026
9529
  }
9530
+ /** Whether a JavaScript class's own binding is the target of
9531
+ * `Object.defineProperty`/`defineProperties` in its file
9532
+ * (`Object.defineProperty(Definition, "name", { value })`): its constructor
9533
+ * then needs a live own-property table. */
9534
+ function definedThroughReflection(lowerer, decl) {
9535
+ const name = decl.name;
9536
+ const sf = ts.getSourceFileOfNode(decl);
9537
+ if (name === undefined || !sf.text.includes("definePropert"))
9538
+ return false;
9539
+ const symbol = lowerer.checker.getSymbolAtLocation(name);
9540
+ if (symbol === undefined)
9541
+ return false;
9542
+ let found = false;
9543
+ ts.walkPreorder(sf, (node) => {
9544
+ if (found)
9545
+ return "stop";
9546
+ if (ts.isCallExpression(node) &&
9547
+ ts.isPropertyAccessExpression(node.expression) &&
9548
+ (node.expression.name.text === "defineProperty" ||
9549
+ node.expression.name.text === "defineProperties") &&
9550
+ lowerer.stdlibGlobalMember(node.expression, "Object") !== null) {
9551
+ const target = node.arguments.nodes[0];
9552
+ if (target !== undefined &&
9553
+ ts.isIdentifier(target) &&
9554
+ target.text === name.text &&
9555
+ lowerer.checker.getSymbolAtLocation(target) === symbol)
9556
+ found = true;
9557
+ }
9558
+ return undefined;
9559
+ });
9560
+ return found;
9561
+ }
9027
9562
  //# sourceMappingURL=lower-classes.js.map