@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
@@ -24,6 +24,7 @@ import { InternalCompilerError } from "../../errors.js";
24
24
  * explicit resource management, and blocked-binding poisoning. */
25
25
  import * as ts from "../ts7/adapter.js";
26
26
  import { lowerOptionalIndex } from "./undefined-index.js";
27
+ import { builtinNamespaceValue } from "./builtin-namespaces.js";
27
28
  import { processDataMemberValue, programReadsExitCode } from "./builtins/process.js";
28
29
  import { requireInitFlagStmt } from "./require-initialization.js";
29
30
  import { isJsonRequireDecl } from "./json-require.js";
@@ -52,7 +53,7 @@ import { lowerForOfHelperChain } from "./containers/iterator-helpers.js";
52
53
  import { objectIterOverIndexShape } from "./containers/indexed-objects.js";
53
54
  import { strCharsCall } from "./containers/array-construction.js";
54
55
  import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, genericBindingPresenceStore, genericBindingStoredValue, implicitLocalFnInfoOf, implicitLocalFnNodeOf, implicitMethodCallInfersReturn, genericLocalClassBinding, } from "./generic-functions.js";
55
- import { bindingNeverReassigned, deadUnmappableBinding, nullishExprUnitOf, nullishGenericBindingUnitOf, } from "./binding-analysis.js";
56
+ import { bindingNeverReassigned, deadUnmappableBinding, fileWritesBinding, nullishExprUnitOf, nullishGenericBindingUnitOf, } from "./binding-analysis.js";
56
57
  import { hasExplicitJsDocReturn } from "./function-returns.js";
57
58
  import { recordKeysArrayCall } from "./lower-calls.js";
58
59
  import { registerOverloadedCallableAlias } from "./call-signatures.js";
@@ -62,7 +63,7 @@ import { classStaticDataFor } from "./class-static-data.js";
62
63
  import { objectFactorySignature } from "./object-factory-new.js";
63
64
  import { isClassCallback, lowerClassCallbackAssign } from "./class-callbacks.js";
64
65
  import { classForInHasKey, classPropertiesHelper } from "./class-dynamic-dispatch.js";
65
- import { genericIfaceBindingKeepsClass, superConditionLead } from "./lower-classes.js";
66
+ import { genericIfaceBindingKeepsClass, lowerClassStaticRead, staticReceiverClass, superConditionLead, } from "./lower-classes.js";
66
67
  import { lowerStreamUnderscoreAssign, streamClassAliasDecl, streamSidesOf, } from "./lower-stream.js";
67
68
  import { staticAssertInstanceDecl } from "./assert-instances.js";
68
69
  import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerNetServerMaxConnectionsAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
@@ -92,6 +93,7 @@ import { constituentTypes } from "../ts7/checker.js";
92
93
  import { npmStaticPackageOfPath } from "../npm-static.js";
93
94
  import { fenceNodeModuleMutation } from "./lower-node-module.js";
94
95
  import { fencePerfEntryKeyWalk } from "./builtins/performance.js";
96
+ import { fenceX509KeyWalk } from "./builtins/x509.js";
95
97
  import { classGeneratorIterable } from "./class-iterables.js";
96
98
  import { iterableUnionOf, lowerForOfIterable } from "./iterable-values.js";
