@scriptc/compiler 0.4.4 → 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 (775) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +198 -44
  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 +238 -20
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +11 -4
  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 +70 -1
  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 +65 -8
  50. package/dist/backend/llvm/dyn.js +375 -40
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emit-function.js +28 -8
  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 +58 -23
  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 +134 -13
  63. package/dist/backend/llvm/emitter.js +514 -87
  64. package/dist/backend/llvm/emitter.js.map +1 -1
  65. package/dist/backend/llvm/expr-bytes.d.ts +6 -4
  66. package/dist/backend/llvm/expr-bytes.js +31 -8
  67. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  68. package/dist/backend/llvm/expr-calls.js +13 -11
  69. package/dist/backend/llvm/expr-calls.js.map +1 -1
  70. package/dist/backend/llvm/expr-containers.d.ts +11 -0
  71. package/dist/backend/llvm/expr-containers.js +87 -9
  72. package/dist/backend/llvm/expr-containers.js.map +1 -1
  73. package/dist/backend/llvm/expr-context.d.ts +3 -0
  74. package/dist/backend/llvm/expr-control.js +83 -0
  75. package/dist/backend/llvm/expr-control.js.map +1 -1
  76. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  77. package/dist/backend/llvm/expr-dynamic.js +22 -4
  78. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  79. package/dist/backend/llvm/expr-primitives.js +107 -9
  80. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  81. package/dist/backend/llvm/expr-stream-bridges.js +95 -22
  82. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  83. package/dist/backend/llvm/forked-analysis.d.ts +8 -0
  84. package/dist/backend/llvm/forked-analysis.js +43 -0
  85. package/dist/backend/llvm/forked-analysis.js.map +1 -0
  86. package/dist/backend/llvm/integer-values.d.ts +7 -0
  87. package/dist/backend/llvm/integer-values.js +42 -2
  88. package/dist/backend/llvm/integer-values.js.map +1 -1
  89. package/dist/backend/llvm/integer-views.d.ts +2 -1
  90. package/dist/backend/llvm/integer-views.js +12 -1
  91. package/dist/backend/llvm/integer-views.js.map +1 -1
  92. package/dist/backend/llvm/js-ic.d.ts +4 -0
  93. package/dist/backend/llvm/js-ic.js +133 -15
  94. package/dist/backend/llvm/js-ic.js.map +1 -1
  95. package/dist/backend/llvm/layouts.d.ts +1 -0
  96. package/dist/backend/llvm/layouts.js.map +1 -1
  97. package/dist/backend/llvm/lazy-captures.d.ts +6 -1
  98. package/dist/backend/llvm/lazy-captures.js +10 -5
  99. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  100. package/dist/backend/llvm/lib-abi.d.ts +5 -0
  101. package/dist/backend/llvm/lib-abi.js +19 -0
  102. package/dist/backend/llvm/lib-abi.js.map +1 -1
  103. package/dist/backend/llvm/lib-dispatch.js +128 -42
  104. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  105. package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
  106. package/dist/backend/llvm/lib-filesystem.js +32 -0
  107. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  108. package/dist/backend/llvm/lib-http2.js +2 -2
  109. package/dist/backend/llvm/lib-http2.js.map +1 -1
  110. package/dist/backend/llvm/lib-network.js +2 -0
  111. package/dist/backend/llvm/lib-network.js.map +1 -1
  112. package/dist/backend/llvm/lib-process.js +11 -0
  113. package/dist/backend/llvm/lib-process.js.map +1 -1
  114. package/dist/backend/llvm/lib-shared.js +43 -0
  115. package/dist/backend/llvm/lib-shared.js.map +1 -1
  116. package/dist/backend/llvm/lib-tls.js +28 -3
  117. package/dist/backend/llvm/lib-tls.js.map +1 -1
  118. package/dist/backend/llvm/local-union-storage.test.js +2 -1
  119. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  120. package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
  121. package/dist/backend/llvm/loop-array-borrows.js +11 -5
  122. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  123. package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
  124. package/dist/backend/llvm/map-entry-fusion.js +20 -11
  125. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  126. package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
  127. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
  128. package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
  129. package/dist/backend/llvm/map-number-lookup.js +41 -9
  130. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  131. package/dist/backend/llvm/map-number-lookup.test.js +70 -2
  132. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  133. package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
  134. package/dist/backend/llvm/map-read-lifetimes.js +136 -6
  135. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  136. package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
  137. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  138. package/dist/backend/llvm/nullable-unions.d.ts +5 -0
  139. package/dist/backend/llvm/nullable-unions.js +29 -2
  140. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  141. package/dist/backend/llvm/nullable-unions.test.js +25 -1
  142. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  143. package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
  144. package/dist/backend/llvm/record-union-keys.test.js +161 -0
  145. package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
  146. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  147. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  148. package/dist/backend/llvm/shapes.d.ts +4 -5
  149. package/dist/backend/llvm/shapes.js +104 -51
  150. package/dist/backend/llvm/shapes.js.map +1 -1
  151. package/dist/backend/llvm/shapes.test.js +14 -2
  152. package/dist/backend/llvm/shapes.test.js.map +1 -1
  153. package/dist/backend/llvm/speculative-integers.d.ts +50 -3
  154. package/dist/backend/llvm/speculative-integers.js +411 -24
  155. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  156. package/dist/backend/llvm/speculative-integers.test.js +103 -1
  157. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  158. package/dist/backend/llvm/split.d.ts +10 -1
  159. package/dist/backend/llvm/split.js +243 -59
  160. package/dist/backend/llvm/split.js.map +1 -1
  161. package/dist/backend/llvm/split.test.js +92 -13
  162. package/dist/backend/llvm/split.test.js.map +1 -1
  163. package/dist/backend/llvm/stack-objects.test.js +3 -2
  164. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  165. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  166. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  167. package/dist/backend/llvm/string-reads.d.ts +13 -0
  168. package/dist/backend/llvm/string-reads.js +22 -0
  169. package/dist/backend/llvm/string-reads.js.map +1 -1
  170. package/dist/backend/llvm/string-slices.d.ts +36 -2
  171. package/dist/backend/llvm/string-slices.js +308 -12
  172. package/dist/backend/llvm/string-slices.js.map +1 -1
  173. package/dist/backend/llvm/string-slices.test.js +182 -3
  174. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  175. package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
  176. package/dist/backend/llvm/string-unit-versions.js +191 -0
  177. package/dist/backend/llvm/string-unit-versions.js.map +1 -0
  178. package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
  179. package/dist/backend/llvm/string-unit-versions.test.js +117 -0
  180. package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
  181. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
  182. package/dist/backend/llvm/test-boxed-unions.js +24 -8
  183. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  184. package/dist/backend/llvm/unwind-abi.d.ts +52 -0
  185. package/dist/backend/llvm/unwind-abi.js +498 -0
  186. package/dist/backend/llvm/unwind-abi.js.map +1 -0
  187. package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
  188. package/dist/backend/llvm/unwind-abi.test.js +255 -0
  189. package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
  190. package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
  191. package/dist/backend/llvm/wrapping-sums.js +31 -14
  192. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  193. package/dist/backend/loop-polls.d.ts +6 -0
  194. package/dist/backend/loop-polls.js +24 -0
  195. package/dist/backend/loop-polls.js.map +1 -1
  196. package/dist/backend/may-throw.js +8 -8
  197. package/dist/backend/may-throw.js.map +1 -1
  198. package/dist/backend/native/contracts.d.ts +12 -2
  199. package/dist/backend/native/executable.js +48 -6
  200. package/dist/backend/native/executable.js.map +1 -1
  201. package/dist/backend/native/library.js +4 -3
  202. package/dist/backend/native/library.js.map +1 -1
  203. package/dist/backend/native/program-shards.d.ts +2 -2
  204. package/dist/backend/native/program-shards.js +2 -2
  205. package/dist/backend/native/program-shards.js.map +1 -1
  206. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  207. package/dist/backend/native/runtime-inputs.js +4 -1
  208. package/dist/backend/native/runtime-inputs.js.map +1 -1
  209. package/dist/backend/native/vendor.d.ts +1 -1
  210. package/dist/backend/native/vendor.js +1 -1
  211. package/dist/backend/native/vendor.js.map +1 -1
  212. package/dist/backend/native-codegen.d.ts +3 -1
  213. package/dist/backend/native-codegen.js +4 -3
  214. package/dist/backend/native-codegen.js.map +1 -1
  215. package/dist/backend/native-link-info-core.d.ts +8 -0
  216. package/dist/backend/native-link-info-core.js.map +1 -1
  217. package/dist/backend/native-profile.d.ts +14 -0
  218. package/dist/backend/native-profile.js +28 -0
  219. package/dist/backend/native-profile.js.map +1 -1
  220. package/dist/backend/native-profile.test.js +8 -1
  221. package/dist/backend/native-profile.test.js.map +1 -1
  222. package/dist/backend/native-toolchain.test.js +11 -11
  223. package/dist/backend/native-toolchain.test.js.map +1 -1
  224. package/dist/backend/runtime-abi.d.ts +2 -2
  225. package/dist/backend/runtime-abi.js +2 -2
  226. package/dist/backend/runtime-pack-core.d.ts +3 -1
  227. package/dist/backend/runtime-pack-core.js +2 -0
  228. package/dist/backend/runtime-pack-core.js.map +1 -1
  229. package/dist/backend/runtime-pack-native.d.ts +17 -5
  230. package/dist/backend/runtime-pack-native.js +186 -14
  231. package/dist/backend/runtime-pack-native.js.map +1 -1
  232. package/dist/backend/runtime-pack-native.test.js +160 -3
  233. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  234. package/dist/backend/runtime-pack-targets.test.js +2 -1
  235. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  236. package/dist/backend/runtime-pack.test.js +2 -1
  237. package/dist/backend/runtime-pack.test.js.map +1 -1
  238. package/dist/backend/vendor-archives.d.ts +4 -1
  239. package/dist/backend/vendor-archives.js +78 -4
  240. package/dist/backend/vendor-archives.js.map +1 -1
  241. package/dist/backend/vendor-inputs.d.ts +3 -1
  242. package/dist/backend/vendor-inputs.js +3 -1
  243. package/dist/backend/vendor-inputs.js.map +1 -1
  244. package/dist/backend/warm-cache.js +1 -0
  245. package/dist/backend/warm-cache.js.map +1 -1
  246. package/dist/cli/command.js +78 -11
  247. package/dist/cli/command.js.map +1 -1
  248. package/dist/cli/usage.d.ts +22 -1
  249. package/dist/cli/usage.js +33 -3
  250. package/dist/cli/usage.js.map +1 -1
  251. package/dist/compat/fetch-profile.d.ts +15 -6
  252. package/dist/compat/fetch-profile.js +519 -498
  253. package/dist/compat/fetch-profile.js.map +1 -1
  254. package/dist/compile-types.d.ts +7 -0
  255. package/dist/contracts/int32-elements.js +2 -1
  256. package/dist/contracts/int32-elements.js.map +1 -1
  257. package/dist/coverage/report.d.ts +14 -3
  258. package/dist/coverage/report.js +216 -0
  259. package/dist/coverage/report.js.map +1 -1
  260. package/dist/coverage/surface-manifest.js +25 -25
  261. package/dist/coverage/surface-manifest.js.map +1 -1
  262. package/dist/coverage/verdict-cache.d.ts +2 -0
  263. package/dist/coverage/verdict-cache.js +10 -1
  264. package/dist/coverage/verdict-cache.js.map +1 -1
  265. package/dist/diagnostics/diagnostic.d.ts +19 -0
  266. package/dist/diagnostics/diagnostic.js +52 -1
  267. package/dist/diagnostics/diagnostic.js.map +1 -1
  268. package/dist/diagnostics/envelope.d.ts +54 -0
  269. package/dist/diagnostics/envelope.js +7 -1
  270. package/dist/diagnostics/envelope.js.map +1 -1
  271. package/dist/diagnostics/render.d.ts +7 -0
  272. package/dist/diagnostics/render.js +15 -4
  273. package/dist/diagnostics/render.js.map +1 -1
  274. package/dist/executable/executable-cache.d.ts +3 -0
  275. package/dist/executable/executable-cache.js +1 -0
  276. package/dist/executable/executable-cache.js.map +1 -1
  277. package/dist/executable/executable-cache.test.js +1 -0
  278. package/dist/executable/executable-cache.test.js.map +1 -1
  279. package/dist/executable/prepare.js +5 -1
  280. package/dist/executable/prepare.js.map +1 -1
  281. package/dist/frontend/analysis.js +26 -2
  282. package/dist/frontend/analysis.js.map +1 -1
  283. package/dist/frontend/fork-target.js +67 -1
  284. package/dist/frontend/fork-target.js.map +1 -1
  285. package/dist/frontend/fork-target.test.js +43 -0
  286. package/dist/frontend/fork-target.test.js.map +1 -1
  287. package/dist/frontend/input-tracker.d.ts +4 -1
  288. package/dist/frontend/input-tracker.js +42 -4
  289. package/dist/frontend/input-tracker.js.map +1 -1
  290. package/dist/frontend/input-tracker.test.js +45 -0
  291. package/dist/frontend/input-tracker.test.js.map +1 -1
  292. package/dist/frontend/lowering/abstract-equality.js +38 -1
  293. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  294. package/dist/frontend/lowering/argument-counts.d.ts +36 -0
  295. package/dist/frontend/lowering/argument-counts.js +201 -0
  296. package/dist/frontend/lowering/argument-counts.js.map +1 -0
  297. package/dist/frontend/lowering/array-values.d.ts +27 -0
  298. package/dist/frontend/lowering/array-values.js +112 -0
  299. package/dist/frontend/lowering/array-values.js.map +1 -1
  300. package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
  301. package/dist/frontend/lowering/binding-analysis.js +9 -3
  302. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  303. package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
  304. package/dist/frontend/lowering/builtin-namespaces.js +238 -0
  305. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
  306. package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
  307. package/dist/frontend/lowering/builtins/compression.js +86 -5
  308. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  309. package/dist/frontend/lowering/builtins/date-classes.js +17 -1
  310. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
  311. package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
  312. package/dist/frontend/lowering/builtins/dates.js +159 -8
  313. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  314. package/dist/frontend/lowering/builtins/filesystem-calls.js +26 -1
  315. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  316. package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
  317. package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
  318. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  319. package/dist/frontend/lowering/builtins/json.d.ts +4 -1
  320. package/dist/frontend/lowering/builtins/json.js +9 -3
  321. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  322. package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
  323. package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
  324. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  325. package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
  326. package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
  327. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  328. package/dist/frontend/lowering/builtins/promises.js +144 -1
  329. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  330. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  331. package/dist/frontend/lowering/builtins/readline.js +22 -11
  332. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  333. package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
  334. package/dist/frontend/lowering/builtins/reflection.js +41 -1
  335. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  336. package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
  337. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  338. package/dist/frontend/lowering/builtins/webassembly.js +4 -1
  339. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  340. package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
  341. package/dist/frontend/lowering/builtins/x509.js +431 -0
  342. package/dist/frontend/lowering/builtins/x509.js.map +1 -0
  343. package/dist/frontend/lowering/call-arguments.js +44 -0
  344. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  345. package/dist/frontend/lowering/call-signatures.js +1 -1
  346. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  347. package/dist/frontend/lowering/cjs-inline-require.js +1 -1
  348. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  349. package/dist/frontend/lowering/class-attributes.d.ts +7 -0
  350. package/dist/frontend/lowering/class-attributes.js +52 -10
  351. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  352. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +13 -0
  353. package/dist/frontend/lowering/class-dynamic-dispatch.js +174 -9
  354. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  355. package/dist/frontend/lowering/class-method-mutations.js +43 -8
  356. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  357. package/dist/frontend/lowering/class-method-values.js +71 -1
  358. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  359. package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
  360. package/dist/frontend/lowering/class-prototypes.js +83 -2
  361. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  362. package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
  363. package/dist/frontend/lowering/class-to-primitive.js +79 -7
  364. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  365. package/dist/frontend/lowering/coercions/state.d.ts +1 -0
  366. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  367. package/dist/frontend/lowering/coercions/structural.js +89 -10
  368. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  369. package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
  370. package/dist/frontend/lowering/coercions/unions.js +13 -6
  371. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  372. package/dist/frontend/lowering/containers/array-callbacks.js +51 -15
  373. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  374. package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
  375. package/dist/frontend/lowering/containers/array-construction.js +102 -9
  376. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  377. package/dist/frontend/lowering/containers/array-methods.js +85 -5
  378. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  379. package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
  380. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  381. package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
  382. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  383. package/dist/frontend/lowering/containers/collection-methods.js +12 -0
  384. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  385. package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
  386. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  387. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
  388. package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
  389. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  390. package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
  391. package/dist/frontend/lowering/containers/replacer-params.js +294 -0
  392. package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
  393. package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
  394. package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
  395. package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
  396. package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
  397. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  398. package/dist/frontend/lowering/containers/string-replacement.js +7 -3
  399. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  400. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
  401. package/dist/frontend/lowering/cycle-initialization.js +4 -1
  402. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  403. package/dist/frontend/lowering/date-values.d.ts +9 -6
  404. package/dist/frontend/lowering/date-values.js +63 -16
  405. package/dist/frontend/lowering/date-values.js.map +1 -1
  406. package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
  407. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  408. package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
  409. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  410. package/dist/frontend/lowering/dispatch-sites.js +1 -0
  411. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  412. package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
  413. package/dist/frontend/lowering/expressions/array-literals.js +119 -26
  414. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  415. package/dist/frontend/lowering/expressions/binary.js +38 -0
  416. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  417. package/dist/frontend/lowering/expressions/element-access.js +50 -6
  418. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  419. package/dist/frontend/lowering/expressions/identifiers.js +35 -3
  420. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  421. package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
  422. package/dist/frontend/lowering/expressions/narrowing.js +8 -1
  423. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  424. package/dist/frontend/lowering/expressions/object-literals.js +8 -2
  425. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  426. package/dist/frontend/lowering/expressions/property-access.js +65 -34
  427. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  428. package/dist/frontend/lowering/expressions/relational.js +76 -11
  429. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  430. package/dist/frontend/lowering/expressions/typeof.js +6 -1
  431. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  432. package/dist/frontend/lowering/expressions/updates.js +20 -11
  433. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  434. package/dist/frontend/lowering/f64-handles.d.ts +8 -0
  435. package/dist/frontend/lowering/f64-handles.js +16 -0
  436. package/dist/frontend/lowering/f64-handles.js.map +1 -0
  437. package/dist/frontend/lowering/frozen-records.d.ts +5 -0
  438. package/dist/frontend/lowering/frozen-records.js +12 -4
  439. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  440. package/dist/frontend/lowering/function-context.d.ts +3 -0
  441. package/dist/frontend/lowering/function-context.js.map +1 -1
  442. package/dist/frontend/lowering/function-returns.js +15 -0
  443. package/dist/frontend/lowering/function-returns.js.map +1 -1
  444. package/dist/frontend/lowering/generic-functions.js +17 -6
  445. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  446. package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
  447. package/dist/frontend/lowering/instantiation-path.js.map +1 -1
  448. package/dist/frontend/lowering/instantiation-path.test.js +6 -4
  449. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
  450. package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
  451. package/dist/frontend/lowering/iterator-adapters.js +26 -33
  452. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  453. package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
  454. package/dist/frontend/lowering/js-collection-types.js +490 -0
  455. package/dist/frontend/lowering/js-collection-types.js.map +1 -0
  456. package/dist/frontend/lowering/lib-boundary.js +2 -2
  457. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  458. package/dist/frontend/lowering/lower-assert.d.ts +14 -0
  459. package/dist/frontend/lowering/lower-assert.js +283 -26
  460. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  461. package/dist/frontend/lowering/lower-builtin-values.js +3 -3
  462. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  463. package/dist/frontend/lowering/lower-calls.js +97 -7
  464. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  465. package/dist/frontend/lowering/lower-classes.d.ts +59 -7
  466. package/dist/frontend/lowering/lower-classes.js +647 -176
  467. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  468. package/dist/frontend/lowering/lower-console.js +2 -1
  469. package/dist/frontend/lowering/lower-console.js.map +1 -1
  470. package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
  471. package/dist/frontend/lowering/lower-exprs.js +52 -5
  472. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  473. package/dist/frontend/lowering/lower-functions.js +7 -0
  474. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  475. package/dist/frontend/lowering/lower-generators.js +4 -3
  476. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  477. package/dist/frontend/lowering/lower-inspect.js +264 -46
  478. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  479. package/dist/frontend/lowering/lower-modules.js +28 -17
  480. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  481. package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
  482. package/dist/frontend/lowering/lower-namespaces.js +44 -1
  483. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  484. package/dist/frontend/lowering/lower-node-module.js +1 -1
  485. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  486. package/dist/frontend/lowering/lower-server.js +126 -32
  487. package/dist/frontend/lowering/lower-server.js.map +1 -1
  488. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
  489. package/dist/frontend/lowering/lower-stdlib.js +51 -37
  490. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  491. package/dist/frontend/lowering/lower-stmts.js +294 -46
  492. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  493. package/dist/frontend/lowering/lower-stream.js +515 -121
  494. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  495. package/dist/frontend/lowering/lowerer.d.ts +52 -10
  496. package/dist/frontend/lowering/lowerer.js +249 -37
  497. package/dist/frontend/lowering/lowerer.js.map +1 -1
  498. package/dist/frontend/lowering/lowerer.test.js +1 -1
  499. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  500. package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
  501. package/dist/frontend/lowering/module-namespace-elements.js +118 -1
  502. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  503. package/dist/frontend/lowering/private-brands.d.ts +5 -0
  504. package/dist/frontend/lowering/private-brands.js +39 -0
  505. package/dist/frontend/lowering/private-brands.js.map +1 -1
  506. package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
  507. package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
  508. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  509. package/dist/frontend/lowering/sanitize-class-types.js +2 -0
  510. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  511. package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
  512. package/dist/frontend/lowering/site-dependencies.js +0 -15
  513. package/dist/frontend/lowering/site-dependencies.js.map +1 -1
  514. package/dist/frontend/lowering/site-dependencies.test.js +7 -5
  515. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
  516. package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
  517. package/dist/frontend/lowering/string-index-bounds.js +21 -7
  518. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  519. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  520. package/dist/frontend/lowering/surfaces.js +1576 -1539
  521. package/dist/frontend/lowering/surfaces.js.map +1 -1
  522. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  523. package/dist/frontend/lowering/symbol-fields.js +45 -2
  524. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  525. package/dist/frontend/lowering/union-narrow.d.ts +5 -2
  526. package/dist/frontend/lowering/union-narrow.js +6 -3
  527. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  528. package/dist/frontend/lowering/union-narrow.test.js +10 -0
  529. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  530. package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
  531. package/dist/frontend/npm-static-namespace-defaults.js +163 -0
  532. package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
  533. package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
  534. package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
  535. package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
  536. package/dist/frontend/npm-static-prune.js +152 -111
  537. package/dist/frontend/npm-static-prune.js.map +1 -1
  538. package/dist/frontend/npm-static.js +35 -32
  539. package/dist/frontend/npm-static.js.map +1 -1
  540. package/dist/frontend/package-shims.d.ts +7 -4
  541. package/dist/frontend/package-shims.js +39 -40
  542. package/dist/frontend/package-shims.js.map +1 -1
  543. package/dist/frontend/pipeline-native.d.ts +2 -2
  544. package/dist/frontend/pipeline-native.js +2 -2
  545. package/dist/frontend/pipeline-native.js.map +1 -1
  546. package/dist/frontend/pipeline.d.ts +19 -2
  547. package/dist/frontend/pipeline.js +102 -11
  548. package/dist/frontend/pipeline.js.map +1 -1
  549. package/dist/frontend/program-analysis.d.ts +2 -0
  550. package/dist/frontend/program-analysis.js +3 -0
  551. package/dist/frontend/program-analysis.js.map +1 -1
  552. package/dist/frontend/program.d.ts +15 -0
  553. package/dist/frontend/program.js +227 -64
  554. package/dist/frontend/program.js.map +1 -1
  555. package/dist/frontend/resolve.d.ts +2 -0
  556. package/dist/frontend/resolve.js +5 -0
  557. package/dist/frontend/resolve.js.map +1 -1
  558. package/dist/frontend/services.d.ts +3 -0
  559. package/dist/frontend/services.js +31 -4
  560. package/dist/frontend/services.js.map +1 -1
  561. package/dist/frontend/shape-inference/analyze.d.ts +93 -0
  562. package/dist/frontend/shape-inference/analyze.js +3138 -0
  563. package/dist/frontend/shape-inference/analyze.js.map +1 -0
  564. package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
  565. package/dist/frontend/shape-inference/constant-graphs.js +357 -0
  566. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
  567. package/dist/frontend/shape-inference/domain.d.ts +32 -0
  568. package/dist/frontend/shape-inference/domain.js +104 -0
  569. package/dist/frontend/shape-inference/domain.js.map +1 -0
  570. package/dist/frontend/shape-inference/index.d.ts +7 -0
  571. package/dist/frontend/shape-inference/index.js +19 -0
  572. package/dist/frontend/shape-inference/index.js.map +1 -0
  573. package/dist/frontend/shape-inference/report.d.ts +21 -0
  574. package/dist/frontend/shape-inference/report.js +348 -0
  575. package/dist/frontend/shape-inference/report.js.map +1 -0
  576. package/dist/frontend/token-equivalence.d.ts +6 -0
  577. package/dist/frontend/token-equivalence.js +66 -9
  578. package/dist/frontend/token-equivalence.js.map +1 -1
  579. package/dist/frontend/token-equivalence.test.js +33 -1
  580. package/dist/frontend/token-equivalence.test.js.map +1 -1
  581. package/dist/frontend/ts7/checker-features.d.ts +15 -0
  582. package/dist/frontend/ts7/checker-features.js +45 -0
  583. package/dist/frontend/ts7/checker-features.js.map +1 -0
  584. package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
  585. package/dist/frontend/ts7/checker-features.test.js +40 -0
  586. package/dist/frontend/ts7/checker-features.test.js.map +1 -0
  587. package/dist/frontend/ts7/checker-server.d.ts +19 -0
  588. package/dist/frontend/ts7/checker-server.js +46 -0
  589. package/dist/frontend/ts7/checker-server.js.map +1 -0
  590. package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
  591. package/dist/frontend/ts7/checker-server.test.js +38 -0
  592. package/dist/frontend/ts7/checker-server.test.js.map +1 -0
  593. package/dist/frontend/ts7/lib-diagnostics.js +39 -13
  594. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  595. package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
  596. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  597. package/dist/frontend/ts7/native-api.d.ts +1 -0
  598. package/dist/frontend/ts7/native-api.js +25 -2
  599. package/dist/frontend/ts7/native-api.js.map +1 -1
  600. package/dist/frontend/ts7/native-process.d.ts +9 -2
  601. package/dist/frontend/ts7/native-process.js +22 -4
  602. package/dist/frontend/ts7/native-process.js.map +1 -1
  603. package/dist/frontend/ts7/program-host.d.ts +11 -0
  604. package/dist/frontend/ts7/program-host.js +36 -22
  605. package/dist/frontend/ts7/program-host.js.map +1 -1
  606. package/dist/frontend/ts7/semantic-json.d.ts +9 -0
  607. package/dist/frontend/ts7/semantic-json.js +25 -5
  608. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  609. package/dist/frontend/ts7/semantic-model.js +3 -1
  610. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  611. package/dist/frontend/ts7/source-parser.js +3 -1
  612. package/dist/frontend/ts7/source-parser.js.map +1 -1
  613. package/dist/frontend/tsc-codes.js +10 -0
  614. package/dist/frontend/tsc-codes.js.map +1 -1
  615. package/dist/frontend/type-mapper.d.ts +18 -6
  616. package/dist/frontend/type-mapper.js +160 -28
  617. package/dist/frontend/type-mapper.js.map +1 -1
  618. package/dist/index.d.ts +44 -3
  619. package/dist/index.js +27 -8
  620. package/dist/index.js.map +1 -1
  621. package/dist/ir/builtin-effects.js +29 -0
  622. package/dist/ir/builtin-effects.js.map +1 -1
  623. package/dist/ir/builtin-signatures.d.ts +7 -2
  624. package/dist/ir/builtin-signatures.js +5104 -4950
  625. package/dist/ir/builtin-signatures.js.map +1 -1
  626. package/dist/ir/callback-specialization.d.ts +4 -2
  627. package/dist/ir/callback-specialization.js +24 -9
  628. package/dist/ir/callback-specialization.js.map +1 -1
  629. package/dist/ir/capture-values.js +4 -2
  630. package/dist/ir/capture-values.js.map +1 -1
  631. package/dist/ir/char-unit-locals.d.ts +12 -2
  632. package/dist/ir/char-unit-locals.js +400 -58
  633. package/dist/ir/char-unit-locals.js.map +1 -1
  634. package/dist/ir/char-unit-locals.test.js +111 -0
  635. package/dist/ir/char-unit-locals.test.js.map +1 -1
  636. package/dist/ir/constant-globals.js +18 -4
  637. package/dist/ir/constant-globals.js.map +1 -1
  638. package/dist/ir/expression-inlining.d.ts +15 -0
  639. package/dist/ir/expression-inlining.js +166 -0
  640. package/dist/ir/expression-inlining.js.map +1 -0
  641. package/dist/ir/expression-inlining.test.d.ts +1 -0
  642. package/dist/ir/expression-inlining.test.js +123 -0
  643. package/dist/ir/expression-inlining.test.js.map +1 -0
  644. package/dist/ir/function-references.js +2 -0
  645. package/dist/ir/function-references.js.map +1 -1
  646. package/dist/ir/function-references.test.js +6 -0
  647. package/dist/ir/function-references.test.js.map +1 -1
  648. package/dist/ir/int32-arrays.d.ts +27 -6
  649. package/dist/ir/int32-arrays.js +106 -18
  650. package/dist/ir/int32-arrays.js.map +1 -1
  651. package/dist/ir/int32-slots.d.ts +26 -1
  652. package/dist/ir/int32-slots.js +284 -5
  653. package/dist/ir/int32-slots.js.map +1 -1
  654. package/dist/ir/int32-slots.test.js +5 -0
  655. package/dist/ir/int32-slots.test.js.map +1 -1
  656. package/dist/ir/integer-loop-facts.d.ts +5 -0
  657. package/dist/ir/integer-loop-facts.js +90 -1
  658. package/dist/ir/integer-loop-facts.js.map +1 -1
  659. package/dist/ir/integer-loops.d.ts +14 -1
  660. package/dist/ir/integer-loops.js +93 -7
  661. package/dist/ir/integer-loops.js.map +1 -1
  662. package/dist/ir/integer-loops.test.js +70 -0
  663. package/dist/ir/integer-loops.test.js.map +1 -1
  664. package/dist/ir/integer-ranges.js +18 -2
  665. package/dist/ir/integer-ranges.js.map +1 -1
  666. package/dist/ir/integer-ranges.test.js +64 -4
  667. package/dist/ir/integer-ranges.test.js.map +1 -1
  668. package/dist/ir/ir.d.ts +50 -8
  669. package/dist/ir/ir.js +38 -12
  670. package/dist/ir/ir.js.map +1 -1
  671. package/dist/ir/js-ic.d.ts +25 -5
  672. package/dist/ir/js-ic.js +93 -13
  673. package/dist/ir/js-ic.js.map +1 -1
  674. package/dist/ir/js-ic.test.js +153 -0
  675. package/dist/ir/js-ic.test.js.map +1 -1
  676. package/dist/ir/node-index.d.ts +7 -0
  677. package/dist/ir/node-index.js +32 -0
  678. package/dist/ir/node-index.js.map +1 -1
  679. package/dist/ir/receiver-readers.d.ts +6 -1
  680. package/dist/ir/receiver-readers.js +53 -28
  681. package/dist/ir/receiver-readers.js.map +1 -1
  682. package/dist/ir/row-pairs.d.ts +15 -0
  683. package/dist/ir/row-pairs.js +373 -0
  684. package/dist/ir/row-pairs.js.map +1 -0
  685. package/dist/ir/row-pairs.test.d.ts +1 -0
  686. package/dist/ir/row-pairs.test.js +129 -0
  687. package/dist/ir/row-pairs.test.js.map +1 -0
  688. package/dist/ir/runtime-features.d.ts +17 -4
  689. package/dist/ir/runtime-features.js +69 -12
  690. package/dist/ir/runtime-features.js.map +1 -1
  691. package/dist/ir/scalar-records.d.ts +15 -0
  692. package/dist/ir/scalar-records.js +301 -1
  693. package/dist/ir/scalar-records.js.map +1 -1
  694. package/dist/ir/scalar-records.test.js +181 -1
  695. package/dist/ir/scalar-records.test.js.map +1 -1
  696. package/dist/ir/self-captures.js +8 -0
  697. package/dist/ir/self-captures.js.map +1 -1
  698. package/dist/ir/validate.js +37 -28
  699. package/dist/ir/validate.js.map +1 -1
  700. package/dist/library/fence-eval.js +4 -4
  701. package/dist/library/fence-eval.js.map +1 -1
  702. package/dist/library/ir-policy.js +4 -0
  703. package/dist/library/ir-policy.js.map +1 -1
  704. package/dist/library/library-cache.d.ts +1 -0
  705. package/dist/library/library-cache.js +1 -0
  706. package/dist/library/library-cache.js.map +1 -1
  707. package/dist/library/library-cache.test.js +13 -0
  708. package/dist/library/library-cache.test.js.map +1 -1
  709. package/dist/native/cache.d.ts +5 -1
  710. package/dist/native/cache.js +15 -3
  711. package/dist/native/cache.js.map +1 -1
  712. package/dist/native/cli.js +6 -0
  713. package/dist/native/cli.js.map +1 -1
  714. package/dist/native/compiler.d.ts +3 -0
  715. package/dist/native/compiler.js +72 -26
  716. package/dist/native/compiler.js.map +1 -1
  717. package/dist/native/compiler.test.js +87 -2
  718. package/dist/native/compiler.test.js.map +1 -1
  719. package/dist/native/executable-cache-open.test.d.ts +1 -0
  720. package/dist/native/executable-cache-open.test.js +80 -0
  721. package/dist/native/executable-cache-open.test.js.map +1 -0
  722. package/dist/native/executable-cache.d.ts +43 -3
  723. package/dist/native/executable-cache.js +177 -36
  724. package/dist/native/executable-cache.js.map +1 -1
  725. package/dist/native/executable-cache.test.js +103 -0
  726. package/dist/native/executable-cache.test.js.map +1 -1
  727. package/dist/native/prepare.js +38 -16
  728. package/dist/native/prepare.js.map +1 -1
  729. package/dist/native/prepare.test.js +51 -1
  730. package/dist/native/prepare.test.js.map +1 -1
  731. package/dist/native/sanitizer.d.ts +1 -1
  732. package/dist/native/sanitizer.js +17 -3
  733. package/dist/native/sanitizer.js.map +1 -1
  734. package/dist/native/sanitizer.test.js +4 -0
  735. package/dist/native/sanitizer.test.js.map +1 -1
  736. package/dist/node-islands/classify.d.ts +14 -0
  737. package/dist/node-islands/classify.js +114 -0
  738. package/dist/node-islands/classify.js.map +1 -0
  739. package/dist/node-islands/detect.d.ts +13 -0
  740. package/dist/node-islands/detect.js +805 -0
  741. package/dist/node-islands/detect.js.map +1 -0
  742. package/dist/node-islands/detect.test.d.ts +1 -0
  743. package/dist/node-islands/detect.test.js +136 -0
  744. package/dist/node-islands/detect.test.js.map +1 -0
  745. package/dist/node-islands/origin.d.ts +21 -0
  746. package/dist/node-islands/origin.js +60 -0
  747. package/dist/node-islands/origin.js.map +1 -0
  748. package/dist/node-islands/policy.d.ts +49 -0
  749. package/dist/node-islands/policy.js +130 -0
  750. package/dist/node-islands/policy.js.map +1 -0
  751. package/dist/node-islands/report.d.ts +22 -0
  752. package/dist/node-islands/report.js +326 -0
  753. package/dist/node-islands/report.js.map +1 -0
  754. package/dist/node-islands/report.test.d.ts +1 -0
  755. package/dist/node-islands/report.test.js +228 -0
  756. package/dist/node-islands/report.test.js.map +1 -0
  757. package/dist/node-islands/rules.d.ts +20 -0
  758. package/dist/node-islands/rules.js +91 -0
  759. package/dist/node-islands/rules.js.map +1 -0
  760. package/dist/node-islands/scan.d.ts +53 -0
  761. package/dist/node-islands/scan.js +104 -0
  762. package/dist/node-islands/scan.js.map +1 -0
  763. package/dist/node-islands/summary.d.ts +78 -0
  764. package/dist/node-islands/summary.js +26 -0
  765. package/dist/node-islands/summary.js.map +1 -0
  766. package/dist/project-config.d.ts +50 -0
  767. package/dist/project-config.js +372 -0
  768. package/dist/project-config.js.map +1 -0
  769. package/dist/project-config.test.d.ts +1 -0
  770. package/dist/project-config.test.js +154 -0
  771. package/dist/project-config.test.js.map +1 -0
  772. package/dist/wasm/discover.js +6 -31
  773. package/dist/wasm/discover.js.map +1 -1
  774. package/package.json +20 -20
  775. package/surface-manifest.json +20 -35
