@scriptc/compiler 0.3.5 → 0.4.0

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 (1243) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +960 -82
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +13 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +324 -179
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +576 -268
  87. package/dist/backend/llvm/emitter.js +801 -4447
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dispatch.js +1 -0
  109. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  110. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  111. package/dist/backend/llvm/expr-dynamic.js +92 -63
  112. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  114. package/dist/backend/llvm/expr-primitives.js +132 -25
  115. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  116. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  117. package/dist/backend/llvm/expr-records.d.ts +1 -1
  118. package/dist/backend/llvm/expr-records.js +32 -11
  119. package/dist/backend/llvm/expr-records.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  121. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-abi.test.js +2 -2
  126. package/dist/backend/llvm/integer-clones.test.js +3 -3
  127. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  128. package/dist/backend/llvm/integer-remainder.js +156 -22
  129. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  130. package/dist/backend/llvm/intern-tables.test.js +1 -1
  131. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  132. package/dist/backend/llvm/jsval-encoding.js +20 -0
  133. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  134. package/dist/backend/llvm/jsval.d.ts +12 -0
  135. package/dist/backend/llvm/jsval.js +488 -0
  136. package/dist/backend/llvm/jsval.js.map +1 -0
  137. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  138. package/dist/backend/llvm/lazy-captures.js +39 -17
  139. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  140. package/dist/backend/llvm/lib-abi.js +1 -1
  141. package/dist/backend/llvm/lib-abi.js.map +1 -1
  142. package/dist/backend/llvm/lib-connect.js +1 -1
  143. package/dist/backend/llvm/lib-connect.js.map +1 -1
  144. package/dist/backend/llvm/lib-datagram.js +14 -8
  145. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  146. package/dist/backend/llvm/lib-dispatch.js +217 -24
  147. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  148. package/dist/backend/llvm/lib-filesystem.js +102 -13
  149. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  150. package/dist/backend/llvm/lib-http2.js +3 -3
  151. package/dist/backend/llvm/lib-http2.js.map +1 -1
  152. package/dist/backend/llvm/lib-lookup.js +2 -2
  153. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  154. package/dist/backend/llvm/lib-network.js +77 -25
  155. package/dist/backend/llvm/lib-network.js.map +1 -1
  156. package/dist/backend/llvm/lib-process.js +100 -50
  157. package/dist/backend/llvm/lib-process.js.map +1 -1
  158. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  159. package/dist/backend/llvm/lib-shared.js +229 -5
  160. package/dist/backend/llvm/lib-shared.js.map +1 -1
  161. package/dist/backend/llvm/lib-stream.js +46 -16
  162. package/dist/backend/llvm/lib-stream.js.map +1 -1
  163. package/dist/backend/llvm/lib-test.js +57 -8
  164. package/dist/backend/llvm/lib-test.js.map +1 -1
  165. package/dist/backend/llvm/lib-tls.js +4 -9
  166. package/dist/backend/llvm/lib-tls.js.map +1 -1
  167. package/dist/backend/llvm/local-array-reads.js +2 -2
  168. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  169. package/dist/backend/llvm/local-extents.d.ts +19 -0
  170. package/dist/backend/llvm/local-extents.js +169 -0
  171. package/dist/backend/llvm/local-extents.js.map +1 -0
  172. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  173. package/dist/backend/llvm/local-extents.test.js +92 -0
  174. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  175. package/dist/backend/llvm/local-union-storage.js +7 -7
  176. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  177. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  178. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  179. package/dist/backend/llvm/map-number-lookup.js +2 -2
  180. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  181. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  182. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  183. package/dist/backend/llvm/narrow-guards.js +151 -0
  184. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  185. package/dist/backend/llvm/nullable-unions.d.ts +70 -9
  186. package/dist/backend/llvm/nullable-unions.js +105 -6
  187. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  188. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  189. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  190. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  191. package/dist/backend/llvm/publish.d.ts +4 -0
  192. package/dist/backend/llvm/publish.js +14 -2
  193. package/dist/backend/llvm/publish.js.map +1 -1
  194. package/dist/backend/llvm/publish.test.js +1 -1
  195. package/dist/backend/llvm/receivers.d.ts +31 -0
  196. package/dist/backend/llvm/receivers.js +395 -0
  197. package/dist/backend/llvm/receivers.js.map +1 -0
  198. package/dist/backend/llvm/record-results.d.ts +13 -2
  199. package/dist/backend/llvm/record-results.js +66 -6
  200. package/dist/backend/llvm/record-results.js.map +1 -1
  201. package/dist/backend/llvm/reference-effects.js +9 -0
  202. package/dist/backend/llvm/reference-effects.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  204. package/dist/backend/llvm/reference-writes.js +143 -6
  205. package/dist/backend/llvm/reference-writes.js.map +1 -1
  206. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  207. package/dist/backend/llvm/reference-writes.test.js +88 -0
  208. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  209. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  210. package/dist/backend/llvm/regex-matchers.js +33 -0
  211. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  212. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  213. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  214. package/dist/backend/llvm/regions.d.ts +1 -1
  215. package/dist/backend/llvm/regions.js +9 -6
  216. package/dist/backend/llvm/regions.js.map +1 -1
  217. package/dist/backend/llvm/regions.test.js +1 -1
  218. package/dist/backend/llvm/shapes.d.ts +69 -43
  219. package/dist/backend/llvm/shapes.js +285 -21
  220. package/dist/backend/llvm/shapes.js.map +1 -1
  221. package/dist/backend/llvm/shapes.test.js +37 -3
  222. package/dist/backend/llvm/shapes.test.js.map +1 -1
  223. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  224. package/dist/backend/llvm/speculative-integers.js +571 -0
  225. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  226. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  227. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  228. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  229. package/dist/backend/llvm/split-loops.js +2 -2
  230. package/dist/backend/llvm/split-loops.js.map +1 -1
  231. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  232. package/dist/backend/llvm/stack-objects.js +133 -10
  233. package/dist/backend/llvm/stack-objects.js.map +1 -1
  234. package/dist/backend/llvm/stack-objects.test.js +55 -1
  235. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  236. package/dist/backend/llvm/stack-unions.test.js +1 -1
  237. package/dist/backend/llvm/string-construction.test.js +1 -1
  238. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  239. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  240. package/dist/backend/llvm/string-slices.d.ts +25 -0
  241. package/dist/backend/llvm/string-slices.js +207 -1
  242. package/dist/backend/llvm/string-slices.js.map +1 -1
  243. package/dist/backend/llvm/string-slices.test.js +139 -2
  244. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  245. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  246. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  247. package/dist/backend/llvm/thread-slots.js +142 -0
  248. package/dist/backend/llvm/thread-slots.js.map +1 -0
  249. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  250. package/dist/backend/llvm/thread-slots.test.js +110 -0
  251. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  252. package/dist/backend/llvm/union-repr.d.ts +7 -7
  253. package/dist/backend/llvm/union-repr.js +18 -2
  254. package/dist/backend/llvm/union-repr.js.map +1 -1
  255. package/dist/backend/llvm/union-retype.test.js +17 -3
  256. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  257. package/dist/backend/llvm/walkers.d.ts +2 -2
  258. package/dist/backend/llvm/walkers.js +51 -26
  259. package/dist/backend/llvm/walkers.js.map +1 -1
  260. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  261. package/dist/backend/llvm/wasm-modules.js +66 -0
  262. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  263. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  264. package/dist/backend/llvm/wrapping-sums.js +11 -3
  265. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  266. package/dist/backend/mangle.d.ts +7 -0
  267. package/dist/backend/mangle.js +11 -0
  268. package/dist/backend/mangle.js.map +1 -1
  269. package/dist/backend/may-throw.d.ts +3 -0
  270. package/dist/backend/may-throw.js +6 -2
  271. package/dist/backend/may-throw.js.map +1 -1
  272. package/dist/backend/may-throw.test.js +1 -1
  273. package/dist/backend/native/contracts.d.ts +37 -0
  274. package/dist/backend/native/executable.js +192 -134
  275. package/dist/backend/native/executable.js.map +1 -1
  276. package/dist/backend/native/library.js +1 -0
  277. package/dist/backend/native/library.js.map +1 -1
  278. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  279. package/dist/backend/native/runtime-inputs.js +2 -0
  280. package/dist/backend/native/runtime-inputs.js.map +1 -1
  281. package/dist/backend/native-link-info-core.d.ts +30 -0
  282. package/dist/backend/native-link-info-core.js.map +1 -1
  283. package/dist/backend/publication.test.js +1 -1
  284. package/dist/backend/runtime-pack-core.d.ts +9 -1
  285. package/dist/backend/runtime-pack-core.js +10 -1
  286. package/dist/backend/runtime-pack-core.js.map +1 -1
  287. package/dist/backend/runtime-pack-native.js +1 -1
  288. package/dist/backend/runtime-pack-native.js.map +1 -1
  289. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  290. package/dist/backend/runtime-pack-native.test.js +31 -0
  291. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  292. package/dist/backend/runtime-pack-targets.test.js +5 -0
  293. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  294. package/dist/backend/runtime-pack.d.ts +7 -3
  295. package/dist/backend/runtime-pack.js +12 -6
  296. package/dist/backend/runtime-pack.js.map +1 -1
  297. package/dist/backend/runtime-pack.test.js +20 -6
  298. package/dist/backend/runtime-pack.test.js.map +1 -1
  299. package/dist/backend/stack-observations.d.ts +22 -0
  300. package/dist/backend/stack-observations.js +382 -0
  301. package/dist/backend/stack-observations.js.map +1 -0
  302. package/dist/backend/stack-observations.test.d.ts +1 -0
  303. package/dist/backend/stack-observations.test.js +233 -0
  304. package/dist/backend/stack-observations.test.js.map +1 -0
  305. package/dist/backend/target-diagnostics.js +8 -0
  306. package/dist/backend/target-diagnostics.js.map +1 -1
  307. package/dist/backend/target-diagnostics.test.js +1 -1
  308. package/dist/backend/warm-cache.js +5 -0
  309. package/dist/backend/warm-cache.js.map +1 -1
  310. package/dist/backend/young-nursery.d.ts +7 -0
  311. package/dist/backend/young-nursery.js +10 -0
  312. package/dist/backend/young-nursery.js.map +1 -0
  313. package/dist/cli/command.js +44 -4
  314. package/dist/cli/command.js.map +1 -1
  315. package/dist/cli/usage.d.ts +11 -1
  316. package/dist/cli/usage.js +20 -1
  317. package/dist/cli/usage.js.map +1 -1
  318. package/dist/compat/fetch-profile.js +10 -1
  319. package/dist/compat/fetch-profile.js.map +1 -1
  320. package/dist/compile-types.d.ts +13 -0
  321. package/dist/contracts/check.js +25 -6
  322. package/dist/contracts/check.js.map +1 -1
  323. package/dist/contracts/int32-elements.d.ts +115 -0
  324. package/dist/contracts/int32-elements.js +1179 -0
  325. package/dist/contracts/int32-elements.js.map +1 -0
  326. package/dist/coverage/report.d.ts +16 -0
  327. package/dist/coverage/report.js +182 -1
  328. package/dist/coverage/report.js.map +1 -1
  329. package/dist/coverage/surface-manifest.js +19 -6
  330. package/dist/coverage/surface-manifest.js.map +1 -1
  331. package/dist/coverage/verdict-cache.d.ts +2 -0
  332. package/dist/coverage/verdict-cache.js +12 -0
  333. package/dist/coverage/verdict-cache.js.map +1 -1
  334. package/dist/coverage/verdict-cache.test.js +2 -1
  335. package/dist/coverage/verdict-cache.test.js.map +1 -1
  336. package/dist/diagnostics/diagnostic.d.ts +11 -7
  337. package/dist/diagnostics/diagnostic.js +35 -23
  338. package/dist/diagnostics/diagnostic.js.map +1 -1
  339. package/dist/diagnostics/envelope.d.ts +39 -2
  340. package/dist/diagnostics/envelope.js.map +1 -1
  341. package/dist/diagnostics/render.d.ts +7 -0
  342. package/dist/diagnostics/render.js +50 -13
  343. package/dist/diagnostics/render.js.map +1 -1
  344. package/dist/diagnostics/render.test.d.ts +1 -0
  345. package/dist/diagnostics/render.test.js +49 -0
  346. package/dist/diagnostics/render.test.js.map +1 -0
  347. package/dist/executable/executable-cache.d.ts +17 -0
  348. package/dist/executable/executable-cache.js +13 -1
  349. package/dist/executable/executable-cache.js.map +1 -1
  350. package/dist/executable/executable-cache.test.js +7 -1
  351. package/dist/executable/executable-cache.test.js.map +1 -1
  352. package/dist/executable/prepare.js +2 -1
  353. package/dist/executable/prepare.js.map +1 -1
  354. package/dist/frontend/analysis.js +6 -1
  355. package/dist/frontend/analysis.js.map +1 -1
  356. package/dist/frontend/builtin-modules.d.ts +16 -2
  357. package/dist/frontend/builtin-modules.js +40 -7
  358. package/dist/frontend/builtin-modules.js.map +1 -1
  359. package/dist/frontend/cjs-syntax.js +52 -51
  360. package/dist/frontend/cjs-syntax.js.map +1 -1
  361. package/dist/frontend/contract-types.d.ts +3 -0
  362. package/dist/frontend/contract-types.js +36 -7
  363. package/dist/frontend/contract-types.js.map +1 -1
  364. package/dist/frontend/experimental-import.d.ts +5 -1
  365. package/dist/frontend/experimental-import.js +26 -7
  366. package/dist/frontend/experimental-import.js.map +1 -1
  367. package/dist/frontend/fork-target.js +20 -22
  368. package/dist/frontend/fork-target.js.map +1 -1
  369. package/dist/frontend/fork-target.test.js +2 -1
  370. package/dist/frontend/fork-target.test.js.map +1 -1
  371. package/dist/frontend/function-completion.js +6 -6
  372. package/dist/frontend/function-completion.js.map +1 -1
  373. package/dist/frontend/helper-tokens.js +15 -3
  374. package/dist/frontend/helper-tokens.js.map +1 -1
  375. package/dist/frontend/helper-tokens.test.js +7 -1
  376. package/dist/frontend/helper-tokens.test.js.map +1 -1
  377. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  378. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  379. package/dist/frontend/input-tracker.d.ts +3 -0
  380. package/dist/frontend/input-tracker.js +32 -3
  381. package/dist/frontend/input-tracker.js.map +1 -1
  382. package/dist/frontend/lib-contract.js +36 -32
  383. package/dist/frontend/lib-contract.js.map +1 -1
  384. package/dist/frontend/lib-exports.js +3 -3
  385. package/dist/frontend/lib-exports.js.map +1 -1
  386. package/dist/frontend/lowering/array-values.d.ts +8 -3
  387. package/dist/frontend/lowering/array-values.js +60 -11
  388. package/dist/frontend/lowering/array-values.js.map +1 -1
  389. package/dist/frontend/lowering/assert-instances.js +4 -4
  390. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  391. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  392. package/dist/frontend/lowering/assertion-identity.js +70 -0
  393. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  394. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  395. package/dist/frontend/lowering/assertion-members.js +185 -0
  396. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  397. package/dist/frontend/lowering/binding-analysis.js +27 -20
  398. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  399. package/dist/frontend/lowering/builtin-calls.js +72 -4
  400. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  401. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  402. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  403. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  404. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  405. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  406. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  407. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  408. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  409. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/blob.js +8 -6
  411. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  413. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  414. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
  416. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  417. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  418. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  420. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  421. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  422. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  423. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  425. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  426. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  428. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  429. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/compression.js +230 -52
  432. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  433. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  434. package/dist/frontend/lowering/builtins/constants.js +28 -7
  435. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  436. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  437. package/dist/frontend/lowering/builtins/crypto.js +223 -38
  438. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  439. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  440. package/dist/frontend/lowering/builtins/dates.js +92 -16
  441. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  443. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  444. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/environment.js +3 -3
  446. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  447. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  448. package/dist/frontend/lowering/builtins/errors.js +174 -6
  449. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
  451. package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
  452. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  453. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  454. package/dist/frontend/lowering/builtins/filesystem.js +213 -76
  455. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  457. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  459. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  461. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  462. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  464. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  465. package/dist/frontend/lowering/builtins/json.js +232 -24
  466. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  468. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  470. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  471. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/module-calls.js +67 -46
  473. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  475. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  476. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  478. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  479. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  481. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  482. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  484. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  486. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  487. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  488. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  489. package/dist/frontend/lowering/builtins/performance.js +259 -8
  490. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  491. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  492. package/dist/frontend/lowering/builtins/process.js +468 -99
  493. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  495. package/dist/frontend/lowering/builtins/promises.js +326 -43
  496. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  497. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  498. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  499. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  500. package/dist/frontend/lowering/builtins/properties.js +37 -1
  501. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  502. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  503. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  504. package/dist/frontend/lowering/builtins/readline.d.ts +55 -13
  505. package/dist/frontend/lowering/builtins/readline.js +931 -69
  506. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  508. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  510. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  512. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  513. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/strings.js +101 -12
  515. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  516. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  517. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  518. package/dist/frontend/lowering/builtins/timers.js +75 -30
  519. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  521. package/dist/frontend/lowering/builtins/url.js +120 -17
  522. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  523. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  524. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  526. package/dist/frontend/lowering/builtins/v8.js +105 -0
  527. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  529. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  530. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  532. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  533. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  534. package/dist/frontend/lowering/builtins/workers.d.ts +16 -0
  535. package/dist/frontend/lowering/builtins/workers.js +246 -3
  536. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  537. package/dist/frontend/lowering/call-arguments.js +69 -14
  538. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  539. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  540. package/dist/frontend/lowering/call-signatures.js +254 -47
  541. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  542. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  543. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  544. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  545. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  546. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  547. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  548. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  549. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  550. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  551. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  552. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  553. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  554. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  555. package/dist/frontend/lowering/class-attributes.js +378 -0
  556. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  557. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  558. package/dist/frontend/lowering/class-callbacks.js +21 -10
  559. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  560. package/dist/frontend/lowering/class-construction.js +49 -4
  561. package/dist/frontend/lowering/class-construction.js.map +1 -1
  562. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  563. package/dist/frontend/lowering/class-descriptors.js +8 -8
  564. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  565. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  566. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  567. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  568. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  569. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  570. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  571. package/dist/frontend/lowering/class-iterables.js +31 -0
  572. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  573. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  574. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  575. package/dist/frontend/lowering/class-method-values.js +56 -10
  576. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  577. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  578. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  579. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  580. package/dist/frontend/lowering/class-protocols.js +738 -22
  581. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  582. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  583. package/dist/frontend/lowering/class-prototypes.js +80 -18
  584. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  585. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  586. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  587. package/dist/frontend/lowering/class-static-data.js +2 -2
  588. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  589. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  590. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  591. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  592. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  593. package/dist/frontend/lowering/class-unions.js +102 -1
  594. package/dist/frontend/lowering/class-unions.js.map +1 -1
  595. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  596. package/dist/frontend/lowering/code-generation.js +127 -0
  597. package/dist/frontend/lowering/code-generation.js.map +1 -0
  598. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  599. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  600. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  601. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  602. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  603. package/dist/frontend/lowering/coercions/structural.js +35 -3
  604. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  605. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  606. package/dist/frontend/lowering/coercions/unions.js +57 -1
  607. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  608. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  609. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  610. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  611. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  612. package/dist/frontend/lowering/construction-escapes.js +8 -8
  613. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  614. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  615. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  616. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  617. package/dist/frontend/lowering/constructor-returns.js +477 -0
  618. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  619. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  620. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  621. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  622. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  623. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  624. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  625. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  626. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  627. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  628. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  629. package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
  630. package/dist/frontend/lowering/containers/array-from-async.js +427 -0
  631. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  632. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  633. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  634. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  635. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  636. package/dist/frontend/lowering/containers/bytes.js +161 -101
  637. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  638. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  639. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  640. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  641. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  642. package/dist/frontend/lowering/containers/collection-grouping.js +219 -27
  643. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  644. package/dist/frontend/lowering/containers/collection-methods.js +81 -48
  645. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  646. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  647. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  648. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  649. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  650. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  651. package/dist/frontend/lowering/containers/for-of.js +19 -19
  652. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  653. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  654. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  655. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  656. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  657. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  658. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  659. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  660. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  661. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  662. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  663. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  664. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  665. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  666. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  667. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  668. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  669. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  670. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  671. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  672. package/dist/frontend/lowering/devirtualize.js +27 -7
  673. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  674. package/dist/frontend/lowering/divergences.d.ts +0 -5
  675. package/dist/frontend/lowering/divergences.js +238 -128
  676. package/dist/frontend/lowering/divergences.js.map +1 -1
  677. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  678. package/dist/frontend/lowering/dyn-streams.js +257 -0
  679. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  680. package/dist/frontend/lowering/error-methods.js +4 -1
  681. package/dist/frontend/lowering/error-methods.js.map +1 -1
  682. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  683. package/dist/frontend/lowering/error-name-order.js +93 -0
  684. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  685. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  686. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  687. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  688. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  689. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  690. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  691. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  692. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  693. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  694. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  695. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  696. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  697. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  698. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  699. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  700. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  701. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  702. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  703. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  704. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  705. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  706. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  707. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  708. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  709. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  710. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  711. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  712. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  713. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  714. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  715. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  716. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  717. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  719. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  720. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  721. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  722. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  723. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  724. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  725. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  726. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  727. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  728. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  729. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  730. package/dist/frontend/lowering/expressions/updates.js +780 -0
  731. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  732. package/dist/frontend/lowering/function-context.d.ts +10 -0
  733. package/dist/frontend/lowering/function-context.js +11 -1
  734. package/dist/frontend/lowering/function-context.js.map +1 -1
  735. package/dist/frontend/lowering/function-returns.js +52 -28
  736. package/dist/frontend/lowering/function-returns.js.map +1 -1
  737. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  738. package/dist/frontend/lowering/general-streams.js +108 -0
  739. package/dist/frontend/lowering/general-streams.js.map +1 -0
  740. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  741. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  742. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  743. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  744. package/dist/frontend/lowering/generic-functions.js +393 -75
  745. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  746. package/dist/frontend/lowering/import-meta.js +2 -2
  747. package/dist/frontend/lowering/import-meta.js.map +1 -1
  748. package/dist/frontend/lowering/intern-tables.js +10 -9
  749. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  750. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  751. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  752. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  753. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  754. package/dist/frontend/lowering/js-class-fields.js +170 -0
  755. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  756. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  757. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  758. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  759. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  760. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  761. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  762. package/dist/frontend/lowering/json-require.d.ts +22 -0
  763. package/dist/frontend/lowering/json-require.js +131 -0
  764. package/dist/frontend/lowering/json-require.js.map +1 -0
  765. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  766. package/dist/frontend/lowering/key-order-witness.js +641 -0
  767. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  768. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  769. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  770. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  771. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  772. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  773. package/dist/frontend/lowering/lower-assert.js +61 -60
  774. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  775. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  776. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  777. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  778. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  779. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  780. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  781. package/dist/frontend/lowering/lower-calls.js +1298 -452
  782. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  783. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  784. package/dist/frontend/lowering/lower-classes.js +1499 -456
  785. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  786. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  787. package/dist/frontend/lowering/lower-comptime.js +111 -13
  788. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  789. package/dist/frontend/lowering/lower-console.js +13 -11
  790. package/dist/frontend/lowering/lower-console.js.map +1 -1
  791. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  792. package/dist/frontend/lowering/lower-dgram.js +179 -8
  793. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  794. package/dist/frontend/lowering/lower-enums.js +113 -14
  795. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  796. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  797. package/dist/frontend/lowering/lower-event-emitter.js +268 -71
  798. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  799. package/dist/frontend/lowering/lower-event-target.js +2 -2
  800. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  801. package/dist/frontend/lowering/lower-expando.js +17 -13
  802. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  803. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  804. package/dist/frontend/lowering/lower-exprs.js +1493 -12407
  805. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  806. package/dist/frontend/lowering/lower-functions.js +68 -22
  807. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  808. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  809. package/dist/frontend/lowering/lower-generators.js +29 -16
  810. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  811. package/dist/frontend/lowering/lower-global-value.js +5 -1
  812. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  813. package/dist/frontend/lowering/lower-inspect.js +354 -99
  814. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  815. package/dist/frontend/lowering/lower-mixins.js +23 -20
  816. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  817. package/dist/frontend/lowering/lower-mock.d.ts +19 -2
  818. package/dist/frontend/lowering/lower-mock.js +557 -74
  819. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  820. package/dist/frontend/lowering/lower-modules.js +268 -61
  821. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  822. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  823. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  824. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  825. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  826. package/dist/frontend/lowering/lower-node-module.js +147 -14
  827. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  828. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  829. package/dist/frontend/lowering/lower-server.js +638 -105
  830. package/dist/frontend/lowering/lower-server.js.map +1 -1
  831. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  832. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  833. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  834. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  835. package/dist/frontend/lowering/lower-stmts.js +1589 -398
  836. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  837. package/dist/frontend/lowering/lower-stream.d.ts +4 -3
  838. package/dist/frontend/lowering/lower-stream.js +714 -75
  839. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  840. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  841. package/dist/frontend/lowering/lower-test.js +574 -100
  842. package/dist/frontend/lowering/lower-test.js.map +1 -1
  843. package/dist/frontend/lowering/lower-timers.js +80 -32
  844. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  845. package/dist/frontend/lowering/lower-url.js +1 -1
  846. package/dist/frontend/lowering/lower-url.js.map +1 -1
  847. package/dist/frontend/lowering/lowerer.d.ts +409 -26
  848. package/dist/frontend/lowering/lowerer.js +1918 -305
  849. package/dist/frontend/lowering/lowerer.js.map +1 -1
  850. package/dist/frontend/lowering/lowerer.test.js +10 -4
  851. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  852. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  853. package/dist/frontend/lowering/maybe-promise.js +249 -0
  854. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  855. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  856. package/dist/frontend/lowering/module-member-this.js +262 -0
  857. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  858. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  859. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  860. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  861. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  862. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  863. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  864. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  865. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  866. package/dist/frontend/lowering/native-ffi.js +11 -11
  867. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  868. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  869. package/dist/frontend/lowering/null-prototype.js +33 -0
  870. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  871. package/dist/frontend/lowering/object-factory-new.js +6 -8
  872. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  873. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  874. package/dist/frontend/lowering/private-brands.js +265 -0
  875. package/dist/frontend/lowering/private-brands.js.map +1 -0
  876. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  877. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  878. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  879. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  880. package/dist/frontend/lowering/require-initialization.js +246 -0
  881. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  882. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  883. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  884. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  885. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  886. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  887. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  888. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  889. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  890. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  891. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  892. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  893. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  894. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  895. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  896. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  897. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  898. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  899. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  900. package/dist/frontend/lowering/split-consumers.js +4 -4
  901. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  902. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  903. package/dist/frontend/lowering/static-function-names.js +212 -0
  904. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  905. package/dist/frontend/lowering/static-this.js +6 -6
  906. package/dist/frontend/lowering/static-this.js.map +1 -1
  907. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  908. package/dist/frontend/lowering/strict-mode.js +31 -0
  909. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  910. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  911. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  912. package/dist/frontend/lowering/string-index.d.ts +12 -0
  913. package/dist/frontend/lowering/string-index.js +72 -1
  914. package/dist/frontend/lowering/string-index.js.map +1 -1
  915. package/dist/frontend/lowering/surfaces.d.ts +15 -6
  916. package/dist/frontend/lowering/surfaces.js +278 -45
  917. package/dist/frontend/lowering/surfaces.js.map +1 -1
  918. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  919. package/dist/frontend/lowering/symbol-fields.js +204 -36
  920. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  921. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  922. package/dist/frontend/lowering/symbol-methods.js +24 -6
  923. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  924. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  925. package/dist/frontend/lowering/thread-slots.js +208 -0
  926. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  927. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  928. package/dist/frontend/lowering/typed-arguments.js +472 -0
  929. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  930. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  931. package/dist/frontend/lowering/union-retag.js +27 -0
  932. package/dist/frontend/lowering/union-retag.js.map +1 -1
  933. package/dist/frontend/lowering/union-retag.test.js +24 -1
  934. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  935. package/dist/frontend/lowering/var-hoisting.js +6 -6
  936. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  937. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  938. package/dist/frontend/mock-shapes.d.ts +5 -0
  939. package/dist/frontend/mock-shapes.js +39 -7
  940. package/dist/frontend/mock-shapes.js.map +1 -1
  941. package/dist/frontend/module-source-candidates.js +1 -1
  942. package/dist/frontend/module-source-candidates.js.map +1 -1
  943. package/dist/frontend/module-source-candidates.test.js +2 -1
  944. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  945. package/dist/frontend/module-syntax.js +8 -8
  946. package/dist/frontend/module-syntax.js.map +1 -1
  947. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  948. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  949. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  950. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  951. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  952. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  953. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  954. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  955. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  956. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  957. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  958. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  959. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  960. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  961. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  962. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  963. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  964. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  965. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  966. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  967. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  968. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  969. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  970. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  971. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  972. package/dist/frontend/npm-static-prune.js +36 -24
  973. package/dist/frontend/npm-static-prune.js.map +1 -1
  974. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  975. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  976. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  977. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  978. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  979. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  980. package/dist/frontend/npm-static-subtyping.js +7 -9
  981. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  982. package/dist/frontend/npm-static.d.ts +17 -1
  983. package/dist/frontend/npm-static.js +167 -16
  984. package/dist/frontend/npm-static.js.map +1 -1
  985. package/dist/frontend/npm-static.test.js +22 -1
  986. package/dist/frontend/npm-static.test.js.map +1 -1
  987. package/dist/frontend/pipeline.js +164 -26
  988. package/dist/frontend/pipeline.js.map +1 -1
  989. package/dist/frontend/pipeline.test.js +22 -1
  990. package/dist/frontend/pipeline.test.js.map +1 -1
  991. package/dist/frontend/program-analysis.d.ts +6 -1
  992. package/dist/frontend/program-analysis.js +7 -0
  993. package/dist/frontend/program-analysis.js.map +1 -1
  994. package/dist/frontend/program.d.ts +92 -2
  995. package/dist/frontend/program.js +1557 -254
  996. package/dist/frontend/program.js.map +1 -1
  997. package/dist/frontend/program.test.js +76 -6
  998. package/dist/frontend/program.test.js.map +1 -1
  999. package/dist/frontend/resolve.js +36 -2
  1000. package/dist/frontend/resolve.js.map +1 -1
  1001. package/dist/frontend/resolve.test.js +49 -0
  1002. package/dist/frontend/resolve.test.js.map +1 -1
  1003. package/dist/frontend/services.d.ts +20 -1
  1004. package/dist/frontend/services.js +40 -3
  1005. package/dist/frontend/services.js.map +1 -1
  1006. package/dist/frontend/services.test.js +2 -1
  1007. package/dist/frontend/services.test.js.map +1 -1
  1008. package/dist/frontend/threads-import.js +1 -1
  1009. package/dist/frontend/threads-import.js.map +1 -1
  1010. package/dist/frontend/tier-analysis.d.ts +71 -0
  1011. package/dist/frontend/tier-analysis.js +522 -0
  1012. package/dist/frontend/tier-analysis.js.map +1 -0
  1013. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1014. package/dist/frontend/ts7/api-conformance.js +7 -0
  1015. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1016. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1017. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1018. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1019. package/dist/frontend/ts7/ast-node.js +64 -18
  1020. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1021. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1022. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1023. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1024. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1025. package/dist/frontend/ts7/ast.d.ts +1 -0
  1026. package/dist/frontend/ts7/ast.js +3 -2
  1027. package/dist/frontend/ts7/ast.js.map +1 -1
  1028. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1029. package/dist/frontend/ts7/checker-backend.js +88 -0
  1030. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1031. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1032. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1033. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1034. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1035. package/dist/frontend/ts7/checker-cache.js +0 -6
  1036. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1037. package/dist/frontend/ts7/checker.d.ts +18 -11
  1038. package/dist/frontend/ts7/checker.js +42 -55
  1039. package/dist/frontend/ts7/checker.js.map +1 -1
  1040. package/dist/frontend/ts7/checker.test.js +10 -7
  1041. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1042. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1043. package/dist/frontend/ts7/diagnostic.js +22 -0
  1044. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1045. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1046. package/dist/frontend/ts7/node-functions.js +18 -0
  1047. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1048. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1049. package/dist/frontend/ts7/program-host.js +12 -0
  1050. package/dist/frontend/ts7/program-host.js.map +1 -1
  1051. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1052. package/dist/frontend/ts7/rpc-api.js +8 -1
  1053. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1054. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1055. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1056. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1057. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1058. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1059. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1060. package/dist/frontend/ts7/semantic-model.js +88 -16
  1061. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1062. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1063. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1064. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1065. package/dist/frontend/ts7/semantic-types.js +1 -1
  1066. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1067. package/dist/frontend/ts7/session.d.ts +11 -11
  1068. package/dist/frontend/ts7/session.js +8 -5
  1069. package/dist/frontend/ts7/session.js.map +1 -1
  1070. package/dist/frontend/ts7/session.test.js +9 -5
  1071. package/dist/frontend/ts7/session.test.js.map +1 -1
  1072. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1073. package/dist/frontend/ts7/source-parser.js +24 -3
  1074. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1075. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1076. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1077. package/dist/frontend/type-mapper.d.ts +122 -2
  1078. package/dist/frontend/type-mapper.js +2612 -695
  1079. package/dist/frontend/type-mapper.js.map +1 -1
  1080. package/dist/frontend/type-only-imports.d.ts +28 -0
  1081. package/dist/frontend/type-only-imports.js +122 -0
  1082. package/dist/frontend/type-only-imports.js.map +1 -0
  1083. package/dist/frontend/worker-target.js +8 -8
  1084. package/dist/frontend/worker-target.js.map +1 -1
  1085. package/dist/index.d.ts +3 -1
  1086. package/dist/index.js +47 -10
  1087. package/dist/index.js.map +1 -1
  1088. package/dist/ir/analysis.js +4 -2
  1089. package/dist/ir/analysis.js.map +1 -1
  1090. package/dist/ir/api.d.ts +1 -1
  1091. package/dist/ir/api.js +1 -1
  1092. package/dist/ir/api.js.map +1 -1
  1093. package/dist/ir/array-length-stability.d.ts +30 -0
  1094. package/dist/ir/array-length-stability.js +236 -0
  1095. package/dist/ir/array-length-stability.js.map +1 -0
  1096. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1097. package/dist/ir/array-length-stability.test.js +113 -0
  1098. package/dist/ir/array-length-stability.test.js.map +1 -0
  1099. package/dist/ir/build.d.ts +2 -2
  1100. package/dist/ir/build.js +1 -1
  1101. package/dist/ir/build.js.map +1 -1
  1102. package/dist/ir/builtin-effects.js +139 -0
  1103. package/dist/ir/builtin-effects.js.map +1 -1
  1104. package/dist/ir/builtin-signatures.d.ts +1 -1
  1105. package/dist/ir/builtin-signatures.js +655 -25
  1106. package/dist/ir/builtin-signatures.js.map +1 -1
  1107. package/dist/ir/byte-numbers.js +3 -0
  1108. package/dist/ir/byte-numbers.js.map +1 -1
  1109. package/dist/ir/callback-specialization.d.ts +37 -0
  1110. package/dist/ir/callback-specialization.js +459 -0
  1111. package/dist/ir/callback-specialization.js.map +1 -0
  1112. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1113. package/dist/ir/callback-specialization.test.js +208 -0
  1114. package/dist/ir/callback-specialization.test.js.map +1 -0
  1115. package/dist/ir/capture-values.d.ts +0 -1
  1116. package/dist/ir/capture-values.js +51 -40
  1117. package/dist/ir/capture-values.js.map +1 -1
  1118. package/dist/ir/constant-globals.test.js +1 -1
  1119. package/dist/ir/constant-tables.test.js +1 -1
  1120. package/dist/ir/field-values.test.js +1 -1
  1121. package/dist/ir/final-fields.test.js +1 -1
  1122. package/dist/ir/function-references.test.js +10 -1
  1123. package/dist/ir/function-references.test.js.map +1 -1
  1124. package/dist/ir/init-only-globals.test.js +1 -1
  1125. package/dist/ir/initializer-bindings.test.js +1 -1
  1126. package/dist/ir/int32-slots.d.ts +14 -0
  1127. package/dist/ir/int32-slots.js +119 -14
  1128. package/dist/ir/int32-slots.js.map +1 -1
  1129. package/dist/ir/int32-slots.test.js +29 -1
  1130. package/dist/ir/int32-slots.test.js.map +1 -1
  1131. package/dist/ir/integer-loop-facts.d.ts +16 -6
  1132. package/dist/ir/integer-loop-facts.js +143 -38
  1133. package/dist/ir/integer-loop-facts.js.map +1 -1
  1134. package/dist/ir/integer-loops.d.ts +1 -1
  1135. package/dist/ir/integer-loops.js +39 -9
  1136. package/dist/ir/integer-loops.js.map +1 -1
  1137. package/dist/ir/integer-loops.test.js +104 -0
  1138. package/dist/ir/integer-loops.test.js.map +1 -1
  1139. package/dist/ir/integer-ranges.d.ts +3 -0
  1140. package/dist/ir/integer-ranges.js +4 -6
  1141. package/dist/ir/integer-ranges.js.map +1 -1
  1142. package/dist/ir/integer-ranges.test.js +142 -1
  1143. package/dist/ir/integer-ranges.test.js.map +1 -1
  1144. package/dist/ir/intrinsic-signatures.js +6 -0
  1145. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1146. package/dist/ir/ir.d.ts +234 -58
  1147. package/dist/ir/ir.js +123 -12
  1148. package/dist/ir/ir.js.map +1 -1
  1149. package/dist/ir/ir.test.js +10 -0
  1150. package/dist/ir/ir.test.js.map +1 -1
  1151. package/dist/ir/jsval.d.ts +8 -0
  1152. package/dist/ir/jsval.js +365 -0
  1153. package/dist/ir/jsval.js.map +1 -0
  1154. package/dist/ir/jsval.test.d.ts +1 -0
  1155. package/dist/ir/jsval.test.js +239 -0
  1156. package/dist/ir/jsval.test.js.map +1 -0
  1157. package/dist/ir/runtime-features.d.ts +150 -33
  1158. package/dist/ir/runtime-features.js +672 -339
  1159. package/dist/ir/runtime-features.js.map +1 -1
  1160. package/dist/ir/runtime-features.test.js +62 -0
  1161. package/dist/ir/runtime-features.test.js.map +1 -1
  1162. package/dist/ir/scalar-records.test.js +1 -1
  1163. package/dist/ir/self-captures.d.ts +33 -0
  1164. package/dist/ir/self-captures.js +245 -0
  1165. package/dist/ir/self-captures.js.map +1 -0
  1166. package/dist/ir/self-captures.test.d.ts +1 -0
  1167. package/dist/ir/self-captures.test.js +135 -0
  1168. package/dist/ir/self-captures.test.js.map +1 -0
  1169. package/dist/ir/serialize.d.ts +1 -1
  1170. package/dist/ir/serialize.js +7 -4
  1171. package/dist/ir/serialize.js.map +1 -1
  1172. package/dist/ir/tiers.d.ts +26 -0
  1173. package/dist/ir/tiers.js +101 -0
  1174. package/dist/ir/tiers.js.map +1 -0
  1175. package/dist/ir/tiers.test.d.ts +1 -0
  1176. package/dist/ir/tiers.test.js +140 -0
  1177. package/dist/ir/tiers.test.js.map +1 -0
  1178. package/dist/ir/traverse.js +107 -94
  1179. package/dist/ir/traverse.js.map +1 -1
  1180. package/dist/ir/traverse.test.js +33 -30
  1181. package/dist/ir/traverse.test.js.map +1 -1
  1182. package/dist/ir/unshare.js +65 -3
  1183. package/dist/ir/unshare.js.map +1 -1
  1184. package/dist/ir/unshare.test.js +1 -1
  1185. package/dist/ir/validate.js +220 -71
  1186. package/dist/ir/validate.js.map +1 -1
  1187. package/dist/ir/validate.test.js +64 -9
  1188. package/dist/ir/validate.test.js.map +1 -1
  1189. package/dist/library/fence-eval.test.js +1 -1
  1190. package/dist/library/int-infer.test.js +4 -4
  1191. package/dist/library/ir-policy.js +18 -0
  1192. package/dist/library/ir-policy.js.map +1 -1
  1193. package/dist/library/library-cache.d.ts +1 -0
  1194. package/dist/library/library-cache.js.map +1 -1
  1195. package/dist/library/library-cache.test.js +5 -5
  1196. package/dist/library/library-profile.d.ts +4 -4
  1197. package/dist/library/library-profile.js +35 -7
  1198. package/dist/library/library-profile.js.map +1 -1
  1199. package/dist/library/prepare.js +13 -1
  1200. package/dist/library/prepare.js.map +1 -1
  1201. package/dist/native/cli.js +5 -0
  1202. package/dist/native/cli.js.map +1 -1
  1203. package/dist/native/compiler.js +2 -2
  1204. package/dist/native/compiler.js.map +1 -1
  1205. package/dist/native/compiler.test.js +2 -2
  1206. package/dist/native/prepare.js +7 -0
  1207. package/dist/native/prepare.js.map +1 -1
  1208. package/dist/native/sanitizer.test.js +12 -0
  1209. package/dist/native/sanitizer.test.js.map +1 -1
  1210. package/dist/native/toolchain.d.ts +2 -0
  1211. package/dist/native/toolchain.js +10 -1
  1212. package/dist/native/toolchain.js.map +1 -1
  1213. package/dist/native/toolchain.test.js +39 -1
  1214. package/dist/native/toolchain.test.js.map +1 -1
  1215. package/dist/startup-cache.d.ts +1 -0
  1216. package/dist/startup-cache.js +1 -0
  1217. package/dist/startup-cache.js.map +1 -1
  1218. package/dist/wasm/base64.d.ts +5 -0
  1219. package/dist/wasm/base64.js +62 -0
  1220. package/dist/wasm/base64.js.map +1 -0
  1221. package/dist/wasm/binary.d.ts +36 -0
  1222. package/dist/wasm/binary.js +1976 -0
  1223. package/dist/wasm/binary.js.map +1 -0
  1224. package/dist/wasm/binary.test.d.ts +1 -0
  1225. package/dist/wasm/binary.test.js +190 -0
  1226. package/dist/wasm/binary.test.js.map +1 -0
  1227. package/dist/wasm/discover.d.ts +38 -0
  1228. package/dist/wasm/discover.js +377 -0
  1229. package/dist/wasm/discover.js.map +1 -0
  1230. package/dist/wasm/discover.test.d.ts +1 -0
  1231. package/dist/wasm/discover.test.js +24 -0
  1232. package/dist/wasm/discover.test.js.map +1 -0
  1233. package/dist/wasm/module.d.ts +151 -0
  1234. package/dist/wasm/module.js +575 -0
  1235. package/dist/wasm/module.js.map +1 -0
  1236. package/dist/wasm/translate.d.ts +48 -0
  1237. package/dist/wasm/translate.js +2129 -0
  1238. package/dist/wasm/translate.js.map +1 -0
  1239. package/dist/wasm/translate.test.d.ts +1 -0
  1240. package/dist/wasm/translate.test.js +207 -0
  1241. package/dist/wasm/translate.test.js.map +1 -0
  1242. package/package.json +21 -20
  1243. package/surface-manifest.json +332 -36
