@scriptc/compiler 0.3.6 → 0.4.1

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 (1358) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +717 -55
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +20 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +9 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +41 -4
  22. package/dist/backend/llvm/alloc.js +138 -7
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/alloc.test.js +30 -1
  25. package/dist/backend/llvm/alloc.test.js.map +1 -1
  26. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  27. package/dist/backend/llvm/array-search.js +3 -1
  28. package/dist/backend/llvm/array-search.js.map +1 -1
  29. package/dist/backend/llvm/array-search.test.js +1 -1
  30. package/dist/backend/llvm/blocks.d.ts +8 -0
  31. package/dist/backend/llvm/blocks.js +43 -1
  32. package/dist/backend/llvm/blocks.js.map +1 -1
  33. package/dist/backend/llvm/blocks.test.js +22 -1
  34. package/dist/backend/llvm/blocks.test.js.map +1 -1
  35. package/dist/backend/llvm/byte-numbers.js +15 -5
  36. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  37. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  38. package/dist/backend/llvm/bytes-alias.js +20 -0
  39. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  40. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  41. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  42. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  43. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  44. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  45. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  46. package/dist/backend/llvm/call-lifetimes.js +50 -1
  47. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  48. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  49. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  50. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  51. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  52. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  53. package/dist/backend/llvm/classes.d.ts +38 -1
  54. package/dist/backend/llvm/classes.js +185 -35
  55. package/dist/backend/llvm/classes.js.map +1 -1
  56. package/dist/backend/llvm/classes.test.js +79 -17
  57. package/dist/backend/llvm/classes.test.js.map +1 -1
  58. package/dist/backend/llvm/common.d.ts +21 -3
  59. package/dist/backend/llvm/common.js +51 -3
  60. package/dist/backend/llvm/common.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  62. package/dist/backend/llvm/constant-callbacks.js +55 -12
  63. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  64. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  65. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  66. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  67. package/dist/backend/llvm/counted-loops.js +37 -0
  68. package/dist/backend/llvm/counted-loops.js.map +1 -1
  69. package/dist/backend/llvm/dense-array-access.d.ts +15 -4
  70. package/dist/backend/llvm/dense-array-access.js +125 -44
  71. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  72. package/dist/backend/llvm/dense-array-access.test.js +63 -3
  73. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  74. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  75. package/dist/backend/llvm/dense-array-loops.js +162 -0
  76. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  77. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  78. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  79. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  80. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  81. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  82. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  83. package/dist/backend/llvm/dyn.d.ts +37 -4
  84. package/dist/backend/llvm/dyn.js +354 -183
  85. package/dist/backend/llvm/dyn.js.map +1 -1
  86. package/dist/backend/llvm/emit-function.d.ts +64 -0
  87. package/dist/backend/llvm/emit-function.js +1193 -0
  88. package/dist/backend/llvm/emit-function.js.map +1 -0
  89. package/dist/backend/llvm/emit-module.d.ts +24 -0
  90. package/dist/backend/llvm/emit-module.js +1557 -0
  91. package/dist/backend/llvm/emit-module.js.map +1 -0
  92. package/dist/backend/llvm/emit-statements.d.ts +59 -0
  93. package/dist/backend/llvm/emit-statements.js +2041 -0
  94. package/dist/backend/llvm/emit-statements.js.map +1 -0
  95. package/dist/backend/llvm/emitter.d.ts +566 -291
  96. package/dist/backend/llvm/emitter.js +728 -4671
  97. package/dist/backend/llvm/emitter.js.map +1 -1
  98. package/dist/backend/llvm/emitter.test.js +57 -3
  99. package/dist/backend/llvm/emitter.test.js.map +1 -1
  100. package/dist/backend/llvm/expr-async.js +73 -46
  101. package/dist/backend/llvm/expr-async.js.map +1 -1
  102. package/dist/backend/llvm/expr-async.test.js +1 -1
  103. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  104. package/dist/backend/llvm/expr-bytes.js +76 -29
  105. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  106. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  107. package/dist/backend/llvm/expr-callbacks.js +48 -11
  108. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  109. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  110. package/dist/backend/llvm/expr-calls.js +87 -56
  111. package/dist/backend/llvm/expr-calls.js.map +1 -1
  112. package/dist/backend/llvm/expr-calls.test.js +1 -1
  113. package/dist/backend/llvm/expr-containers.js +45 -24
  114. package/dist/backend/llvm/expr-containers.js.map +1 -1
  115. package/dist/backend/llvm/expr-control.js +16 -16
  116. package/dist/backend/llvm/expr-control.js.map +1 -1
  117. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  118. package/dist/backend/llvm/expr-dynamic.js +113 -66
  119. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  120. package/dist/backend/llvm/expr-primitives.js +124 -28
  121. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  122. package/dist/backend/llvm/expr-primitives.test.js +57 -2
  123. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  124. package/dist/backend/llvm/expr-records.d.ts +1 -1
  125. package/dist/backend/llvm/expr-records.js +32 -11
  126. package/dist/backend/llvm/expr-records.js.map +1 -1
  127. package/dist/backend/llvm/expr-stream-bridges.js +65 -27
  128. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  129. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  130. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  131. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  132. package/dist/backend/llvm/int32-abi.test.js +2 -2
  133. package/dist/backend/llvm/integer-clones.js +3 -3
  134. package/dist/backend/llvm/integer-clones.js.map +1 -1
  135. package/dist/backend/llvm/integer-clones.test.js +3 -3
  136. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  137. package/dist/backend/llvm/integer-remainder.js +156 -22
  138. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  139. package/dist/backend/llvm/intern-tables.test.js +1 -1
  140. package/dist/backend/llvm/js-ic.d.ts +18 -0
  141. package/dist/backend/llvm/js-ic.js +712 -0
  142. package/dist/backend/llvm/js-ic.js.map +1 -0
  143. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  144. package/dist/backend/llvm/jsval-encoding.js +20 -0
  145. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  146. package/dist/backend/llvm/jsval.d.ts +12 -0
  147. package/dist/backend/llvm/jsval.js +616 -0
  148. package/dist/backend/llvm/jsval.js.map +1 -0
  149. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  150. package/dist/backend/llvm/lazy-captures.js +39 -17
  151. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  152. package/dist/backend/llvm/lib-abi.js +1 -1
  153. package/dist/backend/llvm/lib-abi.js.map +1 -1
  154. package/dist/backend/llvm/lib-connect.js +1 -1
  155. package/dist/backend/llvm/lib-connect.js.map +1 -1
  156. package/dist/backend/llvm/lib-datagram.js +14 -8
  157. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  158. package/dist/backend/llvm/lib-dispatch.js +189 -23
  159. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  160. package/dist/backend/llvm/lib-filesystem.js +42 -13
  161. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  162. package/dist/backend/llvm/lib-http2.js +3 -3
  163. package/dist/backend/llvm/lib-http2.js.map +1 -1
  164. package/dist/backend/llvm/lib-lookup.js +2 -2
  165. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  166. package/dist/backend/llvm/lib-network.js +56 -22
  167. package/dist/backend/llvm/lib-network.js.map +1 -1
  168. package/dist/backend/llvm/lib-process.js +94 -53
  169. package/dist/backend/llvm/lib-process.js.map +1 -1
  170. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  171. package/dist/backend/llvm/lib-shared.js +209 -6
  172. package/dist/backend/llvm/lib-shared.js.map +1 -1
  173. package/dist/backend/llvm/lib-stream.js +46 -16
  174. package/dist/backend/llvm/lib-stream.js.map +1 -1
  175. package/dist/backend/llvm/lib-test.js +43 -7
  176. package/dist/backend/llvm/lib-test.js.map +1 -1
  177. package/dist/backend/llvm/lib-tls.js +4 -9
  178. package/dist/backend/llvm/lib-tls.js.map +1 -1
  179. package/dist/backend/llvm/local-array-reads.js +42 -33
  180. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  181. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  182. package/dist/backend/llvm/local-extents.d.ts +19 -0
  183. package/dist/backend/llvm/local-extents.js +169 -0
  184. package/dist/backend/llvm/local-extents.js.map +1 -0
  185. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  186. package/dist/backend/llvm/local-extents.test.js +92 -0
  187. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  188. package/dist/backend/llvm/local-union-storage.js +7 -7
  189. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  190. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  191. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  192. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  193. package/dist/backend/llvm/map-number-lookup.js +45 -9
  194. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  195. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  196. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  197. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  198. package/dist/backend/llvm/narrow-guards.js +215 -0
  199. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  200. package/dist/backend/llvm/nullable-unions.d.ts +64 -6
  201. package/dist/backend/llvm/nullable-unions.js +103 -6
  202. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  203. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  204. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  205. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  206. package/dist/backend/llvm/publish.d.ts +7 -0
  207. package/dist/backend/llvm/publish.js +50 -19
  208. package/dist/backend/llvm/publish.js.map +1 -1
  209. package/dist/backend/llvm/publish.test.js +1 -1
  210. package/dist/backend/llvm/receivers.d.ts +31 -0
  211. package/dist/backend/llvm/receivers.js +395 -0
  212. package/dist/backend/llvm/receivers.js.map +1 -0
  213. package/dist/backend/llvm/record-results.d.ts +12 -1
  214. package/dist/backend/llvm/record-results.js +64 -4
  215. package/dist/backend/llvm/record-results.js.map +1 -1
  216. package/dist/backend/llvm/reference-effects.js +9 -0
  217. package/dist/backend/llvm/reference-effects.js.map +1 -1
  218. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  219. package/dist/backend/llvm/reference-writes.js +142 -6
  220. package/dist/backend/llvm/reference-writes.js.map +1 -1
  221. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  222. package/dist/backend/llvm/reference-writes.test.js +88 -0
  223. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  224. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  225. package/dist/backend/llvm/regex-matchers.js +33 -0
  226. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  227. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  228. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  229. package/dist/backend/llvm/regions.d.ts +1 -1
  230. package/dist/backend/llvm/regions.js +10 -7
  231. package/dist/backend/llvm/regions.js.map +1 -1
  232. package/dist/backend/llvm/regions.test.js +8 -2
  233. package/dist/backend/llvm/regions.test.js.map +1 -1
  234. package/dist/backend/llvm/shapes.d.ts +74 -45
  235. package/dist/backend/llvm/shapes.js +289 -28
  236. package/dist/backend/llvm/shapes.js.map +1 -1
  237. package/dist/backend/llvm/shapes.test.js +37 -3
  238. package/dist/backend/llvm/shapes.test.js.map +1 -1
  239. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  240. package/dist/backend/llvm/speculative-integers.js +94 -6
  241. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  242. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  243. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  244. package/dist/backend/llvm/split-loops.js +2 -2
  245. package/dist/backend/llvm/split-loops.js.map +1 -1
  246. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  247. package/dist/backend/llvm/stack-objects.js +133 -10
  248. package/dist/backend/llvm/stack-objects.js.map +1 -1
  249. package/dist/backend/llvm/stack-objects.test.js +55 -1
  250. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  251. package/dist/backend/llvm/stack-unions.test.js +1 -1
  252. package/dist/backend/llvm/string-construction.test.js +1 -1
  253. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  254. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  255. package/dist/backend/llvm/string-reads.d.ts +1 -1
  256. package/dist/backend/llvm/string-reads.js +4 -4
  257. package/dist/backend/llvm/string-reads.js.map +1 -1
  258. package/dist/backend/llvm/string-slices.d.ts +25 -0
  259. package/dist/backend/llvm/string-slices.js +207 -1
  260. package/dist/backend/llvm/string-slices.js.map +1 -1
  261. package/dist/backend/llvm/string-slices.test.js +139 -2
  262. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  263. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  264. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  265. package/dist/backend/llvm/thread-slots.js +142 -0
  266. package/dist/backend/llvm/thread-slots.js.map +1 -0
  267. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  268. package/dist/backend/llvm/thread-slots.test.js +111 -0
  269. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  270. package/dist/backend/llvm/union-repr.d.ts +7 -7
  271. package/dist/backend/llvm/union-repr.js +18 -2
  272. package/dist/backend/llvm/union-repr.js.map +1 -1
  273. package/dist/backend/llvm/union-retype.test.js +17 -3
  274. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  275. package/dist/backend/llvm/walkers.d.ts +2 -2
  276. package/dist/backend/llvm/walkers.js +51 -26
  277. package/dist/backend/llvm/walkers.js.map +1 -1
  278. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  279. package/dist/backend/llvm/wasm-modules.js +66 -0
  280. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  281. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  282. package/dist/backend/llvm/wrapping-sums.js +11 -3
  283. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  284. package/dist/backend/mangle.d.ts +12 -0
  285. package/dist/backend/mangle.js +18 -0
  286. package/dist/backend/mangle.js.map +1 -1
  287. package/dist/backend/may-throw.d.ts +3 -0
  288. package/dist/backend/may-throw.js +4 -2
  289. package/dist/backend/may-throw.js.map +1 -1
  290. package/dist/backend/may-throw.test.js +1 -1
  291. package/dist/backend/native/contracts.d.ts +57 -0
  292. package/dist/backend/native/executable.js +211 -139
  293. package/dist/backend/native/executable.js.map +1 -1
  294. package/dist/backend/native/library.js +2 -0
  295. package/dist/backend/native/library.js.map +1 -1
  296. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  297. package/dist/backend/native/runtime-inputs.js +1 -0
  298. package/dist/backend/native/runtime-inputs.js.map +1 -1
  299. package/dist/backend/native-codegen.d.ts +6 -0
  300. package/dist/backend/native-codegen.js +19 -0
  301. package/dist/backend/native-codegen.js.map +1 -1
  302. package/dist/backend/native-codegen.test.js +27 -0
  303. package/dist/backend/native-codegen.test.js.map +1 -1
  304. package/dist/backend/native-link-info-core.d.ts +48 -0
  305. package/dist/backend/native-link-info-core.js.map +1 -1
  306. package/dist/backend/native-profile.d.ts +32 -0
  307. package/dist/backend/native-profile.js +39 -0
  308. package/dist/backend/native-profile.js.map +1 -0
  309. package/dist/backend/native-profile.test.d.ts +1 -0
  310. package/dist/backend/native-profile.test.js +58 -0
  311. package/dist/backend/native-profile.test.js.map +1 -0
  312. package/dist/backend/native-tools.d.ts +14 -0
  313. package/dist/backend/native-tools.js +13 -0
  314. package/dist/backend/native-tools.js.map +1 -1
  315. package/dist/backend/publication.test.js +1 -1
  316. package/dist/backend/runtime-abi.d.ts +2 -2
  317. package/dist/backend/runtime-abi.js +2 -2
  318. package/dist/backend/runtime-pack-core.d.ts +13 -1
  319. package/dist/backend/runtime-pack-core.js +14 -1
  320. package/dist/backend/runtime-pack-core.js.map +1 -1
  321. package/dist/backend/runtime-pack-native.js +1 -1
  322. package/dist/backend/runtime-pack-native.js.map +1 -1
  323. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  324. package/dist/backend/runtime-pack-native.test.js +31 -0
  325. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  326. package/dist/backend/runtime-pack-targets.test.js +9 -1
  327. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  328. package/dist/backend/runtime-pack.test.js +9 -1
  329. package/dist/backend/runtime-pack.test.js.map +1 -1
  330. package/dist/backend/stack-observations.d.ts +22 -0
  331. package/dist/backend/stack-observations.js +382 -0
  332. package/dist/backend/stack-observations.js.map +1 -0
  333. package/dist/backend/stack-observations.test.d.ts +1 -0
  334. package/dist/backend/stack-observations.test.js +233 -0
  335. package/dist/backend/stack-observations.test.js.map +1 -0
  336. package/dist/backend/target-diagnostics.js +15 -0
  337. package/dist/backend/target-diagnostics.js.map +1 -1
  338. package/dist/backend/target-diagnostics.test.js +1 -1
  339. package/dist/backend/warm-cache.js +8 -0
  340. package/dist/backend/warm-cache.js.map +1 -1
  341. package/dist/backend/young-nursery.d.ts +7 -0
  342. package/dist/backend/young-nursery.js +10 -0
  343. package/dist/backend/young-nursery.js.map +1 -0
  344. package/dist/cli/command.js +106 -4
  345. package/dist/cli/command.js.map +1 -1
  346. package/dist/cli/host.d.ts +3 -0
  347. package/dist/cli/output-options.d.ts +2 -0
  348. package/dist/cli/output-options.js +9 -0
  349. package/dist/cli/output-options.js.map +1 -1
  350. package/dist/cli/usage.d.ts +21 -1
  351. package/dist/cli/usage.js +43 -1
  352. package/dist/cli/usage.js.map +1 -1
  353. package/dist/compat/fetch-profile.js +10 -1
  354. package/dist/compat/fetch-profile.js.map +1 -1
  355. package/dist/compile-types.d.ts +22 -0
  356. package/dist/contracts/check.js +25 -8
  357. package/dist/contracts/check.js.map +1 -1
  358. package/dist/contracts/int32-elements.d.ts +115 -0
  359. package/dist/contracts/int32-elements.js +1179 -0
  360. package/dist/contracts/int32-elements.js.map +1 -0
  361. package/dist/coverage/report.d.ts +16 -0
  362. package/dist/coverage/report.js +182 -1
  363. package/dist/coverage/report.js.map +1 -1
  364. package/dist/coverage/surface-manifest.js +16 -3
  365. package/dist/coverage/surface-manifest.js.map +1 -1
  366. package/dist/coverage/verdict-cache.d.ts +2 -0
  367. package/dist/coverage/verdict-cache.js +12 -0
  368. package/dist/coverage/verdict-cache.js.map +1 -1
  369. package/dist/coverage/verdict-cache.test.js +2 -1
  370. package/dist/coverage/verdict-cache.test.js.map +1 -1
  371. package/dist/diagnostics/diagnostic.d.ts +10 -6
  372. package/dist/diagnostics/diagnostic.js +29 -21
  373. package/dist/diagnostics/diagnostic.js.map +1 -1
  374. package/dist/diagnostics/envelope.d.ts +39 -2
  375. package/dist/diagnostics/envelope.js.map +1 -1
  376. package/dist/diagnostics/render.d.ts +7 -0
  377. package/dist/diagnostics/render.js +50 -13
  378. package/dist/diagnostics/render.js.map +1 -1
  379. package/dist/diagnostics/render.test.d.ts +1 -0
  380. package/dist/diagnostics/render.test.js +49 -0
  381. package/dist/diagnostics/render.test.js.map +1 -0
  382. package/dist/executable/executable-cache.d.ts +27 -0
  383. package/dist/executable/executable-cache.js +19 -1
  384. package/dist/executable/executable-cache.js.map +1 -1
  385. package/dist/executable/executable-cache.test.js +12 -1
  386. package/dist/executable/executable-cache.test.js.map +1 -1
  387. package/dist/executable/prepare.js +2 -1
  388. package/dist/executable/prepare.js.map +1 -1
  389. package/dist/frontend/analysis.js +6 -1
  390. package/dist/frontend/analysis.js.map +1 -1
  391. package/dist/frontend/arguments-usage.d.ts +8 -0
  392. package/dist/frontend/arguments-usage.js +98 -0
  393. package/dist/frontend/arguments-usage.js.map +1 -1
  394. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  395. package/dist/frontend/arguments-usage.test.js +32 -0
  396. package/dist/frontend/arguments-usage.test.js.map +1 -0
  397. package/dist/frontend/builtin-modules.d.ts +16 -2
  398. package/dist/frontend/builtin-modules.js +40 -7
  399. package/dist/frontend/builtin-modules.js.map +1 -1
  400. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  401. package/dist/frontend/builtin-package-aliases.js +133 -0
  402. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  403. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  404. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  405. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  406. package/dist/frontend/cjs-syntax.js +52 -51
  407. package/dist/frontend/cjs-syntax.js.map +1 -1
  408. package/dist/frontend/contract-types.d.ts +3 -0
  409. package/dist/frontend/contract-types.js +36 -7
  410. package/dist/frontend/contract-types.js.map +1 -1
  411. package/dist/frontend/dts-paths.d.ts +4 -0
  412. package/dist/frontend/dts-paths.js +9 -1
  413. package/dist/frontend/dts-paths.js.map +1 -1
  414. package/dist/frontend/experimental-import.d.ts +5 -1
  415. package/dist/frontend/experimental-import.js +26 -7
  416. package/dist/frontend/experimental-import.js.map +1 -1
  417. package/dist/frontend/fork-target.js +20 -22
  418. package/dist/frontend/fork-target.js.map +1 -1
  419. package/dist/frontend/fork-target.test.js +2 -1
  420. package/dist/frontend/fork-target.test.js.map +1 -1
  421. package/dist/frontend/function-completion.js +6 -6
  422. package/dist/frontend/function-completion.js.map +1 -1
  423. package/dist/frontend/helper-tokens.js +15 -3
  424. package/dist/frontend/helper-tokens.js.map +1 -1
  425. package/dist/frontend/helper-tokens.test.js +7 -1
  426. package/dist/frontend/helper-tokens.test.js.map +1 -1
  427. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  428. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  429. package/dist/frontend/input-tracker.d.ts +3 -0
  430. package/dist/frontend/input-tracker.js +32 -3
  431. package/dist/frontend/input-tracker.js.map +1 -1
  432. package/dist/frontend/lib-contract.js +36 -32
  433. package/dist/frontend/lib-contract.js.map +1 -1
  434. package/dist/frontend/lib-exports.js +3 -3
  435. package/dist/frontend/lib-exports.js.map +1 -1
  436. package/dist/frontend/lowering/array-values.d.ts +8 -3
  437. package/dist/frontend/lowering/array-values.js +60 -11
  438. package/dist/frontend/lowering/array-values.js.map +1 -1
  439. package/dist/frontend/lowering/assert-instances.js +4 -4
  440. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  441. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  442. package/dist/frontend/lowering/assertion-identity.js +70 -0
  443. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  444. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  445. package/dist/frontend/lowering/assertion-members.js +185 -0
  446. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  447. package/dist/frontend/lowering/binding-analysis.js +27 -20
  448. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  449. package/dist/frontend/lowering/builtin-calls.js +63 -5
  450. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  451. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  452. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  453. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  455. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  457. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  459. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/blob.js +8 -6
  461. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  462. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +31 -0
  463. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
  464. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  465. package/dist/frontend/lowering/builtins/callable-aliases.js +17 -5
  466. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  468. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  470. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  471. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  473. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  475. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  476. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  478. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  479. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  481. package/dist/frontend/lowering/builtins/compression.js +107 -44
  482. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  483. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  484. package/dist/frontend/lowering/builtins/constants.js +28 -7
  485. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  486. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  487. package/dist/frontend/lowering/builtins/crypto.js +215 -38
  488. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  489. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  490. package/dist/frontend/lowering/builtins/dates.js +92 -16
  491. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  492. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  493. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  494. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  495. package/dist/frontend/lowering/builtins/ecdh.d.ts +10 -0
  496. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  497. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  498. package/dist/frontend/lowering/builtins/environment.js +3 -3
  499. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  500. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  501. package/dist/frontend/lowering/builtins/errors.js +169 -3
  502. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  503. package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
  504. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  505. package/dist/frontend/lowering/builtins/filesystem.js +77 -77
  506. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  508. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  510. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  512. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  513. package/dist/frontend/lowering/builtins/json.js +284 -24
  514. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  515. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  516. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  517. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  518. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  519. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/module-calls.js +55 -44
  521. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  522. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  523. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  524. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  526. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  527. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  529. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  530. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  532. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  533. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  534. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  535. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  536. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  537. package/dist/frontend/lowering/builtins/performance.js +259 -8
  538. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  539. package/dist/frontend/lowering/builtins/process.d.ts +41 -1
  540. package/dist/frontend/lowering/builtins/process.js +505 -99
  541. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  542. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  543. package/dist/frontend/lowering/builtins/promises.js +326 -43
  544. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  545. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +40 -0
  546. package/dist/frontend/lowering/builtins/promisify-callback.js +338 -0
  547. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  548. package/dist/frontend/lowering/builtins/properties.js +37 -1
  549. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  550. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  551. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  552. package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
  553. package/dist/frontend/lowering/builtins/readline.js +136 -39
  554. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  555. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  556. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  557. package/dist/frontend/lowering/builtins/reflection.js +42 -14
  558. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  559. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  560. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  561. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  562. package/dist/frontend/lowering/builtins/strings.js +101 -12
  563. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  565. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  566. package/dist/frontend/lowering/builtins/timers.js +79 -30
  567. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  568. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  569. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  570. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  571. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  572. package/dist/frontend/lowering/builtins/url.js +120 -17
  573. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  574. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  575. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  577. package/dist/frontend/lowering/builtins/v8.js +105 -0
  578. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  579. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  580. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  581. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  582. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  583. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  584. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  585. package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
  586. package/dist/frontend/lowering/builtins/workers.js +193 -8
  587. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  588. package/dist/frontend/lowering/call-arguments.js +69 -14
  589. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  590. package/dist/frontend/lowering/call-signatures.d.ts +23 -1
  591. package/dist/frontend/lowering/call-signatures.js +379 -55
  592. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  593. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  594. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  595. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  596. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  597. package/dist/frontend/lowering/cjs-exports-object.js +561 -0
  598. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  599. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  600. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  601. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  602. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  603. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  604. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  605. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  606. package/dist/frontend/lowering/class-attributes.js +378 -0
  607. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  608. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  609. package/dist/frontend/lowering/class-callbacks.js +21 -10
  610. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  611. package/dist/frontend/lowering/class-construction.js +49 -4
  612. package/dist/frontend/lowering/class-construction.js.map +1 -1
  613. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  614. package/dist/frontend/lowering/class-descriptors.js +8 -8
  615. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  616. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  617. package/dist/frontend/lowering/class-dynamic-dispatch.js +1124 -90
  618. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  619. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  620. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  621. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  622. package/dist/frontend/lowering/class-iterables.js +31 -0
  623. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  624. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  625. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  626. package/dist/frontend/lowering/class-method-values.js +56 -10
  627. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  628. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  629. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  630. package/dist/frontend/lowering/class-protocols.d.ts +10 -0
  631. package/dist/frontend/lowering/class-protocols.js +76 -45
  632. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  633. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  634. package/dist/frontend/lowering/class-prototypes.js +86 -19
  635. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  636. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  637. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  638. package/dist/frontend/lowering/class-static-data.js +2 -2
  639. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  640. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  641. package/dist/frontend/lowering/class-to-primitive.js +264 -0
  642. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  643. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  644. package/dist/frontend/lowering/class-unions.js +102 -1
  645. package/dist/frontend/lowering/class-unions.js.map +1 -1
  646. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  647. package/dist/frontend/lowering/code-generation.js +127 -0
  648. package/dist/frontend/lowering/code-generation.js.map +1 -0
  649. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  650. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  651. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  652. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  653. package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
  654. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  655. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  656. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  657. package/dist/frontend/lowering/coercions/structural.js +35 -3
  658. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  659. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  660. package/dist/frontend/lowering/coercions/unions.js +57 -1
  661. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  662. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  663. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  664. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  665. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  666. package/dist/frontend/lowering/construction-escapes.js +8 -8
  667. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  668. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  669. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  670. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  671. package/dist/frontend/lowering/constructor-returns.js +477 -0
  672. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  673. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  674. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  675. package/dist/frontend/lowering/containers/array-callbacks.d.ts +17 -0
  676. package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
  677. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  678. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  679. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  680. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  681. package/dist/frontend/lowering/containers/array-construction.js +58 -13
  682. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  683. package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
  684. package/dist/frontend/lowering/containers/array-from-async.js +159 -14
  685. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  686. package/dist/frontend/lowering/containers/array-methods.js +94 -77
  687. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  688. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  689. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  690. package/dist/frontend/lowering/containers/bytes.d.ts +9 -0
  691. package/dist/frontend/lowering/containers/bytes.js +649 -113
  692. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  693. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  694. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  695. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  696. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  697. package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
  698. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  699. package/dist/frontend/lowering/containers/collection-methods.js +126 -28
  700. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  701. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  702. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  703. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  704. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  705. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  706. package/dist/frontend/lowering/containers/for-of.js +19 -19
  707. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  708. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  709. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  710. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  711. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  712. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  713. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  714. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  715. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  716. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  717. package/dist/frontend/lowering/containers/string-and-regexp.js +455 -30
  718. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  719. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  720. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  721. package/dist/frontend/lowering/cycle-initialization.d.ts +30 -10
  722. package/dist/frontend/lowering/cycle-initialization.js +191 -35
  723. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  724. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  725. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  726. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  727. package/dist/frontend/lowering/devirtualize.js +27 -7
  728. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  729. package/dist/frontend/lowering/divergences.d.ts +0 -5
  730. package/dist/frontend/lowering/divergences.js +62 -125
  731. package/dist/frontend/lowering/divergences.js.map +1 -1
  732. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  733. package/dist/frontend/lowering/dyn-streams.js +257 -0
  734. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  735. package/dist/frontend/lowering/error-methods.js +4 -1
  736. package/dist/frontend/lowering/error-methods.js.map +1 -1
  737. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  738. package/dist/frontend/lowering/error-name-order.js +93 -0
  739. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  740. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  741. package/dist/frontend/lowering/expressions/array-literals.js +723 -0
  742. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  743. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  744. package/dist/frontend/lowering/expressions/binary.js +2557 -0
  745. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  746. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  747. package/dist/frontend/lowering/expressions/element-access.js +1804 -0
  748. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  749. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  750. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  751. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  752. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  753. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  754. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  755. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  756. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  757. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +52 -0
  758. package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -0
  759. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  760. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  761. package/dist/frontend/lowering/expressions/narrowing.js +1337 -0
  762. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  763. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  764. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  765. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  766. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  767. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  768. package/dist/frontend/lowering/expressions/object-literals.js +301 -86
  769. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  770. package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
  771. package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
  772. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  773. package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
  774. package/dist/frontend/lowering/expressions/property-access.js +3787 -0
  775. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  776. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  777. package/dist/frontend/lowering/expressions/relational.js +1724 -0
  778. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  779. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  780. package/dist/frontend/lowering/expressions/typeof.js +551 -0
  781. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  782. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  783. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  784. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  785. package/dist/frontend/lowering/expressions/updates.js +780 -0
  786. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  787. package/dist/frontend/lowering/function-context.d.ts +10 -0
  788. package/dist/frontend/lowering/function-context.js +11 -1
  789. package/dist/frontend/lowering/function-context.js.map +1 -1
  790. package/dist/frontend/lowering/function-returns.js +52 -28
  791. package/dist/frontend/lowering/function-returns.js.map +1 -1
  792. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  793. package/dist/frontend/lowering/general-streams.js +108 -0
  794. package/dist/frontend/lowering/general-streams.js.map +1 -0
  795. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  796. package/dist/frontend/lowering/generator-delegation.js +191 -1
  797. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  798. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  799. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  800. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  801. package/dist/frontend/lowering/generic-functions.d.ts +43 -0
  802. package/dist/frontend/lowering/generic-functions.js +593 -118
  803. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  804. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  805. package/dist/frontend/lowering/handle-properties.js +281 -0
  806. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  807. package/dist/frontend/lowering/import-meta.js +2 -2
  808. package/dist/frontend/lowering/import-meta.js.map +1 -1
  809. package/dist/frontend/lowering/intern-tables.js +10 -9
  810. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  811. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  812. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  813. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  814. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  815. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  816. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  817. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  818. package/dist/frontend/lowering/js-class-fields.js +170 -0
  819. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  820. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  821. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  822. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  823. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  824. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  825. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  826. package/dist/frontend/lowering/json-require.d.ts +22 -0
  827. package/dist/frontend/lowering/json-require.js +131 -0
  828. package/dist/frontend/lowering/json-require.js.map +1 -0
  829. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  830. package/dist/frontend/lowering/key-order-witness.js +641 -0
  831. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  832. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  833. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  834. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  835. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  836. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  837. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  838. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  839. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  840. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  841. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  842. package/dist/frontend/lowering/lower-assert.js +61 -60
  843. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  844. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  845. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  846. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  847. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  848. package/dist/frontend/lowering/lower-builtin-values.js +33 -3
  849. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  850. package/dist/frontend/lowering/lower-calls.js +1404 -448
  851. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  852. package/dist/frontend/lowering/lower-classes.d.ts +54 -3
  853. package/dist/frontend/lowering/lower-classes.js +1529 -472
  854. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  855. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  856. package/dist/frontend/lowering/lower-comptime.js +111 -13
  857. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  858. package/dist/frontend/lowering/lower-console.js +13 -11
  859. package/dist/frontend/lowering/lower-console.js.map +1 -1
  860. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  861. package/dist/frontend/lowering/lower-dgram.js +241 -21
  862. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  863. package/dist/frontend/lowering/lower-enums.js +113 -14
  864. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  865. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  866. package/dist/frontend/lowering/lower-event-emitter.js +258 -70
  867. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  868. package/dist/frontend/lowering/lower-event-target.js +2 -2
  869. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  870. package/dist/frontend/lowering/lower-expando.js +17 -13
  871. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  872. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  873. package/dist/frontend/lowering/lower-exprs.js +1509 -12486
  874. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  875. package/dist/frontend/lowering/lower-functions.js +72 -22
  876. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  877. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  878. package/dist/frontend/lowering/lower-generators.js +39 -20
  879. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  880. package/dist/frontend/lowering/lower-global-value.js +5 -1
  881. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  882. package/dist/frontend/lowering/lower-inspect.js +900 -107
  883. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  884. package/dist/frontend/lowering/lower-mixins.js +23 -20
  885. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  886. package/dist/frontend/lowering/lower-mock.d.ts +8 -1
  887. package/dist/frontend/lowering/lower-mock.js +185 -18
  888. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  889. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  890. package/dist/frontend/lowering/lower-modules.js +445 -94
  891. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  892. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  893. package/dist/frontend/lowering/lower-namespaces.js +65 -33
  894. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  895. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  896. package/dist/frontend/lowering/lower-node-module.js +147 -14
  897. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  898. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  899. package/dist/frontend/lowering/lower-server.js +514 -101
  900. package/dist/frontend/lowering/lower-server.js.map +1 -1
  901. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  902. package/dist/frontend/lowering/lower-stdlib.js +179 -118
  903. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  904. package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
  905. package/dist/frontend/lowering/lower-stmts.js +1950 -433
  906. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  907. package/dist/frontend/lowering/lower-stream.d.ts +3 -0
  908. package/dist/frontend/lowering/lower-stream.js +398 -56
  909. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  910. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  911. package/dist/frontend/lowering/lower-test.js +437 -62
  912. package/dist/frontend/lowering/lower-test.js.map +1 -1
  913. package/dist/frontend/lowering/lower-timers.js +96 -32
  914. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  915. package/dist/frontend/lowering/lower-url.js +1 -1
  916. package/dist/frontend/lowering/lower-url.js.map +1 -1
  917. package/dist/frontend/lowering/lowerer.d.ts +424 -27
  918. package/dist/frontend/lowering/lowerer.js +2062 -310
  919. package/dist/frontend/lowering/lowerer.js.map +1 -1
  920. package/dist/frontend/lowering/lowerer.test.js +10 -4
  921. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  922. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  923. package/dist/frontend/lowering/maybe-promise.js +249 -0
  924. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  925. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  926. package/dist/frontend/lowering/module-member-this.js +262 -0
  927. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  928. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  929. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  930. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  931. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  932. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  933. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  934. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  935. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  936. package/dist/frontend/lowering/native-ffi.js +11 -11
  937. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  938. package/dist/frontend/lowering/object-factory-new.js +6 -8
  939. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  940. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  941. package/dist/frontend/lowering/private-brands.js +265 -0
  942. package/dist/frontend/lowering/private-brands.js.map +1 -0
  943. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  944. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  945. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  946. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  947. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  948. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  949. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  950. package/dist/frontend/lowering/require-initialization.js +246 -0
  951. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  952. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  953. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  954. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  955. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  956. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  957. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  958. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  959. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  960. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  961. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  962. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  963. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  964. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  965. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  966. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  967. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  968. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  969. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  970. package/dist/frontend/lowering/split-consumers.js +4 -4
  971. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  972. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  973. package/dist/frontend/lowering/static-function-names.js +212 -0
  974. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  975. package/dist/frontend/lowering/static-this.js +6 -6
  976. package/dist/frontend/lowering/static-this.js.map +1 -1
  977. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  978. package/dist/frontend/lowering/static-typeof.js +133 -0
  979. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  980. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  981. package/dist/frontend/lowering/strict-mode.js +31 -0
  982. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  983. package/dist/frontend/lowering/string-index-bounds.js +13 -12
  984. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  985. package/dist/frontend/lowering/string-index.d.ts +12 -0
  986. package/dist/frontend/lowering/string-index.js +72 -1
  987. package/dist/frontend/lowering/string-index.js.map +1 -1
  988. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  989. package/dist/frontend/lowering/surfaces.js +282 -45
  990. package/dist/frontend/lowering/surfaces.js.map +1 -1
  991. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  992. package/dist/frontend/lowering/symbol-fields.js +204 -36
  993. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  994. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  995. package/dist/frontend/lowering/symbol-methods.js +24 -6
  996. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  997. package/dist/frontend/lowering/thenables.d.ts +16 -0
  998. package/dist/frontend/lowering/thenables.js +124 -0
  999. package/dist/frontend/lowering/thenables.js.map +1 -0
  1000. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  1001. package/dist/frontend/lowering/thread-slots.js +208 -0
  1002. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  1003. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  1004. package/dist/frontend/lowering/typed-arguments.js +472 -0
  1005. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  1006. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  1007. package/dist/frontend/lowering/union-retag.js +27 -0
  1008. package/dist/frontend/lowering/union-retag.js.map +1 -1
  1009. package/dist/frontend/lowering/union-retag.test.js +24 -1
  1010. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  1011. package/dist/frontend/lowering/var-hoisting.js +6 -6
  1012. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  1013. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  1014. package/dist/frontend/mock-shapes.js +13 -6
  1015. package/dist/frontend/mock-shapes.js.map +1 -1
  1016. package/dist/frontend/module-source-candidates.js +1 -1
  1017. package/dist/frontend/module-source-candidates.js.map +1 -1
  1018. package/dist/frontend/module-source-candidates.test.js +2 -1
  1019. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  1020. package/dist/frontend/module-syntax.js +8 -8
  1021. package/dist/frontend/module-syntax.js.map +1 -1
  1022. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  1023. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  1024. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  1025. package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
  1026. package/dist/frontend/npm-static-bundled-chunks.js +981 -0
  1027. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  1028. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  1029. package/dist/frontend/npm-static-bundled-chunks.test.js +399 -0
  1030. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  1031. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  1032. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  1033. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  1034. package/dist/frontend/npm-static-bundled-esm.js +988 -0
  1035. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  1036. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  1037. package/dist/frontend/npm-static-bundled-esm.test.js +336 -0
  1038. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  1039. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  1040. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  1041. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  1042. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  1043. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  1044. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  1045. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  1046. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  1047. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  1048. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  1049. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  1050. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  1051. package/dist/frontend/npm-static-enum-iife.js +280 -0
  1052. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  1053. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  1054. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  1055. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  1056. package/dist/frontend/npm-static-prune.js +36 -24
  1057. package/dist/frontend/npm-static-prune.js.map +1 -1
  1058. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  1059. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  1060. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  1061. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  1062. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  1063. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  1064. package/dist/frontend/npm-static-subtyping.js +7 -9
  1065. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  1066. package/dist/frontend/npm-static.d.ts +25 -1
  1067. package/dist/frontend/npm-static.js +212 -16
  1068. package/dist/frontend/npm-static.js.map +1 -1
  1069. package/dist/frontend/npm-static.test.js +22 -1
  1070. package/dist/frontend/npm-static.test.js.map +1 -1
  1071. package/dist/frontend/npm.js +13 -0
  1072. package/dist/frontend/npm.js.map +1 -1
  1073. package/dist/frontend/package-shims.d.ts +47 -0
  1074. package/dist/frontend/package-shims.js +300 -0
  1075. package/dist/frontend/package-shims.js.map +1 -0
  1076. package/dist/frontend/pipeline.js +230 -26
  1077. package/dist/frontend/pipeline.js.map +1 -1
  1078. package/dist/frontend/pipeline.test.js +22 -1
  1079. package/dist/frontend/pipeline.test.js.map +1 -1
  1080. package/dist/frontend/program-analysis.d.ts +6 -1
  1081. package/dist/frontend/program-analysis.js +7 -0
  1082. package/dist/frontend/program-analysis.js.map +1 -1
  1083. package/dist/frontend/program.d.ts +100 -2
  1084. package/dist/frontend/program.js +1627 -262
  1085. package/dist/frontend/program.js.map +1 -1
  1086. package/dist/frontend/program.test.js +76 -6
  1087. package/dist/frontend/program.test.js.map +1 -1
  1088. package/dist/frontend/resolve.js +49 -2
  1089. package/dist/frontend/resolve.js.map +1 -1
  1090. package/dist/frontend/resolve.test.js +49 -0
  1091. package/dist/frontend/resolve.test.js.map +1 -1
  1092. package/dist/frontend/services.d.ts +26 -1
  1093. package/dist/frontend/services.js +59 -3
  1094. package/dist/frontend/services.js.map +1 -1
  1095. package/dist/frontend/services.test.js +2 -1
  1096. package/dist/frontend/services.test.js.map +1 -1
  1097. package/dist/frontend/threads-import.js +1 -1
  1098. package/dist/frontend/threads-import.js.map +1 -1
  1099. package/dist/frontend/tier-analysis.d.ts +71 -0
  1100. package/dist/frontend/tier-analysis.js +522 -0
  1101. package/dist/frontend/tier-analysis.js.map +1 -0
  1102. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1103. package/dist/frontend/ts7/api-conformance.js +7 -0
  1104. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1105. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1106. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1107. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1108. package/dist/frontend/ts7/ast-node.js +64 -18
  1109. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1110. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1111. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1112. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1113. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1114. package/dist/frontend/ts7/ast.d.ts +1 -0
  1115. package/dist/frontend/ts7/ast.js +3 -2
  1116. package/dist/frontend/ts7/ast.js.map +1 -1
  1117. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1118. package/dist/frontend/ts7/checker-backend.js +88 -0
  1119. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1120. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1121. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1122. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1123. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1124. package/dist/frontend/ts7/checker-cache.js +0 -6
  1125. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1126. package/dist/frontend/ts7/checker.d.ts +18 -11
  1127. package/dist/frontend/ts7/checker.js +42 -55
  1128. package/dist/frontend/ts7/checker.js.map +1 -1
  1129. package/dist/frontend/ts7/checker.test.js +10 -7
  1130. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1131. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1132. package/dist/frontend/ts7/diagnostic.js +22 -0
  1133. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1134. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1135. package/dist/frontend/ts7/node-functions.js +18 -0
  1136. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1137. package/dist/frontend/ts7/program-host.d.ts +10 -5
  1138. package/dist/frontend/ts7/program-host.js +19 -0
  1139. package/dist/frontend/ts7/program-host.js.map +1 -1
  1140. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1141. package/dist/frontend/ts7/rpc-api.js +8 -1
  1142. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1143. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1144. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1145. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1146. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1147. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1148. package/dist/frontend/ts7/semantic-model.d.ts +57 -24
  1149. package/dist/frontend/ts7/semantic-model.js +114 -16
  1150. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1151. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1152. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1153. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1154. package/dist/frontend/ts7/semantic-types.js +1 -1
  1155. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1156. package/dist/frontend/ts7/session.d.ts +30 -15
  1157. package/dist/frontend/ts7/session.js +8 -5
  1158. package/dist/frontend/ts7/session.js.map +1 -1
  1159. package/dist/frontend/ts7/session.test.js +9 -5
  1160. package/dist/frontend/ts7/session.test.js.map +1 -1
  1161. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1162. package/dist/frontend/ts7/source-parser.js +24 -3
  1163. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1164. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1165. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1166. package/dist/frontend/type-mapper.d.ts +122 -2
  1167. package/dist/frontend/type-mapper.js +2735 -723
  1168. package/dist/frontend/type-mapper.js.map +1 -1
  1169. package/dist/frontend/type-only-imports.d.ts +28 -0
  1170. package/dist/frontend/type-only-imports.js +122 -0
  1171. package/dist/frontend/type-only-imports.js.map +1 -0
  1172. package/dist/frontend/worker-target.js +8 -8
  1173. package/dist/frontend/worker-target.js.map +1 -1
  1174. package/dist/index.d.ts +4 -1
  1175. package/dist/index.js +87 -8
  1176. package/dist/index.js.map +1 -1
  1177. package/dist/ir/analysis.js +4 -2
  1178. package/dist/ir/analysis.js.map +1 -1
  1179. package/dist/ir/api.d.ts +1 -1
  1180. package/dist/ir/api.js +1 -1
  1181. package/dist/ir/api.js.map +1 -1
  1182. package/dist/ir/array-length-stability.d.ts +31 -0
  1183. package/dist/ir/array-length-stability.js +249 -0
  1184. package/dist/ir/array-length-stability.js.map +1 -0
  1185. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1186. package/dist/ir/array-length-stability.test.js +134 -0
  1187. package/dist/ir/array-length-stability.test.js.map +1 -0
  1188. package/dist/ir/build.d.ts +2 -2
  1189. package/dist/ir/build.js +1 -1
  1190. package/dist/ir/build.js.map +1 -1
  1191. package/dist/ir/builtin-effects.js +116 -0
  1192. package/dist/ir/builtin-effects.js.map +1 -1
  1193. package/dist/ir/builtin-signatures.d.ts +1 -1
  1194. package/dist/ir/builtin-signatures.js +540 -29
  1195. package/dist/ir/builtin-signatures.js.map +1 -1
  1196. package/dist/ir/byte-numbers.js +3 -0
  1197. package/dist/ir/byte-numbers.js.map +1 -1
  1198. package/dist/ir/callback-specialization.d.ts +37 -0
  1199. package/dist/ir/callback-specialization.js +459 -0
  1200. package/dist/ir/callback-specialization.js.map +1 -0
  1201. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1202. package/dist/ir/callback-specialization.test.js +208 -0
  1203. package/dist/ir/callback-specialization.test.js.map +1 -0
  1204. package/dist/ir/capture-values.d.ts +0 -1
  1205. package/dist/ir/capture-values.js +51 -40
  1206. package/dist/ir/capture-values.js.map +1 -1
  1207. package/dist/ir/constant-globals.test.js +1 -1
  1208. package/dist/ir/constant-tables.test.js +1 -1
  1209. package/dist/ir/field-values.test.js +1 -1
  1210. package/dist/ir/final-fields.test.js +1 -1
  1211. package/dist/ir/function-references.test.js +9 -1
  1212. package/dist/ir/function-references.test.js.map +1 -1
  1213. package/dist/ir/init-only-globals.test.js +1 -1
  1214. package/dist/ir/initializer-bindings.test.js +1 -1
  1215. package/dist/ir/int32-slots.d.ts +14 -0
  1216. package/dist/ir/int32-slots.js +97 -14
  1217. package/dist/ir/int32-slots.js.map +1 -1
  1218. package/dist/ir/int32-slots.test.js +1 -1
  1219. package/dist/ir/integer-loop-facts.d.ts +7 -0
  1220. package/dist/ir/integer-loop-facts.js +103 -17
  1221. package/dist/ir/integer-loop-facts.js.map +1 -1
  1222. package/dist/ir/integer-loops.d.ts +1 -1
  1223. package/dist/ir/integer-loops.js +39 -9
  1224. package/dist/ir/integer-loops.js.map +1 -1
  1225. package/dist/ir/integer-loops.test.js +104 -0
  1226. package/dist/ir/integer-loops.test.js.map +1 -1
  1227. package/dist/ir/integer-ranges.d.ts +13 -1
  1228. package/dist/ir/integer-ranges.js +125 -26
  1229. package/dist/ir/integer-ranges.js.map +1 -1
  1230. package/dist/ir/integer-ranges.test.js +273 -2
  1231. package/dist/ir/integer-ranges.test.js.map +1 -1
  1232. package/dist/ir/intrinsic-signatures.js +6 -0
  1233. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1234. package/dist/ir/ir.d.ts +221 -58
  1235. package/dist/ir/ir.js +127 -12
  1236. package/dist/ir/ir.js.map +1 -1
  1237. package/dist/ir/ir.test.js +10 -0
  1238. package/dist/ir/ir.test.js.map +1 -1
  1239. package/dist/ir/js-ic.d.ts +52 -0
  1240. package/dist/ir/js-ic.js +199 -0
  1241. package/dist/ir/js-ic.js.map +1 -0
  1242. package/dist/ir/js-ic.test.d.ts +1 -0
  1243. package/dist/ir/js-ic.test.js +148 -0
  1244. package/dist/ir/js-ic.test.js.map +1 -0
  1245. package/dist/ir/jsval.d.ts +8 -0
  1246. package/dist/ir/jsval.js +399 -0
  1247. package/dist/ir/jsval.js.map +1 -0
  1248. package/dist/ir/jsval.test.d.ts +1 -0
  1249. package/dist/ir/jsval.test.js +239 -0
  1250. package/dist/ir/jsval.test.js.map +1 -0
  1251. package/dist/ir/runtime-features.d.ts +183 -33
  1252. package/dist/ir/runtime-features.js +795 -422
  1253. package/dist/ir/runtime-features.js.map +1 -1
  1254. package/dist/ir/scalar-records.test.js +1 -1
  1255. package/dist/ir/self-captures.d.ts +33 -0
  1256. package/dist/ir/self-captures.js +245 -0
  1257. package/dist/ir/self-captures.js.map +1 -0
  1258. package/dist/ir/self-captures.test.d.ts +1 -0
  1259. package/dist/ir/self-captures.test.js +135 -0
  1260. package/dist/ir/self-captures.test.js.map +1 -0
  1261. package/dist/ir/serialize.d.ts +1 -1
  1262. package/dist/ir/serialize.js +7 -4
  1263. package/dist/ir/serialize.js.map +1 -1
  1264. package/dist/ir/tiers.d.ts +26 -0
  1265. package/dist/ir/tiers.js +101 -0
  1266. package/dist/ir/tiers.js.map +1 -0
  1267. package/dist/ir/tiers.test.d.ts +1 -0
  1268. package/dist/ir/tiers.test.js +140 -0
  1269. package/dist/ir/tiers.test.js.map +1 -0
  1270. package/dist/ir/traverse.js +201 -150
  1271. package/dist/ir/traverse.js.map +1 -1
  1272. package/dist/ir/traverse.test.js +33 -30
  1273. package/dist/ir/traverse.test.js.map +1 -1
  1274. package/dist/ir/unshare.js +65 -3
  1275. package/dist/ir/unshare.js.map +1 -1
  1276. package/dist/ir/unshare.test.js +1 -1
  1277. package/dist/ir/validate.js +196 -76
  1278. package/dist/ir/validate.js.map +1 -1
  1279. package/dist/ir/validate.test.js +41 -11
  1280. package/dist/ir/validate.test.js.map +1 -1
  1281. package/dist/library/fence-eval.test.js +1 -1
  1282. package/dist/library/int-infer.test.js +4 -4
  1283. package/dist/library/ir-policy.js +14 -0
  1284. package/dist/library/ir-policy.js.map +1 -1
  1285. package/dist/library/library-cache.d.ts +1 -0
  1286. package/dist/library/library-cache.js.map +1 -1
  1287. package/dist/library/library-cache.test.js +5 -5
  1288. package/dist/library/library-profile.d.ts +4 -4
  1289. package/dist/library/library-profile.js +35 -7
  1290. package/dist/library/library-profile.js.map +1 -1
  1291. package/dist/library/prepare.js +13 -1
  1292. package/dist/library/prepare.js.map +1 -1
  1293. package/dist/native/cli.js +22 -0
  1294. package/dist/native/cli.js.map +1 -1
  1295. package/dist/native/compiler.js +35 -6
  1296. package/dist/native/compiler.js.map +1 -1
  1297. package/dist/native/compiler.test.js +2 -2
  1298. package/dist/native/executable-cache.js +3 -0
  1299. package/dist/native/executable-cache.js.map +1 -1
  1300. package/dist/native/prepare.js +10 -0
  1301. package/dist/native/prepare.js.map +1 -1
  1302. package/dist/native/sanitizer.test.js +19 -0
  1303. package/dist/native/sanitizer.test.js.map +1 -1
  1304. package/dist/native/toolchain.d.ts +2 -0
  1305. package/dist/native/toolchain.js +10 -1
  1306. package/dist/native/toolchain.js.map +1 -1
  1307. package/dist/native/toolchain.test.js +39 -1
  1308. package/dist/native/toolchain.test.js.map +1 -1
  1309. package/dist/startup-cache.d.ts +1 -0
  1310. package/dist/startup-cache.js +1 -0
  1311. package/dist/startup-cache.js.map +1 -1
  1312. package/dist/wasm/base64.d.ts +5 -0
  1313. package/dist/wasm/base64.js +62 -0
  1314. package/dist/wasm/base64.js.map +1 -0
  1315. package/dist/wasm/binary.d.ts +36 -0
  1316. package/dist/wasm/binary.js +1976 -0
  1317. package/dist/wasm/binary.js.map +1 -0
  1318. package/dist/wasm/binary.test.d.ts +1 -0
  1319. package/dist/wasm/binary.test.js +190 -0
  1320. package/dist/wasm/binary.test.js.map +1 -0
  1321. package/dist/wasm/discover.d.ts +38 -0
  1322. package/dist/wasm/discover.js +377 -0
  1323. package/dist/wasm/discover.js.map +1 -0
  1324. package/dist/wasm/discover.test.d.ts +1 -0
  1325. package/dist/wasm/discover.test.js +24 -0
  1326. package/dist/wasm/discover.test.js.map +1 -0
  1327. package/dist/wasm/module.d.ts +151 -0
  1328. package/dist/wasm/module.js +575 -0
  1329. package/dist/wasm/module.js.map +1 -0
  1330. package/dist/wasm/translate.d.ts +48 -0
  1331. package/dist/wasm/translate.js +2129 -0
  1332. package/dist/wasm/translate.js.map +1 -0
  1333. package/dist/wasm/translate.test.d.ts +1 -0
  1334. package/dist/wasm/translate.test.js +207 -0
  1335. package/dist/wasm/translate.test.js.map +1 -0
  1336. package/package.json +22 -20
  1337. package/shims/fs-extra/core/api.ts +1192 -0
  1338. package/shims/fs-extra/index.ts +9 -0
  1339. package/shims/undici/core/agent.ts +163 -0
  1340. package/shims/undici/core/api.ts +93 -0
  1341. package/shims/undici/core/client.ts +1304 -0
  1342. package/shims/undici/core/connector.ts +157 -0
  1343. package/shims/undici/core/diagnostics-types.ts +68 -0
  1344. package/shims/undici/core/diagnostics.ts +16 -0
  1345. package/shims/undici/core/dispatcher.ts +574 -0
  1346. package/shims/undici/core/errors-v5.ts +22 -0
  1347. package/shims/undici/core/errors-v7.ts +25 -0
  1348. package/shims/undici/core/errors.ts +255 -0
  1349. package/shims/undici/core/fetch.ts +635 -0
  1350. package/shims/undici/core/pool.ts +280 -0
  1351. package/shims/undici/core/readable.ts +268 -0
  1352. package/shims/undici/core/request.ts +313 -0
  1353. package/shims/undici/core/timers.ts +80 -0
  1354. package/shims/undici/core/types.ts +167 -0
  1355. package/shims/undici/core/util.ts +67 -0
  1356. package/shims/undici/v5.ts +119 -0
  1357. package/shims/undici/v7.ts +119 -0
  1358. package/surface-manifest.json +304 -22