97
99
  /** An opted package's directly-returned empty array may take the function's
@@ -1373,7 +1375,39 @@ const THROWN_AS_DYN = new Set([
1373
1375
  "bytes",
1374
1376
  "func",
1375
1377
  "regex",
1378
+ "date",
1376
1379
  ]);
1380
+ /** A `return` at the top level of a CommonJS module (preflight admits it
1381
+ * there only): it ends the module's evaluation, and its value is
1382
+ * evaluated and discarded, as Node's module wrapper does. Top-level
1383
+ * bindings and export assignments after it would be left uninitialized
1384
+ * where Node leaves them in their temporal dead zone or absent, so a
1385
+ * module with any keeps a refusal. Null for a return inside a function. */
1386
+ function lowerModuleLevelReturn(lowerer, stmt) {
1387
+ let top = stmt;
1388
+ while (top.parent !== undefined && !ts.isSourceFile(top.parent)) {
1389
+ if (ts.isFunctionLike(top.parent) || ts.isClassStaticBlockDeclaration(top.parent))
1390
+ return null;
1391
+ top = top.parent;
1392
+ }
1393
+ const sf = top.parent;
1394
+ if (sf === undefined || !ts.isSourceFile(sf))
1395
+ return null;
1396
+ const stmts = sf.statements.nodes;
1397
+ const later = stmts.slice(stmts.indexOf(top) + 1);
1398
+ if (later.some((s) => ts.isVariableStatement(s) || ts.isClassDeclaration(s) || cjsExportAssignmentOf(s) !== null)) {
1399
+ lowerer.unsupported("SC1090", stmt, "a top-level return in a CommonJS module that declares variables or classes, or assigns exports, after it");
1400
+ }
1401
+ const loc = locOf(stmt);
1402
+ const ret = { kind: "return", value: null, loc };
1403
+ if (!stmt.expression)
1404
+ return ret;
1405
+ return {
1406
+ kind: "block",
1407
+ body: [{ kind: "exprStmt", expr: lowerer.lowerExpr(stmt.expression), loc }, ret],
1408
+ loc,
1409
+ };
1410
+ }
1377
1411
  export function lowerStmt(lowerer, stmt) {
1378
1412
  if (ownPrototypeResetStatement(lowerer, stmt))
1379
1413
  return { kind: "block", body: [], loc: locOf(stmt) };
@@ -1475,6 +1509,9 @@ export function lowerStmt(lowerer, stmt) {
1475
1509
  if (ts.isLabeledStatement(stmt))
1476
1510
  return lowerLabeled(lowerer, stmt);
1477
1511
  if (ts.isReturnStatement(stmt)) {
1512
+ const moduleReturn = lowerModuleLevelReturn(lowerer, stmt);
1513
+ if (moduleReturn)
1514
+ return moduleReturn;
1478
1515
  // Implicit-any instance RETURN INFERENCE (function-returns.ts
1479
1516
  // resolveInferredReturn): the value lowers BARE and the statement
1480
1517
  // records itself — the post-pass settles the instance's return type
@@ -1560,9 +1597,7 @@ export function lowerStmt(lowerer, stmt) {
1560
1597
  return { kind: "rethrow", localId: caughtLocal.id, loc: locOf(stmt) };
1561
1598
  }
1562
1599
  // Exception-representable values move into the runtime's exception
1563
- // cell. `throw f()` of a void call has no value; Date has numeric
1564
- // storage internally, but cannot preserve its object kind through the
1565
- // untyped catch boundary. Reject both rather than changing JS identity.
1600
+ // cell. `throw f()` of a void call has no value.
1566
1601
  let value = lowerer.lowerExpr(stmt.expression);
1567
1602
  if (value.type.kind === "void")
1568
1603
  lowerer.badType(stmt.expression, lowerer.typeOf(stmt.expression));
@@ -1576,15 +1611,12 @@ export function lowerStmt(lowerer, stmt) {
1576
1611
  value = { kind: "dynFrom", value, liveRef: true, type: DYN, loc: locOf(stmt.expression) };
1577
1612
  }
1578
1613
  else if (THROWN_AS_DYN.has(value.type.kind) && lowerer.dynConvertible(value.type)) {
1579
- // Arrays, Maps, Sets, typed arrays, Buffers, functions, regexes and
1580
- // unions over them keep their identity and contents the same way:
1581
- // the catch binding, `typeof`, `instanceof`, `Array.isArray`,
1582
- // inspection and typed views read the thrown object.
1614
+ // Arrays, Maps, Sets, typed arrays, Buffers, functions, regexes,
1615
+ // Dates and unions over them keep their identity and contents the
1616
+ // same way: the catch binding, `typeof`, `instanceof`,
1617
+ // `Array.isArray`, inspection and typed views read the thrown object.
1583
1618
  value = lowerer.coerceInto(stmt.expression, value, DYN);
1584
1619
  }
1585
- if (value.type.kind === "date") {
1586
- lowerer.unsupported("SC1090", stmt.expression, "throwing Date values (catch bindings cannot preserve Date's object kind; throw an Error or primitive instead)");
1587
- }
1588
1620
  // A dyn throw rides the REF cell arm (scr_throw_ref over the checked-dynamic tree
1589
1621
  // node — identity preserved through catch bindings, caughtToDyn
1590
1622
  // passes it back by reference). The JS-lane traced-call shape:
@@ -2305,7 +2337,7 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
2305
2337
  const itRef = () => ({ kind: "varRef", localId: it.id, type: citPat.iterT, loc });
2306
2338
  for (const el of pattern.elements.nodes) {
2307
2339
  const stepLoc = locOf(el);
2308
- const step = lowerer.classIteratorNextCall(citPat, itRef(), stepLoc);
2340
+ const step = lowerer.classIteratorNextCall(citPat, itRef(), null, stepLoc);
2309
2341
  if (ts.isOmittedExpression(el) || el.name === undefined) {
2310
2342
  out.push({ kind: "exprStmt", expr: step, loc: stepLoc });
2311
2343
  continue;
@@ -2579,6 +2611,16 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
2579
2611
  lowerer.lowerBindingPattern(pattern, () => lowerer.coerceToExpected(srcRef(), DYN), DYN, isLet, out, dynSpell, allowDynObject);
2580
2612
  return;
2581
2613
  }
2614
+ // A class in a JavaScript file, destructured through its own name
2615
+ // (`const { ANY, parse } = Comparator`): each element is the static
2616
+ // read `Comparator.ANY` — the static getter, field or method as Node
2617
+ // reads it, with the element's default applied when the read answers
2618
+ // undefined. Other class-valued sources keep the refusal below.
2619
+ if (srcType.kind === "classval" &&
2620
+ ts.isObjectBindingPattern(pattern) &&
2621
+ isJsSourceFile(ts.getSourceFileOfNode(pattern)) &&
2622
+ lowerClassValuePattern(lowerer, pattern, isLet, out))
2623
+ return;
2582
2624
  if (srcType.kind === "dyn") {
2583
2625
  // A runtime computed first key evaluates after RequireObjectCoercible:
2584
2626
  // a nullish source throws before the key's side effects run. Later
@@ -3574,7 +3616,8 @@ function stdlibGlobalTokenDestructure(lowerer, decl, isLet) {
3574
3616
  value =
3575
3617
  canonical === "crypto"
3576
3618
  ? { kind: "libCall", fn: "webcrypto.object", args: [], type: DYN, loc: locOf(el) }
3577
- : builtinGlobalValue(canonical, locOf(el), true);
3619
+ : (builtinNamespaceValue(lowerer, canonical, locOf(el)) ??
3620
+ builtinGlobalValue(canonical, locOf(el), true));
3578
3621
  }
3579
3622
  else if (globalName === "console" && !CONSOLE_CALL_MEMBERS.has(propName)) {
3580
3623
  token = `[builtin console.${propName}]`;
@@ -3651,6 +3694,46 @@ function stdlibGlobalTokenDestructure(lowerer, decl, isLet) {
3651
3694
  }
3652
3695
  return out;
3653
3696
  }
3697
+ /** `const { ANY, parse } = Comparator` in a JavaScript file, where the
3698
+ * declaration's initializer names the class exactly (staticReceiverClass):
3699
+ * one static read per element, left to right. False, with nothing
3700
+ * emitted, for other sources (a parameter or nested pattern over a class
3701
+ * value), which keep the class-value refusal. */
3702
+ function lowerClassValuePattern(lowerer, pattern, isLet, out) {
3703
+ const decl = pattern.parent;
3704
+ if (!ts.isVariableDeclaration(decl) || decl.initializer === undefined)
3705
+ return false;
3706
+ let receiver = decl.initializer;
3707
+ while (ts.isParenthesizedExpression(receiver))
3708
+ receiver = receiver.expression;
3709
+ const info = staticReceiverClass(lowerer, receiver);
3710
+ if (info === null)
3711
+ return false;
3712
+ for (const el of pattern.elements.nodes) {
3713
+ if (el.name === undefined)
3714
+ continue;
3715
+ if (el.dotDotDotToken)
3716
+ lowerer.unsupported("SC1031", el, "rest bindings over class values (the rest object copies the class's own enumerable statics)");
3717
+ const prop = el.propertyName ?? el.name;
3718
+ const name = ts.isIdentifier(prop) ||
3719
+ ts.isComputedPropertyName(prop) ||
3720
+ ts.isStringLiteralLike(prop) ||
3721
+ ts.isNumericLiteral(prop)
3722
+ ? patternKeyNameOf(lowerer, prop)
3723
+ : null;
3724
+ if (name === null)
3725
+ lowerer.unsupported("SC1031", el, "destructuring with computed keys that do not fold to one property name");
3726
+ if (name === "prototype" || name.startsWith("#"))
3727
+ lowerer.unsupported("SC1031", el, `destructuring '${name}' from a class value`);
3728
+ let value = lowerClassStaticRead(lowerer, info, name, receiver, receiver);
3729
+ if (value === null)
3730
+ lowerer.unsupported("SC1031", el, `destructuring the property '${name}' the class '${info.def.jsName ?? info.def.name}' does not declare as a static`);
3731
+ if (el.initializer)
3732
+ value = applyBindingDefault(lowerer, el, value);
3733
+ lowerer.bindPatternTarget(el.name, value, isLet, out);
3734
+ }
3735
+ return true;
3736
+ }
3654
3737
  /** `x = dflt` on a pattern position whose source value always EXISTS
3655
3738
  * (tuple positions, record fields): JS evaluates the default exactly
3656
3739
  * when the value is undefined — the undefined-arm ternary, lazy, so
@@ -4554,7 +4637,7 @@ export function lowerVarDecl(lowerer, decl, isLet) {
4554
4637
  if (isTimeValueDateDeclaration(lowerer, decl)) {
4555
4638
  const loc = locOf(decl);
4556
4639
  const date = lowerer.lowerExprExpecting(decl.initializer, DATE_T);
4557
- const local = lowerer.declareLocal(decl.name, decl.name.text, F64, isLet);
4640
+ const local = lowerer.declareLocal(decl.name, decl.name.text, F64, isLet || lowerer.timeValueDateWrites.has(decl));
4558
4641
  lowerer.timeValueDateLocals.add(local);
4559
4642
  const init = { kind: "libCall", fn: "date.getTime", args: [date], type: F64, loc };
4560
4643
  return { kind: "varDecl", localId: local.id, init, loc };
@@ -6150,6 +6233,63 @@ function lowerDeleteStatement(lowerer, expr) {
6150
6233
  }
6151
6234
  lowerer.unsupported("SC1090", expr, `'delete' on '${lowerer.fmt(obj.type)}' receivers (process.env keys and pure Record<string, T> keys delete)`);
6152
6235
  }
6236
+ /** True when the `var`/`let` binding `nameNode` names cannot change after
6237
+ * the top-level CommonJS export statement `exportNode` that exports it by
6238
+ * reference, so importers read the value Node copies at the export: its
6239
+ * module's top level declares it once, with an initializer that runs
6240
+ * before the export, and nothing assigns it. The initializer runs earlier
6241
+ * in the same module, or in a module the exporting module required before
6242
+ * the export (`var hljs = require('./core'); module.exports = hljs;` over
6243
+ * highlight.js's `var highlight = HLJS({}); module.exports = highlight;`). */
6244
+ function unchangedAfterExport(lowerer, nameNode, exportNode) {
6245
+ const topLevelDeclaration = (symbol) => {
6246
+ const decl = symbol.declarations.length === 1 ? symbol.declarations[0] : undefined;
6247
+ return decl !== undefined &&
6248
+ ts.isVariableDeclaration(decl) &&
6249
+ ts.isIdentifier(decl.name) &&
6250
+ decl.initializer !== undefined &&
6251
+ ts.isVariableDeclarationList(decl.parent) &&
6252
+ ts.isVariableStatement(decl.parent.parent) &&
6253
+ ts.isSourceFile(decl.parent.parent.parent)
6254
+ ? decl
6255
+ : null;
6256
+ };
6257
+ const exportFile = ts.getSourceFileOfNode(exportNode);
6258
+ let exportStatement = exportNode;
6259
+ for (let parent = exportNode.parent; parent !== undefined && !ts.isSourceFile(parent);) {
6260
+ if (ts.isFunctionLike(parent) || ts.isClassDeclaration(parent) || ts.isClassExpression(parent))
6261
+ return false;
6262
+ exportStatement = parent;
6263
+ parent = parent.parent;
6264
+ }
6265
+ const runsBeforeExport = (decl) => {
6266
+ const statement = decl.parent?.parent;
6267
+ return statement?.parent === exportFile && statement.end <= exportStatement.pos;
6268
+ };
6269
+ const sym = lowerer.resolveValueSymbol(nameNode);
6270
+ const decl = sym ? topLevelDeclaration(sym) : null;
6271
+ if (!sym || !decl || !bindingNeverReassigned(lowerer, sym, decl))
6272
+ return false;
6273
+ if (ts.getSourceFileOfNode(decl) === exportFile)
6274
+ return runsBeforeExport(decl);
6275
+ // A binding of another module: the exporting module's own binding
6276
+ // `nameNode` names holds that module's require, evaluated before the
6277
+ // export, and this file does not assign the binding either.
6278
+ const local = lowerer.checker.getSymbolAtLocation(nameNode);
6279
+ const localDecl = local ? topLevelDeclaration(local) : null;
6280
+ if (!localDecl || !runsBeforeExport(localDecl))
6281
+ return false;
6282
+ let init = localDecl.initializer;
6283
+ while (ts.isParenthesizedExpression(init))
6284
+ init = init.expression;
6285
+ if (!ts.isCallExpression(init) ||
6286
+ !ts.isIdentifier(init.expression) ||
6287
+ init.expression.text !== "require" ||
6288
+ init.arguments.nodes.length !== 1 ||
6289
+ !ts.isStringLiteralLike(init.arguments.nodes[0]))
6290
+ return false;
6291
+ return !fileWritesBinding(sym, exportFile, (ident) => lowerer.resolveValueSymbol(ident));
6292
+ }
6153
6293
  /** A top-level CommonJS export statement (see cjsExportAssignmentOf):
6154
6294
  * `exports.f = <expr>` and each expression-valued property of
6155
6295
  * `module.exports = { ... }` assign their pre-registered export globals
@@ -6328,7 +6468,7 @@ function lowerCjsExportStatement(lowerer, cjs) {
6328
6468
  const fenceMutable = (nameNode) => {
6329
6469
  const sym = lowerer.resolveValueSymbol(nameNode);
6330
6470
  const g = sym ? lowerer.globalsBySymbol.get(sym) : undefined;
6331
- if (g?.mutable) {
6471
+ if (g?.mutable && !unchangedAfterExport(lowerer, nameNode, cjs.expr)) {
6332
6472
  lowerer.unsupported("SC1090", nameNode, `exporting the mutable 'let' binding '${nameNode.text}' by reference (Node copies its VALUE at this statement — declare it const, or export a function that reads it)`);
6333
6473
  }
6334
6474
  };
@@ -6469,7 +6609,7 @@ function lowerCjsSingleValueExport(lowerer, expr, loc) {
6469
6609
  }
6470
6610
  const g = lowerer.globalsBySymbol.get(sym);
6471
6611
  if (g) {
6472
- if (g.mutable) {
6612
+ if (g.mutable && !unchangedAfterExport(lowerer, rhs, expr)) {
6473
6613
  lowerer.unsupported("SC1090", rhs, `exporting the mutable 'let' binding '${rhs.text}' by reference (Node copies its VALUE at this statement — declare it const, or export a function that reads it)`);
6474
6614
  }
6475
6615
  return { kind: "block", body: [], loc };
@@ -8529,16 +8669,31 @@ export function lowerForOf(lowerer, stmt) {
8529
8669
  // iterator are awaited as the async-from-sync iterator awaits them, and
8530
8670
  // a value that is not iterable throws Node's TypeError.
8531
8671
  const headT = lowerer.mapTypeOf(lowerer.typeOf(stmt.expression));
8532
- const syncGenerator = (headT?.kind === "generator" && headT.async !== true) || isJsSourceFile(stmt.getSourceFile());
8672
+ // A class instance whose [Symbol.asyncIterator]() (or
8673
+ // [Symbol.iterator]()) returns an iterator object takes the same
8674
+ // checked-dynamic protocol over the boxed instance.
8675
+ const headClass = headT?.kind === "object" ? lowerer.classes.get(headT.className) : undefined;
8676
+ const classAsync = headClass !== undefined && lowerer.findMethodOn(headClass, "sym:asyncIterator") !== null;
8677
+ // Without [Symbol.asyncIterator], the loop opens [Symbol.iterator]() and
8678
+ // awaits its values, as the async-from-sync iterator does.
8679
+ const classSync = headClass !== undefined &&
8680
+ !classAsync &&
8681
+ lowerer.findMethodOn(headClass, "sym:iterator") !== null;
8682
+ const classIterable = classAsync || classSync;
8683
+ const syncGenerator = (headT?.kind === "generator" && headT.async !== true) ||
8684
+ classIterable ||
8685
+ isJsSourceFile(stmt.getSourceFile());
8533
8686
  if (lowerer.ctx.isAsync && (syncGenerator || isUntypedIterable(lowerer, stmt.expression))) {
8534
8687
  const iterable = lowerer.lowerExpr(stmt.expression);
8535
8688
  if (iterable.type.kind === "generator" && iterable.type.async)
8536
8689
  return lowerForAwaitGenerator(lowerer, stmt, iterable, labels);
8537
8690
  if (iterable.type.kind === "dyn")
8538
8691
  return lowerForOfDyn(lowerer, stmt, iterable, labels, true);
8539
- if ((iterable.type.kind === "generator" || isJsSourceFile(stmt.getSourceFile())) &&
8692
+ if ((iterable.type.kind === "generator" ||
8693
+ classIterable ||
8694
+ isJsSourceFile(stmt.getSourceFile())) &&
8540
8695
  lowerer.dynConvertible(iterable.type))
8541
- return lowerForOfDyn(lowerer, stmt, lowerer.coerceToExpected(iterable, DYN), labels, true);
8696
+ return lowerForOfDyn(lowerer, stmt, lowerer.coerceToExpected(iterable, DYN), labels, true, classSync && iterable.type.kind === "object");
8542
8697
  }
8543
8698
  // A NodeJS.ReadableStream iterates as the general Readable.
8544
8699
  requestGeneralStreamSurface(lowerer, stmt.expression);
@@ -8759,15 +8914,21 @@ export function lowerForOf(lowerer, stmt) {
8759
8914
  return lowerForOfGenerator(lowerer, stmt, generator, labels);
8760
8915
  // Class iterables ([Symbol.iterator]() + next() — classIteratorOf)
8761
8916
  // drive the same protocol with ordinary method calls.
8762
- const cit = lowerer.classIteratorOf(iterable.type);
8917
+ const cit = lowerer.classIteratorOf(iterable.type, { records: true, close: true });
8763
8918
  if (cit)
8764
8919
  return lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels);
8765
8920
  // A declared [Symbol.iterator] whose shape classIteratorOf refused
8766
8921
  // (an `any`-typed iterator or result, a declared return()/throw()):
8767
8922
  // name the protocol, not the class.
8768
8923
  const info = lowerer.classes.get(iterable.type.className);
8924
+ // In JavaScript the inferred shape is often a union of result
8925
+ // objects: the loop runs the iterator protocol over the boxed value.
8926
+ if (info &&
8927
+ isJsSourceFile(ts.getSourceFileOfNode(stmt)) &&
8928
+ lowerer.findMethodOn(info, "sym:iterator"))
8929
+ return lowerForOfDyn(lowerer, stmt, lowerer.coerceInto(stmt.expression, iterable, DYN), labels);
8769
8930
  if (info && lowerer.findMethodOn(info, "sym:iterator")) {
8770
- lowerer.unsupported("SC1090", stmt.expression, `for-of over this [Symbol.iterator] shape (the method must take no parameters and return an object whose zero-parameter next() returns a { value, done? } record with a boolean done; iterator classes declaring return()/throw() stay out — IteratorClose has no lowering)`);
8931
+ lowerer.unsupported("SC1090", stmt.expression, `for-of over this [Symbol.iterator] shape (the method must take no parameters and return an object whose zero-parameter next() returns a { value, done? } record with a boolean done, and whose return(), if any, takes no parameters and returns an object)`);
8771
8932
  }
8772
8933
  }
8773
8934
  if (iterable.type.kind === "record" && lowerer.shapes.get(iterable.type.shapeId)?.tuple) {
@@ -9601,11 +9762,13 @@ function lowerForOfMatchAll(lowerer, stmt, call, stored) {
9601
9762
  * } }
9602
9763
  *
9603
9764
  * A result record with NO done field never terminates — exactly JS
9604
- * (undefined is falsy forever; Node loops forever too). No
9605
- * IteratorClose: classIteratorOf already refused iterator classes
9606
- * declaring return()/throw(), so a break exits with nothing to close.
9607
- * `done: true` results bind nothing (the loop breaks before the value
9608
- * read), matching JS's ignore-the-final-value rule. */
9765
+ * (undefined is falsy forever; Node loops forever too). An iterator with
9766
+ * return() is closed when the loop leaves after a value arrived (break,
9767
+ * return, or a throw from the body), as IteratorClose does: a done flag
9768
+ * set around each step guards the call in a finally, and after a throw
9769
+ * from the body an error from return() is dropped. A throw from next()
9770
+ * does not close. `done: true` results bind nothing (the loop breaks
9771
+ * before the value read), matching JS's ignore-the-final-value rule. */
9609
9772
  function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
9610
9773
  let exprTarget = null;
9611
9774
  let exprTargetNode = null;
@@ -9639,7 +9802,22 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
9639
9802
  const r = lowerer.declareHiddenLocal("%cir", cit.resultT);
9640
9803
  const recvRef = { kind: "varRef", localId: recv.id, type: iterable.type, loc };
9641
9804
  const itRef = () => ({ kind: "varRef", localId: it.id, type: cit.iterT, loc });
9805
+ const nextRead = lowerer.classIteratorNextRead(cit, itRef(), loc);
9806
+ const next = nextRead ? lowerer.declareHiddenLocal("%cin", nextRead.type) : null;
9642
9807
  const rRef = () => ({ kind: "varRef", localId: r.id, type: cit.resultT, loc });
9808
+ const done = cit.hasReturn ? lowerer.declareHiddenLocal("%cid", BOOL) : null;
9809
+ if (done)
9810
+ done.mutable = true;
9811
+ const setDone = (value) => done
9812
+ ? [
9813
+ {
9814
+ kind: "assign",
9815
+ localId: done.id,
9816
+ value: { kind: "boolLit", value, type: BOOL, loc },
9817
+ loc,
9818
+ },
9819
+ ]
9820
+ : [];
9643
9821
  const varTarget = exprTarget ?? (decl ? forOfVarTarget(lowerer, decl) : null);
9644
9822
  const x = varTarget
9645
9823
  ? lowerer.declareHiddenLocal("%vof", cit.valueT)
@@ -9647,10 +9825,11 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
9647
9825
  const xRef = { kind: "varRef", localId: x.id, type: cit.valueT, loc };
9648
9826
  const blame = decl?.name ?? exprTargetNode ?? stmt.initializer;
9649
9827
  const head = [
9828
+ ...setDone(true),
9650
9829
  {
9651
9830
  kind: "varDecl",
9652
9831
  localId: r.id,
9653
- init: lowerer.classIteratorNextCall(cit, itRef(), loc),
9832
+ init: lowerer.classIteratorNextCall(cit, itRef(), next ? varRef(next.id, next.type, loc) : null, loc),
9654
9833
  loc,
9655
9834
  },
9656
9835
  ...(cit.hasDone
@@ -9694,8 +9873,16 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
9694
9873
  },
9695
9874
  ]
9696
9875
  : []),
9876
+ ...setDone(false),
9697
9877
  ];
9698
9878
  const body = lowerer.inCtl("loop", () => lowerer.lowerScopedBlock(stmt.statement), labels);
9879
+ const loop = {
9880
+ kind: "while",
9881
+ cond: { kind: "boolLit", value: true, type: BOOL, loc },
9882
+ body: [...head, ...body],
9883
+ ...(labels && { labels }),
9884
+ loc,
9885
+ };
9699
9886
  return {
9700
9887
  kind: "block",
9701
9888
  body: [
@@ -9706,13 +9893,48 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
9706
9893
  init: lowerer.classIteratorOpenCall(cit, recvRef, loc),
9707
9894
  loc,
9708
9895
  },
9709
- {
9710
- kind: "while",
9711
- cond: { kind: "boolLit", value: true, type: BOOL, loc },
9712
- body: [...head, ...body],
9713
- ...(labels && { labels }),
9714
- loc,
9715
- },
9896
+ ...(next && nextRead
9897
+ ? [{ kind: "varDecl", localId: next.id, init: nextRead, loc }]
9898
+ : []),
9899
+ ...(done
9900
+ ? [
9901
+ {
9902
+ kind: "varDecl",
9903
+ localId: done.id,
9904
+ init: { kind: "boolLit", value: true, type: BOOL, loc },
9905
+ loc,
9906
+ },
9907
+ {
9908
+ kind: "tryCatch",
9909
+ tryBody: [loop],
9910
+ catchBody: null,
9911
+ catchLocalId: null,
9912
+ dropFinallyErrors: true,
9913
+ finallyBody: [
9914
+ {
9915
+ kind: "if",
9916
+ cond: {
9917
+ kind: "unary",
9918
+ op: "!",
9919
+ operand: { kind: "varRef", localId: done.id, type: BOOL, loc },
9920
+ type: BOOL,
9921
+ loc,
9922
+ },
9923
+ then: [
9924
+ {
9925
+ kind: "exprStmt",
9926
+ expr: lowerer.classIteratorReturnCall(cit, itRef(), loc),
9927
+ loc,
9928
+ },
9929
+ ],
9930
+ else_: null,
9931
+ loc,
9932
+ },
9933
+ ],
9934
+ loc,
9935
+ },
9936
+ ]
9937
+ : [loop]),
9716
9938
  ],
9717
9939
  loc,
9718
9940
  };
@@ -9724,7 +9946,7 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
9724
9946
  /** A checked IteratorRecord stays live throughout the loop. Cache next once,
9725
9947
  * read done before value, and close only after a yielded value has arrived.
9726
9948
  * Abrupt body throws retain precedence over errors raised by return(). */
9727
- function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
9949
+ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false, syncOpen = false) {
9728
9950
  const loc = locOf(stmt);
9729
9951
  const spell = notIterableSpelling(stmt.expression, asyncLoop ? "async iterable" : "iterable");
9730
9952
  const iterator = lowerer.declareHiddenLocal("%dofIterator", DYN);
@@ -9734,6 +9956,7 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
9734
9956
  done.mutable = true;
9735
9957
  const value = lowerer.declareHiddenLocal("%dofValue", DYN);
9736
9958
  const returned = lowerer.declareHiddenLocal("%dofReturn", DYN);
9959
+ const closed = lowerer.declareHiddenLocal("%dofClosed", DYN);
9737
9960
  const needsClose = lowerer.declareHiddenLocal("%dofNeedsClose", BOOL);
9738
9961
  needsClose.mutable = true;
9739
9962
  const error = lowerer.declareHiddenLocal("%dofError", CAUGHT);
@@ -9798,9 +10021,10 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
9798
10021
  },
9799
10022
  then: [
9800
10023
  {
9801
- kind: "exprStmt",
10024
+ kind: "varDecl",
10025
+ localId: closed.id,
9802
10026
  // return()'s (awaited) result must be an object, as for next().
9803
- expr: asyncLoop
10027
+ init: asyncLoop
9804
10028
  ? check(awaitDyn({
9805
10029
  kind: "dynCall",
9806
10030
  callee: varRef(returned.id, DYN, loc),
@@ -9813,6 +10037,27 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
9813
10037
  : call(varRef(returned.id, DYN, loc)),
9814
10038
  loc,
9815
10039
  },
10040
+ // A synchronous iterator's return() result is read as the
10041
+ // async-from-sync iterator reads it: done, then the value, which is
10042
+ // awaited, so a rejected promise there rejects the loop.
10043
+ ...(syncIterator
10044
+ ? [
10045
+ {
10046
+ kind: "if",
10047
+ cond: varRef(syncIterator.id, BOOL, loc),
10048
+ then: [
10049
+ { kind: "exprStmt", expr: get(varRef(closed.id, DYN, loc), "done"), loc },
10050
+ {
10051
+ kind: "exprStmt",
10052
+ expr: awaitDyn(get(varRef(closed.id, DYN, loc), "value")),
10053
+ loc,
10054
+ },
10055
+ ],
10056
+ else_: null,
10057
+ loc,
10058
+ },
10059
+ ]
10060
+ : []),
9816
10061
  ],
9817
10062
  else_: null,
9818
10063
  loc,
@@ -9921,7 +10166,7 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
9921
10166
  localId: iterator.id,
9922
10167
  init: check({
9923
10168
  kind: "libCall",
9924
- fn: asyncLoop ? "dyn.asyncIteratorOpen" : "dyn.iterator",
10169
+ fn: asyncLoop && !syncOpen ? "dyn.asyncIteratorOpen" : "dyn.iterator",
9925
10170
  args: [iterable, { kind: "strLit", value: spell, type: STRING, loc }],
9926
10171
  type: DYN,
9927
10172
  loc,
@@ -9933,13 +10178,15 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
9933
10178
  {
9934
10179
  kind: "varDecl",
9935
10180
  localId: syncIterator.id,
9936
- init: {
9937
- kind: "libCall",
9938
- fn: "dyn.asyncIteratorWasSync",
9939
- args: [],
9940
- type: BOOL,
9941
- loc,
9942
- },
10181
+ init: syncOpen
10182
+ ? { kind: "boolLit", value: true, type: BOOL, loc }
10183
+ : {
10184
+ kind: "libCall",
10185
+ fn: "dyn.asyncIteratorWasSync",
10186
+ args: [],
10187
+ type: BOOL,
10188
+ loc,
10189
+ },
9943
10190
  loc,
9944
10191
  },
9945
10192
  ]
@@ -10341,6 +10588,7 @@ function lowerForIn(lowerer, stmt) {
10341
10588
  // them (accessor slots live outside declaredOrder), so the loop
10342
10589
  // fences rather than skip keys.
10343
10590
  fencePerfEntryKeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
10591
+ fenceX509KeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
10344
10592
  if (shapeHasAccessorSlots(rShape)) {
10345
10593
  lowerer.unsupported("SC1090", stmt.expression, "for-in over a shape carrying get/set accessor properties (Node visits the accessor names — the static key walk cannot; read the properties explicitly)");
10346
10594
  }