@@ -1,11 +1,13 @@
1
+ import { staticNameBindings } from "./static-function-names.js";
1
2
  import * as ts from "../ts7/adapter.js";
2
3
  import { bodyReadsArguments } from "../arguments-usage.js";
3
4
  import { DYN, isUnitType, typeEquals, } from "../../ir/ir.js";
4
5
  import { isJsSourceFile, locOf } from "../program.js";
5
6
  import { typeKey } from "../type-mapper.js";
7
+ import { functionCanReturnUndefined } from "../function-completion.js";
6
8
  import { PoisonError, dynFallbackType, neverTaintedJsType, newFnCtx } from "./lowerer.js";
7
9
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
8
- import { findGenericMethodOn } from "./lower-classes.js";
10
+ import { findGenericMethodOn, storedClassValueType } from "./lower-classes.js";
9
11
  import { nsPathPrefix } from "./lower-namespaces.js";
10
12
  import { declSymbolOf } from "./lower-modules.js";
11
13
  import { npmStaticPackageOfPath } from "../npm-static.js";
@@ -41,9 +43,7 @@ function checkGenericParameterNames(lowerer, parameters, allowPatterns) {
41
43
  * cannot see them; const bindings need no whole-file write scan. */
42
44
  function requireStableGenericBinding(lowerer, decl, symbol, name) {
43
45
  const isConst = (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0;
44
- const redeclared = lowerer.checker
45
- .declarationsOf(symbol)
46
- .some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
46
+ const redeclared = symbol.declarations.some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
47
47
  if (!isConst && (redeclared || !bindingNeverReassigned(lowerer, symbol, decl))) {
48
48
  lowerer.unsupported("SC1090", decl.name, `generic function values in reassigned bindings (calls of '${name}' resolve statically against this initializer, so the binding must provably hold it — a const, or a let/var nothing in its declaring file writes)`);
49
49
  }
@@ -54,8 +54,8 @@ function requireStableGenericBinding(lowerer, decl, symbol, name) {
54
54
  * generic function requires no body lowering). Called inside
55
55
  * collectSignature's poison catch. */
56
56
  export function collectGenericSignature(lowerer, decl) {
57
- const typeParams = declaredTypeParameterSymbols(lowerer, decl.typeParameters, decl, "this function form");
58
- checkGenericParameterNames(lowerer, decl.parameters, true);
57
+ const typeParams = declaredTypeParameterSymbols(lowerer, decl.typeParameters.nodes, decl, "this function form");
58
+ checkGenericParameterNames(lowerer, decl.parameters.nodes, true);
59
59
  const nameText = decl.name?.text ?? "%default"; // nameless = the default export (checked by collectSignatureInner)
60
60
  const symbol = declSymbolOf(lowerer, decl);
61
61
  if (!symbol)
@@ -63,7 +63,7 @@ export function collectGenericSignature(lowerer, decl) {
63
63
  lowerer.genericFnsBySymbol.set(symbol, {
64
64
  decl,
65
65
  baseName: nameText,
66
- qualifiedName: lowerer.qualify(decl.getSourceFile(), nsPathPrefix(decl) + nameText),
66
+ qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(decl) + nameText),
67
67
  typeParams,
68
68
  instances: new Map(),
69
69
  });
@@ -84,7 +84,7 @@ export function lowerGenericCall(lowerer, expr, info) {
84
84
  const instance = info.implicitParams
85
85
  ? implicitCallInstance(lowerer, expr, info)
86
86
  : genericCallInstance(lowerer, expr, info);
87
- const args = lowerer.completeArgs(expr.arguments, instance.params, loc, expr);
87
+ const args = lowerer.completeArgs(expr.arguments.nodes, instance.params, loc, expr);
88
88
  return { kind: "call", callee: instance.name, args, type: instance.returnType, loc };
89
89
  }
90
90
  /** The instance a CALL of a generic function-like names: resolved
@@ -100,27 +100,43 @@ export function genericCallInstance(lowerer, expr, info) {
100
100
  // honest story (monomorphize per implementation signature with the
101
101
  // reconcile bridge, like the non-generic path).
102
102
  {
103
- const rdecl = rsig ? lowerer.checker.signatureDeclaration(rsig) : undefined;
103
+ const rdecl = rsig ? rsig.declaration : undefined;
104
104
  if (rdecl &&
105
105
  (ts.isFunctionDeclaration(rdecl) || ts.isMethodDeclaration(rdecl)) &&
106
106
  !rdecl.body) {
107
107
  lowerer.unsupported("SC1090", expr, `calls selecting an overload signature of a generic ${ts.isMethodDeclaration(rdecl) ? "method" : "function"} (only the implementation signature monomorphizes)`);
108
108
  }
109
109
  }
110
- if (!rsig || rsig.getParameters().length !== info.decl.parameters.length) {
110
+ if (!rsig || rsig.getParameters().length !== info.decl.parameters.nodes.length) {
111
111
  lowerer.unsupported("SC1090", expr, "this call form");
112
112
  }
113
113
  // Per-param shapes from the RESOLVED signature (types substituted) plus
114
114
  // the declaration's modes: rest stays the resolved array, a default's
115
115
  // ABI union is synthesized over the resolved body type — exactly the
116
116
  // paramShape rules, applied to post-substitution types.
117
- const params = paramShapes(lowerer, info.decl.parameters, rsig, (_param, i) => expr.arguments[i] ?? expr);
117
+ const params = paramShapes(lowerer, info.decl.parameters.nodes, rsig, (_param, i) => expr.arguments.nodes[i] ?? expr);
118
118
  const retTs = lowerer.checker.getReturnTypeOfSignature(rsig);
119
- const returnType = lowerer.mapTypeOf(retTs);
120
- if (!returnType) {
119
+ const local = localClassResultInstance(lowerer, expr, info, rsig, params, retTs);
120
+ if (local)
121
+ return local;
122
+ // A result instantiated at `any` (a type argument inferred from an
123
+ // untyped value, such as an untyped forwarding call) is checked-dynamic.
124
+ const mappedReturn = lowerer.mapTypeOf(retTs) ??
125
+ ((retTs.flags & ts.TypeFlags.Any) !== 0 && !isJsSourceFile(ts.getSourceFileOfNode(info.decl))
126
+ ? DYN
127
+ : null);
128
+ if (!mappedReturn) {
121
129
  fenceGenericSignatureResult(lowerer, expr, retTs);
122
130
  lowerer.badType(expr, retTs);
123
131
  }
132
+ // A body that can return an indexed read that misses returns undefined
133
+ // there, as in JavaScript, whatever the declared result says. An async
134
+ // body's promise is always present and settles with undefined there.
135
+ const returnType = lowerer.runtimeOptionalGenericReturns.has(info.decl)
136
+ ? mappedReturn.kind === "promise"
137
+ ? { kind: "promise", inner: lowerer.runtimeOptionalType(mappedReturn.inner) }
138
+ : lowerer.runtimeOptionalType(mappedReturn)
139
+ : mappedReturn;
124
140
  // keyof-constrained type parameters (`K extends keyof T`): the bound
125
141
  // LITERAL is semantic — the instance body reads the named field — so
126
142
  // the bindings compute EAGERLY (the key needs them) and each literal
@@ -129,6 +145,7 @@ export function genericCallInstance(lowerer, expr, info) {
129
145
  // different fields). Non-literal bindings (a key union, plain string)
130
146
  // share one runtime-keyed instance per IR signature, exactly the
131
147
  // widened discipline.
148
+ const named = staticNameBindings(lowerer, expr, info);
132
149
  const keyofTps = keyofConstrainedTypeParams(info);
133
150
  if (keyofTps.size > 0) {
134
151
  const tsBindings = new Map();
@@ -145,11 +162,146 @@ export function genericCallInstance(lowerer, expr, info) {
145
162
  })
146
163
  .join(",");
147
164
  return internGenericInstance(lowerer, expr, info, params, returnType, () => bindings, {
148
- extraKey: `@${litKey}`,
165
+ extraKey: `@${litKey}${named?.key ?? ""}`,
149
166
  tsBindings,
167
+ ...(named ? { staticFnNames: named.names } : {}),
150
168
  });
151
169
  }
152
- return internGenericInstance(lowerer, expr, info, params, returnType, (tsBindings) => lowerer.inferTypeParamBindings(expr, info, rsig, tsBindings));
170
+ return internGenericInstance(lowerer, expr, info, params, returnType, (tsBindings) => lowerer.inferTypeParamBindings(expr, info, rsig, tsBindings), named ? { extraKey: named.key, staticFnNames: named.names } : undefined);
171
+ }
172
+ /** A generic factory whose result is one of its own local classes
173
+ * (`function base<T>(v: T) { return class { value: T = v }; }`). Each
174
+ * instance has its own class, so the instance is keyed on its bindings and
175
+ * the result maps inside it, where the local class takes the instance's
176
+ * name and bindings. */
177
+ function localClassResultInstance(lowerer, expr, info, rsig, params, retTs) {
178
+ if (!localClassOfResult(lowerer, info, retTs))
179
+ return null;
180
+ const tsBindings = new Map();
181
+ const bindings = lowerer.inferTypeParamBindings(expr, info, rsig, tsBindings);
182
+ const bindingKey = info.typeParams
183
+ .map((tp) => {
184
+ const bound = bindings.get(tp);
185
+ return bound ? typeKey(bound) : "?";
186
+ })
187
+ .join(",");
188
+ const pending = { kind: "void" };
189
+ const inst = internGenericInstance(lowerer, expr, info, params, pending, () => bindings, {
190
+ extraKey: `@class<${bindingKey}>`,
191
+ tsBindings,
192
+ });
193
+ if (inst.returnType !== pending)
194
+ return inst;
195
+ const returnType = withInstanceScope(lowerer, info, inst, () => lowerer.mapTypeOf(retTs));
196
+ if (!returnType) {
197
+ fenceGenericSignatureResult(lowerer, expr, retTs);
198
+ lowerer.badType(expr, retTs);
199
+ }
200
+ inst.returnType = returnType;
201
+ // Values of the class outside the factory (`const b = new B()`, `b.read()`)
202
+ // carry the instantiated checker type; record which class it names. A
203
+ // call inside another generic instance can have a type that depends on
204
+ // that instance's parameters, which no single class answers.
205
+ if (lowerer.typeParamBindings !== null)
206
+ return inst;
207
+ const instance = returnType.kind === "classval"
208
+ ? lowerer.checker
209
+ .getConstructSignatures(retTs)
210
+ .map((sig) => lowerer.checker.getReturnTypeOfSignature(sig))
211
+ : [retTs];
212
+ const className = returnType.kind === "classval" || returnType.kind === "object" ? returnType.className : null;
213
+ if (className !== null)
214
+ for (const type of instance)
215
+ lowerer.localClassInstanceTypes.set(type.id, className);
216
+ return inst;
217
+ }
218
+ /** The class value a call of a generic factory returns when the result is
219
+ * one of the factory's local classes (`class C extends base(42) {}`), or
220
+ * null for any other call. */
221
+ export function genericLocalClassResult(lowerer, expr) {
222
+ if (!ts.isIdentifier(expr.expression))
223
+ return null;
224
+ const info = lowerer.genericFnOf(expr.expression);
225
+ if (!info || info.implicitParams)
226
+ return null;
227
+ const rsig = lowerer.checker.getResolvedSignature(expr);
228
+ if (!rsig || !localClassOfResult(lowerer, info, lowerer.checker.getReturnTypeOfSignature(rsig)))
229
+ return null;
230
+ return genericCallInstance(lowerer, expr, info).returnType;
231
+ }
232
+ /** The type of a `const` binding whose initializer calls a generic factory
233
+ * returning one of its local classes (`const B = base(7)`), or constructs
234
+ * such a class (`const b = new B()`); null for any other binding. */
235
+ export function genericLocalClassBinding(lowerer, node) {
236
+ const decl = node.parent;
237
+ if (!ts.isIdentifier(node) ||
238
+ !decl ||
239
+ !ts.isVariableDeclaration(decl) ||
240
+ decl.name !== node ||
241
+ !decl.initializer ||
242
+ (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) === 0)
243
+ return null;
244
+ // An `any` binding keeps the checked-dynamic representation.
245
+ if ((lowerer.typeOf(node).flags & ts.TypeFlags.Any) !== 0)
246
+ return null;
247
+ let init = decl.initializer;
248
+ while (ts.isParenthesizedExpression(init))
249
+ init = init.expression;
250
+ if (ts.isCallExpression(init))
251
+ return genericLocalClassResult(lowerer, init);
252
+ if (!ts.isNewExpression(init))
253
+ return null;
254
+ const constructed = storedClassValueType(lowerer, init.expression);
255
+ if (constructed?.kind !== "classval")
256
+ return null;
257
+ const classDecl = lowerer.classes.get(constructed.className)?.decl;
258
+ return classDecl && insideGenericFunction(classDecl)
259
+ ? { kind: "object", className: constructed.className }
260
+ : null;
261
+ }
262
+ /** Whether `node` is declared inside a function with type parameters. */
263
+ function insideGenericFunction(node) {
264
+ for (let parent = node.parent; parent && !ts.isSourceFile(parent); parent = parent.parent)
265
+ if (ts.isFunctionLike(parent) && (parent.typeParameters?.nodes.length ?? 0) > 0)
266
+ return true;
267
+ return false;
268
+ }
269
+ /** The class declared inside a generic function that `type` is the
270
+ * constructor or instance type of, or null. */
271
+ function localClassOfResult(lowerer, info, type) {
272
+ const symbol = type.getSymbol();
273
+ if (!symbol || !(symbol.flags & ts.SymbolFlags.Class))
274
+ return null;
275
+ const decl = symbol.valueDeclaration;
276
+ if (!decl || !(ts.isClassExpression(decl) || ts.isClassDeclaration(decl)))
277
+ return null;
278
+ for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent)
279
+ if (parent === info.decl)
280
+ return decl;
281
+ return null;
282
+ }
283
+ /** Runs `fn` under an instance's type bindings and local-class names, as
284
+ * its body lowers. */
285
+ function withInstanceScope(lowerer, info, inst, fn) {
286
+ const prevBindings = lowerer.typeParamBindings;
287
+ const prevTsBindings = lowerer.typeParamTsBindings;
288
+ const previousPath = lowerer.genericInstantiationPath;
289
+ const prevContext = lowerer.instantiationContext;
290
+ lowerer.typeParamBindings = inst.bindings;
291
+ lowerer.typeParamTsBindings = inst.tsBindings ?? null;
292
+ lowerer.genericInstantiationPath = inst.path;
293
+ lowerer.instantiationContext = `instantiating '${info.baseName}' with ${inst.typeArgsText}`;
294
+ lowerer.localClassInstantiations.push({ owner: info.decl, name: inst.name });
295
+ try {
296
+ return fn();
297
+ }
298
+ finally {
299
+ lowerer.localClassInstantiations.pop();
300
+ lowerer.typeParamBindings = prevBindings;
301
+ lowerer.typeParamTsBindings = prevTsBindings;
302
+ lowerer.genericInstantiationPath = previousPath;
303
+ lowerer.instantiationContext = prevContext;
304
+ }
153
305
  }
154
306
  /** The one instance table both instantiation routes share: key identity IS
155
307
  * signature identity, so a call (`identity(1)`) and a pinned VALUE
@@ -180,7 +332,7 @@ function internGenericInstance(lowerer, blame, info, params, returnType, makeBin
180
332
  return JSON.stringify(tsBound.value);
181
333
  }
182
334
  const bound = bindings.get(tp);
183
- return bound ? lowerer.fmt(bound) : tp.name;
335
+ return bound ? lowerer.fmt(bound) : ts.symbolName(tp);
184
336
  })
185
337
  .join(", ");
186
338
  // Deep polymorphic recursion renders unbounded types — keep messages sane.
@@ -194,6 +346,7 @@ function internGenericInstance(lowerer, blame, info, params, returnType, makeBin
194
346
  bindings,
195
347
  tsBindings,
196
348
  typeArgsText,
349
+ ...(opts?.staticFnNames ? { staticFnNames: opts.staticFnNames } : {}),
197
350
  };
198
351
  info.instances.set(key, inst);
199
352
  lowerer.instantiationQueue.push({ info, inst });
@@ -209,7 +362,7 @@ function keyofConstrainedTypeParams(info) {
209
362
  if (info.keyofTps)
210
363
  return info.keyofTps;
211
364
  const out = new Set();
212
- info.decl.typeParameters?.forEach((tpDecl, i) => {
365
+ info.decl.typeParameters?.nodes.forEach((tpDecl, i) => {
213
366
  const sym = info.typeParams[i];
214
367
  if (!sym || tpDecl.constraint === undefined)
215
368
  return;
@@ -231,7 +384,7 @@ function keyofConstrainedTypeParams(info) {
231
384
  * (carrying the instantiation context). */
232
385
  export function inferTypeParamBindings(lowerer, expr, info, rsig, tsBindings) {
233
386
  const bindings = new Map();
234
- expr.typeArguments?.forEach((ta, i) => {
387
+ expr.typeArguments?.nodes.forEach((ta, i) => {
235
388
  const tp = info.typeParams[i];
236
389
  if (!tp)
237
390
  return;
@@ -243,7 +396,7 @@ export function inferTypeParamBindings(lowerer, expr, info, rsig, tsBindings) {
243
396
  }
244
397
  });
245
398
  unifySignatureBindings(lowerer, info, rsig, bindings, tsBindings);
246
- bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters, bindings, tsBindings);
399
+ bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters?.nodes, bindings, tsBindings);
247
400
  return bindings;
248
401
  }
249
402
  /** Type parameters still unbound after unification take their declared
@@ -298,7 +451,11 @@ function unifySignatureBindings(lowerer, info, rsig, bindings, tsBindings) {
298
451
  tsBindings.set(sym, lowerer.typeParamTsResolver(inst) ?? inst);
299
452
  }
300
453
  if (!bindings.has(sym)) {
301
- const mapped = lowerer.mapTypeOf(inst);
454
+ const mapped = lowerer.mapTypeOf(inst) ??
455
+ ((inst.flags & ts.TypeFlags.Any) !== 0 &&
456
+ !isJsSourceFile(ts.getSourceFileOfNode(info.decl))
457
+ ? DYN
458
+ : null);
302
459
  // A visitor's inferred T can be void. It still binds the
303
460
  // return convention of `(node) => T`; discarding it leaves
304
461
  // the callback's return type spuriously uninstantiated.
@@ -400,7 +557,7 @@ function unifySignatureBindings(lowerer, info, rsig, bindings, tsBindings) {
400
557
  }
401
558
  if (declared.flags & ts.TypeFlags.Object) {
402
559
  for (const dp of lowerer.checker.getPropertiesOfType(declared)) {
403
- const ip = lowerer.checker.getPropertyOfType(inst, dp.name);
560
+ const ip = lowerer.checker.getPropertyOfType(inst, ts.symbolName(dp));
404
561
  if (ip)
405
562
  unify(lowerer.checker.getTypeOfSymbol(dp), lowerer.checker.getTypeOfSymbol(ip), depth + 1);
406
563
  }
@@ -431,6 +588,8 @@ export function lowerGenericInstance(lowerer, info, inst) {
431
588
  const prevSuppress = lowerer.suppressStats;
432
589
  const prevClass = lowerer.currentClass;
433
590
  const prevImplicit = lowerer.implicitParamTypes;
591
+ const prevStaticFnNames = lowerer.staticFnNames;
592
+ lowerer.staticFnNames = inst.staticFnNames ?? null;
434
593
  // A generic METHOD of a generic-class INSTANTIATION lowers under BOTH
435
594
  // binding sets: the receiver instantiation's class type parameters
436
595
  // underneath, the method instantiation's own on top (disjoint symbol
@@ -460,7 +619,7 @@ export function lowerGenericInstance(lowerer, info, inst) {
460
619
  // body returns the resolved promise's INNER type, calls enter through
461
620
  // the instance's own spawn wrapper (the emitter routes by fn.async),
462
621
  // and awaits park this instance's fibers.
463
- const isAsync = decl.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
622
+ const isAsync = decl.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
464
623
  const nameBlame = (ts.isArrowFunction(decl) ? undefined : decl.name) ?? decl;
465
624
  const isGenerator = decl.asteriskToken !== undefined;
466
625
  if (isAsync && !isGenerator && inst.returnType.kind !== "promise") {
@@ -478,6 +637,8 @@ export function lowerGenericInstance(lowerer, info, inst) {
478
637
  : lowerer.bodyReturnType(isAsync, inst.returnType);
479
638
  const fnCtx = newFnCtx(false, null, null, bodyReturn);
480
639
  fnCtx.isAsync = isAsync;
640
+ // Instances lower on demand, on top of whichever caller reached them.
641
+ fnCtx.thisBoundary = true;
481
642
  // Implicit-any instances whose declared return did not map lower in
482
643
  // return-INFERENCE mode: `return` statements record here bare, and the
483
644
  // post-pass (resolveInferredReturn) settles the type and wraps them.
@@ -491,6 +652,8 @@ export function lowerGenericInstance(lowerer, info, inst) {
491
652
  lowerer.fnStack.push(fnCtx);
492
653
  lowerer.localClassInstantiations.push({ owner: decl, name: inst.name });
493
654
  lowerer.genericInstantiationPath = inst.path;
655
+ if (inst.erased)
656
+ lowerer.erasingDepth++;
494
657
  try {
495
658
  // Static specializations bind lexical this only when the caller
496
659
  // proved its exact receiver. Other instances retain the fence;
@@ -514,12 +677,12 @@ export function lowerGenericInstance(lowerer, info, inst) {
514
677
  }
515
678
  // Default-param initializers lower per instance, with the bindings
516
679
  // threaded — a default mentioning T resolves like any body expression.
517
- const declared = lowerer.declareParams(decl.parameters, inst.params);
680
+ const declared = lowerer.declareParams(decl.parameters.nodes, inst.params);
518
681
  params.push(...declared.params);
519
682
  const body = [...receiverInit, ...declared.prologue];
520
683
  const bodyBlock = blockBodyOf(decl);
521
684
  if (bodyBlock) {
522
- body.push(...lowerer.lowerStmts(bodyBlock.statements));
685
+ body.push(...lowerer.lowerStmts(bodyBlock.statements.nodes));
523
686
  if (fnCtx.inferReturn) {
524
687
  bodyReturn = resolveInferredReturn(lowerer, inst, fnCtx.inferReturn, body, decl);
525
688
  inst.returnType = bodyReturn;
@@ -587,9 +750,12 @@ export function lowerGenericInstance(lowerer, info, inst) {
587
750
  lowerer.typeParamBindings = prevBindings;
588
751
  lowerer.typeParamTsBindings = prevTsBindings;
589
752
  lowerer.implicitParamTypes = prevImplicit;
753
+ lowerer.staticFnNames = prevStaticFnNames;
590
754
  lowerer.instantiationContext = prevContext;
591
755
  lowerer.localClassInstantiations.pop();
592
756
  lowerer.suppressStats = prevSuppress;
757
+ if (inst.erased)
758
+ lowerer.erasingDepth--;
593
759
  }
594
760
  }
595
761
  /** A generic function taken as a VALUE, monomorphized by flow. A function
@@ -654,7 +820,7 @@ export function lowerGenericFnValue(lowerer, ref, info) {
654
820
  const hofBinding = runtimeOptionalHofGenericBinding(lowerer, ref, info);
655
821
  if (hofBinding)
656
822
  bindings.set(hofBinding.typeParam, hofBinding.type);
657
- bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters, bindings);
823
+ bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters?.nodes, bindings);
658
824
  // A pinning signature that itself keeps type parameters (`let g: <T>(x:
659
825
  // T) => T = identity` — storing the generic signature as such) binds
660
826
  // nothing: mapType answers null for an unsubstituted parameter.
@@ -673,7 +839,7 @@ function runtimeOptionalHofGenericBinding(lowerer, ref, info) {
673
839
  while (argument.parent && ts.isParenthesizedExpression(argument.parent))
674
840
  argument = argument.parent;
675
841
  const call = argument.parent;
676
- if (!ts.isCallExpression(call) || call.arguments[0] !== argument)
842
+ if (!ts.isCallExpression(call) || call.arguments.nodes[0] !== argument)
677
843
  return null;
678
844
  if (!ts.isPropertyAccessExpression(call.expression) || call.expression.name.text !== "map")
679
845
  return null;
@@ -682,7 +848,7 @@ function runtimeOptionalHofGenericBinding(lowerer, ref, info) {
682
848
  const receiver = lowerer.mapTypeOf(lowerer.typeOf(call.expression.expression));
683
849
  if (receiver?.kind !== "array")
684
850
  return null;
685
- const parameter = info.decl.parameters[0];
851
+ const parameter = info.decl.parameters.nodes[0];
686
852
  if (!parameter || !ts.isIdentifier(parameter.name))
687
853
  return null;
688
854
  const parameterType = lowerer.typeOf(parameter.name);
@@ -693,6 +859,20 @@ function runtimeOptionalHofGenericBinding(lowerer, ref, info) {
693
859
  return null;
694
860
  return { typeParam, type: lowerer.runtimeOptionalType(receiver.elem) };
695
861
  }
862
+ /** The erased instance of a generic declaration: every type parameter
863
+ * bound to `unknown`, the function JavaScript runs for any type arguments.
864
+ * Values of generic methods (dynamic dispatch, interface views) call it. */
865
+ export function erasedGenericInstance(lowerer, blame, info) {
866
+ lowerer.erasingDepth++;
867
+ try {
868
+ const instance = genericValueInstance(lowerer, blame, info, new Map(info.typeParams.map((tp) => [tp, DYN])));
869
+ instance.erased = true;
870
+ return instance;
871
+ }
872
+ finally {
873
+ lowerer.erasingDepth--;
874
+ }
875
+ }
696
876
  /** The instance a pinned VALUE reference names: the declaration's modes
697
877
  * over the DECLARED types mapped under the bindings (mapType's resolver
698
878
  * substitutes — the instance-body trick), which is the same result the
@@ -704,7 +884,7 @@ function genericValueInstance(lowerer, ref, info, bindings) {
704
884
  const rendered = info.typeParams
705
885
  .map((tp) => {
706
886
  const bound = bindings.get(tp);
707
- return bound ? lowerer.fmt(bound) : tp.name;
887
+ return bound ? lowerer.fmt(bound) : ts.symbolName(tp);
708
888
  })
709
889
  .join(", ");
710
890
  lowerer.typeParamBindings = bindings;
@@ -713,7 +893,7 @@ function genericValueInstance(lowerer, ref, info, bindings) {
713
893
  const declSig = lowerer.checker.getSignatureFromDeclaration(info.decl);
714
894
  if (!declSig)
715
895
  lowerer.unsupported("SC1090", ref, "this function form");
716
- const params = paramShapes(lowerer, info.decl.parameters, declSig);
896
+ const params = paramShapes(lowerer, info.decl.parameters.nodes, declSig);
717
897
  const retTs = lowerer.checker.getReturnTypeOfSignature(declSig);
718
898
  const returnType = lowerer.mapTypeOf(retTs);
719
899
  if (!returnType) {
@@ -797,7 +977,7 @@ function paramWrittenInBody(lowerer, body, sym, name) {
797
977
  hit = true;
798
978
  return;
799
979
  }
800
- m.forEachChild(scan);
980
+ ts.forEachChild(m, scan);
801
981
  };
802
982
  scan(n);
803
983
  return hit;
@@ -829,7 +1009,7 @@ function paramWrittenInBody(lowerer, body, sym, name) {
829
1009
  written = true;
830
1010
  return;
831
1011
  }
832
- n.forEachChild(walk);
1012
+ ts.forEachChild(n, walk);
833
1013
  };
834
1014
  walk(body);
835
1015
  return written;
@@ -845,6 +1025,105 @@ function broadPromiseParam(lowerer, type) {
845
1025
  arms.some((arm) => arm.kind === "promise" && arm.inner.kind === "dyn") &&
846
1026
  arms.every((arm) => isUnitType(arm) || (arm.kind === "promise" && arm.inner.kind === "dyn")));
847
1027
  }
1028
+ /** The destructured object parameters of a JS function-like that bind like
1029
+ * implicit type parameters: every element a plain name (optionally renamed
1030
+ * from an identifier or string key) with no default, no rest element, and
1031
+ * no write in the body, under a broad inferred type. Parallel to
1032
+ * decl.parameters. */
1033
+ export function implicitPatternsOf(lowerer, decl) {
1034
+ return decl.parameters.nodes.map((param) => {
1035
+ if (!ts.isObjectBindingPattern(param.name) || !decl.body)
1036
+ return null;
1037
+ if (param.dotDotDotToken || param.questionToken || param.initializer)
1038
+ return null;
1039
+ const elements = [];
1040
+ for (const element of param.name.elements.nodes) {
1041
+ if (element.dotDotDotToken || element.initializer || !ts.isIdentifier(element.name))
1042
+ return null;
1043
+ const key = element.propertyName ?? element.name;
1044
+ if (!ts.isIdentifier(key) && !ts.isStringLiteral(key))
1045
+ return null;
1046
+ const symbol = lowerer.checker.getSymbolAtLocation(element.name);
1047
+ if (!symbol || paramWrittenInBody(lowerer, decl.body, symbol, element.name.text))
1048
+ return null;
1049
+ // A JSDoc or contextual type names the properties: keep its ABI.
1050
+ if ((lowerer.typeOf(element.name).flags & ts.TypeFlags.Any) === 0)
1051
+ return null;
1052
+ elements.push({ property: key.text, symbol });
1053
+ }
1054
+ return elements.length > 0 ? { elements } : null;
1055
+ });
1056
+ }
1057
+ /** The type a destructured parameter takes at one call site (the object's
1058
+ * own representation, a record or a checked value) and the checker type
1059
+ * each destructured name binds. An object literal argument types the names
1060
+ * from its property expressions, which see the enclosing instance's
1061
+ * bindings (`makeClass({ Base, name })` inside a specialized
1062
+ * `extend(Base, name)`); any other argument uses its checker type. Null
1063
+ * when the argument lacks a destructured property, or passes a class the
1064
+ * callee itself defines: each such class would instantiate the callee
1065
+ * again (a static `extend` calling `makeClass({ Base: this })`). */
1066
+ function implicitPatternBinding(lowerer, callee, pattern, arg) {
1067
+ let literal = arg;
1068
+ while (ts.isParenthesizedExpression(literal))
1069
+ literal = literal.expression;
1070
+ const types = new Map();
1071
+ if (ts.isObjectLiteralExpression(literal)) {
1072
+ const values = new Map();
1073
+ /** Shorthand properties name the binding they read. */
1074
+ const shorthand = new Map();
1075
+ for (const property of literal.properties.nodes) {
1076
+ if (ts.isShorthandPropertyAssignment(property) && ts.isIdentifier(property.name)) {
1077
+ values.set(property.name.text, property.name);
1078
+ const read = lowerer.checker.getShorthandAssignmentValueSymbol(property);
1079
+ if (read)
1080
+ shorthand.set(property.name.text, read);
1081
+ }
1082
+ else if (ts.isPropertyAssignment(property) &&
1083
+ (ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)))
1084
+ values.set(property.name.text, property.initializer);
1085
+ else
1086
+ return null;
1087
+ }
1088
+ for (const element of pattern.elements) {
1089
+ const value = values.get(element.property);
1090
+ if (!value)
1091
+ return null;
1092
+ const read = shorthand.get(element.property);
1093
+ const type = (read && lowerer.implicitParamTypes?.get(read)) ?? lowerer.typeOf(value);
1094
+ types.set(element.symbol, lowerer.checker.getBaseTypeOfLiteralType(type));
1095
+ }
1096
+ // The object keeps the representation the call site lowers it to; the
1097
+ // destructured names read their static types back out of it.
1098
+ const lowered = tryLowerExpression(lowerer, literal);
1099
+ if (lowered?.type.kind !== "record" && lowered?.type.kind !== "dyn")
1100
+ return null;
1101
+ if (lowered.type.kind === "record") {
1102
+ for (const field of lowerer.shapes.get(lowered.type.shapeId)?.fields ?? [])
1103
+ if (field.type.kind === "classval" && classDefinedIn(lowerer, field.type.className, callee))
1104
+ return null;
1105
+ }
1106
+ return { record: lowered.type, types };
1107
+ }
1108
+ const argType = lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(arg));
1109
+ const record = lowerer.mapTypeOf(argType);
1110
+ if (record?.kind !== "record")
1111
+ return null;
1112
+ for (const element of pattern.elements) {
1113
+ const property = lowerer.checker.getPropertyOfType(argType, element.property);
1114
+ if (!property)
1115
+ return null;
1116
+ types.set(element.symbol, lowerer.checker.getTypeOfSymbol(property));
1117
+ }
1118
+ return { record, types };
1119
+ }
1120
+ /** The class is declared inside `scope`. */
1121
+ function classDefinedIn(lowerer, className, scope) {
1122
+ for (let n = lowerer.classes.get(className)?.decl ?? undefined; n; n = n.parent)
1123
+ if (n === scope)
1124
+ return true;
1125
+ return false;
1126
+ }
848
1127
  /** The implicit-type-parameter slots of a JS function-like: parallel to
849
1128
  * decl.parameters, the param SYMBOL where the slot is a bindable
850
1129
  * implicit param (identifier-named, broad inferred/JSDoc type, not
@@ -857,17 +1136,17 @@ export function implicitAnyParamSymbolsOf(lowerer, decl, classParams = false) {
857
1136
  return null;
858
1137
  if (decl.asteriskToken)
859
1138
  return null;
860
- if (decl.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword))
1139
+ if (decl.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword))
861
1140
  return null;
862
1141
  if (decl.typeParameters !== undefined)
863
1142
  return null; // real generics own the machinery
864
- if (decl.parameters.length === 0)
1143
+ if (decl.parameters.nodes.length === 0)
865
1144
  return null;
866
1145
  // The variadic-`arguments` form keeps its dynRest story whole.
867
1146
  if (bodyReadsArguments(decl))
868
1147
  return null;
869
1148
  let hasImplicitParams = false;
870
- const out = decl.parameters.map((param) => {
1149
+ const out = decl.parameters.nodes.map((param) => {
871
1150
  if (!ts.isIdentifier(param.name))
872
1151
  return null;
873
1152
  if (param.dotDotDotToken || param.questionToken || param.initializer)
@@ -894,6 +1173,10 @@ export function implicitAnyParamSymbolsOf(lowerer, decl, classParams = false) {
894
1173
  hasImplicitParams = true;
895
1174
  return sym;
896
1175
  });
1176
+ // Destructured object parameters monomorphize too (implicitPatternsOf);
1177
+ // their slots stay null here.
1178
+ if (!hasImplicitParams && isJsSourceFile(ts.getSourceFileOfNode(decl)))
1179
+ hasImplicitParams = implicitPatternsOf(lowerer, decl).some((pattern) => pattern !== null);
897
1180
  return hasImplicitParams ? out : null;
898
1181
  }
899
1182
  /** The checker-fallback return type an implicit instance PROMISES before
@@ -907,10 +1190,10 @@ function implicitDeclaredReturn(lowerer, info) {
907
1190
  // narrower JSDoc (for example a Vector2 target documented as Vector3).
908
1191
  // Infer their result from the specialized body as well.
909
1192
  if (info.member?.kind === "static" &&
910
- info.decl.parameters.some((param, index) => info.implicitParams?.[index] &&
1193
+ info.decl.parameters.nodes.some((param, index) => info.implicitParams?.[index] &&
911
1194
  lowerer.mapTypeOf(lowerer.typeOf(param.name))?.kind === "object"))
912
1195
  return null;
913
- const broadCallbackSymbols = new Set(info.decl.parameters.flatMap((param, index) => {
1196
+ const broadCallbackSymbols = new Set(info.decl.parameters.nodes.flatMap((param, index) => {
914
1197
  const symbol = info.implicitParams?.[index];
915
1198
  return symbol !== null &&
916
1199
  symbol !== undefined &&
@@ -957,7 +1240,7 @@ function implicitDeclaredReturn(lowerer, info) {
957
1240
  // container instead of checking every element against that guess.
958
1241
  if (!hasExplicitJsDocReturn(info.decl))
959
1242
  return null;
960
- if (info.decl.parameters.some((param, index) => info.implicitParams?.[index] &&
1243
+ if (info.decl.parameters.nodes.some((param, index) => info.implicitParams?.[index] &&
961
1244
  lowerer.mapTypeOf(lowerer.typeOf(param.name))?.kind === "array"))
962
1245
  return null;
963
1246
  const elem = lowerer.checker.getTypeArguments(retTs)[0];
@@ -990,9 +1273,7 @@ function implicitDeclaredReturn(lowerer, info) {
990
1273
  return undefined;
991
1274
  const symbol = lowerer.resolveValueSymbol(node.expression);
992
1275
  if (symbol &&
993
- lowerer.checker
994
- .declarationsOf(symbol)
995
- .some((decl) => ts.isVariableDeclaration(decl) && jsBindingHasOpenWrites(lowerer, decl)))
1276
+ symbol.declarations.some((decl) => ts.isVariableDeclaration(decl) && jsBindingHasOpenWrites(lowerer, decl)))
996
1277
  openReturn = true;
997
1278
  return undefined;
998
1279
  });
@@ -1020,6 +1301,14 @@ function implicitDeclaredReturn(lowerer, info) {
1020
1301
  return null;
1021
1302
  if (mapped !== null && promiseCarriesDyn(lowerer, mapped) && !hasExplicitJsDocReturn(info.decl))
1022
1303
  return null;
1304
+ // A JavaScript body that can complete without returning yields
1305
+ // undefined there, whatever its JSDoc claims (bcryptjs's `hash`
1306
+ // returns a promise only when no callback is passed), exactly as
1307
+ // declaredReturnType widens non-generic JavaScript functions.
1308
+ if (mapped !== null &&
1309
+ isJsSourceFile(ts.getSourceFileOfNode(info.decl)) &&
1310
+ functionCanReturnUndefined(info.decl))
1311
+ return lowerer.withUndefinedArmOf(mapped) ?? mapped;
1023
1312
  return mapped;
1024
1313
  }
1025
1314
  catch (e) {
@@ -1057,7 +1346,7 @@ function bindableImplicitIr(t) {
1057
1346
  function storedImplicitArgumentType(lowerer, arg) {
1058
1347
  while (ts.isParenthesizedExpression(arg))
1059
1348
  arg = arg.expression;
1060
- if (isJsSourceFile(arg.getSourceFile()) &&
1349
+ if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
1061
1350
  (ts.isArrowFunction(arg) || ts.isFunctionExpression(arg))) {
1062
1351
  const saved = lowerer.diagSink;
1063
1352
  const diagnostics = [];
@@ -1081,9 +1370,9 @@ function storedImplicitArgumentType(lowerer, arg) {
1081
1370
  return awaited?.kind === "promise" ? awaited.inner : awaited;
1082
1371
  }
1083
1372
  if (ts.isObjectLiteralExpression(arg) &&
1084
- isJsSourceFile(arg.getSourceFile()) &&
1085
- (arg.properties.length === 0 ||
1086
- arg.properties.some((property) => ts.isMethodDeclaration(property) ||
1373
+ isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
1374
+ (arg.properties.nodes.length === 0 ||
1375
+ arg.properties.nodes.some((property) => ts.isMethodDeclaration(property) ||
1087
1376
  ts.isAccessor(property) ||
1088
1377
  (!ts.isSpreadAssignment(property) &&
1089
1378
  property.name !== undefined &&
@@ -1091,7 +1380,7 @@ function storedImplicitArgumentType(lowerer, arg) {
1091
1380
  return DYN;
1092
1381
  if (ts.isIdentifier(arg))
1093
1382
  return lowerer.peekLocal(arg)?.type ?? lowerer.globalOf(arg)?.type ?? null;
1094
- if (isJsSourceFile(arg.getSourceFile()) &&
1383
+ if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
1095
1384
  (ts.isPropertyAccessExpression(arg) || ts.isElementAccessExpression(arg))) {
1096
1385
  // Mutable JS members can retain an initializer-only checker type (for
1097
1386
  // example a linked-list slot initially null). Specialize to the value
@@ -1100,7 +1389,7 @@ function storedImplicitArgumentType(lowerer, arg) {
1100
1389
  if (represented)
1101
1390
  return represented.type;
1102
1391
  }
1103
- if (isJsSourceFile(arg.getSourceFile()) &&
1392
+ if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
1104
1393
  (ts.isCallExpression(arg) ||
1105
1394
  ts.isConditionalExpression(arg) ||
1106
1395
  (ts.isBinaryExpression(arg) &&
@@ -1133,7 +1422,27 @@ function storedImplicitArgumentType(lowerer, arg) {
1133
1422
  export function implicitCallInstance(lowerer, call, info) {
1134
1423
  const shapes = [];
1135
1424
  const argTypes = new Map();
1136
- info.decl.parameters.forEach((param, i) => {
1425
+ const patterns = (info.implicitPatterns ??= implicitPatternsOf(lowerer, info.decl));
1426
+ /** The destructured names' bound types, which the object's own
1427
+ * representation does not always carry. */
1428
+ const patternKey = [];
1429
+ info.decl.parameters.nodes.forEach((param, i) => {
1430
+ const pattern = patterns[i];
1431
+ const patternArg = call.arguments.nodes[i];
1432
+ if (pattern && patternArg && !ts.isSpreadElement(patternArg)) {
1433
+ // The argument's object type binds each destructured name, so a
1434
+ // class passed as `{ Base }` keeps its static class type.
1435
+ const bound = implicitPatternBinding(lowerer, info.decl, pattern, patternArg);
1436
+ if (bound) {
1437
+ for (const [symbol, type] of bound.types) {
1438
+ argTypes.set(symbol, type);
1439
+ const mapped = lowerer.mapTypeOf(type);
1440
+ patternKey.push(mapped ? typeKey(mapped) : "?");
1441
+ }
1442
+ shapes.push({ type: bound.record, mode: "required" });
1443
+ return;
1444
+ }
1445
+ }
1137
1446
  const sym = info.implicitParams[i];
1138
1447
  if (!sym) {
1139
1448
  shapes.push(lowerer.paramShape(param));
@@ -1143,7 +1452,7 @@ export function implicitCallInstance(lowerer, call, info) {
1143
1452
  const declared = lowerer.paramShape(param);
1144
1453
  if ((lowerer.typeOf(param.name).flags & ts.TypeFlags.Any) === 0)
1145
1454
  bound = declared.type;
1146
- const arg = call.arguments[i];
1455
+ const arg = call.arguments.nodes[i];
1147
1456
  if (arg && !ts.isSpreadElement(arg)) {
1148
1457
  const stored = storedImplicitArgumentType(lowerer, arg);
1149
1458
  if (stored?.kind === "dyn") {
@@ -1152,6 +1461,17 @@ export function implicitCallInstance(lowerer, call, info) {
1152
1461
  shapes.push({ type: bound, mode: "required" });
1153
1462
  return;
1154
1463
  }
1464
+ // `this` in a static method specialized for its receiver class is
1465
+ // that class: bind it as a call naming the class would.
1466
+ if (stored?.kind === "classval" && arg.kind === ts.SyntaxKind.ThisKeyword) {
1467
+ const classDecl = lowerer.classes.get(stored.className)?.decl;
1468
+ const classType = classDecl?.name ? lowerer.typeOf(classDecl.name) : null;
1469
+ if (classType) {
1470
+ argTypes.set(sym, classType);
1471
+ shapes.push({ type: stored, mode: "required" });
1472
+ return;
1473
+ }
1474
+ }
1155
1475
  // A represented native array must keep its storage when a direct
1156
1476
  // inferred helper receives it. Re-boxing a checker-any array would
1157
1477
  // copy it, losing writes (and attempting to read unfilled slots).
@@ -1178,7 +1498,7 @@ export function implicitCallInstance(lowerer, call, info) {
1178
1498
  const t = lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(arg));
1179
1499
  const mapped = (neverTaintedJsType(lowerer, arg, t) ? null : lowerer.mapTypeOf(t)) ??
1180
1500
  dynFallbackType(lowerer, arg, t);
1181
- if (isJsSourceFile(arg.getSourceFile()) &&
1501
+ if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
1182
1502
  ts.isArrayLiteralExpression(arg) &&
1183
1503
  mapped?.kind === "array" &&
1184
1504
  (mapped.elem.kind === "classval" ||
@@ -1201,7 +1521,7 @@ export function implicitCallInstance(lowerer, call, info) {
1201
1521
  // That checker supertype is not an empty-record runtime layout:
1202
1522
  // preserve represented arms through the checked boundary instead
1203
1523
  // of specializing a call to a union that would discard them.
1204
- if (isJsSourceFile(arg.getSourceFile()) &&
1524
+ if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
1205
1525
  mapped?.kind === "func" &&
1206
1526
  !lowerer.dynConvertible(mapped)) {
1207
1527
  argTypes.set(sym, lowerer.checker.getUnknownType());
@@ -1247,27 +1567,27 @@ export function implicitCallInstance(lowerer, call, info) {
1247
1567
  }
1248
1568
  shapes.push({ type: bound, mode: "required" });
1249
1569
  });
1250
- return internImplicitInstance(lowerer, call, info, shapes, argTypes);
1570
+ return internImplicitInstance(lowerer, call, info, shapes, argTypes, patternKey.join(","));
1251
1571
  }
1252
1572
  /** The all-dyn DEFAULT instance — today's compiled body exactly: what a
1253
1573
  * VALUE reference of an implicit-any function names (indirect calls
1254
1574
  * carry no per-site types to bind). */
1255
1575
  export function implicitDefaultInstance(lowerer, blame, info) {
1256
- const shapes = info.decl.parameters.map((param, i) => info.implicitParams[i] ? { type: DYN, mode: "required" } : lowerer.paramShape(param));
1576
+ const shapes = info.decl.parameters.nodes.map((param, i) => info.implicitParams[i] ? { type: DYN, mode: "required" } : lowerer.paramShape(param));
1257
1577
  const argTypes = new Map();
1258
1578
  // Newly bindable nominal class parameters must not retain their JSDoc
1259
1579
  // receiver type in the checked fallback. Keep existing broad JS inference.
1260
- for (let i = 0; i < info.decl.parameters.length; i++) {
1580
+ for (let i = 0; i < info.decl.parameters.nodes.length; i++) {
1261
1581
  const symbol = info.implicitParams?.[i];
1262
- const kind = lowerer.mapTypeOf(lowerer.typeOf(info.decl.parameters[i].name))?.kind;
1582
+ const kind = lowerer.mapTypeOf(lowerer.typeOf(info.decl.parameters.nodes[i].name))?.kind;
1263
1583
  if (symbol && (kind === "object" || kind === "array")) {
1264
1584
  argTypes.set(symbol, lowerer.checker.getUnknownType());
1265
1585
  }
1266
1586
  }
1267
1587
  return internImplicitInstance(lowerer, blame, info, shapes, argTypes);
1268
1588
  }
1269
- function internImplicitInstance(lowerer, blame, info, shapes, argTypes) {
1270
- const key = shapes.map((s) => typeKey(s.type)).join(",");
1589
+ function internImplicitInstance(lowerer, blame, info, shapes, argTypes, patternKey = "") {
1590
+ const key = shapes.map((s) => typeKey(s.type)).join(",") + (patternKey ? `|${patternKey}` : "");
1271
1591
  let inst = info.instances.get(key);
1272
1592
  if (inst?.implicitState === "failed")
1273
1593
  lowerer.unsupported("SC1090", blame, `the failed specialization of '${info.baseName}'`);
@@ -1284,7 +1604,7 @@ function internImplicitInstance(lowerer, blame, info, shapes, argTypes) {
1284
1604
  `${MAX_INSTANTIATION_RECURSION} recursive specializations on one demand path)`);
1285
1605
  }
1286
1606
  const rendered = shapes.map((s) => lowerer.fmt(s.type)).join(", ");
1287
- const dynamicBroadPromise = info.decl.parameters.some((param, index) => info.implicitParams?.[index] !== null &&
1607
+ const dynamicBroadPromise = info.decl.parameters.nodes.some((param, index) => info.implicitParams?.[index] !== null &&
1288
1608
  info.implicitParams?.[index] !== undefined &&
1289
1609
  shapes[index]?.type.kind === "dyn" &&
1290
1610
  broadPromiseParam(lowerer, lowerer.typeOf(param.name)));
@@ -1322,7 +1642,7 @@ function internImplicitInstance(lowerer, blame, info, shapes, argTypes) {
1322
1642
  // this exact committed instance body here; repeated instantiations of
1323
1643
  // the same declaration find the facade memos warm.
1324
1644
  lowerer.checker.prefetchRoots([
1325
- ...info.decl.parameters.flatMap((param) => (param.initializer ? [param.initializer] : [])),
1645
+ ...info.decl.parameters.nodes.flatMap((param) => param.initializer ? [param.initializer] : []),
1326
1646
  ...(info.decl.body ? [info.decl.body] : []),
1327
1647
  ]);
1328
1648
  const fn = lowerer.lowerGenericInstance(info, inst);
@@ -1369,7 +1689,7 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
1369
1689
  if (cached !== undefined)
1370
1690
  return cached ? cached.decl : null;
1371
1691
  const probe = () => {
1372
- if (!implicitMonoFile(decl.getSourceFile()))
1692
+ if (!implicitMonoFile(ts.getSourceFileOfNode(decl)))
1373
1693
  return null;
1374
1694
  if (!ts.isIdentifier(decl.name) || decl.initializer === undefined)
1375
1695
  return null;
@@ -1386,9 +1706,7 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
1386
1706
  if (!sym)
1387
1707
  return null;
1388
1708
  const isConst = (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0;
1389
- const redeclared = lowerer.checker
1390
- .declarationsOf(sym)
1391
- .some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
1709
+ const redeclared = sym.declarations.some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
1392
1710
  if (redeclared)
1393
1711
  return null;
1394
1712
  if (!isConst && !bindingNeverReassigned(lowerer, sym, decl))
@@ -1407,9 +1725,9 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
1407
1725
  }
1408
1726
  if (ts.isIdentifier(n)) {
1409
1727
  const s = lowerer.checker.getSymbolAtLocation(n);
1410
- const d = s ? lowerer.checker.valueDeclarationOf(s) : undefined;
1728
+ const d = s ? s.valueDeclaration : undefined;
1411
1729
  if (d &&
1412
- d.getSourceFile() === decl.getSourceFile() &&
1730
+ ts.getSourceFileOfNode(d) === ts.getSourceFileOfNode(decl) &&
1413
1731
  !(d.pos >= init.pos && d.end <= init.end)) {
1414
1732
  // Declared outside the initializer, in this file: a capture
1415
1733
  // exactly when some enclosing FUNCTION scope declares it —
@@ -1423,7 +1741,7 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
1423
1741
  }
1424
1742
  }
1425
1743
  }
1426
- n.forEachChild(scan);
1744
+ ts.forEachChild(n, scan);
1427
1745
  };
1428
1746
  scan(init.body);
1429
1747
  return captures ? null : init;
@@ -1458,7 +1776,7 @@ export function implicitLocalFnInfoOf(lowerer, decl, fnNode) {
1458
1776
  const info = {
1459
1777
  decl: fnNode,
1460
1778
  baseName: name,
1461
- qualifiedName: lowerer.qualify(decl.getSourceFile(), nsPathPrefix(stmt ?? decl, decl) + `${name}%l${decl.getStart()}`),
1779
+ qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(stmt ?? decl, decl) + `${name}%l${ts.tokenStartOfNode(decl)}`),
1462
1780
  typeParams: [],
1463
1781
  instances: new Map(),
1464
1782
  implicitParams: implicit,
@@ -1477,7 +1795,7 @@ export function implicitLocalFnInfoOf(lowerer, decl, fnNode) {
1477
1795
  * arrow/function-expression property's initializer (`{ m: <T>(x: T) =>
1478
1796
  * ... }`). Null when the property's declaration isn't that shape. */
1479
1797
  export function objLitGenericFnNodeOf(lowerer, propSym) {
1480
- const decl = lowerer.checker.valueDeclarationOf(propSym);
1798
+ const decl = propSym.valueDeclaration;
1481
1799
  if (!decl)
1482
1800
  return null;
1483
1801
  if (ts.isMethodDeclaration(decl) && ts.isObjectLiteralExpression(decl.parent)) {
@@ -1511,7 +1829,7 @@ export function objLitGenericFnInfoOf(lowerer, blame, name, found) {
1511
1829
  return existing;
1512
1830
  if (fnNode.asteriskToken)
1513
1831
  lowerer.unsupported("SC1071", blame);
1514
- if (fnNode.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
1832
+ if (fnNode.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
1515
1833
  lowerer.unsupported("SC1090", blame, "async object-literal generic methods");
1516
1834
  }
1517
1835
  // `this` is the receiver object — records don't model it (the
@@ -1525,12 +1843,12 @@ export function objLitGenericFnInfoOf(lowerer, blame, name, found) {
1525
1843
  lowerer.unsupported("SC1090", blame, `object-literal generic methods declared inside functions (the compiled instantiations of '${name}' are module functions and cannot capture the enclosing frame — declare the object at module scope)`);
1526
1844
  }
1527
1845
  }
1528
- const typeParams = declaredTypeParameterSymbols(lowerer, fnNode.typeParameters, blame, "this method form");
1529
- checkGenericParameterNames(lowerer, fnNode.parameters, false);
1846
+ const typeParams = declaredTypeParameterSymbols(lowerer, fnNode.typeParameters.nodes, blame, "this method form");
1847
+ checkGenericParameterNames(lowerer, fnNode.parameters.nodes, false);
1530
1848
  const info = {
1531
1849
  decl: fnNode,
1532
1850
  baseName: name,
1533
- qualifiedName: lowerer.qualify(fnNode.getSourceFile(), `%ol${fnNode.getStart()}.${name}`),
1851
+ qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(fnNode), `%ol${ts.tokenStartOfNode(fnNode)}.${name}`),
1534
1852
  typeParams,
1535
1853
  instances: new Map(),
1536
1854
  objectLiteral: true,
@@ -1618,7 +1936,7 @@ export function bindingGenericFnInfoOf(lowerer, decl, fnNode) {
1618
1936
  requireStableGenericBinding(lowerer, decl, sym, name);
1619
1937
  const typeParams = [];
1620
1938
  if (fnNode.typeParameters !== undefined) {
1621
- typeParams.push(...declaredTypeParameterSymbols(lowerer, fnNode.typeParameters, fnNode, "this function form"));
1939
+ typeParams.push(...declaredTypeParameterSymbols(lowerer, fnNode.typeParameters.nodes, fnNode, "this function form"));
1622
1940
  }
1623
1941
  else {
1624
1942
  // The CONTEXTUAL shape (bindingContextualGenericFnNodeOf): the type
@@ -1636,12 +1954,12 @@ export function bindingGenericFnInfoOf(lowerer, decl, fnNode) {
1636
1954
  typeParams.push(tpSym);
1637
1955
  }
1638
1956
  }
1639
- checkGenericParameterNames(lowerer, fnNode.parameters, true);
1957
+ checkGenericParameterNames(lowerer, fnNode.parameters.nodes, true);
1640
1958
  const stmt = decl.parent?.parent; // declarator → list → statement (nsPathPrefix wants the statement)
1641
1959
  const info = {
1642
1960
  decl: fnNode,
1643
1961
  baseName: name,
1644
- qualifiedName: lowerer.qualify(decl.getSourceFile(), nsPathPrefix(stmt ?? decl, decl) + name),
1962
+ qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(stmt ?? decl, decl) + name),
1645
1963
  typeParams,
1646
1964
  instances: new Map(),
1647
1965
  };
@@ -1709,7 +2027,7 @@ export function requireObjLitGenericReceiver(lowerer, blame, recvExpr, literal,
1709
2027
  if (!ts.isIdentifier(recv))
1710
2028
  fenceReceiver();
1711
2029
  const recvSym = lowerer.resolveValueSymbol(recv);
1712
- const recvDecl = recvSym ? lowerer.checker.valueDeclarationOf(recvSym) : undefined;
2030
+ const recvDecl = recvSym ? recvSym.valueDeclaration : undefined;
1713
2031
  if (!recvDecl ||
1714
2032
  !ts.isVariableDeclaration(recvDecl) ||
1715
2033
  !ts.isVariableDeclarationList(recvDecl.parent) ||