@@ -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";
@@ -35,6 +35,7 @@ import { discoverWasmModules } from "../../wasm/discover.js";
35
35
  import { encodeBase64 } from "../../wasm/base64.js";
36
36
  import { resolveRequireRuntime } from "../runtime-resolve.js";
37
37
  import { lowerKeyObjectCall } from "./builtins/key-object.js";
38
+ import { lowerX509Call, refuseX509DynValues } from "./builtins/x509.js";
38
39
  import { isEcdhType, lowerEcdhCall } from "./builtins/ecdh.js";
39
40
  import { isDiffieHellmanType, lowerDiffieHellmanCall } from "./builtins/dh.js";
40
41
  import { fenceWebCryptoMember, lowerWebCryptoCall } from "./builtins/webcrypto.js";
@@ -71,7 +72,8 @@ import { InternalCompilerError } from "../../errors.js";
71
72
  import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "./optional-arguments.js";
72
73
  import {} from "./class-protocol-dispatch.js";
73
74
  import { ClassDynamicDispatch, boxClassInstancesExactly, trackClassFieldCreation, } from "./class-dynamic-dispatch.js";
74
- import { guardClassAttributeWrites } from "./class-attributes.js";
75
+ import { addUntypedIntegrityWords, guardClassAttributeWrites } from "./class-attributes.js";
76
+ import { inferredCollectionType } from "./js-collection-types.js";
75
77
  import { guardFrozenWrites, markSloppyRecordWrites } from "./frozen-records.js";
