@scriptc/compiler 0.4.3 → 0.4.5

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 (852) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +270 -72
  2. package/ambient/scriptc-overrides.d.ts +21 -0
  3. package/dist/backend/executable-features.js +3 -0
  4. package/dist/backend/executable-features.js.map +1 -1
  5. package/dist/backend/library-pack.js +2 -1
  6. package/dist/backend/library-pack.js.map +1 -1
  7. package/dist/backend/linker.js +11 -1
  8. package/dist/backend/linker.js.map +1 -1
  9. package/dist/backend/lld.d.ts +9 -0
  10. package/dist/backend/lld.js +48 -0
  11. package/dist/backend/lld.js.map +1 -0
  12. package/dist/backend/lld.test.d.ts +1 -0
  13. package/dist/backend/lld.test.js +53 -0
  14. package/dist/backend/lld.test.js.map +1 -0
  15. package/dist/backend/llvm/appended-array-literals.d.ts +11 -1
  16. package/dist/backend/llvm/appended-array-literals.js +29 -0
  17. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  18. package/dist/backend/llvm/blocks.js +10 -1
  19. package/dist/backend/llvm/blocks.js.map +1 -1
  20. package/dist/backend/llvm/bytes-alias.d.ts +13 -4
  21. package/dist/backend/llvm/bytes-alias.js +16 -5
  22. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  23. package/dist/backend/llvm/bytes-bounds.d.ts +5 -1
  24. package/dist/backend/llvm/bytes-bounds.js +199 -2
  25. package/dist/backend/llvm/bytes-bounds.js.map +1 -1
  26. package/dist/backend/llvm/bytes-loop-versions.d.ts +45 -3
  27. package/dist/backend/llvm/bytes-loop-versions.js +244 -20
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +18 -6
  30. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  31. package/dist/backend/llvm/call-lifetimes.d.ts +8 -2
  32. package/dist/backend/llvm/call-lifetimes.js +87 -18
  33. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  34. package/dist/backend/llvm/call-lifetimes.test.js +132 -0
  35. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  36. package/dist/backend/llvm/classes.d.ts +3 -2
  37. package/dist/backend/llvm/classes.js +4 -4
  38. package/dist/backend/llvm/classes.js.map +1 -1
  39. package/dist/backend/llvm/counted-loops.d.ts +14 -2
  40. package/dist/backend/llvm/counted-loops.js +54 -5
  41. package/dist/backend/llvm/counted-loops.js.map +1 -1
  42. package/dist/backend/llvm/debug-info.d.ts +42 -1
  43. package/dist/backend/llvm/debug-info.js +72 -6
  44. package/dist/backend/llvm/debug-info.js.map +1 -1
  45. package/dist/backend/llvm/dense-array-loops.js +2 -2
  46. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  47. package/dist/backend/llvm/dense-array-loops.test.js +1 -0
  48. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  49. package/dist/backend/llvm/dyn.d.ts +69 -8
  50. package/dist/backend/llvm/dyn.js +396 -49
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emit-function.js +30 -16
  53. package/dist/backend/llvm/emit-function.js.map +1 -1
  54. package/dist/backend/llvm/emit-journal.d.ts +8 -4
  55. package/dist/backend/llvm/emit-journal.js +75 -5
  56. package/dist/backend/llvm/emit-journal.js.map +1 -1
  57. package/dist/backend/llvm/emit-module.d.ts +4 -0
  58. package/dist/backend/llvm/emit-module.js +74 -29
  59. package/dist/backend/llvm/emit-module.js.map +1 -1
  60. package/dist/backend/llvm/emit-statements.js +297 -28
  61. package/dist/backend/llvm/emit-statements.js.map +1 -1
  62. package/dist/backend/llvm/emitter.d.ts +144 -13
  63. package/dist/backend/llvm/emitter.js +523 -92
  64. package/dist/backend/llvm/emitter.js.map +1 -1
  65. package/dist/backend/llvm/emitter.test.js +11 -2
  66. package/dist/backend/llvm/emitter.test.js.map +1 -1
  67. package/dist/backend/llvm/expr-async.js +11 -13
  68. package/dist/backend/llvm/expr-async.js.map +1 -1
  69. package/dist/backend/llvm/expr-bytes.d.ts +6 -4
  70. package/dist/backend/llvm/expr-bytes.js +45 -16
  71. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  72. package/dist/backend/llvm/expr-calls.js +13 -11
  73. package/dist/backend/llvm/expr-calls.js.map +1 -1
  74. package/dist/backend/llvm/expr-containers.d.ts +11 -0
  75. package/dist/backend/llvm/expr-containers.js +101 -9
  76. package/dist/backend/llvm/expr-containers.js.map +1 -1
  77. package/dist/backend/llvm/expr-context.d.ts +3 -0
  78. package/dist/backend/llvm/expr-control.js +83 -0
  79. package/dist/backend/llvm/expr-control.js.map +1 -1
  80. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  81. package/dist/backend/llvm/expr-dynamic.js +22 -4
  82. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.js +121 -14
  84. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  85. package/dist/backend/llvm/expr-stream-bridges.js +111 -26
  86. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  87. package/dist/backend/llvm/forked-analysis.d.ts +8 -0
  88. package/dist/backend/llvm/forked-analysis.js +43 -0
  89. package/dist/backend/llvm/forked-analysis.js.map +1 -0
  90. package/dist/backend/llvm/integer-values.d.ts +12 -0
  91. package/dist/backend/llvm/integer-values.js +69 -5
  92. package/dist/backend/llvm/integer-values.js.map +1 -1
  93. package/dist/backend/llvm/integer-views.d.ts +2 -1
  94. package/dist/backend/llvm/integer-views.js +12 -1
  95. package/dist/backend/llvm/integer-views.js.map +1 -1
  96. package/dist/backend/llvm/js-ic.d.ts +4 -0
  97. package/dist/backend/llvm/js-ic.js +133 -15
  98. package/dist/backend/llvm/js-ic.js.map +1 -1
  99. package/dist/backend/llvm/layouts.d.ts +1 -0
  100. package/dist/backend/llvm/layouts.js.map +1 -1
  101. package/dist/backend/llvm/lazy-captures.d.ts +6 -1
  102. package/dist/backend/llvm/lazy-captures.js +10 -5
  103. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  104. package/dist/backend/llvm/lib-abi.d.ts +5 -0
  105. package/dist/backend/llvm/lib-abi.js +19 -0
  106. package/dist/backend/llvm/lib-abi.js.map +1 -1
  107. package/dist/backend/llvm/lib-dispatch.js +249 -33
  108. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  109. package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
  110. package/dist/backend/llvm/lib-filesystem.js +32 -0
  111. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  112. package/dist/backend/llvm/lib-http2.js +2 -2
  113. package/dist/backend/llvm/lib-http2.js.map +1 -1
  114. package/dist/backend/llvm/lib-network.js +2 -0
  115. package/dist/backend/llvm/lib-network.js.map +1 -1
  116. package/dist/backend/llvm/lib-process.js +48 -1
  117. package/dist/backend/llvm/lib-process.js.map +1 -1
  118. package/dist/backend/llvm/lib-shared.js +64 -0
  119. package/dist/backend/llvm/lib-shared.js.map +1 -1
  120. package/dist/backend/llvm/lib-tls.js +28 -3
  121. package/dist/backend/llvm/lib-tls.js.map +1 -1
  122. package/dist/backend/llvm/local-union-storage.test.js +2 -1
  123. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  124. package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
  125. package/dist/backend/llvm/loop-array-borrows.js +11 -5
  126. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  127. package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
  128. package/dist/backend/llvm/map-entry-fusion.js +20 -11
  129. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  130. package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
  131. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
  132. package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
  133. package/dist/backend/llvm/map-number-lookup.js +41 -9
  134. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  135. package/dist/backend/llvm/map-number-lookup.test.js +70 -2
  136. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  137. package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
  138. package/dist/backend/llvm/map-read-lifetimes.js +136 -6
  139. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  140. package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
  141. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  142. package/dist/backend/llvm/nullable-unions.d.ts +5 -0
  143. package/dist/backend/llvm/nullable-unions.js +29 -2
  144. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  145. package/dist/backend/llvm/nullable-unions.test.js +25 -1
  146. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  147. package/dist/backend/llvm/publish.js +3 -3
  148. package/dist/backend/llvm/publish.js.map +1 -1
  149. package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
  150. package/dist/backend/llvm/record-union-keys.test.js +161 -0
  151. package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
  152. package/dist/backend/llvm/reference-effects.js +3 -0
  153. package/dist/backend/llvm/reference-effects.js.map +1 -1
  154. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  155. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  156. package/dist/backend/llvm/shapes.d.ts +4 -5
  157. package/dist/backend/llvm/shapes.js +106 -58
  158. package/dist/backend/llvm/shapes.js.map +1 -1
  159. package/dist/backend/llvm/shapes.test.js +14 -2
  160. package/dist/backend/llvm/shapes.test.js.map +1 -1
  161. package/dist/backend/llvm/speculative-integers.d.ts +50 -3
  162. package/dist/backend/llvm/speculative-integers.js +411 -24
  163. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  164. package/dist/backend/llvm/speculative-integers.test.js +103 -1
  165. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  166. package/dist/backend/llvm/split.d.ts +10 -1
  167. package/dist/backend/llvm/split.js +243 -59
  168. package/dist/backend/llvm/split.js.map +1 -1
  169. package/dist/backend/llvm/split.test.js +92 -13
  170. package/dist/backend/llvm/split.test.js.map +1 -1
  171. package/dist/backend/llvm/stack-captures.js +1 -5
  172. package/dist/backend/llvm/stack-captures.js.map +1 -1
  173. package/dist/backend/llvm/stack-objects.test.js +3 -2
  174. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  175. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  176. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  177. package/dist/backend/llvm/string-reads.d.ts +13 -0
  178. package/dist/backend/llvm/string-reads.js +22 -0
  179. package/dist/backend/llvm/string-reads.js.map +1 -1
  180. package/dist/backend/llvm/string-slices.d.ts +36 -2
  181. package/dist/backend/llvm/string-slices.js +308 -12
  182. package/dist/backend/llvm/string-slices.js.map +1 -1
  183. package/dist/backend/llvm/string-slices.test.js +182 -3
  184. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  185. package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
  186. package/dist/backend/llvm/string-unit-versions.js +191 -0
  187. package/dist/backend/llvm/string-unit-versions.js.map +1 -0
  188. package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
  189. package/dist/backend/llvm/string-unit-versions.test.js +117 -0
  190. package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
  191. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
  192. package/dist/backend/llvm/test-boxed-unions.js +24 -8
  193. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  194. package/dist/backend/llvm/union-repr.d.ts +4 -3
  195. package/dist/backend/llvm/union-repr.js +6 -5
  196. package/dist/backend/llvm/union-repr.js.map +1 -1
  197. package/dist/backend/llvm/unwind-abi.d.ts +52 -0
  198. package/dist/backend/llvm/unwind-abi.js +498 -0
  199. package/dist/backend/llvm/unwind-abi.js.map +1 -0
  200. package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
  201. package/dist/backend/llvm/unwind-abi.test.js +255 -0
  202. package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
  203. package/dist/backend/llvm/walkers.js +13 -0
  204. package/dist/backend/llvm/walkers.js.map +1 -1
  205. package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
  206. package/dist/backend/llvm/wrapping-sums.js +31 -14
  207. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  208. package/dist/backend/loop-polls.d.ts +6 -0
  209. package/dist/backend/loop-polls.js +24 -0
  210. package/dist/backend/loop-polls.js.map +1 -1
  211. package/dist/backend/may-throw.js +8 -8
  212. package/dist/backend/may-throw.js.map +1 -1
  213. package/dist/backend/native/contracts.d.ts +12 -2
  214. package/dist/backend/native/executable.js +48 -6
  215. package/dist/backend/native/executable.js.map +1 -1
  216. package/dist/backend/native/library.js +4 -3
  217. package/dist/backend/native/library.js.map +1 -1
  218. package/dist/backend/native/program-shards.d.ts +2 -2
  219. package/dist/backend/native/program-shards.js +2 -2
  220. package/dist/backend/native/program-shards.js.map +1 -1
  221. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  222. package/dist/backend/native/runtime-inputs.js +4 -1
  223. package/dist/backend/native/runtime-inputs.js.map +1 -1
  224. package/dist/backend/native/vendor.d.ts +1 -1
  225. package/dist/backend/native/vendor.js +1 -1
  226. package/dist/backend/native/vendor.js.map +1 -1
  227. package/dist/backend/native-codegen-core.d.ts +5 -3
  228. package/dist/backend/native-codegen-core.js +13 -6
  229. package/dist/backend/native-codegen-core.js.map +1 -1
  230. package/dist/backend/native-codegen.d.ts +3 -1
  231. package/dist/backend/native-codegen.js +4 -3
  232. package/dist/backend/native-codegen.js.map +1 -1
  233. package/dist/backend/native-codegen.test.js +6 -4
  234. package/dist/backend/native-codegen.test.js.map +1 -1
  235. package/dist/backend/native-link-info-core.d.ts +8 -0
  236. package/dist/backend/native-link-info-core.js.map +1 -1
  237. package/dist/backend/native-profile.d.ts +14 -0
  238. package/dist/backend/native-profile.js +28 -0
  239. package/dist/backend/native-profile.js.map +1 -1
  240. package/dist/backend/native-profile.test.js +8 -1
  241. package/dist/backend/native-profile.test.js.map +1 -1
  242. package/dist/backend/native-toolchain.test.js +11 -11
  243. package/dist/backend/native-toolchain.test.js.map +1 -1
  244. package/dist/backend/runtime-abi.d.ts +2 -2
  245. package/dist/backend/runtime-abi.js +2 -2
  246. package/dist/backend/runtime-pack-core.d.ts +3 -1
  247. package/dist/backend/runtime-pack-core.js +2 -0
  248. package/dist/backend/runtime-pack-core.js.map +1 -1
  249. package/dist/backend/runtime-pack-native.d.ts +17 -5
  250. package/dist/backend/runtime-pack-native.js +186 -14
  251. package/dist/backend/runtime-pack-native.js.map +1 -1
  252. package/dist/backend/runtime-pack-native.test.js +160 -3
  253. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  254. package/dist/backend/runtime-pack-targets.test.js +2 -1
  255. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  256. package/dist/backend/runtime-pack.test.js +2 -1
  257. package/dist/backend/runtime-pack.test.js.map +1 -1
  258. package/dist/backend/target-cpu.d.ts +26 -0
  259. package/dist/backend/target-cpu.js +98 -0
  260. package/dist/backend/target-cpu.js.map +1 -0
  261. package/dist/backend/target-cpu.test.d.ts +1 -0
  262. package/dist/backend/target-cpu.test.js +38 -0
  263. package/dist/backend/target-cpu.test.js.map +1 -0
  264. package/dist/backend/vendor-archives.d.ts +4 -1
  265. package/dist/backend/vendor-archives.js +78 -4
  266. package/dist/backend/vendor-archives.js.map +1 -1
  267. package/dist/backend/vendor-inputs.d.ts +3 -1
  268. package/dist/backend/vendor-inputs.js +3 -1
  269. package/dist/backend/vendor-inputs.js.map +1 -1
  270. package/dist/backend/warm-cache.js +1 -0
  271. package/dist/backend/warm-cache.js.map +1 -1
  272. package/dist/cli/command.js +98 -12
  273. package/dist/cli/command.js.map +1 -1
  274. package/dist/cli/usage.d.ts +25 -1
  275. package/dist/cli/usage.js +40 -3
  276. package/dist/cli/usage.js.map +1 -1
  277. package/dist/compat/fetch-profile.d.ts +15 -6
  278. package/dist/compat/fetch-profile.js +519 -498
  279. package/dist/compat/fetch-profile.js.map +1 -1
  280. package/dist/compile-types.d.ts +14 -0
  281. package/dist/contracts/int32-elements.js +2 -1
  282. package/dist/contracts/int32-elements.js.map +1 -1
  283. package/dist/coverage/report.d.ts +14 -3
  284. package/dist/coverage/report.js +216 -0
  285. package/dist/coverage/report.js.map +1 -1
  286. package/dist/coverage/surface-manifest.js +25 -25
  287. package/dist/coverage/surface-manifest.js.map +1 -1
  288. package/dist/coverage/verdict-cache.d.ts +2 -0
  289. package/dist/coverage/verdict-cache.js +10 -1
  290. package/dist/coverage/verdict-cache.js.map +1 -1
  291. package/dist/diagnostics/diagnostic.d.ts +19 -0
  292. package/dist/diagnostics/diagnostic.js +53 -2
  293. package/dist/diagnostics/diagnostic.js.map +1 -1
  294. package/dist/diagnostics/envelope.d.ts +54 -0
  295. package/dist/diagnostics/envelope.js +7 -1
  296. package/dist/diagnostics/envelope.js.map +1 -1
  297. package/dist/diagnostics/render.d.ts +7 -0
  298. package/dist/diagnostics/render.js +15 -4
  299. package/dist/diagnostics/render.js.map +1 -1
  300. package/dist/executable/executable-cache.d.ts +6 -0
  301. package/dist/executable/executable-cache.js +5 -0
  302. package/dist/executable/executable-cache.js.map +1 -1
  303. package/dist/executable/executable-cache.test.js +3 -0
  304. package/dist/executable/executable-cache.test.js.map +1 -1
  305. package/dist/executable/prepare.js +5 -1
  306. package/dist/executable/prepare.js.map +1 -1
  307. package/dist/frontend/analysis.js +26 -2
  308. package/dist/frontend/analysis.js.map +1 -1
  309. package/dist/frontend/decl-projection.js +105 -10
  310. package/dist/frontend/decl-projection.js.map +1 -1
  311. package/dist/frontend/fork-target.js +67 -1
  312. package/dist/frontend/fork-target.js.map +1 -1
  313. package/dist/frontend/fork-target.test.js +43 -0
  314. package/dist/frontend/fork-target.test.js.map +1 -1
  315. package/dist/frontend/input-tracker.d.ts +4 -1
  316. package/dist/frontend/input-tracker.js +42 -4
  317. package/dist/frontend/input-tracker.js.map +1 -1
  318. package/dist/frontend/input-tracker.test.js +45 -0
  319. package/dist/frontend/input-tracker.test.js.map +1 -1
  320. package/dist/frontend/lowering/abstract-equality.js +38 -1
  321. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  322. package/dist/frontend/lowering/argument-counts.d.ts +36 -0
  323. package/dist/frontend/lowering/argument-counts.js +201 -0
  324. package/dist/frontend/lowering/argument-counts.js.map +1 -0
  325. package/dist/frontend/lowering/array-values.d.ts +27 -0
  326. package/dist/frontend/lowering/array-values.js +112 -0
  327. package/dist/frontend/lowering/array-values.js.map +1 -1
  328. package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
  329. package/dist/frontend/lowering/binding-analysis.js +9 -3
  330. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  331. package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
  332. package/dist/frontend/lowering/builtin-namespaces.js +238 -0
  333. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
  334. package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
  335. package/dist/frontend/lowering/builtins/async-context.js +62 -3
  336. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  337. package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
  338. package/dist/frontend/lowering/builtins/compression.js +86 -5
  339. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  340. package/dist/frontend/lowering/builtins/crypto.js +3 -1
  341. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  342. package/dist/frontend/lowering/builtins/date-classes.js +17 -1
  343. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
  344. package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
  345. package/dist/frontend/lowering/builtins/dates.js +163 -9
  346. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/filesystem-calls.js +29 -4
  348. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  349. package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
  350. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  351. package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
  352. package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
  353. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
  355. package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
  356. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  357. package/dist/frontend/lowering/builtins/json.d.ts +4 -1
  358. package/dist/frontend/lowering/builtins/json.js +9 -3
  359. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  360. package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
  361. package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
  362. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  363. package/dist/frontend/lowering/builtins/module-calls.js +6 -3
  364. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  365. package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
  366. package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
  367. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  368. package/dist/frontend/lowering/builtins/promises.d.ts +1 -1
  369. package/dist/frontend/lowering/builtins/promises.js +293 -139
  370. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  372. package/dist/frontend/lowering/builtins/readline.js +22 -11
  373. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  374. package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
  375. package/dist/frontend/lowering/builtins/reflection.js +41 -1
  376. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  377. package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
  378. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  379. package/dist/frontend/lowering/builtins/webassembly.js +4 -1
  380. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  381. package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
  382. package/dist/frontend/lowering/builtins/x509.js +431 -0
  383. package/dist/frontend/lowering/builtins/x509.js.map +1 -0
  384. package/dist/frontend/lowering/call-arguments.js +44 -0
  385. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  386. package/dist/frontend/lowering/call-signatures.js +1 -2
  387. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  388. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  389. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  390. package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
  391. package/dist/frontend/lowering/cjs-inline-require.js +308 -5
  392. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  393. package/dist/frontend/lowering/class-attributes.d.ts +7 -0
  394. package/dist/frontend/lowering/class-attributes.js +52 -10
  395. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  396. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +23 -0
  397. package/dist/frontend/lowering/class-dynamic-dispatch.js +288 -9
  398. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  399. package/dist/frontend/lowering/class-method-mutations.js +97 -26
  400. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  401. package/dist/frontend/lowering/class-method-values.js +71 -1
  402. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  403. package/dist/frontend/lowering/class-protocols.d.ts +25 -0
  404. package/dist/frontend/lowering/class-protocols.js +183 -1
  405. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  406. package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
  407. package/dist/frontend/lowering/class-prototypes.js +83 -2
  408. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  409. package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
  410. package/dist/frontend/lowering/class-to-primitive.js +79 -7
  411. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  412. package/dist/frontend/lowering/coercions/state.d.ts +1 -0
  413. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  414. package/dist/frontend/lowering/coercions/structural.js +89 -10
  415. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  416. package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
  417. package/dist/frontend/lowering/coercions/unions.js +13 -6
  418. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  419. package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
  420. package/dist/frontend/lowering/completion-callbacks.js +146 -0
  421. package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
  422. package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
  423. package/dist/frontend/lowering/containers/array-callbacks.js +58 -21
  424. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  425. package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
  426. package/dist/frontend/lowering/containers/array-construction.js +107 -9
  427. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  428. package/dist/frontend/lowering/containers/array-methods.js +96 -8
  429. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  430. package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
  431. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  432. package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
  433. package/dist/frontend/lowering/containers/bytes.js +453 -45
  434. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  435. package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
  436. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  437. package/dist/frontend/lowering/containers/collection-methods.js +12 -0
  438. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  439. package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
  440. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  441. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
  442. package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
  443. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  444. package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
  445. package/dist/frontend/lowering/containers/replacer-params.js +294 -0
  446. package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
  447. package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
  448. package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
  449. package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
  450. package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
  451. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  452. package/dist/frontend/lowering/containers/string-replacement.js +7 -3
  453. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  454. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
  455. package/dist/frontend/lowering/cycle-initialization.js +4 -1
  456. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  457. package/dist/frontend/lowering/date-values.d.ts +14 -0
  458. package/dist/frontend/lowering/date-values.js +254 -0
  459. package/dist/frontend/lowering/date-values.js.map +1 -0
  460. package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
  461. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  462. package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
  463. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  464. package/dist/frontend/lowering/dispatch-sites.js +1 -0
  465. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  466. package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
  467. package/dist/frontend/lowering/expressions/array-literals.js +125 -26
  468. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  469. package/dist/frontend/lowering/expressions/binary.js +102 -26
  470. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  471. package/dist/frontend/lowering/expressions/element-access.js +129 -6
  472. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  473. package/dist/frontend/lowering/expressions/identifiers.js +66 -4
  474. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  475. package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
  476. package/dist/frontend/lowering/expressions/narrowing.js +8 -1
  477. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  478. package/dist/frontend/lowering/expressions/object-literals.js +8 -2
  479. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  480. package/dist/frontend/lowering/expressions/property-access.js +121 -34
  481. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  482. package/dist/frontend/lowering/expressions/relational.js +76 -11
  483. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  484. package/dist/frontend/lowering/expressions/typeof.js +12 -1
  485. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  486. package/dist/frontend/lowering/expressions/updates.js +37 -11
  487. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  488. package/dist/frontend/lowering/f64-handles.d.ts +8 -0
  489. package/dist/frontend/lowering/f64-handles.js +16 -0
  490. package/dist/frontend/lowering/f64-handles.js.map +1 -0
  491. package/dist/frontend/lowering/frozen-records.d.ts +5 -0
  492. package/dist/frontend/lowering/frozen-records.js +12 -4
  493. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  494. package/dist/frontend/lowering/function-context.d.ts +3 -0
  495. package/dist/frontend/lowering/function-context.js.map +1 -1
  496. package/dist/frontend/lowering/function-returns.js +30 -0
  497. package/dist/frontend/lowering/function-returns.js.map +1 -1
  498. package/dist/frontend/lowering/generic-functions.js +17 -6
  499. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  500. package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
  501. package/dist/frontend/lowering/indexed-unions.js +401 -0
  502. package/dist/frontend/lowering/indexed-unions.js.map +1 -0
  503. package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
  504. package/dist/frontend/lowering/instantiation-path.js.map +1 -1
  505. package/dist/frontend/lowering/instantiation-path.test.js +6 -4
  506. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
  507. package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
  508. package/dist/frontend/lowering/iterator-adapters.js +26 -33
  509. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  510. package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
  511. package/dist/frontend/lowering/js-collection-types.js +490 -0
  512. package/dist/frontend/lowering/js-collection-types.js.map +1 -0
  513. package/dist/frontend/lowering/key-order-witness.js +210 -32
  514. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  515. package/dist/frontend/lowering/key-order-witness.test.js +104 -4
  516. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  517. package/dist/frontend/lowering/lib-boundary.js +2 -2
  518. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  519. package/dist/frontend/lowering/lower-assert.d.ts +14 -0
  520. package/dist/frontend/lowering/lower-assert.js +298 -29
  521. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  522. package/dist/frontend/lowering/lower-builtin-values.js +3 -3
  523. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  524. package/dist/frontend/lowering/lower-calls.js +116 -10
  525. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  526. package/dist/frontend/lowering/lower-classes.d.ts +59 -7
  527. package/dist/frontend/lowering/lower-classes.js +668 -222
  528. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  529. package/dist/frontend/lowering/lower-console.js +2 -1
  530. package/dist/frontend/lowering/lower-console.js.map +1 -1
  531. package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
  532. package/dist/frontend/lowering/lower-exprs.js +254 -3
  533. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  534. package/dist/frontend/lowering/lower-functions.js +7 -0
  535. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  536. package/dist/frontend/lowering/lower-generators.js +5 -4
  537. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  538. package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
  539. package/dist/frontend/lowering/lower-inspect.js +299 -57
  540. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  541. package/dist/frontend/lowering/lower-modules.js +49 -22
  542. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  543. package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
  544. package/dist/frontend/lowering/lower-namespaces.js +44 -1
  545. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  546. package/dist/frontend/lowering/lower-node-module.js +1 -1
  547. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  548. package/dist/frontend/lowering/lower-server.js +126 -32
  549. package/dist/frontend/lowering/lower-server.js.map +1 -1
  550. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
  551. package/dist/frontend/lowering/lower-stdlib.js +51 -37
  552. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  553. package/dist/frontend/lowering/lower-stmts.js +393 -79
  554. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  555. package/dist/frontend/lowering/lower-stream.js +515 -121
  556. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  557. package/dist/frontend/lowering/lowerer.d.ts +82 -12
  558. package/dist/frontend/lowering/lowerer.js +317 -44
  559. package/dist/frontend/lowering/lowerer.js.map +1 -1
  560. package/dist/frontend/lowering/lowerer.test.js +1 -1
  561. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  562. package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
  563. package/dist/frontend/lowering/module-namespace-elements.js +118 -1
  564. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  565. package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
  566. package/dist/frontend/lowering/object-factory-new.js +20 -6
  567. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  568. package/dist/frontend/lowering/overload-choice.d.ts +33 -0
  569. package/dist/frontend/lowering/overload-choice.js +190 -0
  570. package/dist/frontend/lowering/overload-choice.js.map +1 -0
  571. package/dist/frontend/lowering/private-brands.d.ts +5 -0
  572. package/dist/frontend/lowering/private-brands.js +39 -0
  573. package/dist/frontend/lowering/private-brands.js.map +1 -1
  574. package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
  575. package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
  576. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  577. package/dist/frontend/lowering/sanitize-class-types.js +2 -0
  578. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  579. package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
  580. package/dist/frontend/lowering/site-dependencies.js +0 -15
  581. package/dist/frontend/lowering/site-dependencies.js.map +1 -1
  582. package/dist/frontend/lowering/site-dependencies.test.js +7 -5
  583. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
  584. package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
  585. package/dist/frontend/lowering/string-index-bounds.js +21 -7
  586. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  587. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  588. package/dist/frontend/lowering/surfaces.js +1630 -1540
  589. package/dist/frontend/lowering/surfaces.js.map +1 -1
  590. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  591. package/dist/frontend/lowering/symbol-fields.js +45 -2
  592. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  593. package/dist/frontend/lowering/union-narrow.d.ts +5 -2
  594. package/dist/frontend/lowering/union-narrow.js +6 -3
  595. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  596. package/dist/frontend/lowering/union-narrow.test.js +10 -0
  597. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  598. package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
  599. package/dist/frontend/npm-static-namespace-defaults.js +163 -0
  600. package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
  601. package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
  602. package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
  603. package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
  604. package/dist/frontend/npm-static-prune.js +152 -111
  605. package/dist/frontend/npm-static-prune.js.map +1 -1
  606. package/dist/frontend/npm-static.js +35 -32
  607. package/dist/frontend/npm-static.js.map +1 -1
  608. package/dist/frontend/package-shims.d.ts +7 -4
  609. package/dist/frontend/package-shims.js +39 -40
  610. package/dist/frontend/package-shims.js.map +1 -1
  611. package/dist/frontend/pipeline-native.d.ts +2 -2
  612. package/dist/frontend/pipeline-native.js +2 -2
  613. package/dist/frontend/pipeline-native.js.map +1 -1
  614. package/dist/frontend/pipeline.d.ts +19 -2
  615. package/dist/frontend/pipeline.js +103 -12
  616. package/dist/frontend/pipeline.js.map +1 -1
  617. package/dist/frontend/program-analysis.d.ts +7 -1
  618. package/dist/frontend/program-analysis.js +8 -0
  619. package/dist/frontend/program-analysis.js.map +1 -1
  620. package/dist/frontend/program.d.ts +28 -5
  621. package/dist/frontend/program.js +422 -76
  622. package/dist/frontend/program.js.map +1 -1
  623. package/dist/frontend/resolve.d.ts +2 -0
  624. package/dist/frontend/resolve.js +5 -0
  625. package/dist/frontend/resolve.js.map +1 -1
  626. package/dist/frontend/services.d.ts +3 -0
  627. package/dist/frontend/services.js +31 -4
  628. package/dist/frontend/services.js.map +1 -1
  629. package/dist/frontend/shape-inference/analyze.d.ts +93 -0
  630. package/dist/frontend/shape-inference/analyze.js +3138 -0
  631. package/dist/frontend/shape-inference/analyze.js.map +1 -0
  632. package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
  633. package/dist/frontend/shape-inference/constant-graphs.js +357 -0
  634. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
  635. package/dist/frontend/shape-inference/domain.d.ts +32 -0
  636. package/dist/frontend/shape-inference/domain.js +104 -0
  637. package/dist/frontend/shape-inference/domain.js.map +1 -0
  638. package/dist/frontend/shape-inference/index.d.ts +7 -0
  639. package/dist/frontend/shape-inference/index.js +19 -0
  640. package/dist/frontend/shape-inference/index.js.map +1 -0
  641. package/dist/frontend/shape-inference/report.d.ts +21 -0
  642. package/dist/frontend/shape-inference/report.js +348 -0
  643. package/dist/frontend/shape-inference/report.js.map +1 -0
  644. package/dist/frontend/token-equivalence.d.ts +6 -0
  645. package/dist/frontend/token-equivalence.js +66 -9
  646. package/dist/frontend/token-equivalence.js.map +1 -1
  647. package/dist/frontend/token-equivalence.test.js +33 -1
  648. package/dist/frontend/token-equivalence.test.js.map +1 -1
  649. package/dist/frontend/ts7/checker-features.d.ts +15 -0
  650. package/dist/frontend/ts7/checker-features.js +45 -0
  651. package/dist/frontend/ts7/checker-features.js.map +1 -0
  652. package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
  653. package/dist/frontend/ts7/checker-features.test.js +40 -0
  654. package/dist/frontend/ts7/checker-features.test.js.map +1 -0
  655. package/dist/frontend/ts7/checker-server.d.ts +19 -0
  656. package/dist/frontend/ts7/checker-server.js +46 -0
  657. package/dist/frontend/ts7/checker-server.js.map +1 -0
  658. package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
  659. package/dist/frontend/ts7/checker-server.test.js +38 -0
  660. package/dist/frontend/ts7/checker-server.test.js.map +1 -0
  661. package/dist/frontend/ts7/lib-diagnostics.js +39 -13
  662. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  663. package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
  664. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  665. package/dist/frontend/ts7/native-api.d.ts +1 -0
  666. package/dist/frontend/ts7/native-api.js +25 -2
  667. package/dist/frontend/ts7/native-api.js.map +1 -1
  668. package/dist/frontend/ts7/native-process.d.ts +9 -2
  669. package/dist/frontend/ts7/native-process.js +22 -4
  670. package/dist/frontend/ts7/native-process.js.map +1 -1
  671. package/dist/frontend/ts7/program-host.d.ts +11 -0
  672. package/dist/frontend/ts7/program-host.js +36 -22
  673. package/dist/frontend/ts7/program-host.js.map +1 -1
  674. package/dist/frontend/ts7/semantic-json.d.ts +9 -0
  675. package/dist/frontend/ts7/semantic-json.js +25 -5
  676. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  677. package/dist/frontend/ts7/semantic-model.d.ts +3 -0
  678. package/dist/frontend/ts7/semantic-model.js +8 -1
  679. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  680. package/dist/frontend/ts7/semantic-model.test.js +6 -1
  681. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  682. package/dist/frontend/ts7/semantic-types.d.ts +1 -1
  683. package/dist/frontend/ts7/semantic-types.js +1 -1
  684. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  685. package/dist/frontend/ts7/source-parser.js +3 -1
  686. package/dist/frontend/ts7/source-parser.js.map +1 -1
  687. package/dist/frontend/tsc-codes.js +10 -0
  688. package/dist/frontend/tsc-codes.js.map +1 -1
  689. package/dist/frontend/type-mapper.d.ts +18 -6
  690. package/dist/frontend/type-mapper.js +205 -44
  691. package/dist/frontend/type-mapper.js.map +1 -1
  692. package/dist/index.d.ts +44 -3
  693. package/dist/index.js +39 -8
  694. package/dist/index.js.map +1 -1
  695. package/dist/ir/builtin-effects.js +37 -0
  696. package/dist/ir/builtin-effects.js.map +1 -1
  697. package/dist/ir/builtin-signatures.d.ts +7 -2
  698. package/dist/ir/builtin-signatures.js +5104 -4894
  699. package/dist/ir/builtin-signatures.js.map +1 -1
  700. package/dist/ir/callback-specialization.d.ts +4 -2
  701. package/dist/ir/callback-specialization.js +24 -9
  702. package/dist/ir/callback-specialization.js.map +1 -1
  703. package/dist/ir/capture-values.js +4 -2
  704. package/dist/ir/capture-values.js.map +1 -1
  705. package/dist/ir/char-unit-locals.d.ts +12 -2
  706. package/dist/ir/char-unit-locals.js +400 -58
  707. package/dist/ir/char-unit-locals.js.map +1 -1
  708. package/dist/ir/char-unit-locals.test.js +111 -0
  709. package/dist/ir/char-unit-locals.test.js.map +1 -1
  710. package/dist/ir/constant-globals.js +18 -4
  711. package/dist/ir/constant-globals.js.map +1 -1
  712. package/dist/ir/expression-inlining.d.ts +15 -0
  713. package/dist/ir/expression-inlining.js +166 -0
  714. package/dist/ir/expression-inlining.js.map +1 -0
  715. package/dist/ir/expression-inlining.test.d.ts +1 -0
  716. package/dist/ir/expression-inlining.test.js +123 -0
  717. package/dist/ir/expression-inlining.test.js.map +1 -0
  718. package/dist/ir/function-references.js +2 -0
  719. package/dist/ir/function-references.js.map +1 -1
  720. package/dist/ir/function-references.test.js +6 -0
  721. package/dist/ir/function-references.test.js.map +1 -1
  722. package/dist/ir/int32-arrays.d.ts +27 -6
  723. package/dist/ir/int32-arrays.js +106 -18
  724. package/dist/ir/int32-arrays.js.map +1 -1
  725. package/dist/ir/int32-slots.d.ts +26 -1
  726. package/dist/ir/int32-slots.js +291 -5
  727. package/dist/ir/int32-slots.js.map +1 -1
  728. package/dist/ir/int32-slots.test.js +38 -0
  729. package/dist/ir/int32-slots.test.js.map +1 -1
  730. package/dist/ir/integer-loop-facts.d.ts +5 -0
  731. package/dist/ir/integer-loop-facts.js +90 -1
  732. package/dist/ir/integer-loop-facts.js.map +1 -1
  733. package/dist/ir/integer-loops.d.ts +14 -1
  734. package/dist/ir/integer-loops.js +107 -11
  735. package/dist/ir/integer-loops.js.map +1 -1
  736. package/dist/ir/integer-loops.test.js +70 -0
  737. package/dist/ir/integer-loops.test.js.map +1 -1
  738. package/dist/ir/integer-ranges.js +18 -2
  739. package/dist/ir/integer-ranges.js.map +1 -1
  740. package/dist/ir/integer-ranges.test.js +64 -4
  741. package/dist/ir/integer-ranges.test.js.map +1 -1
  742. package/dist/ir/ir.d.ts +63 -11
  743. package/dist/ir/ir.js +47 -7
  744. package/dist/ir/ir.js.map +1 -1
  745. package/dist/ir/ir.test.js +2 -1
  746. package/dist/ir/ir.test.js.map +1 -1
  747. package/dist/ir/js-ic.d.ts +10 -3
  748. package/dist/ir/js-ic.js +14 -2
  749. package/dist/ir/js-ic.js.map +1 -1
  750. package/dist/ir/js-ic.test.js +11 -0
  751. package/dist/ir/js-ic.test.js.map +1 -1
  752. package/dist/ir/node-index.d.ts +7 -0
  753. package/dist/ir/node-index.js +32 -0
  754. package/dist/ir/node-index.js.map +1 -1
  755. package/dist/ir/receiver-readers.d.ts +6 -1
  756. package/dist/ir/receiver-readers.js +53 -28
  757. package/dist/ir/receiver-readers.js.map +1 -1
  758. package/dist/ir/row-pairs.d.ts +15 -0
  759. package/dist/ir/row-pairs.js +373 -0
  760. package/dist/ir/row-pairs.js.map +1 -0
  761. package/dist/ir/row-pairs.test.d.ts +1 -0
  762. package/dist/ir/row-pairs.test.js +129 -0
  763. package/dist/ir/row-pairs.test.js.map +1 -0
  764. package/dist/ir/runtime-features.d.ts +17 -4
  765. package/dist/ir/runtime-features.js +94 -13
  766. package/dist/ir/runtime-features.js.map +1 -1
  767. package/dist/ir/scalar-records.d.ts +15 -0
  768. package/dist/ir/scalar-records.js +301 -1
  769. package/dist/ir/scalar-records.js.map +1 -1
  770. package/dist/ir/scalar-records.test.js +181 -1
  771. package/dist/ir/scalar-records.test.js.map +1 -1
  772. package/dist/ir/self-captures.js +8 -0
  773. package/dist/ir/self-captures.js.map +1 -1
  774. package/dist/ir/validate.js +78 -28
  775. package/dist/ir/validate.js.map +1 -1
  776. package/dist/library/fence-eval.js +4 -4
  777. package/dist/library/fence-eval.js.map +1 -1
  778. package/dist/library/ir-policy.js +5 -0
  779. package/dist/library/ir-policy.js.map +1 -1
  780. package/dist/library/library-cache.d.ts +1 -0
  781. package/dist/library/library-cache.js +1 -0
  782. package/dist/library/library-cache.js.map +1 -1
  783. package/dist/library/library-cache.test.js +13 -0
  784. package/dist/library/library-cache.test.js.map +1 -1
  785. package/dist/native/cache.d.ts +5 -1
  786. package/dist/native/cache.js +15 -3
  787. package/dist/native/cache.js.map +1 -1
  788. package/dist/native/cli.js +6 -0
  789. package/dist/native/cli.js.map +1 -1
  790. package/dist/native/compiler.d.ts +3 -0
  791. package/dist/native/compiler.js +72 -26
  792. package/dist/native/compiler.js.map +1 -1
  793. package/dist/native/compiler.test.js +87 -2
  794. package/dist/native/compiler.test.js.map +1 -1
  795. package/dist/native/executable-cache-open.test.d.ts +1 -0
  796. package/dist/native/executable-cache-open.test.js +80 -0
  797. package/dist/native/executable-cache-open.test.js.map +1 -0
  798. package/dist/native/executable-cache.d.ts +43 -3
  799. package/dist/native/executable-cache.js +177 -36
  800. package/dist/native/executable-cache.js.map +1 -1
  801. package/dist/native/executable-cache.test.js +103 -0
  802. package/dist/native/executable-cache.test.js.map +1 -1
  803. package/dist/native/prepare.d.ts +1 -1
  804. package/dist/native/prepare.js +49 -17
  805. package/dist/native/prepare.js.map +1 -1
  806. package/dist/native/prepare.test.js +69 -3
  807. package/dist/native/prepare.test.js.map +1 -1
  808. package/dist/native/sanitizer.d.ts +1 -1
  809. package/dist/native/sanitizer.js +17 -3
  810. package/dist/native/sanitizer.js.map +1 -1
  811. package/dist/native/sanitizer.test.js +4 -0
  812. package/dist/native/sanitizer.test.js.map +1 -1
  813. package/dist/node-islands/classify.d.ts +14 -0
  814. package/dist/node-islands/classify.js +114 -0
  815. package/dist/node-islands/classify.js.map +1 -0
  816. package/dist/node-islands/detect.d.ts +13 -0
  817. package/dist/node-islands/detect.js +805 -0
  818. package/dist/node-islands/detect.js.map +1 -0
  819. package/dist/node-islands/detect.test.d.ts +1 -0
  820. package/dist/node-islands/detect.test.js +136 -0
  821. package/dist/node-islands/detect.test.js.map +1 -0
  822. package/dist/node-islands/origin.d.ts +21 -0
  823. package/dist/node-islands/origin.js +60 -0
  824. package/dist/node-islands/origin.js.map +1 -0
  825. package/dist/node-islands/policy.d.ts +49 -0
  826. package/dist/node-islands/policy.js +130 -0
  827. package/dist/node-islands/policy.js.map +1 -0
  828. package/dist/node-islands/report.d.ts +22 -0
  829. package/dist/node-islands/report.js +326 -0
  830. package/dist/node-islands/report.js.map +1 -0
  831. package/dist/node-islands/report.test.d.ts +1 -0
  832. package/dist/node-islands/report.test.js +228 -0
  833. package/dist/node-islands/report.test.js.map +1 -0
  834. package/dist/node-islands/rules.d.ts +20 -0
  835. package/dist/node-islands/rules.js +91 -0
  836. package/dist/node-islands/rules.js.map +1 -0
  837. package/dist/node-islands/scan.d.ts +53 -0
  838. package/dist/node-islands/scan.js +104 -0
  839. package/dist/node-islands/scan.js.map +1 -0
  840. package/dist/node-islands/summary.d.ts +78 -0
  841. package/dist/node-islands/summary.js +26 -0
  842. package/dist/node-islands/summary.js.map +1 -0
  843. package/dist/project-config.d.ts +50 -0
  844. package/dist/project-config.js +372 -0
  845. package/dist/project-config.js.map +1 -0
  846. package/dist/project-config.test.d.ts +1 -0
  847. package/dist/project-config.test.js +154 -0
  848. package/dist/project-config.test.js.map +1 -0
  849. package/dist/wasm/discover.js +6 -31
  850. package/dist/wasm/discover.js.map +1 -1
  851. package/package.json +20 -20
  852. package/surface-manifest.json +21 -38