@@ -0,0 +1,1179 @@
1
+ import { typeKey } from "../ir/ir.js";
2
+ import { everyExprChild, everyStmtChild } from "../ir/traverse.js";
3
+ import { functionCallFacts, int32ElementSlot, Int32Slots } from "../ir/int32-slots.js";
4
+ /** Array methods that store their numeric arguments as elements, by the
5
+ * argument positions they store. */
6
+ const ELEMENT_ARGS = new Map([
7
+ ["push", "all"],
8
+ ["unshift", "all"],
9
+ ["fill", 0],
10
+ ["with", 1],
11
+ ]);
12
+ const NO_NODES = new Set();
13
+ /** Array methods whose result is a new array holding copies of the
14
+ * receiver's (and array arguments') elements. */
15
+ const COPIES = new Set([
16
+ "slice",
17
+ "splice",
18
+ "concatSpread",
19
+ "toSpliced",
20
+ "toReversed",
21
+ "toSortedPrimitive",
22
+ "with",
23
+ "withUndefined",
24
+ ]);
25
+ /** Array methods that copy the elements of an array argument into the
26
+ * receiver. */
27
+ const COPY_IN = new Set(["pushSpread", "unshiftSpread", "spliceInsert"]);
28
+ /** Library calls that only read array arguments. */
29
+ const READ_ONLY_LIB = /^(console\.|inspect\.|json\.stringify|math\.|insp\.)/;
30
+ /** Library calls that always throw (the value they stand for never exists). */
31
+ const THROWING_LIB = /^error\.\w*Throw$/;
32
+ /** Expression kinds whose array result is one of their operands. */
33
+ const PASS_THROUGH = new Set([
34
+ "upcast",
35
+ "downcast",
36
+ "unionWrap",
37
+ "unionRetype",
38
+ "unionNarrow",
39
+ "ternary",
40
+ "logical",
41
+ "nullish",
42
+ "orDefault",
43
+ "seqExpr",
44
+ "chainRecv",
45
+ "optChain",
46
+ "assignExpr",
47
+ ]);
48
+ /** Kinds that only inspect an array operand (identity, truthiness, text). */
49
+ const OBSERVE = new Set([
50
+ "toBool",
51
+ "strEq",
52
+ "unionEq",
53
+ "unionFuncEq",
54
+ "unionIsTag",
55
+ "unionDisc",
56
+ "instanceOf",
57
+ "instanceOfValue",
58
+ "dynScalarEq",
59
+ "fieldAbsent",
60
+ "recordHas",
61
+ "recordOvfHas",
62
+ "recordNullProto",
63
+ "arrayHas",
64
+ "arrayState",
65
+ "jsonStringify",
66
+ "toString",
67
+ "strConcat",
68
+ "bin",
69
+ "unary",
70
+ "unionKeyGet",
71
+ "recordKeyGet",
72
+ "recordOvfKeys",
73
+ "fieldGet",
74
+ "recordGet",
75
+ "arrayGet",
76
+ ]);
77
+ export class Int32ElementContracts {
78
+ c;
79
+ /** Annotated slots and their notes. */
80
+ annotated = new Map();
81
+ succ = new Map();
82
+ pred = new Map();
83
+ /** Element copies: the nodes of the arrays whose elements are copied,
84
+ * and the nodes of the array they are copied into. A copy holds none of
85
+ * its source's references, but the source of a copy into a constrained
86
+ * array must be constrained too. */
87
+ copies = [];
88
+ /** Allocation nodes (`a:<n>`) and opaque origins (`o:<n>`). */
89
+ allocs = new Set();
90
+ opaque = new Map();
91
+ writes = [];
92
+ escapes = [];
93
+ slots;
94
+ nextNode = 0;
95
+ /** Nodes that may hold a constrained array, with the note it reaches. */
96
+ constrainedReach = new Map();
97
+ /** Nodes that may hold an unconstrained or opaque array. */
98
+ unconstrainedReach = new Set();
99
+ containedMemo = new Map();
100
+ unions;
101
+ records;
102
+ methodImpls = new Map();
103
+ subclasses = new Map();
104
+ /** Functions whose callers are not all visible. */
105
+ valueEscaped = new Set();
106
+ runtimeVirtual = () => false;
107
+ constructor(c) {
108
+ this.c = c;
109
+ this.slots = new Int32Slots(c.classes);
110
+ this.unions = new Map((c.mod.unions ?? []).map((u) => [u.id, u.arms]));
111
+ this.records = new Map((c.mod.records ?? []).map((r) => [r.id, r]));
112
+ for (const cls of c.classes.values()) {
113
+ for (const m of cls.methods ?? [])
114
+ push(this.methodImpls, m, `%${cls.name}.${m}`);
115
+ if (cls.base)
116
+ push(this.subclasses, cls.base, cls.name);
117
+ }
118
+ }
119
+ /** Whether any Int32[] annotation exists. */
120
+ get active() {
121
+ return this.annotated.size > 0;
122
+ }
123
+ /** Bind the annotations, build the flow graph and compute which slots
124
+ * hold constrained arrays. Reports structural refusals. */
125
+ analyze() {
126
+ this.bind();
127
+ if (this.annotated.size === 0)
128
+ return;
129
+ const calls = functionCallFacts(this.c.mod, this.c.classes, (name) => this.subtree(name));
130
+ this.valueEscaped = calls.valueEscaped;
131
+ this.runtimeVirtual = calls.runtimeVirtual;
132
+ for (const fn of this.c.mod.functions)
133
+ this.scanFunction(fn);
134
+ this.solve();
135
+ }
136
+ /** Whether reads of `arr` inside `fnName` find only int32 elements. */
137
+ readsInt32(fnName, arr) {
138
+ const key = int32ElementSlot(fnName, arr, (cls, field) => this.slots.family(cls, field));
139
+ return key !== null && this.int32Slots.has(key);
140
+ }
141
+ /** Slots recorded as IrContracts.int32Elements. */
142
+ int32Slots = new Set();
143
+ readers = new Map();
144
+ localWrites = new Map();
145
+ /** Whether the number `e` is an element an Int32[] read found: the number
146
+ * arm of an ordinary `xs[i]` read (the lowering's element-read helper
147
+ * returns `number | undefined`, and the read narrows it, throwing for
148
+ * undefined), directly or through a local holding such reads. `int32`
149
+ * answers the range proof for any other number. */
150
+ provenElement(fn, e, int32) {
151
+ if (this.int32Slots.size === 0)
152
+ return false;
153
+ const value = (x, depth) => {
154
+ if (int32(x))
155
+ return true;
156
+ if (depth > 8)
157
+ return false;
158
+ if (x.kind === "ternary")
159
+ return arm(x.then, depth + 1) && arm(x.else_, depth + 1);
160
+ if (x.kind === "unionNarrow")
161
+ return holder(x.value, depth + 1);
162
+ return false;
163
+ };
164
+ const arm = (x, depth) => (x.kind === "libCall" && THROWING_LIB.test(x.fn)) || value(x, depth);
165
+ const holder = (x, depth) => {
166
+ if (depth > 8)
167
+ return false;
168
+ switch (x.kind) {
169
+ case "call": {
170
+ const k = this.elementReader(x.callee);
171
+ const arr = k === null ? undefined : x.args[k];
172
+ return arr !== undefined && this.readsInt32(fn.name, arr);
173
+ }
174
+ case "varRef": {
175
+ const writes = this.writesOf(fn).get(x.localId);
176
+ return (writes !== undefined &&
177
+ writes !== null &&
178
+ writes.length > 0 &&
179
+ writes.every((w) => holder(w, depth + 1)));
180
+ }
181
+ case "unionWrap":
182
+ return x.value.kind === "unitLit" || value(x.value, depth + 1);
183
+ case "unitLit":
184
+ return true;
185
+ case "ternary":
186
+ return holder(x.then, depth + 1) && holder(x.else_, depth + 1);
187
+ default:
188
+ return false;
189
+ }
190
+ };
191
+ return value(e, 0);
192
+ }
193
+ /** Whether `value` is an element of the written array itself, or of a
194
+ * copy of it the function took (the lowered `sort` moves elements
195
+ * through such a snapshot): storing it adds no new value to the array,
196
+ * whatever its contents. Both must be locals the function never
197
+ * reassigns. */
198
+ movedWithin(fn, arr, value) {
199
+ if (arr.kind !== "varRef" || value.kind !== "arrayGet" || value.arr.kind !== "varRef")
200
+ return false;
201
+ const writes = this.writesOf(fn);
202
+ const target = arr.localId;
203
+ const source = value.arr.localId;
204
+ const fixed = (id) => {
205
+ const list = writes.get(id);
206
+ if (list === null || !fn.locals.some((l) => l.id === id))
207
+ return false;
208
+ const isParam = fn.params.some((p) => p.localId === id);
209
+ return isParam ? list === undefined : list !== undefined && list.length === 1;
210
+ };
211
+ if (!fixed(target))
212
+ return false;
213
+ if (source === target)
214
+ return true;
215
+ if (!fixed(source))
216
+ return false;
217
+ const init = writes.get(source)?.[0];
218
+ return (init !== undefined &&
219
+ init.kind === "arrIntrinsic" &&
220
+ init.method === "slice" &&
221
+ init.receiver.kind === "varRef" &&
222
+ init.receiver.localId === target &&
223
+ this.onlyMoves(fn, source, target, init));
224
+ }
225
+ /** Whether the function uses the snapshot local `source` only to read,
226
+ * reorder and move its own elements (or the target's): then every value
227
+ * it holds is one of the target's elements. */
228
+ onlyMoves(fn, source, target, init) {
229
+ const allowed = new Set();
230
+ const isRef = (e, id) => e.kind === "varRef" && e.localId === id;
231
+ const moved = (v) => v.kind === "arrayGet" && (isRef(v.arr, source) || isRef(v.arr, target));
232
+ let ok = true;
233
+ const expr = (e) => {
234
+ if ((e.kind === "arrayGet" || e.kind === "arrayState" || e.kind === "arrayHas") &&
235
+ isRef(e.arr, source))
236
+ allowed.add(e.arr);
237
+ else if (e.kind === "arrIntrinsic" &&
238
+ isRef(e.receiver, source) &&
239
+ ["length", "nextPresent", "sortValues", "sortDense", "reverse", "copyWithin"].includes(e.method))
240
+ allowed.add(e.receiver);
241
+ else if (e.kind === "varRef" && e.localId === source && !allowed.has(e))
242
+ ok = false;
243
+ return ok && everyExprChild(e, expr, stmt);
244
+ };
245
+ const stmt = (st) => {
246
+ if ((st.kind === "arraySet" && isRef(st.arr, source) && moved(st.value)) ||
247
+ ((st.kind === "arraySetUndefined" || st.kind === "arraySetLength") && isRef(st.arr, source)))
248
+ allowed.add(st.arr);
249
+ else if (st.kind === "varDecl" && st.localId === source && st.init !== init)
250
+ ok = false;
251
+ return ok && everyStmtChild(st, expr, stmt);
252
+ };
253
+ for (const st of fn.body)
254
+ if (!stmt(st))
255
+ break;
256
+ return ok;
257
+ }
258
+ /** The parameter whose element every return of `fnName` reads (or
259
+ * undefined): the lowering's `xs[i]` helper. Null for other functions. */
260
+ elementReader(fnName) {
261
+ const known = this.readers.get(fnName);
262
+ if (known !== undefined)
263
+ return known;
264
+ this.readers.set(fnName, null);
265
+ const fn = this.c.functions.get(fnName);
266
+ if (!fn || fn.captures?.length || fn.async || fn.generator)
267
+ return null;
268
+ let result = null;
269
+ for (let k = 0; k < fn.params.length && result === null; k++) {
270
+ const id = fn.params[k].localId;
271
+ if (this.writesOf(fn).get(id) !== undefined)
272
+ continue;
273
+ const element = (x) => {
274
+ switch (x.kind) {
275
+ case "ternary":
276
+ return element(x.then) && element(x.else_);
277
+ case "arrayGet":
278
+ return x.arr.kind === "varRef" && x.arr.localId === id;
279
+ case "unitLit":
280
+ return true;
281
+ case "unionWrap":
282
+ case "upcast":
283
+ return element(x.value);
284
+ default:
285
+ return false;
286
+ }
287
+ };
288
+ let returns = 0;
289
+ let ok = true;
290
+ const visit = (st) => {
291
+ if (st.kind === "return") {
292
+ returns++;
293
+ if (!st.value || !element(st.value))
294
+ ok = false;
295
+ }
296
+ return everyStmtChild(st, () => true, visit);
297
+ };
298
+ for (const st of fn.body)
299
+ visit(st);
300
+ if (ok && returns > 0)
301
+ result = k;
302
+ }
303
+ this.readers.set(fnName, result);
304
+ return result;
305
+ }
306
+ /** Every value written to each local of `fn` (null: a write whose value
307
+ * is not an expression, such as `++` or a for-of binding). */
308
+ writesOf(fn) {
309
+ const known = this.localWrites.get(fn.name);
310
+ if (known)
311
+ return known;
312
+ const out = new Map();
313
+ const add = (id, value) => {
314
+ const list = out.get(id);
315
+ if (list === null)
316
+ return;
317
+ if (value === null)
318
+ out.set(id, null);
319
+ else if (list)
320
+ list.push(value);
321
+ else
322
+ out.set(id, [value]);
323
+ };
324
+ for (const l of fn.locals)
325
+ if (l.boxed)
326
+ out.set(l.id, null);
327
+ for (const cap of [...(fn.captures ?? []), ...(fn.classCaptures ?? [])])
328
+ out.set(cap.localId, null);
329
+ const expr = (e) => {
330
+ if (e.kind === "assignExpr")
331
+ add(e.localId, e.value);
332
+ else if (e.kind === "incDec")
333
+ add(e.localId, null);
334
+ return everyExprChild(e, expr, stmt);
335
+ };
336
+ const stmt = (st) => {
337
+ if (st.kind === "varDecl" && st.init)
338
+ add(st.localId, st.init);
339
+ else if (st.kind === "assign")
340
+ add(st.localId, st.value);
341
+ else if (st.kind === "forOf")
342
+ add(st.localId, null);
343
+ else if (st.kind === "tryCatch" && st.catchLocalId !== null)
344
+ add(st.catchLocalId, null);
345
+ return everyStmtChild(st, expr, stmt);
346
+ };
347
+ for (const st of fn.body)
348
+ stmt(st);
349
+ this.localWrites.set(fn.name, out);
350
+ return out;
351
+ }
352
+ /** Check every element store into a constrained array, given an int32
353
+ * test for the stored value inside its function. */
354
+ checkWrites(int32) {
355
+ for (const w of this.writes) {
356
+ const note = this.reachingNote(w.target);
357
+ if (note === undefined || int32(w.fn, w.value))
358
+ continue;
359
+ if (w.arr !== undefined && this.movedWithin(w.fn, w.arr, w.value))
360
+ continue;
361
+ const at = this.displayed(w.fn, w.value);
362
+ const shown = this.c.text(at);
363
+ // A store inside a lowered array method (`map`, `from`) carries the
364
+ // method call's location for both the array and the value.
365
+ const builtIn = shown !== "" && shown === w.arrayText;
366
+ const what = w.literal
367
+ ? `the array literal element${shown ? ` '${shown}'` : ""} is not provably an int32`
368
+ : builtIn
369
+ ? `the elements '${shown}' stores are not provably int32s`
370
+ : `the element stored into ${w.arrayText ? `'${w.arrayText}'` : "an array"} is not provably an int32${shown ? `: '${shown}'` : ""}`;
371
+ this.c.report("SC7002", at, `${what} (the array can reach '${note.name}', declared Int32[])`, builtIn
372
+ ? "callback results are not followed; build the array with a loop that stores 'value | 0'"
373
+ : shown
374
+ ? `make the int32 conversion explicit, for example '${orZero(shown)}', so Node stores the same value`
375
+ : "make the int32 conversion explicit with '| 0', so Node stores the same value");
376
+ }
377
+ }
378
+ /** The source location that shows a stored value. An element read
379
+ * stored as is (`a[i] = b[j]`) lowers to a narrowing of a temporary that
380
+ * carries the whole statement's location; show the read instead. */
381
+ displayed(fn, value) {
382
+ let e = value;
383
+ for (let depth = 0; depth < 4; depth++) {
384
+ if (e.kind === "ternary")
385
+ e = e.then;
386
+ else if (e.kind === "unionNarrow")
387
+ e = e.value;
388
+ else if (e.kind === "varRef") {
389
+ const writes = this.writesOf(fn).get(e.localId);
390
+ if (!writes || writes.length !== 1)
391
+ break;
392
+ e = writes[0];
393
+ }
394
+ else
395
+ break;
396
+ if (e.loc.start > value.loc.start || e.loc.end < value.loc.end)
397
+ return e.loc;
398
+ }
399
+ return value.loc;
400
+ }
401
+ /** Functions with element stores to check. */
402
+ functionsWithWrites() {
403
+ const out = new Set();
404
+ for (const w of this.writes)
405
+ if (this.reachingNote(w.target) !== undefined)
406
+ out.add(w.fn.name);
407
+ return out;
408
+ }
409
+ /* ── binding ── */
410
+ bind() {
411
+ this.bindAnnotations();
412
+ // Messages name the first annotation an array reaches: prefer module
413
+ // bindings and fields over parameters and results.
414
+ const rank = (slot) => slot.startsWith("g:") ? 0 : slot.startsWith("f:") ? 1 : slot.startsWith("l:") ? 2 : 3;
415
+ const ordered = [...this.annotated].sort((a, b) => rank(a[0]) - rank(b[0]));
416
+ this.annotated.clear();
417
+ for (const [slot, note] of ordered)
418
+ this.annotated.set(slot, note);
419
+ }
420
+ bindAnnotations() {
421
+ const c = this.c;
422
+ const refuse = (note, why, hint) => c.report("SC7003", note.loc, `the Int32[] contract on '${note.name}' cannot be checked: ${why}`, hint);
423
+ const numberArray = (t) => t !== undefined && t.kind === "array" && t.elem.kind === "f64";
424
+ for (const [key, list] of c.notes.functions)
425
+ for (const note of list) {
426
+ if (note.marker !== "Int32" || note.elements !== true)
427
+ continue;
428
+ for (const fn of c.functionsAt(key)) {
429
+ if (fn.async === true || fn.generator !== undefined) {
430
+ refuse(note, "async functions and generators return promises or iterators", "annotate the awaited value where it is stored instead");
431
+ continue;
432
+ }
433
+ if (!numberArray(fn.returnType)) {
434
+ refuse(note, "the result is not a plain number array", "declare it as Int32[]");
435
+ continue;
436
+ }
437
+ this.annotated.set(`r:${fn.name}`, note);
438
+ }
439
+ }
440
+ for (const [key, note] of c.notes.bindings) {
441
+ if (note.marker !== "Int32" || note.elements !== true)
442
+ continue;
443
+ for (const b of c.bindingsOf(key)) {
444
+ const type = b.fn
445
+ ? b.fn.locals.find((l) => l.id === b.id)?.type
446
+ : c.mod.globals?.find((g) => g.id === b.id)?.type;
447
+ if (!numberArray(type)) {
448
+ refuse(note, "the binding is not a plain number array (optional and union types are not checked)", "declare it as a required Int32[]");
449
+ continue;
450
+ }
451
+ this.annotated.set(b.fn ? `l:${b.fn.name}\0${b.id}` : `g:${b.id}`, note);
452
+ }
453
+ }
454
+ for (const [key, note] of c.notes.fields) {
455
+ if (note.marker !== "Int32" || note.elements !== true)
456
+ continue;
457
+ const cut = key.lastIndexOf("\0");
458
+ const field = key.slice(cut + 1);
459
+ for (const cls of c.classesAt(key.slice(0, cut))) {
460
+ const def = cls.fields.find((f) => f.name === field);
461
+ const family = this.slots.family(cls.name, field);
462
+ if (!def || family === null) {
463
+ refuse(note, `the compiled class has no field '${field}'`, "annotate an ordinary instance field");
464
+ continue;
465
+ }
466
+ if (!numberArray(def.type)) {
467
+ refuse(note, "the field is not a plain number array", "declare the field as a required Int32[]");
468
+ continue;
469
+ }
470
+ this.annotated.set(`f:${family}`, note);
471
+ }
472
+ }
473
+ }
474
+ subtree(name) {
475
+ const out = [];
476
+ const stack = [name];
477
+ while (stack.length) {
478
+ const next = stack.pop();
479
+ out.push(next);
480
+ for (const child of this.subclasses.get(next) ?? [])
481
+ stack.push(child);
482
+ }
483
+ return out;
484
+ }
485
+ /* ── types ── */
486
+ /** A number array, or a union with a number-array arm: values whose
487
+ * identity the graph follows. */
488
+ direct(t) {
489
+ if (t.kind === "array")
490
+ return t.elem.kind === "f64";
491
+ if (t.kind === "union")
492
+ return (this.unions.get(t.unionId) ?? []).some((a) => a.kind === "array" && a.elem.kind === "f64");
493
+ return false;
494
+ }
495
+ /** The container slots holding number arrays that a value of type `t`
496
+ * can reach through fields and elements. */
497
+ contained(t) {
498
+ const key = typeKey(t);
499
+ const memo = this.containedMemo.get(key);
500
+ if (memo)
501
+ return memo;
502
+ const out = new Set();
503
+ this.containedMemo.set(key, []);
504
+ const add = (slot, inner) => {
505
+ if (this.direct(inner))
506
+ out.add(slot);
507
+ for (const s of this.contained(inner))
508
+ out.add(s);
509
+ };
510
+ switch (t.kind) {
511
+ case "array":
512
+ add(`e:${key}`, t.elem);
513
+ break;
514
+ case "set":
515
+ add(`se:${key}`, t.elem);
516
+ break;
517
+ case "map":
518
+ add(`mk:${key}`, t.key);
519
+ add(`mv:${key}`, t.value);
520
+ break;
521
+ case "promise":
522
+ add(`p:${key}`, t.inner);
523
+ break;
524
+ case "union":
525
+ for (const arm of this.unions.get(t.unionId) ?? [])
526
+ for (const s of this.contained(arm))
527
+ out.add(s);
528
+ break;
529
+ case "record": {
530
+ const shape = this.records.get(t.shapeId);
531
+ for (const f of shape?.fields ?? [])
532
+ add(`s:${t.shapeId}\0${f.name}`, f.type);
533
+ if (shape?.indexValue)
534
+ add(`s:${t.shapeId}\0*`, shape.indexValue);
535
+ break;
536
+ }
537
+ case "object":
538
+ for (const name of this.subtree(t.className)) {
539
+ const cls = this.c.classes.get(name);
540
+ for (const f of cls?.fields ?? []) {
541
+ const family = this.slots.family(name, f.name);
542
+ if (family !== null)
543
+ add(`f:${family}`, f.type);
544
+ }
545
+ }
546
+ break;
547
+ default:
548
+ break;
549
+ }
550
+ const list = [...out];
551
+ this.containedMemo.set(key, list);
552
+ return list;
553
+ }
554
+ holds(t) {
555
+ return this.direct(t) || this.contained(t).length > 0;
556
+ }
557
+ /* ── graph ── */
558
+ edge(from, to) {
559
+ if (from === to)
560
+ return;
561
+ let s = this.succ.get(from);
562
+ if (!s)
563
+ this.succ.set(from, (s = new Set()));
564
+ s.add(to);
565
+ let p = this.pred.get(to);
566
+ if (!p)
567
+ this.pred.set(to, (p = new Set()));
568
+ p.add(from);
569
+ }
570
+ copy(from, to) {
571
+ if (from.length > 0 && to.length > 0)
572
+ this.copies.push({ from: [...from], to: [...to] });
573
+ }
574
+ newOpaque(loc, why) {
575
+ const node = `o:${this.nextNode++}`;
576
+ this.opaque.set(node, { loc, why });
577
+ return node;
578
+ }
579
+ /** An origin the IR does not show produces a value of type `t`. */
580
+ opaqueValue(t, loc, why) {
581
+ const node = this.newOpaque(loc, why);
582
+ for (const slot of this.contained(t))
583
+ this.edge(node, slot);
584
+ return this.direct(t) ? [node] : [];
585
+ }
586
+ store(sources, slot) {
587
+ for (const s of sources)
588
+ this.edge(s, slot);
589
+ }
590
+ localSlot(fn, id) {
591
+ return id.startsWith("%g.") ? `g:${id}` : `l:${fn.name}\0${id}`;
592
+ }
593
+ scanFunction(fn) {
594
+ const c = this.c;
595
+ const chains = new Map();
596
+ const memo = new Map();
597
+ // Optional-chain receivers, by chain id, before any read of one.
598
+ const findChains = (e) => {
599
+ if (e.kind === "optChain")
600
+ chains.set(e.id, e.receiver);
601
+ return everyExprChild(e, findChains, findChainsIn);
602
+ };
603
+ const findChainsIn = (st) => everyStmtChild(st, findChains, findChainsIn);
604
+ for (const st of fn.body)
605
+ findChainsIn(st);
606
+ // Parameters whose callers are not all visible hold opaque arrays.
607
+ if (this.valueEscaped.has(fn.name) || this.runtimeVirtual(fn.name))
608
+ for (const p of fn.params)
609
+ if (this.holds(p.type)) {
610
+ const why = this.valueEscaped.has(fn.name)
611
+ ? `the callers of '${c.displayName(fn.name)}', which is used as a value (its callers are not all visible)`
612
+ : `the runtime, which calls '${c.displayName(fn.name)}'`;
613
+ for (const node of this.opaqueValue(p.type, fn.loc, why))
614
+ this.edge(node, this.localSlot(fn, p.localId));
615
+ }
616
+ /** The nodes an expression's array value can come from. */
617
+ const sources = (e) => {
618
+ if (!this.direct(e.type))
619
+ return [];
620
+ const known = memo.get(e);
621
+ if (known)
622
+ return known;
623
+ memo.set(e, []);
624
+ const out = sourcesOf(e);
625
+ memo.set(e, out);
626
+ return out;
627
+ };
628
+ const elementSlot = (container) => {
629
+ const t = container.type;
630
+ if (t.kind === "array" && this.direct(t.elem))
631
+ return [`e:${typeKey(t)}`];
632
+ return [];
633
+ };
634
+ const sourcesOf = (e) => {
635
+ switch (e.kind) {
636
+ case "varRef":
637
+ return [this.localSlot(fn, e.localId)];
638
+ case "fieldGet": {
639
+ const family = this.slots.family(e.className, e.field);
640
+ return family === null
641
+ ? this.opaqueValue(e.type, e.loc, "a field scriptc cannot follow")
642
+ : [`f:${family}`];
643
+ }
644
+ case "recordGet":
645
+ return [`s:${e.shapeId}\0${e.field}`];
646
+ case "recordKeyGet": {
647
+ const t = e.obj.type;
648
+ if (t.kind !== "record")
649
+ return this.opaqueValue(e.type, e.loc, "a dynamic property");
650
+ const shape = this.records.get(t.shapeId);
651
+ const out = [`s:${t.shapeId}\0*`];
652
+ for (const f of shape?.fields ?? [])
653
+ if (this.direct(f.type))
654
+ out.push(`s:${t.shapeId}\0${f.name}`);
655
+ return out;
656
+ }
657
+ case "arrayGet":
658
+ return elementSlot(e.arr);
659
+ case "mapIntrinsic":
660
+ if (e.method === "get" || e.method === "iterValue")
661
+ return [`mv:${typeKey(e.receiver.type)}`];
662
+ if (e.method === "iterKey")
663
+ return [`mk:${typeKey(e.receiver.type)}`];
664
+ // Any other result is a stored key or value, or a fresh array.
665
+ return [
666
+ `mv:${typeKey(e.receiver.type)}`,
667
+ `mk:${typeKey(e.receiver.type)}`,
668
+ ...this.opaqueValue(e.type, e.loc, `Map.${e.method}`),
669
+ ];
670
+ case "setIntrinsic":
671
+ if (e.method === "iterKey")
672
+ return [`se:${typeKey(e.receiver.type)}`];
673
+ return [
674
+ `se:${typeKey(e.receiver.type)}`,
675
+ ...this.opaqueValue(e.type, e.loc, `Set.${e.method}`),
676
+ ];
677
+ case "call":
678
+ return c.functions.has(e.callee)
679
+ ? [`r:${e.callee}`]
680
+ : this.opaqueValue(e.type, e.loc, `a call to '${e.callee}'`);
681
+ case "virtualCall": {
682
+ const impls = this.methodImpls.get(e.method) ?? [];
683
+ return impls.length > 0 ? impls.map((impl) => `r:${impl}`) : unknown(e);
684
+ }
685
+ case "arrayLit":
686
+ case "arrayNewLen":
687
+ return [alloc()];
688
+ case "arrIntrinsic": {
689
+ if (COPIES.has(e.method)) {
690
+ // A new array of copied elements.
691
+ const node = alloc();
692
+ for (const part of [e.receiver, ...e.args])
693
+ this.copy([...sources(part), ...elementSlot(part)], [node]);
694
+ return [node];
695
+ }
696
+ if (e.method === "flatCopy" || e.method === "flatOne") {
697
+ // Copies (or flattens) the receiver into the supplied array,
698
+ // which it returns.
699
+ const into = e.args.flatMap((a) => sources(a));
700
+ this.copy([...sources(e.receiver), ...elementSlot(e.receiver)], into);
701
+ return into;
702
+ }
703
+ // The receiver itself (fill, reverse, sort) or one of its elements.
704
+ return [...sources(e.receiver), ...elementSlot(e.receiver)];
705
+ }
706
+ case "upcast":
707
+ case "downcast":
708
+ case "unionWrap":
709
+ case "unionRetype":
710
+ case "unionNarrow":
711
+ case "assignExpr":
712
+ return sources(e.value);
713
+ case "ternary":
714
+ return [...sources(e.then), ...sources(e.else_)];
715
+ case "logical":
716
+ case "nullish":
717
+ case "orDefault":
718
+ return [...sources(e.left), ...sources(e.right)];
719
+ case "seqExpr":
720
+ return sources(e.result);
721
+ case "optChain":
722
+ return sources(e.body);
723
+ case "chainRecv": {
724
+ const receiver = chains.get(e.id);
725
+ return receiver
726
+ ? sources(receiver)
727
+ : this.opaqueValue(e.type, e.loc, "an optional chain");
728
+ }
729
+ case "unitLit":
730
+ return [];
731
+ default:
732
+ return unknown(e);
733
+ }
734
+ };
735
+ const alloc = () => {
736
+ const node = `a:${this.nextNode++}`;
737
+ this.allocs.add(node);
738
+ return node;
739
+ };
740
+ /** An operation scriptc does not follow: a fresh array of unknown
741
+ * contents, or any array its operands hold or reach. */
742
+ const unknown = (e) => {
743
+ const out = this.opaqueValue(e.type, e.loc, describe(e));
744
+ everyExprChild(e, (child) => {
745
+ out.push(...sources(child), ...this.contained(child.type));
746
+ return true;
747
+ }, () => true);
748
+ return out;
749
+ };
750
+ const escape = (value, at, what) => {
751
+ if (!this.holds(value.type))
752
+ return;
753
+ const nodes = [...sources(value), ...this.contained(value.type)];
754
+ if (nodes.length > 0)
755
+ this.escapes.push({ nodes, loc: at, shown: c.text(value.loc), what });
756
+ };
757
+ const write = (arr, value) => {
758
+ this.writes.push({ fn, target: sources(arr), value, arrayText: c.text(arr.loc), arr });
759
+ };
760
+ const args = (callee, list, offset, at) => {
761
+ const target = c.functions.get(callee);
762
+ list.forEach((arg, i) => {
763
+ if (!this.holds(arg.type))
764
+ return;
765
+ const param = target?.params[i + offset];
766
+ if (!target || !param) {
767
+ escape(arg, at, `a call to '${c.displayName(callee)}'`);
768
+ return;
769
+ }
770
+ this.store(sources(arg), this.localSlot(target, param.localId));
771
+ });
772
+ };
773
+ const isNumberArray = (t) => t.kind === "array" && t.elem.kind === "f64";
774
+ const expr = (e) => {
775
+ switch (e.kind) {
776
+ case "assignExpr":
777
+ this.store(sources(e.value), this.localSlot(fn, e.localId));
778
+ break;
779
+ case "call":
780
+ args(e.callee, e.args, 0, e.loc);
781
+ break;
782
+ case "new":
783
+ args(`%${e.className}.constructor`, e.args, 1, e.loc);
784
+ break;
785
+ case "virtualCall":
786
+ for (const impl of this.methodImpls.get(e.method) ?? [])
787
+ args(impl, e.args, 0, e.loc);
788
+ if (!this.methodImpls.has(e.method))
789
+ for (const a of e.args)
790
+ escape(a, e.loc, `the method '${e.method}'`);
791
+ break;
792
+ case "arrayLit": {
793
+ const node = sources(e)[0];
794
+ const spreads = new Set(e.spreads ?? []);
795
+ e.elems.forEach((x, i) => {
796
+ if (spreads.has(i)) {
797
+ // Spread elements copy into the literal.
798
+ if (node !== undefined)
799
+ this.copy(sources(x), [node]);
800
+ if (e.type.kind === "array" && this.direct(e.type.elem))
801
+ this.store(elementSlot(x), `e:${typeKey(e.type)}`);
802
+ }
803
+ else if (isNumberArray(e.type) && node !== undefined)
804
+ this.writes.push({ fn, target: [node], value: x, arrayText: "", literal: true });
805
+ else if (e.type.kind === "array" && this.holds(x.type))
806
+ this.store(sources(x), `e:${typeKey(e.type)}`);
807
+ });
808
+ break;
809
+ }
810
+ case "arrIntrinsic": {
811
+ const r = e.receiver;
812
+ if (isNumberArray(r.type)) {
813
+ const positions = ELEMENT_ARGS.get(e.method);
814
+ if (positions !== undefined)
815
+ e.args.forEach((a, i) => {
816
+ if (a.type.kind === "f64" && (positions === "all" || positions === i))
817
+ write(e.method === "with" ? e : r, a);
818
+ });
819
+ // Elements copied in from array arguments (push(...src),
820
+ // splice items).
821
+ if (COPY_IN.has(e.method))
822
+ for (const a of e.args)
823
+ if (isNumberArray(a.type))
824
+ this.copy(sources(a), sources(r));
825
+ }
826
+ else if (r.type.kind === "array" && this.holds(r.type.elem)) {
827
+ const slot = `e:${typeKey(r.type)}`;
828
+ for (const a of e.args) {
829
+ if (this.direct(a.type))
830
+ this.store(sources(a), slot);
831
+ else if (a.type.kind === "array" && typeKey(a.type) !== typeKey(r.type))
832
+ escape(a, e.loc, `Array.${e.method}`);
833
+ }
834
+ }
835
+ else
836
+ for (const a of e.args)
837
+ escape(a, e.loc, `Array.${e.method}`);
838
+ break;
839
+ }
840
+ case "mapIntrinsic":
841
+ if (e.method === "set") {
842
+ const t = typeKey(e.receiver.type);
843
+ if (e.args[0])
844
+ this.store(sources(e.args[0]), `mk:${t}`);
845
+ if (e.args[1])
846
+ this.store(sources(e.args[1]), `mv:${t}`);
847
+ }
848
+ else
849
+ for (const a of e.args)
850
+ if (e.method !== "get" && e.method !== "has" && e.method !== "delete")
851
+ escape(a, e.loc, `Map.${e.method}`);
852
+ break;
853
+ case "setIntrinsic":
854
+ if (e.method === "add" && e.args[0])
855
+ this.store(sources(e.args[0]), `se:${typeKey(e.receiver.type)}`);
856
+ break;
857
+ case "mapNew":
858
+ for (const p of e.seed ?? []) {
859
+ this.store(sources(p.key), `mk:${typeKey(e.type)}`);
860
+ this.store(sources(p.value), `mv:${typeKey(e.type)}`);
861
+ }
862
+ break;
863
+ case "setNew":
864
+ if (e.seed && e.seed.type.kind === "array")
865
+ this.store(elementSlot(e.seed), `se:${typeKey(e.type)}`);
866
+ break;
867
+ case "recordLit":
868
+ if (e.type.kind === "record") {
869
+ const shape = this.records.get(e.type.shapeId);
870
+ for (const f of e.fields) {
871
+ const declared = shape?.fields.some((d) => d.name === f.name) === true;
872
+ this.store(sources(f.value), `s:${e.type.shapeId}\0${declared ? f.name : "*"}`);
873
+ }
874
+ }
875
+ else
876
+ for (const f of e.fields)
877
+ escape(f.value, e.loc, "an object literal");
878
+ break;
879
+ case "recordClone":
880
+ if (e.type.kind === "record" && e.source.type.kind === "record") {
881
+ const from = e.source.type.shapeId;
882
+ const shape = this.records.get(e.type.shapeId);
883
+ for (const f of shape?.fields ?? [])
884
+ if (this.direct(f.type))
885
+ this.edge(`s:${from}\0${f.name}`, `s:${e.type.shapeId}\0${f.name}`);
886
+ for (const o of e.overrides)
887
+ this.store(sources(o.value), `s:${e.type.shapeId}\0${o.name}`);
888
+ }
889
+ break;
890
+ case "closure": {
891
+ const lifted = c.functions.get(e.fnName);
892
+ e.captures.forEach((id, i) => {
893
+ const inner = lifted?.captures?.[i];
894
+ if (!inner || !lifted)
895
+ return;
896
+ const outer = this.localSlot(fn, id);
897
+ const innerSlot = this.localSlot(lifted, inner.localId);
898
+ this.edge(outer, innerSlot);
899
+ this.edge(innerSlot, outer);
900
+ });
901
+ break;
902
+ }
903
+ case "classRef":
904
+ if (e.captures)
905
+ for (const method of c.mod.functions) {
906
+ if (!method.name.startsWith(`%${e.className}.`))
907
+ continue;
908
+ for (const cc of method.classCaptures ?? []) {
909
+ const id = e.captures[cc.slot];
910
+ if (id === undefined)
911
+ continue;
912
+ const outer = this.localSlot(fn, id);
913
+ const inner = this.localSlot(method, cc.localId);
914
+ this.edge(outer, inner);
915
+ this.edge(inner, outer);
916
+ }
917
+ }
918
+ break;
919
+ case "libCall":
920
+ if (!READ_ONLY_LIB.test(e.fn))
921
+ for (const a of e.args)
922
+ escape(a, a.loc, `the library call ${e.fn}`);
923
+ break;
924
+ case "callValue":
925
+ for (const a of e.args)
926
+ escape(a, a.loc, "a call through a function value");
927
+ if (e.receiver)
928
+ escape(e.receiver, e.receiver.loc, "a call through a function value");
929
+ break;
930
+ case "dynFrom":
931
+ // Plain arrays and records cross into dynamic code as deep copies;
932
+ // class instances and live references stay connected.
933
+ if (e.liveRef === true || this.containsObject(e.value.type, new Set()))
934
+ escape(e.value, e.loc, "dynamic (any or unknown) code");
935
+ break;
936
+ default:
937
+ if (PASS_THROUGH.has(e.kind) || OBSERVE.has(e.kind))
938
+ break;
939
+ everyExprChild(e, (child) => {
940
+ escape(child, child.loc, describe(e));
941
+ return true;
942
+ }, () => true);
943
+ }
944
+ everyExprChild(e, (child) => {
945
+ expr(child);
946
+ return true;
947
+ }, (child) => {
948
+ stmt(child);
949
+ return true;
950
+ });
951
+ };
952
+ const stmt = (s) => {
953
+ switch (s.kind) {
954
+ case "varDecl":
955
+ if (s.init)
956
+ this.store(sources(s.init), this.localSlot(fn, s.localId));
957
+ break;
958
+ case "assign":
959
+ this.store(sources(s.value), this.localSlot(fn, s.localId));
960
+ break;
961
+ case "return":
962
+ if (s.value) {
963
+ if (fn.async === true || fn.generator !== undefined)
964
+ escape(s.value, s.loc, "the result of an async function or generator");
965
+ else
966
+ this.store(sources(s.value), `r:${fn.name}`);
967
+ }
968
+ break;
969
+ case "fieldSet": {
970
+ const family = this.slots.family(s.className, s.field);
971
+ if (family !== null)
972
+ this.store(sources(s.value), `f:${family}`);
973
+ else
974
+ escape(s.value, s.loc, "a field scriptc cannot follow");
975
+ break;
976
+ }
977
+ case "recordSet":
978
+ this.store(sources(s.value), `s:${s.shapeId}\0${s.field}`);
979
+ break;
980
+ case "recordKeySet": {
981
+ const t = s.obj.type;
982
+ if (t.kind === "record") {
983
+ const shape = this.records.get(t.shapeId);
984
+ const src = sources(s.value);
985
+ this.store(src, `s:${t.shapeId}\0*`);
986
+ for (const f of shape?.fields ?? [])
987
+ if (this.direct(f.type))
988
+ this.store(src, `s:${t.shapeId}\0${f.name}`);
989
+ }
990
+ else
991
+ escape(s.value, s.loc, "a dynamically keyed property");
992
+ break;
993
+ }
994
+ case "arraySet":
995
+ if (isNumberArray(s.arr.type))
996
+ write(s.arr, s.value);
997
+ else if (s.arr.type.kind === "array" && this.holds(s.arr.type.elem))
998
+ this.store(sources(s.value), `e:${typeKey(s.arr.type)}`);
999
+ break;
1000
+ case "forOf":
1001
+ if (this.holds(fn.locals.find((l) => l.id === s.localId)?.type ?? s.iterable.type)) {
1002
+ const slot = this.localSlot(fn, s.localId);
1003
+ const t = s.iterable.type;
1004
+ if (t.kind === "array")
1005
+ this.store(elementSlot(s.iterable), slot);
1006
+ else {
1007
+ // Another iterable yields stored values or unknown ones.
1008
+ this.store(this.contained(t), slot);
1009
+ for (const node of this.opaqueValue(fn.locals.find((l) => l.id === s.localId)?.type ?? t, s.loc, "an iterator"))
1010
+ this.edge(node, slot);
1011
+ }
1012
+ }
1013
+ break;
1014
+ case "tryCatch":
1015
+ if (s.catchLocalId !== null) {
1016
+ const type = fn.locals.find((l) => l.id === s.catchLocalId)?.type;
1017
+ if (type && this.holds(type))
1018
+ for (const node of this.opaqueValue(type, s.loc, "a caught value"))
1019
+ this.edge(node, this.localSlot(fn, s.catchLocalId));
1020
+ }
1021
+ break;
1022
+ case "throw":
1023
+ escape(s.value, s.loc, "a throw");
1024
+ break;
1025
+ default:
1026
+ break;
1027
+ }
1028
+ everyStmtChild(s, (child) => {
1029
+ expr(child);
1030
+ return true;
1031
+ }, (child) => {
1032
+ stmt(child);
1033
+ return true;
1034
+ });
1035
+ };
1036
+ for (const s of fn.body)
1037
+ stmt(s);
1038
+ }
1039
+ /** Whether a value of type `t` can reach a class instance. */
1040
+ containsObject(t, seen) {
1041
+ const key = typeKey(t);
1042
+ if (seen.has(key))
1043
+ return false;
1044
+ seen.add(key);
1045
+ switch (t.kind) {
1046
+ case "object":
1047
+ return true;
1048
+ case "array":
1049
+ case "set":
1050
+ return this.containsObject(t.elem, seen);
1051
+ case "map":
1052
+ return this.containsObject(t.key, seen) || this.containsObject(t.value, seen);
1053
+ case "union":
1054
+ return (this.unions.get(t.unionId) ?? []).some((a) => this.containsObject(a, seen));
1055
+ case "record": {
1056
+ const shape = this.records.get(t.shapeId);
1057
+ return ((shape?.fields.some((f) => this.containsObject(f.type, seen)) ?? false) ||
1058
+ (shape?.indexValue !== undefined && this.containsObject(shape.indexValue, seen)));
1059
+ }
1060
+ default:
1061
+ return false;
1062
+ }
1063
+ }
1064
+ /* ── solving ── */
1065
+ solve() {
1066
+ const c = this.c;
1067
+ // Backward from every annotated slot: the allocations and origins whose
1068
+ // arrays can end up in it are constrained. Forward from those: the
1069
+ // nodes that may hold a constrained array. An array whose elements are
1070
+ // copied into one that may be constrained must be constrained as well,
1071
+ // which can constrain more arrays: repeat until nothing changes.
1072
+ const constrained = new Map();
1073
+ const expanded = new Set();
1074
+ const roots = [...this.annotated];
1075
+ const forward = [];
1076
+ while (roots.length > 0) {
1077
+ for (const [root, note] of roots.splice(0)) {
1078
+ if (expanded.has(root))
1079
+ continue;
1080
+ expanded.add(root);
1081
+ const queue = [root];
1082
+ while (queue.length) {
1083
+ const node = queue.pop();
1084
+ if (this.allocs.has(node) && !constrained.has(node)) {
1085
+ constrained.set(node, note);
1086
+ if (!this.constrainedReach.has(node)) {
1087
+ this.constrainedReach.set(node, note);
1088
+ forward.push(node);
1089
+ }
1090
+ }
1091
+ const origin = this.opaque.get(node);
1092
+ if (origin)
1093
+ c.report("SC7003", note.loc, `the Int32[] contract on '${note.name}' cannot be checked: the array can come from ${origin.why} (${c.where(origin.loc)}), whose element stores scriptc does not see`, "build the array in typed code (a literal, `new Array(n).fill(0)` or `push`) and pass it along, or remove Int32[]");
1094
+ for (const p of this.pred.get(node) ?? NO_NODES)
1095
+ if (!expanded.has(p)) {
1096
+ expanded.add(p);
1097
+ queue.push(p);
1098
+ }
1099
+ }
1100
+ }
1101
+ while (forward.length) {
1102
+ const node = forward.pop();
1103
+ const note = this.constrainedReach.get(node);
1104
+ for (const next of this.succ.get(node) ?? NO_NODES)
1105
+ if (!this.constrainedReach.has(next)) {
1106
+ this.constrainedReach.set(next, note);
1107
+ forward.push(next);
1108
+ }
1109
+ }
1110
+ for (const copy of this.copies) {
1111
+ const note = this.reachingNote(copy.to);
1112
+ if (note === undefined)
1113
+ continue;
1114
+ for (const from of copy.from)
1115
+ if (!expanded.has(from))
1116
+ roots.push([from, note]);
1117
+ }
1118
+ }
1119
+ const queue = [];
1120
+ for (const node of [...this.allocs, ...this.opaque.keys()])
1121
+ if (!constrained.has(node)) {
1122
+ this.unconstrainedReach.add(node);
1123
+ queue.push(node);
1124
+ }
1125
+ while (queue.length) {
1126
+ const node = queue.pop();
1127
+ for (const next of this.succ.get(node) ?? NO_NODES)
1128
+ if (!this.unconstrainedReach.has(next)) {
1129
+ this.unconstrainedReach.add(next);
1130
+ queue.push(next);
1131
+ }
1132
+ }
1133
+ for (const e of this.escapes) {
1134
+ const note = this.reachingNote(e.nodes);
1135
+ if (note === undefined)
1136
+ continue;
1137
+ c.report("SC7003", e.loc, `an array that can reach '${note.name}' (Int32[]) escapes to ${e.what}, where its element stores are not checked${e.shown ? `: '${e.shown}'` : ""}`, "keep Int32[] arrays in typed code, or pass a copy (`[...xs]`) that no Int32[] slot holds");
1138
+ }
1139
+ for (const slot of new Set([...this.annotated.keys(), ...this.constrainedReach.keys()]))
1140
+ if (!this.unconstrainedReach.has(slot) && /^[lgfrs]:/.test(slot))
1141
+ this.int32Slots.add(slot);
1142
+ }
1143
+ reachingNote(nodes) {
1144
+ for (const n of nodes) {
1145
+ const note = this.constrainedReach.get(n);
1146
+ if (note)
1147
+ return note;
1148
+ }
1149
+ return undefined;
1150
+ }
1151
+ }
1152
+ function push(map, key, value) {
1153
+ const list = map.get(key);
1154
+ if (list)
1155
+ list.push(value);
1156
+ else
1157
+ map.set(key, [value]);
1158
+ }
1159
+ function orZero(text) {
1160
+ return /^[\w.$]+(\[[^\]]*\])?$/.test(text) ? `${text} | 0` : `(${text}) | 0`;
1161
+ }
1162
+ function describe(e) {
1163
+ switch (e.kind) {
1164
+ case "dynFrom":
1165
+ case "dynObjLit":
1166
+ case "dynArrLit":
1167
+ case "dynCheck":
1168
+ return "dynamic (any or unknown) code";
1169
+ case "intrinsic":
1170
+ return `the runtime (${e.name})`;
1171
+ case "libCall":
1172
+ return `the library call ${e.fn}`;
1173
+ case "awaitExpr":
1174
+ return "an awaited promise";
1175
+ default:
1176
+ return `an operation scriptc does not follow (${e.kind})`;
1177
+ }
1178
+ }
1179
+ //# sourceMappingURL=int32-elements.js.map