76
78
  import { applyHandleProperties } from "./handle-properties.js";
77
79
  import { installBufferValue } from "./containers/bytes.js";
@@ -112,7 +114,7 @@ import { discriminantOwners, literalUnionArm } from "../union-discriminants.js";
112
114
  import { unsupportedAnyOperationDiag, blockedBindingUseDiag, checkerPanicDiag, componentTypeDiag, isCheckerPanic, genericSignatureTypeDiag, indexSignatureTypeDiag, intersectionTypeDiag, noLoweringDiag, overloadedSignatureTypeDiag, recordShapeMismatchDiag, unsupportedNativeApiDiag, unsupportedPackageValueDiag, unionMismatchDiag, UNSUPPORTED, unsupportedDiag, unsupportedTypeDiag, } from "../../diagnostics/diagnostic.js";
113
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";
114
116
  import { provenanceActive } from "../provenance-registry.js";
115
- 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";
116
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";
117
119
  import { builtinConstLit, builtinModuleConstOf, builtinModulesArrayLit, builtinFenceHintOf, builtinModuleFnOf, stdlibMemberFence, isStdlibMember, isStdlibSymbol, isStdlibGlobal, stdlibGlobalNameOf, stdlibGlobalMember, nodeTypesOnlySymbol, } from "./surfaces.js";