@@ -1,6 +1,6 @@
1
1
  import { isDeclBoundaryFile } from "../decl-projection.js";
2
2
  import { relieveHeapPressure } from "../../heap-pressure.js";
3
- import { moduleNamespaceObject } from "./module-namespace-elements.js";
3
+ import { moduleNamespaceObject, moduleNamespaceValue } from "./module-namespace-elements.js";
4
4
  import { keyedHelperName } from "./stable-names.js";
5
5
  import { positionTag, StructuralPositions } from "./structural-positions.js";
6
6
  import { onlyForwarded, stripTypeWrappers } from "./typed-arguments.js";
@@ -14,6 +14,7 @@ import { internTableType, lowerInternTableCall, lowerInternTableNew } from "./in
14
14
  import { lowerThreadSlotsCall, lowerThreadSlotsNew, threadSlotsType } from "./thread-slots.js";
15
15
  import { isExperimentalDeclarationFile } from "../experimental-import.js";
16
16
  import { checkCycleBindingAccesses, refuseUncheckedCycleReads, } from "./cycle-initialization.js";
17
+ import { bindCompletionCallbacks } from "./completion-callbacks.js";
17
18
  import { isJsonRequireDecl } from "./json-require.js";
18
19
  import { checkRequireBindingAccesses, } from "./require-initialization.js";
19
20
  import { identityPreservingWidening } from "./coercions/identity.js";
@@ -34,6 +35,7 @@ import { discoverWasmModules } from "../../wasm/discover.js";
34
35
  import { encodeBase64 } from "../../wasm/base64.js";
35
36
  import { resolveRequireRuntime } from "../runtime-resolve.js";
36
37
  import { lowerKeyObjectCall } from "./builtins/key-object.js";
38
+ import { lowerX509Call, refuseX509DynValues } from "./builtins/x509.js";
37
39
  import { isEcdhType, lowerEcdhCall } from "./builtins/ecdh.js";
38
40
  import { isDiffieHellmanType, lowerDiffieHellmanCall } from "./builtins/dh.js";
39
41
  import { fenceWebCryptoMember, lowerWebCryptoCall } from "./builtins/webcrypto.js";
@@ -69,10 +71,12 @@ import { bindingInContext, captureContextBinding, declareContextLocal, declareCo
69
71
  import { InternalCompilerError } from "../../errors.js";
70
72
  import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "./optional-arguments.js";
71
73
  import {} from "./class-protocol-dispatch.js";
72
- import { ClassDynamicDispatch, trackClassFieldCreation } from "./class-dynamic-dispatch.js";
73
- import { guardClassAttributeWrites } from "./class-attributes.js";
74
+ import { ClassDynamicDispatch, boxClassInstancesExactly, trackClassFieldCreation, } from "./class-dynamic-dispatch.js";
75
+ import { addUntypedIntegrityWords, guardClassAttributeWrites } from "./class-attributes.js";
76
+ import { inferredCollectionType } from "./js-collection-types.js";
74
77
  import { guardFrozenWrites, markSloppyRecordWrites } from "./frozen-records.js";
75
78
  import { applyHandleProperties } from "./handle-properties.js";
79
+ import { installBufferValue } from "./containers/bytes.js";
76
80
  import { ClassProtocols } from "./class-protocols.js";
77
81
  import { earlyReadVarSymbols } from "./var-hoisting.js";
78
82
  import { recordTextCodecClass } from "../../ir/ir.js";
@@ -110,20 +114,21 @@ import { discriminantOwners, literalUnionArm } from "../union-discriminants.js";
110
114
  import { unsupportedAnyOperationDiag, blockedBindingUseDiag, checkerPanicDiag, componentTypeDiag, isCheckerPanic, genericSignatureTypeDiag, indexSignatureTypeDiag, intersectionTypeDiag, noLoweringDiag, overloadedSignatureTypeDiag, recordShapeMismatchDiag, unsupportedNativeApiDiag, unsupportedPackageValueDiag, unionMismatchDiag, UNSUPPORTED, unsupportedDiag, unsupportedTypeDiag, } from "../../diagnostics/diagnostic.js";
111
115
  import { arrayOf, BOOL, canAdaptDynFuncTo, canBoxFuncIntoDyn, canDynCheckTo, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, isDynTypedRefType, isJsonSafeType, isJsonStringifySafeType, isPrimitiveCollectionKey, isSupportedMapKey, isSupportedMapValue, isUndefinedArmedUnion, isUnitType, NULL_T, RUNTIME_ERROR_CLASSES, STRING, typeEquals, UNDEFINED_T, VOID, } from "../../ir/ir.js";
112
116
  import { provenanceActive } from "../provenance-registry.js";
113
- import { ambientDtsPath, canonicalBuiltinModule, cjsExportAssignmentOf, cjsExportDiscardReason, fallbackDtsPath, isCheckedJsSourceFile, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isNodeEsmFile, isNodeTypesPath, locOf, orderedImportsOf, overridesDtsPath, npmStaticDepSf7, requireSpecOf, resolveImport, workspacePackageOfPath, } from "../program.js";
117
+ import { ambientDtsPath, canonicalBuiltinModule, cjsExportAssignmentOf, cjsExportDiscardReason, cjsExportsAssignedInFunctions, cjsReexportedModules, cjsNamespaceExportNames, fallbackDtsPath, isCheckedJsSourceFile, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isNodeEsmFile, isNodeTypesPath, locOf, orderedImportsOf, overridesDtsPath, npmStaticDepSf7, requireSpecOf, resolveImport, workspacePackageOfPath, } from "../program.js";
114
118
  import { containsRecord, containsUnion, describeComponentBlocker, describeRecordMemberBlocker, erasedOverloadMemberType, formatIrType, FETCH_AMBIENT_TYPES, isOsConstantsSymbol, isOverloadedCallableMemberType, isUnitOnlyTsType, isWorkerHandleType, isFetchHandleType, jsOpenObjectType, mapType, ShapeRegistry, typeKey, UnionRegistry, withUndefinedArm as withUndefinedArmCanonical, } from "../type-mapper.js";
115
119
  import { builtinConstLit, builtinModuleConstOf, builtinModulesArrayLit, builtinFenceHintOf, builtinModuleFnOf, stdlibMemberFence, isStdlibMember, isStdlibSymbol, isStdlibGlobal, stdlibGlobalNameOf, stdlibGlobalMember, nodeTypesOnlySymbol, } from "./surfaces.js";
116
120
  import { builtinClassAliasOf, runtimeClassValueOfType, } from "./builtins/class-values.js";
117
121
  import { splitFiles, collectProgram, collectNpmImports, collectJsonImports, moduleArtifacts, collectGlobals, declSymbolOf, defaultExportSymbolOf, lowerFileInit, lowerDefaultExport, buildMain, appendDynamicImportModules, appendForkModules, appendWorkerModules, } from "./lower-modules.js";
118
122
  import { prepareCjsModuleGraph, usesCjsTopLevelThis } from "./lower-node-module.js";
119
- import { cjsNamespaceModule, cjsWholeExportValueOf, inlineNamespaceRequireOf, inlineProgramRequireOf, } from "./cjs-inline-require.js";
123
+ import { cjsNamespaceModule, cjsWholeExportValueOf, inlineNamespaceRequireOf, inlineProgramRequireOf, splitRequireBindingOf, splitWholeExportAliasTargetOf, } from "./cjs-inline-require.js";
120
124
  import { tscInteropModuleOf } from "./cjs-tsc-interop.js";
121
125
  import { usesCjsExportsIdentity } from "./cjs-exports-object.js";
122
126
  import { registerBuiltinEventTargetClasses } from "./lower-event-target.js";
123
- import { registerBuiltinErrorClasses, defineClassValueConstruct, runtimeClassConstructs, registerBuiltinEmitterClass, registerBuiltinStreamClasses, builtinErrorInfoOf, builtinEmitterInfoOf, builtinStreamInfoOf, analyzeClassDecoration, classIteratorDrainCall, classIteratorNextCall, classIteratorOf, classIteratorOpenCall, classIteratorRestDrainCall, classMemberNameOf, classValueRef, collectClassShape, exactClassOfReceiver, collectClassShapeInner, ctorAbiEquals, findMethodOn, findStaticOn, genericClassInstanceType, isSubclassOf, inHierarchy, overrideBelow, staticShadowBelow, upcastTo, lowerClassMembers, lowerClassCtor, lowerClassExpression, lowerClassExpressionInfo, lowerClassMethodMember, lowerClassValueProperty, lowerStaticMethod, throwingSetterFn, fieldInitStmts, lowerStaticFieldInits, lowerStaticFieldRead, lowerDerivedCtorBody, superCallStmt, lowerSuperMethodCall, superThisRef, lowerSuperAccessorRead, lowerSuperAccessorWrite, inheritsBuiltinErrorCtor, inheritsBuiltinEmitterCtor, errorConstructorArgs, lowerNew, accessorCall, } from "./lower-classes.js";
127
+ import { registerBuiltinErrorClasses, defineClassValueConstruct, runtimeClassConstructs, registerBuiltinEmitterClass, registerBuiltinStreamClasses, builtinErrorInfoOf, builtinEmitterInfoOf, builtinStreamInfoOf, analyzeClassDecoration, classIteratorDrainCall, classIteratorMethodCall, classIteratorNextCall, classIteratorNextRead, classIteratorOf, classIteratorOpenCall, classIteratorRestDrainCall, classMemberNameOf, classValueRef, collectClassShape, exactClassOfReceiver, collectClassShapeInner, ctorAbiEquals, findMethodOn, findStaticOn, genericClassInstanceType, isSubclassOf, inHierarchy, overrideBelow, staticShadowBelow, upcastTo, lowerClassMembers, lowerClassCtor, lowerClassExpression, lowerClassExpressionInfo, lowerClassMethodMember, lowerClassValueProperty, lowerStaticMethod, throwingSetterFn, fieldInitStmts, lowerStaticFieldInits, lowerStaticFieldRead, lowerDerivedCtorBody, superCallStmt, lowerSuperMethodCall, superThisRef, lowerSuperAccessorRead, lowerSuperAccessorWrite, inheritsBuiltinErrorCtor, inheritsBuiltinEmitterCtor, errorConstructorArgs, lowerNew, accessorCall, } from "./lower-classes.js";
124
128
  import { mixinCallClassInfoOf, mixinIntersectionInstanceType, } from "./lower-mixins.js";
125
129
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
126
130
  import { funcTypeFromParamShapes, isThisParameter, paramShape, paramShapes, checkDefaultParamBodyType, requireExactArityValue, collectSignature, collectSignatureInner, lambdaSignature, } from "./call-signatures.js";
131
+ import { dynamicOverloadChoice, guessedOverloadIdentifier } from "./overload-choice.js";
127
132
  import { implicitAnyParamSymbolsOf, implicitLocalFnNodeOf, implicitMonoFile, collectGenericSignature, genericFnOf, lowerGenericCall, lowerGenericFnValue, inferTypeParamBindings, lowerGenericInstance, genericLocalClassBinding, } from "./generic-functions.js";
128
133
  import { bindingNeverReassigned } from "./binding-analysis.js";
129
134
  import { bodyReadsArguments } from "../arguments-usage.js";
@@ -173,7 +178,7 @@ import { fenceFetchObjectAssignment, fenceFetchObjectBinding, fenceStaticAbortCo
173
178
  import { lowerHttpHeadersElement, lowerNetModuleCall, lowerServerMethodCall, lowerServerProperty, lowerTlsRootCertificates, } from "./lower-server.js";
174
179
  import { lowerDgramDnsModuleCall, lowerDgramMethodCall } from "./lower-dgram.js";
175
180
  import { lowerNodeTestModuleCall, lowerTestDirectCall, lowerTestMethodCall, lowerTestCtxProperty, } from "./lower-test.js";
176
- import { lowerAssertModuleCall, lowerAssertDirectCall } from "./lower-assert.js";
181
+ import { assertFunctionValue, lowerAssertModuleCall, lowerAssertDirectCall, } from "./lower-assert.js";
177
182
  import { lowerUtilModuleCall } from "./lower-inspect.js";
178
183
  import { lowerSystemErrorMapValue } from "./lower-system-errors.js";
179
184
  import { lowerComptime, comptimeBakeable, rejectComptimeCaptures, comptimeValueToIr, } from "./lower-comptime.js";
@@ -1519,6 +1524,14 @@ export class Lowerer {
1519
1524
  /** Per CommonJS file using top-level `this`: the global holding the
1520
1525
  * object that stands for its original exports (lowerCjsTopLevelThis). */
1521
1526
  cjsExportsThis = new Map();
1527
+ /** `var m; m = require("./x")` alias bindings (cjs-inline-require.ts).
1528
+ * Null entries cache declarations that keep ordinary storage. */
1529
+ cjsSplitRequireBindings = new Map();
1530
+ /** Per-module whole-export symbol (cjs-inline-require.ts). Null means the
1531
+ * module's exports are a table. */
1532
+ cjsWholeExportSymbols = new Map();
1533
+ /** Per-module live member-export classification (cjs-inline-require.ts). */
1534
+ cjsLiveMemberExports = new Map();
1522
1535
  /** Inline program-module require calls whose %init the enclosing member
1523
1536
  * read or member call is already sequencing (cjs-inline-require.ts). */
1524
1537
  inlineRequireInitDone = new Set();
@@ -1569,6 +1582,13 @@ export class Lowerer {
1569
1582
  runtimeOptionalFields = new Set();
1570
1583
  /** Bindings initialized by a Date's `toJSON()` (analyzeDateJsonResults). */
1571
1584
  dateJsonBindings = new Set();
1585
+ /** isTimeValueDateDeclaration's answers, and the locals that hold a
1586
+ * Date's time value instead of a Date object (date-values.ts). */
1587
+ timeValueDateDecisions = new Map();
1588
+ timeValueDateLocals = new Set();
1589
+ /** Declarations of those locals that a setter call writes
1590
+ * (date-values.ts). */
1591
+ timeValueDateWrites = new Set();
1572
1592
  /** Record bindings whose flow class reaches storage outside the class:
1573
1593
  * they keep the declared layout, so an initializer from unchecked reads
1574
1594
  * converts once instead of the binding adopting the widened variant. */
@@ -1577,6 +1597,9 @@ export class Lowerer {
1577
1597
  * every name destructured from a present source optional. */
1578
1598
  runtimeOptionalPatternTypes = new Map();
1579
1599
  runtimeOptionalReduceTypes = new Map();
1600
+ /** Each function declaration's `arguments.length` count slot, or null
1601
+ * (argument-counts.ts argumentCountSlot). */
1602
+ argumentCountSlots = new Map();
1580
1603
  /** Non-null assertions whose value is forwarded into a slot promoted to
1581
1604
  * hold undefined. `x!` has no runtime effect, so these keep the stored
1582
1605
  * undefined state instead of trapping before any dereference. */
@@ -2016,6 +2039,11 @@ export class Lowerer {
2016
2039
  /** Parameters read as `any` in the error-path copy of an error-first
2017
2040
  * callback. */
2018
2041
  anySymbols = new Set();
2042
+ /** The collection types that uses prove for untyped JavaScript bindings,
2043
+ * by every identifier naming one (js-collection-types.ts). */
2044
+ inferredCollectionTypes = undefined;
2045
+ /** overload-choice's answers per call, binding and function. */
2046
+ dynamicOverloadAnswers = new Map();
2019
2047
  /** Error parameters of an error-first callback with a known value in
2020
2048
  * the copy being lowered: true while it holds an Error, false while it
2021
2049
  * holds null (staticCondition folds conditions on them). */
@@ -2090,6 +2118,9 @@ export class Lowerer {
2090
2118
  /** util.inspect's per-type traversal helpers (%util.insp.N), interned
2091
2119
  * by typeKey — the assertHelpers pattern with its own namespace. */
2092
2120
  inspectHelpers = new Map();
2121
+ /** Indexed-union safe-read helpers mapped to their numeric twins, for the
2122
+ * fusion of an immediate ToNumber (tryLowerNumericIndexRead). */
2123
+ indexedUnionNumericTwins = new Map();
2093
2124
  unionLiteralOwners = new Map();
2094
2125
  strippedUndefinedArms = new Map();
2095
2126
  addedUndefinedArms = new Map();
@@ -2120,6 +2151,10 @@ export class Lowerer {
2120
2151
  * checks resolve through this map (stdlibGlobalNameOf), declarations
2121
2152
  * emit nothing. */
2122
2153
  stdlibGlobalAliases = new Map();
2154
+ /** The stdlibGlobalAliases bound through a cast of the global object
2155
+ * (`(globalThis as { Buffer?: B }).Buffer`). Their static type is the
2156
+ * cast's, so their value reads are refused (identifiers.ts). */
2157
+ castGlobalAliases = new Set();
2123
2158
  /** CJS export-table ACCESSORS (`module.exports = { get path() {...} }`),
2124
2159
  * lifted lazily as module-level functions and interned per accessor
2125
2160
  * declaration: member reads call the getter (lower-exprs). */
@@ -2154,6 +2189,9 @@ export class Lowerer {
2154
2189
  builtinCallableValueFns = new Map();
2155
2190
  /** Each builtin function-value adapter's Node name, for boxed values. */
2156
2191
  builtinCallableValueNames = new Map();
2192
+ /** Builtin function values whose `length` differs from their adapter's
2193
+ * parameter count (BuiltinModuleFn.valueLength), by adapter name. */
2194
+ builtinCallableValueLengths = new Map();
2157
2195
  /** Optional-chain lowering state. While a chain body lowers, the guarded
2158
2196
  * receiver NODE reads as a chainRecv (typed by the narrowed arm) instead
2159
2197
  * of re-lowering, its checker type reads non-nullish (typeOf), and the
@@ -2292,8 +2330,18 @@ export class Lowerer {
2292
2330
  * (builtins/fs-paths.ts): each lowers to the hidden local that holds its
2293
2331
  * value, which is null until the path's lowering has saved it. */
2294
2332
  stagedArguments = new Map();
2295
- /** The staged arguments that follow each such URL path, in order. */
2296
- stagedAfterPath = new Map();
2333
+ /** Closure arguments an implicit-any call already lowered to learn their
2334
+ * type (storedImplicitArgumentType), by node: the argument's own lowering
2335
+ * in the same function and with the same type bindings takes that value
2336
+ * once instead of lowering the closure again. */
2337
+ speculatedClosures = new Map();
2338
+ /** What each fs path argument of a URL-path call lowers to (the plans
2339
+ * of builtins/fs-paths.ts). */
2340
+ fsPathPlans = new Map();
2341
+ /** The existsSync/fs.promises calls whose converted URL paths are being
2342
+ * lowered into the call itself (lowerFallibleFsUrlCall). A call may be
2343
+ * lowered more than once, and each lowering converts again. */
2344
+ fallibleFsCalls = new Set();
2297
2345
  moduleNsParamOverrides = new Map();
2298
2346
  /** File → qualifier prefix: "" for the entry, "%mI." otherwise. */
2299
2347
  fileTag = new Map();
@@ -2413,6 +2461,9 @@ export class Lowerer {
2413
2461
  recordFieldDeletes = new Set();
2414
2462
  /** typeKeys of the array types the program may freeze (IrModule.freezableArrays). */
2415
2463
  freezableArrays = new Set();
2464
+ /** Whether the program freezes, seals or prevents extensions of untyped
2465
+ * values other than fresh literals (noteUntypedIntegrity). */
2466
+ untypedIntegrity = false;
2416
2467
  liftedFns = [];
2417
2468
  /** The first lifted function of each name (liftedFnNamed), for the
2418
2469
  * liftedFns indexed so far. liftedFns only grows. */
@@ -2815,9 +2866,7 @@ export class Lowerer {
2815
2866
  * that comes back through a boundary cast keeps its identity. */
2816
2867
  declBoundaryMemo = null;
2817
2868
  get declBoundary() {
2818
- this.declBoundaryMemo ??= this.program
2819
- .getSourceFiles()
2820
- .some((sf) => isDeclBoundaryFile(sf.fileName));
2869
+ this.declBoundaryMemo ??= this.program.getSourceFileNames().some(isDeclBoundaryFile);
2821
2870
  return this.declBoundaryMemo;
2822
2871
  }
2823
2872
  /** Tracked classes' bag initializers over a typed `this`
@@ -2860,7 +2909,7 @@ export class Lowerer {
2860
2909
  positionOf: (node) => this.positions.of(node),
2861
2910
  shapes: this.shapes,
2862
2911
  unions: this.unions,
2863
- classNamer: this.classNamer,
2912
+ classNamer: (decl) => this.classNamer(decl),
2864
2913
  resolveTypeParam: this.typeParamResolver,
2865
2914
  resolveTypeParamTs: this.typeParamTsResolver,
2866
2915
  isErasing: () => this.erasingDepth > 0,
@@ -2924,8 +2973,8 @@ export class Lowerer {
2924
2973
  },
2925
2974
  mixinIntersectionInstance: (widened) => mixinIntersectionInstanceType(this, widened),
2926
2975
  classImplementedProtocol: (type) => this.classImplementedProtocol(type),
2927
- isStdlibFile: this.isStdlibFile,
2928
- isNpmFile: this.isNpmFile,
2976
+ isStdlibFile: (sf) => this.isStdlibFile(sf),
2977
+ isNpmFile: (sf) => this.isNpmFile(sf),
2929
2978
  // The declaration-typed boundary's generated types (decl-projection.ts)
2930
2979
  // describe data, like an explicitly mapped external type surface.
2931
2980
  isExternalTypeFile: (sf) => this.externalTypeSpecifiersByFile.has(tsgoPath(resolve(sf.fileName))) ||
@@ -2989,7 +3038,8 @@ export class Lowerer {
2989
3038
  /** Declared class fields may store a DYN value only when its static type
2990
3039
  * is `unknown` or `object` (also with `null` or `undefined`, or an array
2991
3040
  * of those), names checked protocol identity, is an owned runtime
2992
- * handle (a Worker or MessagePort, a fetch Headers/Request/Response, or
3041
+ * handle (a Worker or MessagePort, a fetch Headers/Request/Response or
3042
+ * AbortController/AbortSignal, or
2993
3043
  * a node:crypto ECDH, DiffieHellman or DiffieHellmanGroup), or is a
2994
3044
  * WeakMap/WeakSet (native weak collections live in checked-dynamic
2995
3045
  * storage, as locals of those types do); `any` fields stay refused. */
@@ -3057,6 +3107,35 @@ export class Lowerer {
3057
3107
  }
3058
3108
  return null;
3059
3109
  }
3110
+ /** For each CommonJS module read through a JavaScript namespace import:
3111
+ * the property names of Node's namespace object
3112
+ * (cjsNamespaceExportNames), and the exports the module assigns inside
3113
+ * functions, which the namespace does not see
3114
+ * (cjsExportsAssignedInFunctions). */
3115
+ cjsNamespaces = new Map();
3116
+ cjsNamespaceOf(dep) {
3117
+ let namespace = this.cjsNamespaces.get(dep);
3118
+ if (namespace === undefined) {
3119
+ // A re-exported name reads the module that assigns it, so the writes
3120
+ // after evaluation of every re-exported module count too.
3121
+ let assignedLater = new Set();
3122
+ for (const mod of cjsReexportedModules(this.program, dep)) {
3123
+ const later = cjsExportsAssignedInFunctions(mod);
3124
+ if (later === "all") {
3125
+ assignedLater = "all";
3126
+ break;
3127
+ }
3128
+ for (const name of later)
3129
+ assignedLater.add(name);
3130
+ }
3131
+ namespace = {
3132
+ names: cjsNamespaceExportNames(this.program, dep),
3133
+ assignedLater,
3134
+ };
3135
+ this.cjsNamespaces.set(dep, namespace);
3136
+ }
3137
+ return namespace;
3138
+ }
3060
3139
  sourceFileOfModuleNamespace(type) {
3061
3140
  if (type.kind !== "moduleNs" || !type.moduleId.startsWith("file:"))
3062
3141
  return null;
@@ -3197,6 +3276,12 @@ export class Lowerer {
3197
3276
  const cjsValue = this.cjsExportValueSymbol(symbol);
3198
3277
  if (cjsValue)
3199
3278
  symbol = cjsValue;
3279
+ // `var m; m = require("./x"); module.exports = m` over a whole-export
3280
+ // target: TS types the wrapper's export= as `any`, so reconnect it to
3281
+ // the target's value symbol explicitly.
3282
+ const splitAlias = splitWholeExportAliasTargetOf(this, symbol);
3283
+ if (splitAlias)
3284
+ symbol = splitAlias;
3200
3285
  this.flushDeferred(symbol);
3201
3286
  return symbol;
3202
3287
  }
@@ -3310,7 +3395,7 @@ export class Lowerer {
3310
3395
  // exact mappings, while star exports resolve to the mapped declaration
3311
3396
  // owner through externalTypeSpecifiersByFile.
3312
3397
  const moduleSymbol = this.checker.getSymbolAtLocation(sf);
3313
- const exported = moduleSymbol?.getExports().get(exportName);
3398
+ const exported = moduleSymbol?.getExports().get(ts.escapedSymbolName(exportName));
3314
3399
  return this.externalTypeSpecifierOfSymbol(exported, seenSymbols, seenExports);
3315
3400
  }
3316
3401
  externalTypeSpecifierOfNamespaceMember(expr, member) {
@@ -3451,7 +3536,7 @@ export class Lowerer {
3451
3536
  cjsModuleExportSymbol(sf, name) {
3452
3537
  const moduleSym = this.checker.getSymbolAtLocation(sf);
3453
3538
  const exports = moduleSym?.getExports();
3454
- const direct = exports?.get(name);
3539
+ const direct = exports?.get(ts.escapedSymbolName(name));
3455
3540
  if (direct)
3456
3541
  return direct;
3457
3542
  // tsgo represents `module.exports = { ... }` as one `export=` symbol
@@ -3601,8 +3686,10 @@ export class Lowerer {
3601
3686
  return null;
3602
3687
  if (ts.isImportClause(decl))
3603
3688
  return this.cjsDefaultImportDepOf(decl);
3604
- if (!ts.isVariableDeclaration(decl) || !ts.isIdentifier(decl.name) || !decl.initializer)
3689
+ if (!ts.isVariableDeclaration(decl) || !ts.isIdentifier(decl.name))
3605
3690
  return null;
3691
+ if (decl.initializer === undefined)
3692
+ return splitRequireBindingOf(this, decl)?.dep ?? null;
3606
3693
  {
3607
3694
  const interop = tscInteropModuleOf(this, expr);
3608
3695
  if (interop !== null)
@@ -3705,6 +3792,10 @@ export class Lowerer {
3705
3792
  if (!ts.isIdentifier(expr))
3706
3793
  return this.cjsModuleRefDepOf(expr) !== null;
3707
3794
  const sym = this.checker.getSymbolAtLocation(expr);
3795
+ const splitDecl = sym?.declarations.find(ts.isVariableDeclaration);
3796
+ const split = splitDecl === undefined ? null : splitRequireBindingOf(this, splitDecl);
3797
+ if (split !== null)
3798
+ return cjsNamespaceModule(this, split.dep);
3708
3799
  if (this.localModuleBindingDepOf(expr) === null)
3709
3800
  return false;
3710
3801
  if (this.createRequireWholeExportSymbolOf(expr) !== null)
@@ -4012,6 +4103,9 @@ export class Lowerer {
4012
4103
  * their external dependencies by name). Null for everything else
4013
4104
  * (builtins load nothing; the rest kept its preflight fence). */
4014
4105
  requireInitStmt(spec, node) {
4106
+ if (this.inlineRequireCycleCalls.has(node)) {
4107
+ this.unsupported("SC1090", node, `require() of '${spec}' while it is still evaluating (a require cycle: Node answers its partial exports, which the static export table does not model)`);
4108
+ }
4015
4109
  if (canonicalBuiltinModule(spec) === "punycode")
4016
4110
  return this.punycodeRequireWarning(node);
4017
4111
  // Project requires resolve within the program; another bare require can
@@ -5547,6 +5641,23 @@ export class Lowerer {
5547
5641
  });
5548
5642
  return keys;
5549
5643
  };
5644
+ // `t[i]!` on a typed array, stored into an array, keeps an invalid
5645
+ // index's undefined (assertedReadObservesUndefined): `!` performs no
5646
+ // runtime check. A read whose consumers treat undefined like NaN stores
5647
+ // NaN instead.
5648
+ const assertedReadMayBeUndefined = (node) => {
5649
+ let e = node;
5650
+ while (ts.isParenthesizedExpression(e))
5651
+ e = e.expression;
5652
+ if (!ts.isNonNullExpression(e))
5653
+ return false;
5654
+ let read = e.expression;
5655
+ while (ts.isParenthesizedExpression(read))
5656
+ read = read.expression;
5657
+ return (ts.isElementAccessExpression(read) &&
5658
+ this.mapTypeOf(this.typeOf(read.expression))?.kind === "bytes" &&
5659
+ !nanCoded.isNumericRead(read));
5660
+ };
5550
5661
  const elementStates = new ArrayElementStates({
5551
5662
  elementAdmitsUndefined: (key) => {
5552
5663
  siteDependencies?.read(key);
@@ -5557,9 +5668,16 @@ export class Lowerer {
5557
5668
  arrayKeys: arrayKeysOf,
5558
5669
  mayBeUndefined: (node) => {
5559
5670
  if (explicitlyNonNull(node))
5560
- return false;
5671
+ return assertedReadMayBeUndefined(node);
5561
5672
  if (mayBeOptional(node))
5562
5673
  return true;
5674
+ // A value the checker types as possibly undefined: `(T | undefined)[]`
5675
+ // stores T elements (the type mapper), so its undefined values are
5676
+ // facts of T's arrays.
5677
+ const checked = typeOrNull(node);
5678
+ if (checked !== null &&
5679
+ (checked.isUnionType() ? ts.constituentTypes(checked) : [checked]).some((part) => (part.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0))
5680
+ return true;
5563
5681
  // `undefined as unknown as T` keeps the undefined value.
5564
5682
  for (let inner = node; ts.isParenthesizedExpression(inner) ||
5565
5683
  ts.isAsExpression(inner) ||
@@ -5576,7 +5694,37 @@ export class Lowerer {
5576
5694
  const symbol = symbolOf(e);
5577
5695
  return symbol !== null && iterationSymbols.has(symbol) && !provenPresent(e, symbol);
5578
5696
  },
5579
- callbackReturnsUndefined: (node) => callbackReturnsOptional(node),
5697
+ iterationMayYieldUndefined: (node) => {
5698
+ const type = typeOrNull(node);
5699
+ if (type === null || this.checker.isArrayType(type))
5700
+ return false;
5701
+ // A tuple yields its elements, in order.
5702
+ if (this.checker.isTupleType(type))
5703
+ return panicSafe(() => this.checker
5704
+ .getTypeArguments(type)
5705
+ .some((element) => (element.isUnionType() ? ts.constituentTypes(element) : [element]).some((part) => (part.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0)), true);
5706
+ // The first type argument of Set<T>, Map and Set iterators,
5707
+ // generators and iterables is the value they yield.
5708
+ const element = (type.flags & ts.TypeFlags.Object) !== 0
5709
+ ? panicSafe(() => this.checker.getTypeArguments(type)[0], undefined)
5710
+ : undefined;
5711
+ if (element === undefined)
5712
+ return false;
5713
+ return (element.isUnionType() ? ts.constituentTypes(element) : [element]).some((part) => (part.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0);
5714
+ },
5715
+ callbackReturnsUndefined: (node) => {
5716
+ if (callbackReturnsOptional(node))
5717
+ return true;
5718
+ // A callback the checker types as possibly returning undefined
5719
+ // (`(m) => map.get(m)`): its results are present undefined
5720
+ // elements of a `(T | undefined)[]`, which stores T elements.
5721
+ const type = typeOrNull(node);
5722
+ return (type !== null &&
5723
+ this.checker.getCallSignatures(type).some((signature) => {
5724
+ const result = this.checker.getReturnTypeOfSignature(signature);
5725
+ return (result.isUnionType() ? ts.constituentTypes(result) : [result]).some((part) => (part.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0);
5726
+ }));
5727
+ },
5580
5728
  isGlobal: (node, name) => this.isStdlibGlobal(node, name),
5581
5729
  isString: (node) => {
5582
5730
  const type = typeOrNull(node);
@@ -5604,6 +5752,15 @@ export class Lowerer {
5604
5752
  const rest = sig.params.find((shape) => shape.mode === "rest");
5605
5753
  return rest?.type.kind === "array" ? [typeKey(rest.type.elem)] : [];
5606
5754
  },
5755
+ restStart: (call) => {
5756
+ const callee = peel(call.expression);
5757
+ if (!ts.isIdentifier(callee) && !ts.isPropertyAccessExpression(callee))
5758
+ return null;
5759
+ const symbol = callableSymbolOf(callee);
5760
+ const sig = symbol ? signatureBySymbol.get(symbol) : undefined;
5761
+ const at = sig ? sig.params.findIndex((shape) => shape.mode === "rest") : -1;
5762
+ return at >= 0 ? at : null;
5763
+ },
5607
5764
  markIterationBinding: (node, known) => {
5608
5765
  const symbol = symbolOf(node);
5609
5766
  if (!symbol)
@@ -5640,6 +5797,7 @@ export class Lowerer {
5640
5797
  if (cached !== undefined)
5641
5798
  return cached;
5642
5799
  const nodes = [];
5800
+ const values = [];
5643
5801
  ts.walkPreorder(sf, (node) => {
5644
5802
  if (ts.isVariableDeclaration(node) ||
5645
5803
  (ts.isParameter(node) && ts.isObjectBindingPattern(node.name)) ||
@@ -5653,7 +5811,19 @@ export class Lowerer {
5653
5811
  ts.isPrefixUnaryExpression(node) ||
5654
5812
  ts.isPostfixUnaryExpression(node))
5655
5813
  nodes.push(node);
5814
+ // The values these sites store, whose checker types mayBeUndefined
5815
+ // reads: batched here, since dead bodies are scanned too.
5816
+ if (ts.isArrayLiteralExpression(node))
5817
+ for (const element of node.elements.nodes)
5818
+ values.push(ts.isSpreadElement(element) ? element.expression : element);
5819
+ else if (ts.isCallExpression(node) || ts.isNewExpression(node))
5820
+ for (const arg of node.arguments?.nodes ?? [])
5821
+ values.push(ts.isSpreadElement(arg) ? arg.expression : arg);
5822
+ else if (ts.isBinaryExpression(node) &&
5823
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken)
5824
+ values.push(node.right);
5656
5825
  });
5826
+ this.checker.prefetchCollectionTypes(values);
5657
5827
  scanSites.set(sf, nodes);
5658
5828
  return nodes;
5659
5829
  };
@@ -6830,9 +7000,12 @@ export class Lowerer {
6830
7000
  finalizeClassMethodValues(this, functions);
6831
7001
  finalizePrivateBrands(this, functions);
6832
7002
  trackClassFieldCreation(this, functions);
7003
+ boxClassInstancesExactly(this, functions);
7004
+ addUntypedIntegrityWords(this);
6833
7005
  guardClassAttributeWrites(this, functions);
6834
7006
  guardFrozenWrites(this, functions);
6835
7007
  applyHandleProperties(this, functions);
7008
+ installBufferValue(functions);
6836
7009
  // Globals typed by a class that never REGISTERED (a JS class whose
6837
7010
  // collection fenced — Symbol-keyed fields, an unsupported base): the
6838
7011
  // declaration statement and every use compiled to runtime fences, but
@@ -6921,6 +7094,7 @@ export class Lowerer {
6921
7094
  // every producer and consumer agrees. Programs with no unregistered
6922
7095
  // reference are untouched — byte-stability holds.
6923
7096
  checkRequireBindingAccesses(this, functions);
7097
+ refuseX509DynValues(this, functions);
6924
7098
  const module = this.diags.length > 0
6925
7099
  ? null
6926
7100
  : {
@@ -6941,6 +7115,7 @@ export class Lowerer {
6941
7115
  ...(this.freezableArrays.size > 0
6942
7116
  ? { freezableArrays: [...this.freezableArrays].sort() }
6943
7117
  : {}),
7118
+ ...(this.untypedIntegrity ? { untypedIntegrity: true } : {}),
6944
7119
  ...(isNodeEsmFile(this.entry, this.program) ? {} : { commonJsEntry: true }),
6945
7120
  ...(this.ffiImports.length > 0 ? { ffiImports: [...this.ffiImports] } : {}),
6946
7121
  };
@@ -6948,6 +7123,8 @@ export class Lowerer {
6948
7123
  sanitizeUnregisteredClassTypes(module, (name) => this.classes.has(name));
6949
7124
  if (module)
6950
7125
  checkCycleBindingAccesses(this, module);
7126
+ if (module)
7127
+ bindCompletionCallbacks(module);
6951
7128
  // Execution tiers from the final bodies (ir/tiers.ts). Assigned with or
6952
7129
  // without a module: coverage reports the dynamic tier of programs that
6953
7130
  // still have blockers.
@@ -7123,9 +7300,28 @@ export class Lowerer {
7123
7300
  // retained-function keys and are deterministic by construction
7124
7301
  // (qualified declaration names).
7125
7302
  const units = new Map();
7126
- const bodyRoots = (...roots) => roots.filter((root) => root !== undefined && root !== null);
7127
- const functionRoots = (decl) => bodyRoots(...decl.parameters.nodes.map((param) => param.initializer), decl.body);
7128
- const classCtorRoots = (info) => bodyRoots(...(info.ctor?.parameters?.nodes ?? []).map((param) => param.initializer), info.ctor?.body, ...info.fieldOrder.map((field) => field.initializer));
7303
+ // Roots are collected with plain pushes: spread arguments into a rest
7304
+ // parameter pass the nodes as dynamic values.
7305
+ const addRoot = (roots, root) => {
7306
+ if (root !== undefined && root !== null)
7307
+ roots.push(root);
7308
+ };
7309
+ const functionRoots = (decl) => {
7310
+ const roots = [];
7311
+ for (const param of decl.parameters.nodes)
7312
+ addRoot(roots, param.initializer);
7313
+ addRoot(roots, decl.body);
7314
+ return roots;
7315
+ };
7316
+ const classCtorRoots = (info) => {
7317
+ const roots = [];
7318
+ for (const param of info.ctor?.parameters?.nodes ?? [])
7319
+ addRoot(roots, param.initializer);
7320
+ addRoot(roots, info.ctor?.body);
7321
+ for (const field of info.fieldOrder)
7322
+ addRoot(roots, field.initializer);
7323
+ return roots;
7324
+ };
7129
7325
  const classMemberRoots = (info) => {
7130
7326
  const roots = classCtorRoots(info);
7131
7327
  for (const { member } of this.classMethodMembers(info))
@@ -7309,8 +7505,9 @@ export class Lowerer {
7309
7505
  register(`%${cName}.set:${prop}`, [], () => this.throwingSetterFn(info, prop));
7310
7506
  }
7311
7507
  };
7508
+ const onEdge = this.onEdge;
7312
7509
  for (const name of collectionEdges)
7313
- this.onEdge(name);
7510
+ onEdge(name);
7314
7511
  // Generic instances queued by the bodies above lower here (an instance
7315
7512
  // body fires edges of its own and can queue further instances of
7316
7513
  // either kind — function instances and class instantiations drain to
@@ -7414,8 +7611,9 @@ export class Lowerer {
7414
7611
  // profile-mapped exports are called from outside the graph, so they
7415
7612
  // seed the worklist beside the init bodies. Unknown names are inert
7416
7613
  // (the export-map resolution reports them as SC4002 later).
7614
+ const rootEdge = this.onEdge;
7417
7615
  for (const root of extraRoots ?? [])
7418
- this.onEdge?.(root);
7616
+ rootEdge?.(root);
7419
7617
  const shuffle = lowerShuffle();
7420
7618
  const drainUnits = () => {
7421
7619
  while (queue.length > 0) {
@@ -7531,8 +7729,10 @@ export class Lowerer {
7531
7729
  /** Reachability hook (see emitReachable): fires when lowering resolves a
7532
7730
  * reference to a lowerable body. */
7533
7731
  noteEdge(name) {
7534
- if (this.onEdge)
7535
- this.onEdge(name);
7732
+ // Called as a plain function: the instance is not its receiver.
7733
+ const onEdge = this.onEdge;
7734
+ if (onEdge)
7735
+ onEdge(name);
7536
7736
  }
7537
7737
  /** A subclass constructor's super() edge: the base constructor runs, but
7538
7738
  * no instance of exactly the base class is created. */
@@ -7685,8 +7885,11 @@ export class Lowerer {
7685
7885
  }
7686
7886
  this.diags.push(d);
7687
7887
  }
7688
- unsupported(code, node, featureOverride, hintOverride) {
7689
- this.pushDiag(unsupportedDiag(code, locOf(node), featureOverride, hintOverride));
7888
+ unsupported(code, node, featureOverride, hintOverride, reason) {
7889
+ const diag = unsupportedDiag(code, locOf(node), featureOverride, hintOverride);
7890
+ if (reason !== undefined)
7891
+ diag.reason = reason;
7892
+ this.pushDiag(diag);
7690
7893
  throw new PoisonError();
7691
7894
  }
7692
7895
  externalHostFence(specifier, node, valueUse = true) {
@@ -7865,8 +8068,11 @@ export class Lowerer {
7865
8068
  * nothing lowers. Poisons the statement like every other rejection.
7866
8069
  * `sym`, when given, picks the wording: surface declared only by the
7867
8070
  * adopted @types/node is blamed at @types/node. */
7868
- noLowering(surface, node, hint, sym) {
7869
- this.pushDiag(noLoweringDiag(surface, locOf(node), hint, this.nodeTypesOnlySymbol(sym)));
8071
+ noLowering(surface, node, hint, sym, reason) {
8072
+ const diag = noLoweringDiag(surface, locOf(node), hint, this.nodeTypesOnlySymbol(sym));
8073
+ if (reason !== undefined)
8074
+ diag.reason = reason;
8075
+ this.pushDiag(diag);
7870
8076
  throw new PoisonError();
7871
8077
  }
7872
8078
  stdlibMemberFence(access) {
@@ -7923,8 +8129,23 @@ export class Lowerer {
7923
8129
  return symbol !== undefined && this.anySymbols.has(symbol);
7924
8130
  }
7925
8131
  typeOf(node) {
8132
+ if (ts.isIdentifier(node)) {
8133
+ const inferred = inferredCollectionType(this, node);
8134
+ if (inferred)
8135
+ return inferred;
8136
+ }
7926
8137
  if (this.anySymbols.size > 0 && this.readsAnySymbol(node))
7927
8138
  return this.checker.getAnyType();
8139
+ // A checked-dynamic argument that another overload could take at run
8140
+ // time leaves the resolved overload's return a guess, and JS bindings
8141
+ // initialized with that result hold whatever it was.
8142
+ if ((ts.isCallExpression(node) || ts.isNewExpression(node)) &&
8143
+ dynamicOverloadChoice(this, node))
8144
+ return this.checker.getAnyType();
8145
+ if (ts.isIdentifier(node) &&
8146
+ isJsSourceFile(ts.getSourceFileOfNode(node)) &&
8147
+ guessedOverloadIdentifier(this, node))
8148
+ return this.checker.getAnyType();
7928
8149
  if (ts.isPropertyAccessExpression(node) && isJsSourceFile(ts.getSourceFileOfNode(node))) {
7929
8150
  const receiver = node.expression.kind === ts.SyntaxKind.ThisKeyword && this.fnStack.length > 0
7930
8151
  ? this.resolveThis()?.type
@@ -8562,7 +8783,8 @@ export class Lowerer {
8562
8783
  // so its module binding is too (`ReleaseEmitter = EventEmitter` over
8563
8784
  // `const EventEmitter = require("events")`).
8564
8785
  if (expr.type.kind === "moduleNs" && isJsSourceFileName(expr.loc.file)) {
8565
- const object = moduleNamespaceObject(this, expr);
8786
+ const ns = expr;
8787
+ const object = moduleNamespaceObject(this, ns) ?? moduleNamespaceValue(this, ns);
8566
8788
  if (object)
8567
8789
  return object;
8568
8790
  }
@@ -8605,6 +8827,7 @@ export class Lowerer {
8605
8827
  // A builtin function's adapter boxes under the builtin's name, the
8606
8828
  // name Node's function carries (`[Function: randomUUID]`).
8607
8829
  const builtinName = expr.kind === "closure" ? this.builtinCallableValueNames.get(expr.fnName) : undefined;
8830
+ const builtinLength = expr.kind === "closure" ? this.builtinCallableValueLengths.get(expr.fnName) : undefined;
8608
8831
  return {
8609
8832
  kind: "dynFrom",
8610
8833
  value: expr,
@@ -8612,6 +8835,7 @@ export class Lowerer {
8612
8835
  loc: expr.loc,
8613
8836
  ...(liveRef ? { liveRef: true } : {}),
8614
8837
  ...(builtinName !== undefined ? { fnName: builtinName } : {}),
8838
+ ...(builtinLength !== undefined ? { fnLength: builtinLength } : {}),
8615
8839
  };
8616
8840
  }
8617
8841
  return expr;
@@ -9089,8 +9313,8 @@ export class Lowerer {
9089
9313
  unionRetagHelper(fromId, toId, loc, trappable) {
9090
9314
  return unionRetagHelper(this, fromId, toId, loc, trappable);
9091
9315
  }
9092
- narrowedArmHelper(fromId, target, loc) {
9093
- return narrowedArmHelper(this, fromId, target, loc);
9316
+ narrowedArmHelper(fromId, target, loc, message) {
9317
+ return narrowedArmHelper(this, fromId, target, loc, message);
9094
9318
  }
9095
9319
  checkedNarrowCall(helper, value, type, loc) {
9096
9320
  return checkedNarrowCall(this, helper, value, type, loc);
@@ -10365,10 +10589,13 @@ export class Lowerer {
10365
10589
  }
10366
10590
  /** Method-like members with their collected method-map names. Body
10367
10591
  * lowering omits abstract declarations; ABI analysis must include them
10368
- * because an abstract-typed call selects the same virtual slot. */
10369
- *classMethodMembers(info, includeAbstract = false) {
10592
+ * because an abstract-typed call selects the same virtual slot. An array,
10593
+ * not a generator: a generator's yielded values are dynamic values, which
10594
+ * would make every syntax node one. */
10595
+ classMethodMembers(info, includeAbstract = false) {
10596
+ const members = [];
10370
10597
  if (!info.decl)
10371
- return; // builtin error classes: runtime-provided bodies
10598
+ return members; // builtin error classes: runtime-provided bodies
10372
10599
  for (const member of info.decl.members.nodes) {
10373
10600
  const fnLike = ts.isMethodDeclaration(member) || ts.isGetAccessor(member) || ts.isSetAccessor(member)
10374
10601
  ? member
@@ -10395,8 +10622,9 @@ export class Lowerer {
10395
10622
  const signature = info.methods.get(mName);
10396
10623
  if (!signature || (!fnLike.body && !(includeAbstract && signature.abstract)))
10397
10624
  continue;
10398
- yield { mName, member: fnLike };
10625
+ members.push({ mName, member: fnLike });
10399
10626
  }
10627
+ return members;
10400
10628
  }
10401
10629
  lowerClassCtor(info) {
10402
10630
  return lowerClassCtor(this, info);
@@ -11192,11 +11420,28 @@ export class Lowerer {
11192
11420
  }
11193
11421
  /* ── expressions ──────────────────────────────────────────────────── */
11194
11422
  lowerExpr(expr) {
11423
+ if (this.speculatedClosures.size > 0) {
11424
+ const speculated = this.speculatedClosure(expr);
11425
+ if (speculated !== null) {
11426
+ this.speculatedClosures.delete(expr);
11427
+ return speculated;
11428
+ }
11429
+ }
11195
11430
  const streamValue = this.valueStreamReceivers.get(expr);
11196
11431
  if (streamValue)
11197
11432
  return valueStreamOf(varRef(streamValue.localId, streamValue.type, locOf(expr)));
11198
11433
  return this.stagedArgument(expr) ?? lowerExpr(this, expr);
11199
11434
  }
11435
+ /** The value storedImplicitArgumentType lowered for `expr` in the active
11436
+ * function and type bindings (speculatedClosures), or null. */
11437
+ speculatedClosure(expr) {
11438
+ const entry = this.speculatedClosures.get(expr);
11439
+ return entry !== undefined &&
11440
+ entry.ctx === this.ctx &&
11441
+ entry.bindings === this.typeParamBindings
11442
+ ? entry.value
11443
+ : null;
11444
+ }
11200
11445
  /** The saved value of a staged fs argument (stagedArguments, keyed
11201
11446
  * without type-only wrappers), or null for every other expression. */
11202
11447
  stagedArgument(node) {
@@ -11286,6 +11531,10 @@ export class Lowerer {
11286
11531
  expr.expression.name.text === "cache") {
11287
11532
  return lowerElementAccess(this, expr);
11288
11533
  }
11534
+ // `a?.[i]`: the optional chain tests the receiver's undefined arm and
11535
+ // lowers this access again inside its guard.
11536
+ if (expr.questionDotToken && !this.chainHandled.has(expr))
11537
+ return lowerElementAccess(this, expr);
11289
11538
  const receiver = this.runtimeOptionalIdentifierValue(expr.expression);
11290
11539
  const receiverValue = receiver && (receiver.present.kind === "array" || receiver.present.kind === "record")
11291
11540
  ? (() => {
@@ -11523,6 +11772,7 @@ export class Lowerer {
11523
11772
  lowerStaticBlobCall(this, expr) ??
11524
11773
  lowerWebCryptoCall(this, expr) ??
11525
11774
  lowerKeyObjectCall(this, expr) ??
11775
+ lowerX509Call(this, expr) ??
11526
11776
  lowerEcdhCall(this, expr) ??
11527
11777
  lowerDiffieHellmanCall(this, expr) ??
11528
11778
  lowerNetAddressCall(this, expr) ??
@@ -11587,14 +11837,20 @@ export class Lowerer {
11587
11837
  accessorCall(className, member, obj, extraArgs, ret, loc) {
11588
11838
  return accessorCall(this, className, member, obj, extraArgs, ret, loc);
11589
11839
  }
11590
- classIteratorOf(t) {
11591
- return classIteratorOf(this, t);
11840
+ classIteratorOf(t, options) {
11841
+ return classIteratorOf(this, t, options);
11842
+ }
11843
+ classIteratorReturnCall(cit, it, loc) {
11844
+ return classIteratorMethodCall(this, cit, "return", it, loc);
11592
11845
  }
11593
11846
  classIteratorOpenCall(cit, recv, loc) {
11594
11847
  return classIteratorOpenCall(this, cit, recv, loc);
11595
11848
  }
11596
- classIteratorNextCall(cit, itRef, loc) {
11597
- return classIteratorNextCall(this, cit, itRef, loc);
11849
+ classIteratorNextRead(cit, itRef, loc) {
11850
+ return classIteratorNextRead(this, cit, itRef, loc);
11851
+ }
11852
+ classIteratorNextCall(cit, itRef, next, loc) {
11853
+ return classIteratorNextCall(this, cit, itRef, next, loc);
11598
11854
  }
11599
11855
  classIteratorDrainCall(src, loc, elemT) {
11600
11856
  return classIteratorDrainCall(this, src, loc, elemT);
@@ -11853,7 +12109,7 @@ export class Lowerer {
11853
12109
  }
11854
12110
  if (ts.isPropertyAccessExpression(expr) &&
11855
12111
  !expr.questionDotToken &&
11856
- ts.isIdentifier(expr.expression)) {
12112
+ (ts.isIdentifier(expr.expression) || requireSpecOf(expr.expression) !== null)) {
11857
12113
  const outer = this.builtinNamespaceModuleOf(expr.expression);
11858
12114
  if (outer === null)
11859
12115
  return null;
@@ -12056,6 +12312,15 @@ export class Lowerer {
12056
12312
  if (builtinModuleFnOf(this, bi.module, bi.member)) {
12057
12313
  this.unsupported("SC1090", expr, `library functions as values (call '${ts.getTextOfNode(expr)}' directly)`);
12058
12314
  }
12315
+ // A member that is a supported module in its own right (`fs.promises`
12316
+ // is node:fs/promises, as in Node) reads as that module's namespace.
12317
+ {
12318
+ const sub = this.builtinNamespaceModuleOf(expr);
12319
+ if (sub !== null) {
12320
+ const type = { kind: "moduleNs", moduleId: `builtin:${sub}` };
12321
+ return { kind: "moduleNsRef", moduleId: type.moduleId, type, loc };
12322
+ }
12323
+ }
12059
12324
  this.noLowering(`${bi.module}.${bi.member}`, expr, builtinFenceHintOf(bi.module, bi.member), this.checker.getSymbolAtLocation(expr.name));
12060
12325
  }
12061
12326
  /** Materialize one explicitly value-callable table entry as an interned
@@ -12064,6 +12329,9 @@ export class Lowerer {
12064
12329
  * deliberately narrower than table membership because many table rows
12065
12330
  * are only dispatch sentinels for call-site-specific lowering. */
12066
12331
  lowerBuiltinCallableValue(bi, loc) {
12332
+ const assertion = assertFunctionValue(bi, loc);
12333
+ if (assertion)
12334
+ return assertion;
12067
12335
  if (bi.module === "util" && bi.member === "types")
12068
12336
  return utilTypesModuleValue(this, loc);
12069
12337
  if (bi.module === "util/types" && builtinModuleFnOf(this, bi.module, bi.member))
@@ -12080,6 +12348,9 @@ export class Lowerer {
12080
12348
  loc,
12081
12349
  };
12082
12350
  }
12351
+ // The buffer module's Buffer is the global constructor's value.
12352
+ if (bi.module === "buffer" && bi.member === "Buffer")
12353
+ return { kind: "libCall", fn: "buffer.constructor", args: [], type: DYN, loc };
12083
12354
  if (bi.module === "fs" && (bi.member === "realpathSync" || bi.member === "realpathSync.native"))
12084
12355
  return fsRealpathValue(this, bi.member === "realpathSync.native", loc);
12085
12356
  const fn = builtinModuleFnOf(this, bi.module, bi.member);
@@ -12109,6 +12380,8 @@ export class Lowerer {
12109
12380
  fnName = keyedHelperName(this, `%builtin.value.${fn.valueFn ?? fn.fn}`, key);
12110
12381
  this.builtinCallableValueFns.set(key, fnName);
12111
12382
  this.builtinCallableValueNames.set(fnName, display.slice(display.lastIndexOf(".") + 1));
12383
+ if (fn.valueLength !== undefined)
12384
+ this.builtinCallableValueLengths.set(fnName, fn.valueLength);
12112
12385
  const params = funcType.params.map((type, index) => ({
12113
12386
  localId: `arg.${index}`,
12114
12387
  name: `arg${index}`,