118
120
  import { builtinClassAliasOf, runtimeClassValueOfType, } from "./builtins/class-values.js";
@@ -122,7 +124,7 @@ import { cjsNamespaceModule, cjsWholeExportValueOf, inlineNamespaceRequireOf, in
122
124
  import { tscInteropModuleOf } from "./cjs-tsc-interop.js";
123
125
  import { usesCjsExportsIdentity } from "./cjs-exports-object.js";
124
126
  import { registerBuiltinEventTargetClasses } from "./lower-event-target.js";
125
- 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";
126
128
  import { mixinCallClassInfoOf, mixinIntersectionInstanceType, } from "./lower-mixins.js";
127
129
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
128
130
  import { funcTypeFromParamShapes, isThisParameter, paramShape, paramShapes, checkDefaultParamBodyType, requireExactArityValue, collectSignature, collectSignatureInner, lambdaSignature, } from "./call-signatures.js";
@@ -176,7 +178,7 @@ import { fenceFetchObjectAssignment, fenceFetchObjectBinding, fenceStaticAbortCo
176
178
  import { lowerHttpHeadersElement, lowerNetModuleCall, lowerServerMethodCall, lowerServerProperty, lowerTlsRootCertificates, } from "./lower-server.js";
177
179
  import { lowerDgramDnsModuleCall, lowerDgramMethodCall } from "./lower-dgram.js";
178
180
  import { lowerNodeTestModuleCall, lowerTestDirectCall, lowerTestMethodCall, lowerTestCtxProperty, } from "./lower-test.js";
179
- import { lowerAssertModuleCall, lowerAssertDirectCall } from "./lower-assert.js";
181
+ import { assertFunctionValue, lowerAssertModuleCall, lowerAssertDirectCall, } from "./lower-assert.js";
180
182
  import { lowerUtilModuleCall } from "./lower-inspect.js";
181
183
  import { lowerSystemErrorMapValue } from "./lower-system-errors.js";
182
184
  import { lowerComptime, comptimeBakeable, rejectComptimeCaptures, comptimeValueToIr, } from "./lower-comptime.js";
@@ -1584,6 +1586,9 @@ export class Lowerer {
1584
1586
  * Date's time value instead of a Date object (date-values.ts). */
1585
1587
  timeValueDateDecisions = new Map();
1586
1588
  timeValueDateLocals = new Set();
1589
+ /** Declarations of those locals that a setter call writes
1590
+ * (date-values.ts). */
1591
+ timeValueDateWrites = new Set();
1587
1592
  /** Record bindings whose flow class reaches storage outside the class:
1588
1593
  * they keep the declared layout, so an initializer from unchecked reads
1589
1594
  * converts once instead of the binding adopting the widened variant. */
@@ -1592,6 +1597,9 @@ export class Lowerer {
1592
1597
  * every name destructured from a present source optional. */
1593
1598
  runtimeOptionalPatternTypes = new Map();
1594
1599
  runtimeOptionalReduceTypes = new Map();
1600
+ /** Each function declaration's `arguments.length` count slot, or null
1601
+ * (argument-counts.ts argumentCountSlot). */
1602
+ argumentCountSlots = new Map();
1595
1603
  /** Non-null assertions whose value is forwarded into a slot promoted to
1596
1604
  * hold undefined. `x!` has no runtime effect, so these keep the stored
1597
1605
  * undefined state instead of trapping before any dereference. */
@@ -2031,6 +2039,9 @@ export class Lowerer {
2031
2039
  /** Parameters read as `any` in the error-path copy of an error-first
2032
2040
  * callback. */
2033
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;
2034
2045
  /** overload-choice's answers per call, binding and function. */
2035
2046
  dynamicOverloadAnswers = new Map();
2036
2047
  /** Error parameters of an error-first callback with a known value in
@@ -2178,6 +2189,9 @@ export class Lowerer {
2178
2189
  builtinCallableValueFns = new Map();
2179
2190
  /** Each builtin function-value adapter's Node name, for boxed values. */
2180
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();
2181
2195
  /** Optional-chain lowering state. While a chain body lowers, the guarded
2182
2196
  * receiver NODE reads as a chainRecv (typed by the narrowed arm) instead
2183
2197
  * of re-lowering, its checker type reads non-nullish (typeOf), and the
@@ -2316,6 +2330,11 @@ export class Lowerer {
2316
2330
  * (builtins/fs-paths.ts): each lowers to the hidden local that holds its
2317
2331
  * value, which is null until the path's lowering has saved it. */
2318
2332
  stagedArguments = 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();
2319
2338
  /** What each fs path argument of a URL-path call lowers to (the plans
2320
2339
  * of builtins/fs-paths.ts). */
2321
2340
  fsPathPlans = new Map();
@@ -2442,6 +2461,9 @@ export class Lowerer {
2442
2461
  recordFieldDeletes = new Set();
2443
2462
  /** typeKeys of the array types the program may freeze (IrModule.freezableArrays). */
2444
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;
2445
2467
  liftedFns = [];
2446
2468
  /** The first lifted function of each name (liftedFnNamed), for the
2447
2469
  * liftedFns indexed so far. liftedFns only grows. */
@@ -2844,9 +2866,7 @@ export class Lowerer {
2844
2866
  * that comes back through a boundary cast keeps its identity. */
2845
2867
  declBoundaryMemo = null;
2846
2868
  get declBoundary() {
2847
- this.declBoundaryMemo ??= this.program
2848
- .getSourceFiles()
2849
- .some((sf) => isDeclBoundaryFile(sf.fileName));
2869
+ this.declBoundaryMemo ??= this.program.getSourceFileNames().some(isDeclBoundaryFile);
2850
2870
  return this.declBoundaryMemo;
2851
2871
  }
2852
2872
  /** Tracked classes' bag initializers over a typed `this`
@@ -2889,7 +2909,7 @@ export class Lowerer {
2889
2909
  positionOf: (node) => this.positions.of(node),
2890
2910
  shapes: this.shapes,
2891
2911
  unions: this.unions,
2892
- classNamer: this.classNamer,
2912
+ classNamer: (decl) => this.classNamer(decl),
2893
2913
  resolveTypeParam: this.typeParamResolver,
2894
2914
  resolveTypeParamTs: this.typeParamTsResolver,
2895
2915
  isErasing: () => this.erasingDepth > 0,
@@ -2953,8 +2973,8 @@ export class Lowerer {
2953
2973
  },
2954
2974
  mixinIntersectionInstance: (widened) => mixinIntersectionInstanceType(this, widened),
2955
2975
  classImplementedProtocol: (type) => this.classImplementedProtocol(type),
2956
- isStdlibFile: this.isStdlibFile,
2957
- isNpmFile: this.isNpmFile,
2976
+ isStdlibFile: (sf) => this.isStdlibFile(sf),
2977
+ isNpmFile: (sf) => this.isNpmFile(sf),
2958
2978
  // The declaration-typed boundary's generated types (decl-projection.ts)
2959
2979
  // describe data, like an explicitly mapped external type surface.
2960
2980
  isExternalTypeFile: (sf) => this.externalTypeSpecifiersByFile.has(tsgoPath(resolve(sf.fileName))) ||
@@ -3018,7 +3038,8 @@ export class Lowerer {
3018
3038
  /** Declared class fields may store a DYN value only when its static type
3019
3039
  * is `unknown` or `object` (also with `null` or `undefined`, or an array
3020
3040
  * of those), names checked protocol identity, is an owned runtime
3021
- * 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
3022
3043
  * a node:crypto ECDH, DiffieHellman or DiffieHellmanGroup), or is a
3023
3044
  * WeakMap/WeakSet (native weak collections live in checked-dynamic
3024
3045
  * storage, as locals of those types do); `any` fields stay refused. */
@@ -3086,6 +3107,35 @@ export class Lowerer {
3086
3107
  }
3087
3108
  return null;
3088
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
+ }
3089
3139
  sourceFileOfModuleNamespace(type) {
3090
3140
  if (type.kind !== "moduleNs" || !type.moduleId.startsWith("file:"))
3091
3141
  return null;
@@ -5591,6 +5641,23 @@ export class Lowerer {
5591
5641
  });
5592
5642
  return keys;
5593
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
+ };
5594
5661
  const elementStates = new ArrayElementStates({
5595
5662
  elementAdmitsUndefined: (key) => {
5596
5663
  siteDependencies?.read(key);
@@ -5601,9 +5668,16 @@ export class Lowerer {
5601
5668
  arrayKeys: arrayKeysOf,
5602
5669
  mayBeUndefined: (node) => {
5603
5670
  if (explicitlyNonNull(node))
5604
- return false;
5671
+ return assertedReadMayBeUndefined(node);
5605
5672
  if (mayBeOptional(node))
5606
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;
5607
5681
  // `undefined as unknown as T` keeps the undefined value.
5608
5682
  for (let inner = node; ts.isParenthesizedExpression(inner) ||
5609
5683
  ts.isAsExpression(inner) ||
@@ -5620,7 +5694,37 @@ export class Lowerer {
5620
5694
  const symbol = symbolOf(e);
5621
5695
  return symbol !== null && iterationSymbols.has(symbol) && !provenPresent(e, symbol);
5622
5696
  },
5623
- 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
+ },
5624
5728
  isGlobal: (node, name) => this.isStdlibGlobal(node, name),
5625
5729
  isString: (node) => {
5626
5730
  const type = typeOrNull(node);
@@ -5648,6 +5752,15 @@ export class Lowerer {
5648
5752
  const rest = sig.params.find((shape) => shape.mode === "rest");
5649
5753
  return rest?.type.kind === "array" ? [typeKey(rest.type.elem)] : [];
5650
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
+ },
5651
5764
  markIterationBinding: (node, known) => {
5652
5765
  const symbol = symbolOf(node);
5653
5766
  if (!symbol)
@@ -5684,6 +5797,7 @@ export class Lowerer {
5684
5797
  if (cached !== undefined)
5685
5798
  return cached;
5686
5799
  const nodes = [];
5800
+ const values = [];
5687
5801
  ts.walkPreorder(sf, (node) => {
5688
5802
  if (ts.isVariableDeclaration(node) ||
5689
5803
  (ts.isParameter(node) && ts.isObjectBindingPattern(node.name)) ||
@@ -5697,7 +5811,19 @@ export class Lowerer {
5697
5811
  ts.isPrefixUnaryExpression(node) ||
5698
5812
  ts.isPostfixUnaryExpression(node))
5699
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);
5700
5825
  });
5826
+ this.checker.prefetchCollectionTypes(values);
5701
5827
  scanSites.set(sf, nodes);
5702
5828
  return nodes;
5703
5829
  };
@@ -6875,6 +7001,7 @@ export class Lowerer {
6875
7001
  finalizePrivateBrands(this, functions);
6876
7002
  trackClassFieldCreation(this, functions);
6877
7003
  boxClassInstancesExactly(this, functions);
7004
+ addUntypedIntegrityWords(this);
6878
7005
  guardClassAttributeWrites(this, functions);
6879
7006
  guardFrozenWrites(this, functions);
6880
7007
  applyHandleProperties(this, functions);
@@ -6967,6 +7094,7 @@ export class Lowerer {
6967
7094
  // every producer and consumer agrees. Programs with no unregistered
6968
7095
  // reference are untouched — byte-stability holds.
6969
7096
  checkRequireBindingAccesses(this, functions);
7097
+ refuseX509DynValues(this, functions);
6970
7098
  const module = this.diags.length > 0
6971
7099
  ? null
6972
7100
  : {
@@ -6987,6 +7115,7 @@ export class Lowerer {
6987
7115
  ...(this.freezableArrays.size > 0
6988
7116
  ? { freezableArrays: [...this.freezableArrays].sort() }
6989
7117
  : {}),
7118
+ ...(this.untypedIntegrity ? { untypedIntegrity: true } : {}),
6990
7119
  ...(isNodeEsmFile(this.entry, this.program) ? {} : { commonJsEntry: true }),
6991
7120
  ...(this.ffiImports.length > 0 ? { ffiImports: [...this.ffiImports] } : {}),
6992
7121
  };
@@ -7171,9 +7300,28 @@ export class Lowerer {
7171
7300
  // retained-function keys and are deterministic by construction
7172
7301
  // (qualified declaration names).
7173
7302
  const units = new Map();
7174
- const bodyRoots = (...roots) => roots.filter((root) => root !== undefined && root !== null);
7175
- const functionRoots = (decl) => bodyRoots(...decl.parameters.nodes.map((param) => param.initializer), decl.body);
7176
- 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
+ };
7177
7325
  const classMemberRoots = (info) => {
7178
7326
  const roots = classCtorRoots(info);
7179
7327
  for (const { member } of this.classMethodMembers(info))
@@ -7357,8 +7505,9 @@ export class Lowerer {
7357
7505
  register(`%${cName}.set:${prop}`, [], () => this.throwingSetterFn(info, prop));
7358
7506
  }
7359
7507
  };
7508
+ const onEdge = this.onEdge;
7360
7509
  for (const name of collectionEdges)
7361
- this.onEdge(name);
7510
+ onEdge(name);
7362
7511
  // Generic instances queued by the bodies above lower here (an instance
7363
7512
  // body fires edges of its own and can queue further instances of
7364
7513
  // either kind — function instances and class instantiations drain to
@@ -7462,8 +7611,9 @@ export class Lowerer {
7462
7611
  // profile-mapped exports are called from outside the graph, so they
7463
7612
  // seed the worklist beside the init bodies. Unknown names are inert
7464
7613
  // (the export-map resolution reports them as SC4002 later).
7614
+ const rootEdge = this.onEdge;
7465
7615
  for (const root of extraRoots ?? [])
7466
- this.onEdge?.(root);
7616
+ rootEdge?.(root);
7467
7617
  const shuffle = lowerShuffle();
7468
7618
  const drainUnits = () => {
7469
7619
  while (queue.length > 0) {
@@ -7579,8 +7729,10 @@ export class Lowerer {
7579
7729
  /** Reachability hook (see emitReachable): fires when lowering resolves a
7580
7730
  * reference to a lowerable body. */
7581
7731
  noteEdge(name) {
7582
- if (this.onEdge)
7583
- 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);
7584
7736
  }
7585
7737
  /** A subclass constructor's super() edge: the base constructor runs, but
7586
7738
  * no instance of exactly the base class is created. */
@@ -7733,8 +7885,11 @@ export class Lowerer {
7733
7885
  }
7734
7886
  this.diags.push(d);
7735
7887
  }
7736
- unsupported(code, node, featureOverride, hintOverride) {
7737
- 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);
7738
7893
  throw new PoisonError();
7739
7894
  }
7740
7895
  externalHostFence(specifier, node, valueUse = true) {
@@ -7913,8 +8068,11 @@ export class Lowerer {
7913
8068
  * nothing lowers. Poisons the statement like every other rejection.
7914
8069
  * `sym`, when given, picks the wording: surface declared only by the
7915
8070
  * adopted @types/node is blamed at @types/node. */
7916
- noLowering(surface, node, hint, sym) {
7917
- 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);
7918
8076
  throw new PoisonError();
7919
8077
  }
7920
8078
  stdlibMemberFence(access) {
@@ -7971,6 +8129,11 @@ export class Lowerer {
7971
8129
  return symbol !== undefined && this.anySymbols.has(symbol);
7972
8130
  }
7973
8131
  typeOf(node) {
8132
+ if (ts.isIdentifier(node)) {
8133
+ const inferred = inferredCollectionType(this, node);
8134
+ if (inferred)
8135
+ return inferred;
8136
+ }
7974
8137
  if (this.anySymbols.size > 0 && this.readsAnySymbol(node))
7975
8138
  return this.checker.getAnyType();
7976
8139
  // A checked-dynamic argument that another overload could take at run
@@ -8620,7 +8783,8 @@ export class Lowerer {
8620
8783
  // so its module binding is too (`ReleaseEmitter = EventEmitter` over
8621
8784
  // `const EventEmitter = require("events")`).
8622
8785
  if (expr.type.kind === "moduleNs" && isJsSourceFileName(expr.loc.file)) {
8623
- const object = moduleNamespaceObject(this, expr);
8786
+ const ns = expr;
8787
+ const object = moduleNamespaceObject(this, ns) ?? moduleNamespaceValue(this, ns);
8624
8788
  if (object)
8625
8789
  return object;
8626
8790
  }
@@ -8663,6 +8827,7 @@ export class Lowerer {
8663
8827
  // A builtin function's adapter boxes under the builtin's name, the
8664
8828
  // name Node's function carries (`[Function: randomUUID]`).
8665
8829
  const builtinName = expr.kind === "closure" ? this.builtinCallableValueNames.get(expr.fnName) : undefined;
8830
+ const builtinLength = expr.kind === "closure" ? this.builtinCallableValueLengths.get(expr.fnName) : undefined;
8666
8831
  return {
8667
8832
  kind: "dynFrom",
8668
8833
  value: expr,
@@ -8670,6 +8835,7 @@ export class Lowerer {
8670
8835
  loc: expr.loc,
8671
8836
  ...(liveRef ? { liveRef: true } : {}),
8672
8837
  ...(builtinName !== undefined ? { fnName: builtinName } : {}),
8838
+ ...(builtinLength !== undefined ? { fnLength: builtinLength } : {}),
8673
8839
  };
8674
8840
  }
8675
8841
  return expr;
@@ -9147,8 +9313,8 @@ export class Lowerer {
9147
9313
  unionRetagHelper(fromId, toId, loc, trappable) {
9148
9314
  return unionRetagHelper(this, fromId, toId, loc, trappable);
9149
9315
  }
9150
- narrowedArmHelper(fromId, target, loc) {
9151
- return narrowedArmHelper(this, fromId, target, loc);
9316
+ narrowedArmHelper(fromId, target, loc, message) {
9317
+ return narrowedArmHelper(this, fromId, target, loc, message);
9152
9318
  }
9153
9319
  checkedNarrowCall(helper, value, type, loc) {
9154
9320
  return checkedNarrowCall(this, helper, value, type, loc);
@@ -10423,10 +10589,13 @@ export class Lowerer {
10423
10589
  }
10424
10590
  /** Method-like members with their collected method-map names. Body
10425
10591
  * lowering omits abstract declarations; ABI analysis must include them
10426
- * because an abstract-typed call selects the same virtual slot. */
10427
- *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 = [];
10428
10597
  if (!info.decl)
10429
- return; // builtin error classes: runtime-provided bodies
10598
+ return members; // builtin error classes: runtime-provided bodies
10430
10599
  for (const member of info.decl.members.nodes) {
10431
10600
  const fnLike = ts.isMethodDeclaration(member) || ts.isGetAccessor(member) || ts.isSetAccessor(member)
10432
10601
  ? member
@@ -10453,8 +10622,9 @@ export class Lowerer {
10453
10622
  const signature = info.methods.get(mName);
10454
10623
  if (!signature || (!fnLike.body && !(includeAbstract && signature.abstract)))
10455
10624
  continue;
10456
- yield { mName, member: fnLike };
10625
+ members.push({ mName, member: fnLike });
10457
10626
  }
10627
+ return members;
10458
10628
  }
10459
10629
  lowerClassCtor(info) {
10460
10630
  return lowerClassCtor(this, info);
@@ -11250,11 +11420,28 @@ export class Lowerer {
11250
11420
  }
11251
11421
  /* ── expressions ──────────────────────────────────────────────────── */
11252
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
+ }
11253
11430
  const streamValue = this.valueStreamReceivers.get(expr);
11254
11431
  if (streamValue)
11255
11432
  return valueStreamOf(varRef(streamValue.localId, streamValue.type, locOf(expr)));
11256
11433
  return this.stagedArgument(expr) ?? lowerExpr(this, expr);
11257
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
+ }
11258
11445
  /** The saved value of a staged fs argument (stagedArguments, keyed
11259
11446
  * without type-only wrappers), or null for every other expression. */
11260
11447
  stagedArgument(node) {
@@ -11344,6 +11531,10 @@ export class Lowerer {
11344
11531
  expr.expression.name.text === "cache") {
11345
11532
  return lowerElementAccess(this, expr);
11346
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);
11347
11538
  const receiver = this.runtimeOptionalIdentifierValue(expr.expression);
11348
11539
  const receiverValue = receiver && (receiver.present.kind === "array" || receiver.present.kind === "record")
11349
11540
  ? (() => {
@@ -11581,6 +11772,7 @@ export class Lowerer {
11581
11772
  lowerStaticBlobCall(this, expr) ??
11582
11773
  lowerWebCryptoCall(this, expr) ??
11583
11774
  lowerKeyObjectCall(this, expr) ??
11775
+ lowerX509Call(this, expr) ??
11584
11776
  lowerEcdhCall(this, expr) ??
11585
11777
  lowerDiffieHellmanCall(this, expr) ??
11586
11778
  lowerNetAddressCall(this, expr) ??
@@ -11645,14 +11837,20 @@ export class Lowerer {
11645
11837
  accessorCall(className, member, obj, extraArgs, ret, loc) {
11646
11838
  return accessorCall(this, className, member, obj, extraArgs, ret, loc);
11647
11839
  }
11648
- classIteratorOf(t) {
11649
- 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);
11650
11845
  }
11651
11846
  classIteratorOpenCall(cit, recv, loc) {
11652
11847
  return classIteratorOpenCall(this, cit, recv, loc);
11653
11848
  }
11654
- classIteratorNextCall(cit, itRef, loc) {
11655
- 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);
11656
11854
  }
11657
11855
  classIteratorDrainCall(src, loc, elemT) {
11658
11856
  return classIteratorDrainCall(this, src, loc, elemT);
@@ -11911,7 +12109,7 @@ export class Lowerer {
11911
12109
  }
11912
12110
  if (ts.isPropertyAccessExpression(expr) &&
11913
12111
  !expr.questionDotToken &&
11914
- ts.isIdentifier(expr.expression)) {
12112
+ (ts.isIdentifier(expr.expression) || requireSpecOf(expr.expression) !== null)) {
11915
12113
  const outer = this.builtinNamespaceModuleOf(expr.expression);
11916
12114
  if (outer === null)
11917
12115
  return null;
@@ -12114,6 +12312,15 @@ export class Lowerer {
12114
12312
  if (builtinModuleFnOf(this, bi.module, bi.member)) {
12115
12313
  this.unsupported("SC1090", expr, `library functions as values (call '${ts.getTextOfNode(expr)}' directly)`);
12116
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
+ }
12117
12324
  this.noLowering(`${bi.module}.${bi.member}`, expr, builtinFenceHintOf(bi.module, bi.member), this.checker.getSymbolAtLocation(expr.name));
12118
12325
  }
12119
12326
  /** Materialize one explicitly value-callable table entry as an interned
@@ -12122,6 +12329,9 @@ export class Lowerer {
12122
12329
  * deliberately narrower than table membership because many table rows
12123
12330
  * are only dispatch sentinels for call-site-specific lowering. */
12124
12331
  lowerBuiltinCallableValue(bi, loc) {
12332
+ const assertion = assertFunctionValue(bi, loc);
12333
+ if (assertion)
12334
+ return assertion;
12125
12335
  if (bi.module === "util" && bi.member === "types")
12126
12336
  return utilTypesModuleValue(this, loc);
12127
12337
  if (bi.module === "util/types" && builtinModuleFnOf(this, bi.module, bi.member))
@@ -12170,6 +12380,8 @@ export class Lowerer {
12170
12380
  fnName = keyedHelperName(this, `%builtin.value.${fn.valueFn ?? fn.fn}`, key);
12171
12381
  this.builtinCallableValueFns.set(key, fnName);
12172
12382
  this.builtinCallableValueNames.set(fnName, display.slice(display.lastIndexOf(".") + 1));
12383
+ if (fn.valueLength !== undefined)
12384
+ this.builtinCallableValueLengths.set(fnName, fn.valueLength);
12173
12385
  const params = funcType.params.map((type, index) => ({
12174
12386
  localId: `arg.${index}`,
12175
12387
  name: `arg${index}`,