@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
@@ -1,9 +1,10 @@
1
- import { dynUndefinedExpr, boolLit, helperLoc, numLit, strLit, varRef } from "../../ir/build.js";
1
+ import { dynUndefinedExpr, boolLit, helperLoc, nodeThrowExpr, numLit, strLit, varRef, } from "../../ir/build.js";
2
+ import { builtinClassDynValueOf, builtinClassKindOf } from "./builtins/builtin-class-dyn.js";
2
3
  import { InternalCompilerError } from "../../errors.js";
3
4
  import * as ts from "../ts7/adapter.js";
4
5
  import { unsignedHex } from "../../format-integer.js";
5
6
  import { isJsSourceFile } from "../program.js";
6
- import { BOOL, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, isDirentShape, isDynTypedRefType, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
7
+ import { BOOL, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, CLASS_FIELD_ATTRIBUTES_PREFIX, classDynViewSupported, DYN_CLASS_PROPERTIES, isClassOwnEnumerableFieldName, isDirentShape, isDynTypedRefType, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
7
8
  import { isSafeToDiscard, isSafeToRepeat } from "./expressions/evaluation-safety.js";
8
9
  import { symbolFieldDisplayName } from "./symbol-fields.js";
9
10
  import { eventTargetRootOf } from "./lower-event-target.js";
@@ -84,13 +85,540 @@ function inspectKey(name) {
84
85
  function errorRenderable(info) {
85
86
  // The builtin classes' name/message/code live in runtime slots (the
86
87
  // ScrError prefix insp.error reads), not IR fields; only USER-declared
87
- // fields are own properties the runtime rendering would miss. #private
88
- // fields are NOT own properties — Node never prints them — so they
89
- // don't disqualify.
90
- if (!info.builtinError && info.def.fields.some((f) => !f.name.startsWith("#")))
91
- return false;
88
+ // fields are own properties the runtime rendering would miss. A user
89
+ // class's layout repeats its builtin base's prefix fields, which are
90
+ // those same slots. #private fields are NOT own properties — Node never
91
+ // prints them — so they don't disqualify.
92
+ if (!info.builtinError) {
93
+ const inherited = new Set();
94
+ for (let c = info.base; c; c = c.base) {
95
+ if (c.builtinError || c.def.runtime)
96
+ for (const f of c.def.fields)
97
+ inherited.add(f.name);
98
+ }
99
+ if (info.def.fields.some((f) => !f.name.startsWith("#") && !inherited.has(f.name)))
100
+ return false;
101
+ }
92
102
  return info.subclasses.every((s) => errorRenderable(s));
93
103
  }
104
+ /** The accessors that change what Node reads for an error's header. The
105
+ * runtime renders the instance's own name and message slots. */
106
+ const ERROR_HEADER_ACCESSORS = [
107
+ "get:name",
108
+ "set:name",
109
+ "get:message",
110
+ "set:message",
111
+ "get:stack",
112
+ "set:stack",
113
+ ];
114
+ /** Whether Node's header for an instance of `info`'s hierarchy can differ
115
+ * from the runtime's slots: a program class among its ancestors or
116
+ * descendants declares a `name`, `message` or `stack` accessor, or the
117
+ * program writes a prototype's `name` or `message`. */
118
+ function errorHeaderOverridden(lowerer, info) {
119
+ if (lowerer.prototypeMethodAccesses.has("name") || lowerer.prototypeMethodAccesses.has("message"))
120
+ return true;
121
+ const declares = (c) => !c.builtinError && !c.def.runtime && ERROR_HEADER_ACCESSORS.some((m) => c.methods.has(m));
122
+ for (let c = info.base; c; c = c.base)
123
+ if (declares(c))
124
+ return true;
125
+ const below = (c) => declares(c) || c.subclasses.some(below);
126
+ return below(info);
127
+ }
128
+ /** Error keys Node's error inspector folds into the base or hides. */
129
+ const ERROR_SPECIAL_KEYS = new Set(["name", "message", "stack", "cause", "errors"]);
130
+ /** The declared own (enumerable) fields of a user error class, in layout
131
+ * order (the base chain first). */
132
+ function ownErrorFields(info) {
133
+ // The builtin bases' layout fields (name, message) are runtime slots the
134
+ // error base already renders, not own enumerable properties.
135
+ const builtin = new Set();
136
+ for (let c = info.base; c; c = c.base) {
137
+ if (c.builtinError || c.def.runtime)
138
+ for (const f of c.def.fields)
139
+ builtin.add(f.name);
140
+ }
141
+ return info.def.fields.filter((f) => isClassOwnEnumerableFieldName(f.name) && !builtin.has(f.name));
142
+ }
143
+ /** `info` and its descendants that declare fields, most-derived first (a
144
+ * runtime instance tests against its own class before an ancestor's). */
145
+ function fieldedErrorClasses(info) {
146
+ const out = [];
147
+ const visit = (c) => {
148
+ for (const s of c.subclasses)
149
+ visit(s);
150
+ if (!c.builtinError && !c.def.runtime && ownErrorFields(c).length > 0)
151
+ out.push(c);
152
+ };
153
+ visit(info);
154
+ return out;
155
+ }
156
+ /** Why a fielded error class's own properties have no static rendering,
157
+ * or null when every field renders. `visiting` and `out` are the caller's
158
+ * inspectSupport walk: a field typed as the class itself (`next?: Chain`)
159
+ * is a recursive shape, not a new walk. */
160
+ function fieldedErrorReason(lowerer, info, visiting = new Set(), out = { recursive: false }) {
161
+ const key = `error:${info.def.name}`;
162
+ if (visiting.has(key)) {
163
+ out.recursive = true;
164
+ return null;
165
+ }
166
+ visiting.add(key);
167
+ try {
168
+ for (let c = info; c && !c.builtinError && !c.def.runtime; c = c.base) {
169
+ // Node prints the own properties in creation order, which puts a
170
+ // declared `cause` among the fields; the cause renders after them.
171
+ if (c.fieldOrder.some((f) => f.errorCause))
172
+ return "its field 'cause' is one Node's error inspector treats specially";
173
+ // A JavaScript class's fields exist once its constructor creates them,
174
+ // which can be conditional; the layout reads every field.
175
+ if (c.decl && isJsSourceFile(c.decl.getSourceFile()) && ownErrorFields(c).length > 0)
176
+ return "its fields are JavaScript properties, which its constructor may not create";
177
+ }
178
+ for (const f of ownErrorFields(info)) {
179
+ if (ERROR_SPECIAL_KEYS.has(f.name))
180
+ return `its field '${f.name}' is one Node's error inspector treats specially`;
181
+ const why = inspectSupport(lowerer, f.type, visiting, out);
182
+ if (why !== null)
183
+ return `its field '${f.name}': ${why}`;
184
+ }
185
+ return null;
186
+ }
187
+ finally {
188
+ visiting.delete(key);
189
+ }
190
+ }
191
+ /** True when an instance of `c` can contain itself: its fields reach `c`
192
+ * or one of its bases, whose slots can hold a `c` (`next: Chain` in a
193
+ * subclass of Chain, a field typed as Error). */
194
+ function errorInstanceReachesItself(lowerer, c) {
195
+ const holders = new Set();
196
+ for (let a = c; a; a = a.base)
197
+ holders.add(a.def.name);
198
+ const seen = new Set();
199
+ const walk = (u) => {
200
+ for (const x of typeConstituents(lowerer, u)) {
201
+ if (x.kind === "object" && holders.has(x.className))
202
+ return true;
203
+ const k = typeKey(x);
204
+ if (!seen.has(k)) {
205
+ seen.add(k);
206
+ if (walk(x))
207
+ return true;
208
+ }
209
+ }
210
+ return false;
211
+ };
212
+ return walk({ kind: "object", className: c.def.name });
213
+ }
214
+ /** An error value whose runtime class may be a program-declared subclass,
215
+ * which may declare fields (`class Bailable extends Error { bail = false }`)
216
+ * or carry a `cause`: Node prints the error base (`[Bailable [Error]: m]`,
217
+ * the stackless form compiled errors use) followed by the own properties,
218
+ * `[Bailable [Error]: m] { bail: true }`, with the usual single-line/
219
+ * multi-line choice counting the base. Each program class (most-derived
220
+ * first) is an instanceof arm; other values keep the runtime's error
221
+ * rendering. Beyond the depth budget an instance with own properties
222
+ * prints `[Name]`, as Node does for any object with keys; one without
223
+ * prints its header. */
224
+ function errorInspectHelper(lowerer, t, info, loc) {
225
+ const key = `insp.userError:${typeKey(t)}`;
226
+ const existing = lowerer.inspectHelpers.get(key);
227
+ if (existing)
228
+ return existing;
229
+ const name = `%util.insp.${lowerer.inspectHelpers.size}`;
230
+ lowerer.inspectHelpers.set(key, name);
231
+ const v = () => varRef("v.0", t, loc);
232
+ const r = () => varRef("r.0", F64, loc);
233
+ const d = () => varRef("d.0", F64, loc);
234
+ const rPlus1 = () => ({
235
+ kind: "bin",
236
+ op: "+",
237
+ left: r(),
238
+ right: numLit(1, loc),
239
+ type: F64,
240
+ loc,
241
+ });
242
+ const base = () => ({
243
+ kind: "libCall",
244
+ fn: "insp.error",
245
+ args: [v(), r(), d()],
246
+ type: STRING,
247
+ loc,
248
+ });
249
+ const error = () => lowerer.upcastTo(v(), "%Error");
250
+ const hasCause = () => ({
251
+ kind: "libCall",
252
+ fn: "insp.errorHasCause",
253
+ args: [error()],
254
+ type: BOOL,
255
+ loc,
256
+ });
257
+ const entry = (text) => ({
258
+ kind: "exprStmt",
259
+ expr: {
260
+ kind: "libCall",
261
+ fn: "insp.entry",
262
+ args: [text, boolLit(false, loc)],
263
+ type: VOID,
264
+ loc,
265
+ },
266
+ loc,
267
+ });
268
+ /** The own properties of an instance of `c`: its fields, then its
269
+ * `cause` (an assignment in the constructor or later, or the
270
+ * constructor's options, which Node lists last as `[cause]`). */
271
+ const propertiesArm = (c, display, fields) => {
272
+ const cls = { kind: "object", className: c.def.name };
273
+ const instance = c.def.name === t.className ? v() : { kind: "downcast", value: v(), type: cls, loc };
274
+ // A class whose fields can hold the instance itself (`next: Chain`)
275
+ // runs Node's circular machinery, as other cycle-capable objects do:
276
+ // an instance already on the traversal stack renders [Circular *N],
277
+ // before the depth answer, and the frame's text gets the <ref *N>
278
+ // prefix when the walk found it circular.
279
+ const onCycle = errorInstanceReachesItself(lowerer, c);
280
+ const circular = () => varRef("cc.0", F64, loc);
281
+ const arm = [
282
+ ...(onCycle
283
+ ? [
284
+ {
285
+ kind: "varDecl",
286
+ localId: "cc.0",
287
+ init: { kind: "libCall", fn: "insp.circCheck", args: [v()], type: F64, loc },
288
+ loc,
289
+ },
290
+ {
291
+ kind: "if",
292
+ cond: {
293
+ kind: "bin",
294
+ op: ">",
295
+ left: circular(),
296
+ right: numLit(0, loc),
297
+ type: BOOL,
298
+ loc,
299
+ },
300
+ then: [
301
+ {
302
+ kind: "return",
303
+ value: {
304
+ kind: "libCall",
305
+ fn: "insp.circular",
306
+ args: [circular()],
307
+ type: STRING,
308
+ loc,
309
+ },
310
+ loc,
311
+ },
312
+ ],
313
+ else_: null,
314
+ loc,
315
+ },
316
+ ]
317
+ : []),
318
+ {
319
+ kind: "if",
320
+ cond: { kind: "bin", op: ">", left: r(), right: d(), type: BOOL, loc },
321
+ then: [{ kind: "return", value: strLit(`[${display}]`, loc), loc }],
322
+ else_: null,
323
+ loc,
324
+ },
325
+ {
326
+ kind: "varDecl",
327
+ localId: "base.0",
328
+ init: improvedErrorBase(lowerer, v(), base(), display, loc),
329
+ loc,
330
+ },
331
+ {
332
+ kind: "exprStmt",
333
+ expr: { kind: "libCall", fn: "insp.begin", args: [rPlus1()], type: VOID, loc },
334
+ loc,
335
+ },
336
+ ...(onCycle
337
+ ? [
338
+ {
339
+ kind: "exprStmt",
340
+ expr: { kind: "libCall", fn: "insp.seenPush", args: [v()], type: VOID, loc },
341
+ loc,
342
+ },
343
+ ]
344
+ : []),
345
+ ];
346
+ for (const f of fields) {
347
+ const read = {
348
+ kind: "fieldGet",
349
+ obj: instance,
350
+ className: c.def.name,
351
+ field: f.name,
352
+ type: f.type,
353
+ loc,
354
+ };
355
+ arm.push(entry(concatAll([
356
+ strLit(`${inspectKey(f.name)}: `, loc),
357
+ inspectExpr(lowerer, f.type, read, rPlus1(), d(), loc),
358
+ ], loc)));
359
+ }
360
+ arm.push({
361
+ kind: "if",
362
+ cond: hasCause(),
363
+ then: [
364
+ entry({
365
+ kind: "libCall",
366
+ fn: "insp.errorCause",
367
+ args: [error(), rPlus1(), d()],
368
+ type: STRING,
369
+ loc,
370
+ }),
371
+ ],
372
+ else_: null,
373
+ loc,
374
+ });
375
+ const ended = {
376
+ kind: "libCall",
377
+ fn: "insp.end",
378
+ args: [
379
+ varRef("base.0", STRING, loc),
380
+ strLit("{", loc),
381
+ strLit("}", loc),
382
+ rPlus1(),
383
+ boolLit(false, loc),
384
+ boolLit(false, loc),
385
+ ],
386
+ type: STRING,
387
+ loc,
388
+ };
389
+ arm.push({
390
+ kind: "return",
391
+ value: onCycle
392
+ ? { kind: "libCall", fn: "insp.refWrap", args: [v(), ended], type: STRING, loc }
393
+ : ended,
394
+ loc,
395
+ });
396
+ return arm;
397
+ };
398
+ const body = [];
399
+ for (const c of userErrorClasses(info)) {
400
+ const display = c.def.jsName ?? c.decl?.name?.text ?? c.def.name.replace(/^%/, "");
401
+ const fields = ownErrorFields(c);
402
+ const why = fields.length > 0 ? fieldedErrorReason(lowerer, c) : null;
403
+ let arm;
404
+ if (why !== null) {
405
+ // An instance of a subclass whose own properties have no rendering
406
+ // throws a named refusal instead of printing a partial object.
407
+ arm = [
408
+ {
409
+ kind: "return",
410
+ value: nodeThrowExpr(0, "SC2020", `inspecting a '${display}' error (${why}) is not supported yet`, STRING, loc),
411
+ loc,
412
+ },
413
+ ];
414
+ }
415
+ else if (fields.length === 0) {
416
+ // A field-less program class: without a `cause` it has no own
417
+ // properties, and Node prints the header alone at any depth.
418
+ arm = [
419
+ {
420
+ kind: "if",
421
+ cond: { kind: "unary", op: "!", operand: hasCause(), type: BOOL, loc },
422
+ then: [
423
+ { kind: "return", value: improvedErrorBase(lowerer, v(), base(), display, loc), loc },
424
+ ],
425
+ else_: null,
426
+ loc,
427
+ },
428
+ ...propertiesArm(c, display, fields),
429
+ ];
430
+ }
431
+ else {
432
+ arm = propertiesArm(c, display, fields);
433
+ }
434
+ if (c.def.name === t.className) {
435
+ body.push({ kind: "block", body: arm, loc });
436
+ break;
437
+ }
438
+ body.push({
439
+ kind: "if",
440
+ cond: { kind: "instanceOf", value: v(), className: c.def.name, type: BOOL, loc },
441
+ then: arm,
442
+ else_: null,
443
+ loc,
444
+ });
445
+ }
446
+ if (body.at(-1)?.kind !== "block")
447
+ body.push({ kind: "return", value: base(), loc });
448
+ const fn = {
449
+ name,
450
+ params: [
451
+ { localId: "v.0", name: "v", type: t },
452
+ { localId: "r.0", name: "r", type: F64 },
453
+ { localId: "d.0", name: "d", type: F64 },
454
+ ],
455
+ returnType: STRING,
456
+ locals: [
457
+ { id: "v.0", name: "v", type: t, mutable: false },
458
+ { id: "r.0", name: "r", type: F64, mutable: false },
459
+ { id: "d.0", name: "d", type: F64, mutable: false },
460
+ { id: "base.0", name: "base", type: STRING, mutable: false },
461
+ { id: "cc.0", name: "cc", type: F64, mutable: false },
462
+ { id: "name.0", name: "name", type: STRING, mutable: true },
463
+ { id: "raw.0", name: "raw", type: STRING, mutable: true },
464
+ ],
465
+ body,
466
+ loc,
467
+ };
468
+ // Dynamic stores (a JavaScript class's `this.x = ...` outside its
469
+ // declared fields, or a write through an untyped reference) add a
470
+ // property bag to a class after this helper was built. The rendering
471
+ // reads only a `cause` from it, so an instance whose bag holds another
472
+ // property throws a named refusal instead of printing a partial object.
473
+ lowerer.shapeOrderHelperFinalizers.push(() => {
474
+ const bagged = [info, ...userErrorClasses(info)].filter((c) => !c.builtinError &&
475
+ !c.def.runtime &&
476
+ c.def.fields.some((f) => f.name === DYN_CLASS_PROPERTIES));
477
+ if (bagged.length === 0)
478
+ return;
479
+ fn.body = [
480
+ ...bagged.map((c) => ({
481
+ kind: "if",
482
+ cond: {
483
+ kind: "logical",
484
+ op: "&&",
485
+ left: { kind: "instanceOf", value: v(), className: c.def.name, type: BOOL, loc },
486
+ right: {
487
+ kind: "libCall",
488
+ fn: "insp.errorBagHasProperties",
489
+ args: [
490
+ {
491
+ kind: "fieldGet",
492
+ obj: c.def.name === t.className
493
+ ? v()
494
+ : {
495
+ kind: "downcast",
496
+ value: v(),
497
+ type: { kind: "object", className: c.def.name },
498
+ loc,
499
+ },
500
+ className: c.def.name,
501
+ field: DYN_CLASS_PROPERTIES,
502
+ type: DYN,
503
+ loc,
504
+ },
505
+ ],
506
+ type: BOOL,
507
+ loc,
508
+ },
509
+ type: BOOL,
510
+ loc,
511
+ },
512
+ then: [
513
+ {
514
+ kind: "return",
515
+ value: nodeThrowExpr(0, "SC2020", `inspecting a '${c.def.jsName ?? c.def.name.replace(/^%/, "")}' error with properties created at run time is not supported yet`, STRING, loc),
516
+ loc,
517
+ },
518
+ ],
519
+ else_: null,
520
+ loc,
521
+ })),
522
+ ...body,
523
+ ];
524
+ });
525
+ lowerer.liftedFns.push(fn);
526
+ return name;
527
+ }
528
+ /** The program-declared classes among `info` and its descendants, most
529
+ * derived first (an instance tests against its own class before an
530
+ * ancestor's). Runtime-provided error classes are not among them. */
531
+ function userErrorClasses(info) {
532
+ const out = [];
533
+ const visit = (c) => {
534
+ for (const s of c.subclasses)
535
+ visit(s);
536
+ if (!c.builtinError && !c.def.runtime)
537
+ out.push(c);
538
+ };
539
+ visit(info);
540
+ return out;
541
+ }
542
+ /** Node's improveStack over the stackless base (`[Error: m]`): when the
543
+ * instance's constructor name differs from its `name` and the name ends in
544
+ * "Error", the header names both — `[Bailable [Error]: m]`, or
545
+ * `[FetchError: m]` when the constructor name already contains it. */
546
+ function improvedErrorBase(lowerer, value, base, display, loc) {
547
+ const str = (method, receiver, args, type) => ({
548
+ kind: "strIntrinsic",
549
+ method,
550
+ receiver,
551
+ args,
552
+ type,
553
+ loc,
554
+ });
555
+ const and = (left, right) => ({
556
+ kind: "logical",
557
+ op: "&&",
558
+ left,
559
+ right,
560
+ type: BOOL,
561
+ loc,
562
+ });
563
+ const eq = (left, right, negated = false) => ({
564
+ kind: "strEq",
565
+ negated,
566
+ left,
567
+ right,
568
+ type: BOOL,
569
+ loc,
570
+ });
571
+ const nameRef = () => varRef("name.0", STRING, loc);
572
+ const baseRef = () => varRef("raw.0", STRING, loc);
573
+ const after = () => ({
574
+ kind: "bin",
575
+ op: "+",
576
+ left: str("length", nameRef(), [], F64),
577
+ right: numLit(1, loc),
578
+ type: F64,
579
+ loc,
580
+ });
581
+ const next = () => str("charAt", baseRef(), [after()], STRING);
582
+ const cond = and(and(eq(nameRef(), strLit(display, loc), true), str("endsWith", nameRef(), [strLit("Error", loc)], BOOL)), and(str("startsWith", baseRef(), [concatAll([strLit("[", loc), nameRef()], loc)], BOOL), {
583
+ kind: "logical",
584
+ op: "||",
585
+ left: eq(next(), strLit(":", loc)),
586
+ right: eq(next(), strLit("]", loc)),
587
+ type: BOOL,
588
+ loc,
589
+ }));
590
+ const rest = () => str("slice", baseRef(), [after()], STRING);
591
+ const improved = {
592
+ kind: "ternary",
593
+ cond: str("includes", strLit(display, loc), [nameRef()], BOOL),
594
+ then: concatAll([strLit(`[${display}`, loc), rest()], loc),
595
+ else_: concatAll([strLit(`[${display} [`, loc), nameRef(), strLit("]", loc), rest()], loc),
596
+ type: STRING,
597
+ loc,
598
+ };
599
+ return {
600
+ kind: "seqExpr",
601
+ stmts: [
602
+ {
603
+ kind: "varDecl",
604
+ localId: "name.0",
605
+ init: {
606
+ kind: "fieldGet",
607
+ obj: lowerer.upcastTo(value, "%Error"),
608
+ className: "%Error",
609
+ field: "name",
610
+ type: STRING,
611
+ loc,
612
+ },
613
+ loc,
614
+ },
615
+ { kind: "varDecl", localId: "raw.0", init: base, loc },
616
+ ],
617
+ result: { kind: "ternary", cond, then: improved, else_: baseRef(), type: STRING, loc },
618
+ type: STRING,
619
+ loc,
620
+ };
621
+ }
94
622
  function isErrorClass(lowerer, className) {
95
623
  if (RUNTIME_ERROR_CLASSES.has(className))
96
624
  return true;
@@ -109,12 +637,17 @@ function inspectSupport(lowerer, t, visiting, out) {
109
637
  case "regex":
110
638
  case "symbol":
111
639
  case "bigint":
640
+ case "date":
112
641
  case "dyn":
113
642
  return null;
114
643
  case "array":
115
644
  return inspectSupport(lowerer, t.elem, visiting, out);
116
645
  case "bytes":
117
- return "typed arrays inside composites have no inspect lowering yet (Buffer's <Buffer ..> form vs Uint8Array's is not recorded in the static type here)";
646
+ // A Uint8Array and a Buffer share the u8 representation and print
647
+ // differently; the other element kinds are never Buffers.
648
+ return t.elem === "u8"
649
+ ? "Uint8Array and Buffer values inside composites have no inspect lowering yet (Buffer's <Buffer ..> form vs Uint8Array's is not recorded in the static type here)"
650
+ : null;
118
651
  case "record": {
119
652
  if (visiting.has(t.shapeId)) {
120
653
  out.recursive = true;
@@ -194,13 +727,24 @@ function inspectSupport(lowerer, t, visiting, out) {
194
727
  if (eventTargetRootOf(info) !== null)
195
728
  return null;
196
729
  if (isErrorClass(lowerer, t.className)) {
197
- return errorRenderable(info)
198
- ? null
199
- : "error subclasses with declared fields have no inspect lowering yet (the extra own properties are runtime-dynamic)";
730
+ if (userErrorClasses(info).length > 0 && errorHeaderOverridden(lowerer, info))
731
+ return "error subclasses whose name, message or stack is an accessor or a prototype property have no inspect lowering yet";
732
+ if (errorRenderable(info))
733
+ return null;
734
+ // Subclasses with declared fields render the error base followed
735
+ // by their own properties. The static class's own fields must
736
+ // render; a subclass whose fields cannot is a runtime refusal on
737
+ // its own instances only (see errorInspectHelper).
738
+ const own = fieldedErrorClasses(info).find((c) => c === info);
739
+ const ownWhy = own ? fieldedErrorReason(lowerer, own, visiting, out) : null;
740
+ if (ownWhy !== null)
741
+ return `'${t.className.replace(/^%(m\d+\.)?/, "")}' error values (${ownWhy})`;
742
+ return null;
200
743
  }
201
- // A class with subclasses renders through its checked-dynamic view,
202
- // which names the instance's own class and holds its own fields.
203
- if (info.subclasses.length > 0) {
744
+ // A class with subclasses, or a JavaScript class, renders through its
745
+ // checked-dynamic view, which names the instance's own class and holds
746
+ // its own properties.
747
+ if (classInspectsThroughView(lowerer, info)) {
204
748
  if (!isDynTypedRefType(t) || visiting.has(t.className))
205
749
  return null;
206
750
  visiting.add(t.className);
@@ -236,6 +780,10 @@ function inspectSupport(lowerer, t, visiting, out) {
236
780
  visiting.delete(t.className);
237
781
  return null;
238
782
  }
783
+ // Generator objects print through their checked capsule: Node's
784
+ // `Object [Generator] {}`, or the tag of the iterator they implement.
785
+ case "generator":
786
+ return null;
239
787
  default:
240
788
  return `'${lowerer.fmt(t)}' values have no inspect lowering`;
241
789
  }
@@ -300,10 +848,31 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
300
848
  return { kind: "libCall", fn: "sym.toString", args: [value], type: STRING, loc };
301
849
  case "bigint":
302
850
  return { kind: "libCall", fn: "bigint.inspect", args: [value], type: STRING, loc };
851
+ case "date":
852
+ // Node prints a Date's toISOString() at every depth, and its
853
+ // toString() ("Invalid Date") when the time value is NaN.
854
+ return { kind: "libCall", fn: "insp.date", args: [value], type: STRING, loc };
303
855
  case "bytes":
856
+ if (t.elem !== "u8") {
857
+ return {
858
+ kind: "libCall",
859
+ fn: "insp.typedArray",
860
+ args: [value, recurse, depth],
861
+ type: STRING,
862
+ loc,
863
+ };
864
+ }
304
865
  return { kind: "libCall", fn: "insp.buffer", args: [value], type: STRING, loc };
305
866
  case "dyn":
306
867
  return { kind: "libCall", fn: "insp.dyn", args: [value, recurse, depth], type: STRING, loc };
868
+ case "generator":
869
+ return {
870
+ kind: "libCall",
871
+ fn: "insp.dyn",
872
+ args: [lowerer.coerceToExpected(value, DYN), recurse, depth],
873
+ type: STRING,
874
+ loc,
875
+ };
307
876
  case "object":
308
877
  if (eventTargetRootOf(lowerer.classes.get(t.className)) !== null) {
309
878
  return {
@@ -315,6 +884,16 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
315
884
  };
316
885
  }
317
886
  if (isErrorClass(lowerer, t.className)) {
887
+ const info = lowerer.classes.get(t.className);
888
+ if (info && userErrorClasses(info).length > 0) {
889
+ return {
890
+ kind: "call",
891
+ callee: errorInspectHelper(lowerer, t, info, loc),
892
+ args: [value, recurse, depth],
893
+ type: STRING,
894
+ loc,
895
+ };
896
+ }
318
897
  return {
319
898
  kind: "libCall",
320
899
  fn: "insp.error",
@@ -323,7 +902,7 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
323
902
  loc,
324
903
  };
325
904
  }
326
- if (lowerer.classes.get(t.className)?.subclasses.length) {
905
+ if (classInspectsThroughView(lowerer, lowerer.classes.get(t.className))) {
327
906
  return {
328
907
  kind: "libCall",
329
908
  fn: "insp.dyn",
@@ -420,12 +999,46 @@ function typeConstituents(lowerer, u) {
420
999
  return [u.key, u.value];
421
1000
  case "union":
422
1001
  return lowerer.unions.get(u.unionId)?.arms.slice() ?? [];
423
- case "object":
424
- return lowerer.classes.get(u.className)?.def.fields.map((f) => f.type) ?? [];
1002
+ case "object": {
1003
+ const info = lowerer.classes.get(u.className);
1004
+ if (!info)
1005
+ return [];
1006
+ const types = info.def.fields.map((f) => f.type);
1007
+ // An error value can be an instance of a program-declared subclass,
1008
+ // whose own fields its inspection renders (errorInspectHelper).
1009
+ if (isErrorClass(lowerer, u.className))
1010
+ for (const c of userErrorClasses(info))
1011
+ for (const f of ownErrorFields(c))
1012
+ types.push(f.type);
1013
+ return types;
1014
+ }
425
1015
  default:
426
1016
  return [];
427
1017
  }
428
1018
  }
1019
+ /** Whether instances of a class render through its checked-dynamic view
1020
+ * instead of a helper over the declared layout. The view names the
1021
+ * instance's own class, which a base-typed value may not know statically,
1022
+ * and lists own properties in creation order. A JavaScript class needs that
1023
+ * order: its fields can be created conditionally, outside the constructor,
1024
+ * or by writes to the instance after construction. */
1025
+ function classInspectsThroughView(lowerer, info) {
1026
+ if (info === undefined)
1027
+ return false;
1028
+ if (info.subclasses.length > 0)
1029
+ return true;
1030
+ return (info.decl != null &&
1031
+ isJsSourceFile(ts.getSourceFileOfNode(info.decl)) &&
1032
+ classDynViewSupported(info.def.fields, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
1033
+ }
1034
+ /** Whether a class holds properties added outside its declared layout, or
1035
+ * fields Object.defineProperty can make non-enumerable, which only its
1036
+ * checked-dynamic view lists as Node does. Decided after lowering, when the
1037
+ * class has its final fields. */
1038
+ function classInspectsAddedProperties(lowerer, info) {
1039
+ return (info.def.fields.some((field) => field.name === DYN_CLASS_PROPERTIES || field.name.startsWith(CLASS_FIELD_ATTRIBUTES_PREFIX)) &&
1040
+ classDynViewSupported(info.def.fields, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
1041
+ }
429
1042
  /* ── the interned per-type helper ────────────────────────────────────── */
430
1043
  /** `%util.insp.<n>(v, r, d): string` — formatValue over the static type:
431
1044
  * empty composites answer their literals (before the depth check, Node's
@@ -456,8 +1069,8 @@ function inspectHelper(lowerer, t, loc) {
456
1069
  // CYCLE-CAPABLE composites (typeReachesItself) run Node's circular
457
1070
  // machinery: circCheck first (a value already on the traversal stack
458
1071
  // renders [Circular *N] — before the empty/depth answers, Node's
459
- // order), seen-push after begin, and refWrap around end's result (the
460
- // <ref *N> prefix on values the walk found circular). Acyclic types
1072
+ // order), seen-push after begin, and refWrap around end's result (end
1073
+ // adds the <ref *N> prefix on values the walk found circular). Acyclic types
461
1074
  // keep the zero-cost path.
462
1075
  const onCycle = (t.kind === "record" || t.kind === "array" || t.kind === "map" || t.kind === "object") &&
463
1076
  typeReachesItself(lowerer, t);
@@ -857,6 +1470,7 @@ function inspectHelper(lowerer, t, loc) {
857
1470
  // Object.keys' declared order (SEMANTICS.md 36's stance). Retained
858
1471
  // reachability can settle this shape after the helper is first
859
1472
  // interned, so rebuild the field walk once metadata is final.
1473
+ lowerer.keyOrder.observe(t);
860
1474
  rebuildShapeOrderBody = () => {
861
1475
  const current = lowerer.shapes.get(t.shapeId) ?? shape;
862
1476
  const order = current.declaredOrder ?? current.fields.map((f) => f.name);
@@ -1071,7 +1685,7 @@ function inspectHelper(lowerer, t, loc) {
1071
1685
  // #private fields never render: they are not properties in any
1072
1686
  // observable way — Node's inspect omits them entirely (verified),
1073
1687
  // so a class whose only fields are private prints as `C {}`.
1074
- const visible = info.def.fields.filter((f) => !f.name.startsWith("#"));
1688
+ const visible = info.def.fields.filter((f) => isClassOwnEnumerableFieldName(f.name));
1075
1689
  if (visible.length === 0) {
1076
1690
  body = [ret(strLit(display === "" ? "{}" : `${display} {}`, loc))];
1077
1691
  break;
@@ -1159,6 +1773,9 @@ function inspectHelper(lowerer, t, loc) {
1159
1773
  };
1160
1774
  prependCycleGuard();
1161
1775
  }
1776
+ // Typed as the IR function itself: the finalizer below replaces the
1777
+ // body of the very object liftedFns holds (natively, a differently typed
1778
+ // literal would be copied into the list).
1162
1779
  const fn = {
1163
1780
  name,
1164
1781
  params: [
@@ -1171,6 +1788,25 @@ function inspectHelper(lowerer, t, loc) {
1171
1788
  body,
1172
1789
  loc,
1173
1790
  };
1791
+ const inspected = t.kind === "object" ? lowerer.classes.get(t.className) : undefined;
1792
+ if (inspected !== undefined) {
1793
+ // Dynamic stores add a property bag to the class after this helper was
1794
+ // built. The checked-dynamic view lists the bag's properties after the
1795
+ // declared fields, so a class that has one renders through the view.
1796
+ lowerer.shapeOrderHelperFinalizers.push(() => {
1797
+ if (!classInspectsAddedProperties(lowerer, inspected))
1798
+ return;
1799
+ fn.body = [
1800
+ ret({
1801
+ kind: "libCall",
1802
+ fn: "insp.dyn",
1803
+ args: [{ kind: "dynFrom", value: v(), liveRef: true, type: DYN, loc }, r(), d()],
1804
+ type: STRING,
1805
+ loc,
1806
+ }),
1807
+ ];
1808
+ });
1809
+ }
1174
1810
  if (rebuildShapeOrderBody !== null) {
1175
1811
  lowerer.shapeOrderHelperFinalizers.push(() => {
1176
1812
  rebuildShapeOrderBody();
@@ -1298,15 +1934,20 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
1298
1934
  }
1299
1935
  if (t.kind === "bytes") {
1300
1936
  // One runtime representation serves Buffer AND Uint8Array; their
1301
- // renderings differ, so the argument's checker type picks — and only
1302
- // Buffer lowers (lowerInspectCall's stance).
1937
+ // renderings differ, so the argument's checker type picks
1938
+ // (lowerInspectCall's stance).
1303
1939
  const tname = lowerer.checker.typeToString(lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(node)));
1304
- const isBuffer = tname === "Buffer" ||
1305
- tname === "NonSharedBuffer" ||
1306
- tname.startsWith("Buffer<") ||
1307
- tname.startsWith("NonSharedBuffer<");
1308
- if (t.elem !== "u8" || !isBuffer) {
1309
- lowerer.unsupported("SC1090", node, `${surface} of '${tname}' values (Buffer's <Buffer ..> form is the lowered typed-array rendering; other typed arrays fence)`);
1940
+ if (isDataViewTypeName(tname)) {
1941
+ lowerer.unsupported("SC1090", node, `${surface} of '${tname}' values (Buffer and the numeric typed arrays are the lowered byte renderings; DataView has none yet)`);
1942
+ }
1943
+ if (!isBufferTypeName(tname)) {
1944
+ return {
1945
+ kind: "libCall",
1946
+ fn: "insp.typedArray",
1947
+ args: [value, numLit(0, loc), numLit(2, loc)],
1948
+ type: STRING,
1949
+ loc,
1950
+ };
1310
1951
  }
1311
1952
  return inspectExpr(lowerer, t, value, numLit(0, loc), numLit(2, loc), loc);
1312
1953
  }
@@ -1315,6 +1956,10 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
1315
1956
  // is not a value here, so the composition fences with the rewrite.
1316
1957
  lowerer.unsupported("SC1090", node, `${surface} of a void call result (call it as its own statement, then ${surface}(undefined))`);
1317
1958
  }
1959
+ // A read that always throws (an ambient name, a binding whose
1960
+ // initializer threw) never produces a value to render.
1961
+ if (value.kind === "libCall" && value.fn === "global.undefRead")
1962
+ return formatValueExpr(lowerer, DYN, { ...value, type: DYN }, 2, loc);
1318
1963
  const walk = { recursive: false };
1319
1964
  const reason = inspectSupport(lowerer, t, new Set(), walk);
1320
1965
  if (reason !== null) {
@@ -1322,18 +1967,25 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
1322
1967
  }
1323
1968
  return formatValueExpr(lowerer, t, value, 2, loc);
1324
1969
  }
1325
- /* ── the callsite: options, direct function/class names ──────────────── */
1326
- /** The parsed options literal: the resolved depth (numeric; Infinity for
1327
- * `null`), with every non-default knob fenced by name. */
1970
+ /** The checker's spelling of a Buffer, whose bytes print as <Buffer ..>. */
1971
+ function isBufferTypeName(tname) {
1972
+ return (tname === "Buffer" ||
1973
+ tname === "NonSharedBuffer" ||
1974
+ tname.startsWith("Buffer<") ||
1975
+ tname.startsWith("NonSharedBuffer<"));
1976
+ }
1977
+ function isDataViewTypeName(tname) {
1978
+ return tname === "DataView" || tname.startsWith("DataView<");
1979
+ }
1328
1980
  function parseInspectOptions(lowerer, node, recursive, dir = false) {
1329
1981
  const surface = dir ? "console.dir" : "util.inspect";
1982
+ const options = { depth: 2, breakLength: 80, compact: 3, sorted: false };
1330
1983
  if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
1331
- return 2;
1984
+ return options;
1332
1985
  if (!ts.isObjectLiteralExpression(node)) {
1333
1986
  lowerer.noLowering(`${surface} with a non-literal options argument`, node, "the options must be an object literal ({ depth, colors: false, ... }) so the knobs resolve at compile time");
1334
1987
  }
1335
- let depth = 2;
1336
- for (const prop of node.properties) {
1988
+ for (const prop of node.properties.nodes) {
1337
1989
  if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
1338
1990
  lowerer.noLowering(`${surface} options in this form`, prop, "plain `key: literal` entries are the lowered options");
1339
1991
  }
@@ -1356,14 +2008,14 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
1356
2008
  // machinery ([Circular *N]) cuts every cycle, so the walk is
1357
2009
  // bounded by the (finite) object graph — exactly Node.
1358
2010
  void recursive;
1359
- depth = Infinity;
2011
+ options.depth = Infinity;
1360
2012
  }
1361
2013
  else if (!(ts.isIdentifier(value) && value.text === "undefined")) {
1362
2014
  const n = numeric();
1363
2015
  if (n === null) {
1364
2016
  lowerer.noLowering(`${surface} with a non-literal depth option`, value, "depth must be a numeric literal (or null)");
1365
2017
  }
1366
- depth = n;
2018
+ options.depth = n;
1367
2019
  }
1368
2020
  }
1369
2021
  else if (key === "colors") {
@@ -1372,14 +2024,27 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
1372
2024
  }
1373
2025
  }
1374
2026
  else if (key === "compact") {
1375
- if (numeric() !== 3) {
1376
- lowerer.noLowering(`${surface} with a non-default compact option`, value, "only the default compact: 3 is lowered");
2027
+ // Node tries the single-line form and groups arrays only for a
2028
+ // compact of at least 1; false and smaller numbers break every
2029
+ // composite onto its own lines. compact: true is the older layout.
2030
+ const n = value.kind === ts.SyntaxKind.FalseKeyword ? 0 : numeric();
2031
+ if (n === null || Number.isNaN(n)) {
2032
+ lowerer.noLowering(`${surface} with this compact option`, value, "compact must be false or a numeric literal (compact: true has no lowering)");
1377
2033
  }
2034
+ options.compact = Math.max(n, 0);
2035
+ }
2036
+ else if (key === "sorted") {
2037
+ if (value.kind !== ts.SyntaxKind.TrueKeyword && value.kind !== ts.SyntaxKind.FalseKeyword) {
2038
+ lowerer.noLowering(`${surface} with this sorted option`, value, "sorted must be true or false (a comparator function has no lowering)");
2039
+ }
2040
+ options.sorted = value.kind === ts.SyntaxKind.TrueKeyword;
1378
2041
  }
1379
2042
  else if (key === "breakLength") {
1380
- if (numeric() !== 80) {
1381
- lowerer.noLowering(`${surface} with a non-default breakLength option`, value, "only the default breakLength: 80 is lowered");
2043
+ const n = ts.isIdentifier(value) && value.text === "Infinity" ? Infinity : numeric();
2044
+ if (n === null || Number.isNaN(n)) {
2045
+ lowerer.noLowering(`${surface} with a non-literal breakLength option`, value, "breakLength must be a numeric literal or Infinity");
1382
2046
  }
2047
+ options.breakLength = n;
1383
2048
  }
1384
2049
  else if (dir && key === "customInspect") {
1385
2050
  // console.dir's own default; only that value is lowered.
@@ -1388,10 +2053,42 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
1388
2053
  }
1389
2054
  }
1390
2055
  else {
1391
- lowerer.noLowering(`${surface} with the '${key}' option`, prop, `the lowered options are depth (numeric literal or null), colors: false, compact: 3, ${dir ? "breakLength: 80, and customInspect: false" : "and breakLength: 80"}`);
2056
+ lowerer.noLowering(`${surface} with the '${key}' option`, prop, `the lowered options are depth (numeric literal or null), colors: false, compact (false or a number), breakLength, ${dir ? "sorted (true or false), and customInspect: false" : "and sorted (true or false)"}`);
1392
2057
  }
1393
2058
  }
1394
- return depth;
2059
+ return options;
2060
+ }
2061
+ /** A render under non-default breakLength/compact/sorted: the value is evaluated
2062
+ * first, the layout applies to this render only, and the defaults return
2063
+ * afterwards. */
2064
+ function withInspectLayout(lowerer, options, value, render, loc) {
2065
+ if (options.breakLength === 80 && options.compact === 3 && !options.sorted)
2066
+ return render(value);
2067
+ const input = lowerer.declareHiddenLocal("%inspectInput", value.type);
2068
+ const text = lowerer.declareHiddenLocal("%inspectText", STRING);
2069
+ const layout = (breakLength, compact, sorted) => ({
2070
+ kind: "exprStmt",
2071
+ expr: {
2072
+ kind: "libCall",
2073
+ fn: "insp.layout",
2074
+ args: [numLit(breakLength, loc), numLit(compact, loc), boolLit(sorted, loc)],
2075
+ type: VOID,
2076
+ loc,
2077
+ },
2078
+ loc,
2079
+ });
2080
+ return {
2081
+ kind: "seqExpr",
2082
+ stmts: [
2083
+ { kind: "varDecl", localId: input.id, init: value, loc },
2084
+ layout(options.breakLength, options.compact, options.sorted),
2085
+ { kind: "varDecl", localId: text.id, init: render(varRef(input.id, value.type, loc)), loc },
2086
+ layout(80, 3, false),
2087
+ ],
2088
+ result: varRef(text.id, STRING, loc),
2089
+ type: STRING,
2090
+ loc,
2091
+ };
1395
2092
  }
1396
2093
  /** `util.inspect(fn)` / `util.inspect(Cls)` over a DIRECT identifier
1397
2094
  * naming a declared function or class: the name is compile-time truth,
@@ -1416,7 +2113,7 @@ function directCallableInspect(lowerer, node, loc) {
1416
2113
  const base = cls.base ? ` extends ${cls.base.def.name.replace(/^%/, "")}` : "";
1417
2114
  return strLit(`[class ${cls.def.name}${base}]`, loc);
1418
2115
  }
1419
- const decl = lowerer.checker.declarationsOf(sym)[0];
2116
+ const decl = sym.declarations[0];
1420
2117
  if (!decl)
1421
2118
  return null;
1422
2119
  if (ts.isFunctionDeclaration(decl) && decl.name) {
@@ -1435,10 +2132,10 @@ function directCallableInspect(lowerer, node, loc) {
1435
2132
  }
1436
2133
  /** util.inspect(value[, options]) — the spoke's inspect entry. */
1437
2134
  function lowerInspectCall(lowerer, expr, loc) {
1438
- if (expr.arguments.length < 1 || expr.arguments.length > 2) {
1439
- lowerer.noLowering(`util.inspect with ${expr.arguments.length} arguments`, expr, "the supported forms are inspect(value) and inspect(value, options)");
2135
+ if (expr.arguments.nodes.length < 1 || expr.arguments.nodes.length > 2) {
2136
+ lowerer.noLowering(`util.inspect with ${expr.arguments.nodes.length} arguments`, expr, "the supported forms are inspect(value) and inspect(value, options)");
1440
2137
  }
1441
- return lowerInspectValue(lowerer, expr.arguments[0], expr.arguments[1], loc, false);
2138
+ return lowerInspectValue(lowerer, expr.arguments.nodes[0], expr.arguments.nodes[1], loc, false);
1442
2139
  }
1443
2140
  /** `inspect(value, options)` over one value node: the shared body of
1444
2141
  * util.inspect and console.dir. console.dir is Node's `inspect(object,
@@ -1466,22 +2163,29 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
1466
2163
  if (value.type.kind === "bytes") {
1467
2164
  // One runtime representation serves Buffer AND Uint8Array; their
1468
2165
  // renderings differ (<Buffer aa> vs Uint8Array(1) [ 170 ]), so the
1469
- // TOP-LEVEL argument's checker type picks — and only Buffer lowers.
1470
- // Nested bytes fence in inspectSupport (no checker type survives
1471
- // into shapes).
2166
+ // TOP-LEVEL argument's checker type picks. Nested u8 bytes fence in
2167
+ // inspectSupport (no checker type survives into shapes).
1472
2168
  const tname = lowerer.checker.typeToString(lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(valueNode)));
1473
- const isBuffer = tname === "Buffer" ||
1474
- tname === "NonSharedBuffer" ||
1475
- tname.startsWith("Buffer<") ||
1476
- tname.startsWith("NonSharedBuffer<");
1477
- if (dir) {
2169
+ const isBuffer = isBufferTypeName(tname);
2170
+ if (dir && isBuffer) {
1478
2171
  lowerer.noLowering(`console.dir of '${tname}' values`, valueNode, "console.dir disables custom inspection, and the typed-array rendering it falls back to has no lowering yet — use console.log");
1479
2172
  }
1480
- if (value.type.elem !== "u8" || !isBuffer) {
1481
- lowerer.noLowering(`util.inspect of '${tname}' values`, valueNode, "Buffer's <Buffer ..> form is the lowered typed-array rendering; other typed arrays fence");
2173
+ if (isDataViewTypeName(tname)) {
2174
+ lowerer.noLowering(`util.inspect of '${tname}' values`, valueNode, "Buffer and the numeric typed arrays are the lowered byte renderings; DataView has none yet");
2175
+ }
2176
+ const options = parseInspectOptions(lowerer, optionsNode, false, dir);
2177
+ if (!isBuffer) {
2178
+ // A numeric typed array: Uint8Array(n) [ ... ] under the depth and
2179
+ // layout options.
2180
+ return withInspectLayout(lowerer, options, value, (input) => ({
2181
+ kind: "libCall",
2182
+ fn: "insp.typedArray",
2183
+ args: [input, numLit(0, loc), numLit(options.depth, loc)],
2184
+ type: STRING,
2185
+ loc,
2186
+ }), loc);
1482
2187
  }
1483
- const bufDepth = parseInspectOptions(lowerer, optionsNode, false, dir);
1484
- void bufDepth; // Buffers render fully at any depth (custom inspect)
2188
+ // Buffers render fully at any depth and on one line (custom inspect).
1485
2189
  return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(2, loc), loc);
1486
2190
  }
1487
2191
  const walk = { recursive: false };
@@ -1489,17 +2193,18 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
1489
2193
  if (reason !== null) {
1490
2194
  lowerer.noLowering(`${surface} of '${lowerer.fmt(value.type)}' values`, valueNode, reason);
1491
2195
  }
1492
- const depth = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
2196
+ const options = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
2197
+ const depth = options.depth;
1493
2198
  if (dir && value.type.kind === "dyn") {
1494
- return {
2199
+ return withInspectLayout(lowerer, options, value, (input) => ({
1495
2200
  kind: "libCall",
1496
2201
  fn: "console.dirDyn",
1497
- args: [value, numLit(depth, loc)],
2202
+ args: [input, numLit(depth, loc)],
1498
2203
  type: STRING,
1499
2204
  loc,
1500
- };
2205
+ }), loc);
1501
2206
  }
1502
- return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
2207
+ return withInspectLayout(lowerer, options, value, (input) => inspectExpr(lowerer, value.type, input, numLit(0, loc), numLit(depth, loc), loc), loc);
1503
2208
  }
1504
2209
  /* ── util.format / util.formatWithOptions ────────────────────────────── */
1505
2210
  /** One argument as format's %s conversion (Node: numbers via
@@ -1578,16 +2283,79 @@ function formatOArg(lowerer, node, depth, loc) {
1578
2283
  }
1579
2284
  return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
1580
2285
  }
2286
+ /** %d and %i over a checked-dynamic argument, as Node's formatWithOptions
2287
+ * reads it: a bigint prints as `${n}n`, a symbol as NaN, and any other
2288
+ * value as `number` (Number(arg) for %d, parseInt(String(arg)) for %i)
2289
+ * formatted. The argument evaluates once. */
2290
+ function formatDynInteger(lowerer, value, number, loc) {
2291
+ const held = lowerer.declareHiddenLocal("%formatArg", DYN);
2292
+ const ref = () => varRef(held.id, DYN, loc);
2293
+ return {
2294
+ kind: "seqExpr",
2295
+ stmts: [{ kind: "varDecl", localId: held.id, init: value, loc }],
2296
+ result: {
2297
+ kind: "ternary",
2298
+ cond: { kind: "dynTest", test: "bigint", value: ref(), type: BOOL, loc },
2299
+ then: {
2300
+ kind: "strConcat",
2301
+ left: { kind: "libCall", fn: "dyn.toStringCoerce", args: [ref()], type: STRING, loc },
2302
+ right: strLit("n", loc),
2303
+ type: STRING,
2304
+ loc,
2305
+ },
2306
+ else_: {
2307
+ kind: "ternary",
2308
+ cond: { kind: "dynTest", test: "symbol", value: ref(), type: BOOL, loc },
2309
+ then: strLit("NaN", loc),
2310
+ else_: { kind: "libCall", fn: "insp.f64", args: [number(ref())], type: STRING, loc },
2311
+ type: STRING,
2312
+ loc,
2313
+ },
2314
+ type: STRING,
2315
+ loc,
2316
+ },
2317
+ type: STRING,
2318
+ loc,
2319
+ };
2320
+ }
2321
+ /** %d and %i over the argument types Node formats without a number
2322
+ * conversion: a bigint prints as `${n}n` (formatBigInt) and a symbol as NaN;
2323
+ * null is Number(null) (0) under %d and parseInt("null") (NaN) under %i, and
2324
+ * undefined (including a void call) is NaN under both. Other arguments
2325
+ * still evaluate. Null for other types. */
2326
+ function formatIntegerFixed(value, spec, loc) {
2327
+ if (value.type.kind === "bigint") {
2328
+ return { kind: "libCall", fn: "bigint.inspect", args: [value], type: STRING, loc };
2329
+ }
2330
+ let text;
2331
+ if (value.type.kind === "symbol" ||
2332
+ value.type.kind === "undefinedT" ||
2333
+ value.type.kind === "void")
2334
+ text = "NaN";
2335
+ else if (value.type.kind === "nullT")
2336
+ text = spec === "%d" ? "0" : "NaN";
2337
+ else
2338
+ return null;
2339
+ if (value.kind === "unitLit")
2340
+ return strLit(text, loc);
2341
+ return {
2342
+ kind: "seqExpr",
2343
+ stmts: [{ kind: "exprStmt", expr: value, loc }],
2344
+ result: strLit(text, loc),
2345
+ type: STRING,
2346
+ loc,
2347
+ };
2348
+ }
1581
2349
  /** util.format(...) / util.formatWithOptions({}, ...): the compile-time
1582
2350
  * %-substitution over a literal format string (formatWithOptionsInternal
1583
2351
  * ported exactly — the arg cursor, the args-exhausted guard, %c's
1584
2352
  * consume-and-drop), with per-static-type conversions. Non-literal
1585
2353
  * format strings lower only in the substitution-free shapes. */
1586
2354
  export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverride, literalPrefix = "") {
1587
- const argNodes = [...(argNodesOverride ?? expr.arguments)];
2355
+ const argNodes = [...(argNodesOverride ?? expr.arguments.nodes)];
1588
2356
  if (withOptions) {
1589
2357
  const opts = argNodes.shift();
1590
- if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.length > 0) {
2358
+ if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.nodes.length > 0) {
1591
2359
  lowerer.noLowering("util.formatWithOptions with a non-empty options literal", opts ?? expr, "only the empty literal {} (the defaults — exactly util.format) is lowered");
1592
2360
  }
1593
2361
  }
@@ -1632,6 +2400,9 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1632
2400
  // strings through the runtime's ECMA-exact StringToNumber
1633
2401
  // (num.fromString — the same lowering Number(aString) takes).
1634
2402
  const value = lowerer.lowerExpr(node);
2403
+ const fixed = formatIntegerFixed(value, "%d", loc);
2404
+ if (fixed)
2405
+ return fixed;
1635
2406
  if (value.type.kind === "f64")
1636
2407
  return { kind: "libCall", fn: "insp.f64", args: [value], type: STRING, loc };
1637
2408
  if (value.type.kind === "string") {
@@ -1663,19 +2434,15 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1663
2434
  };
1664
2435
  }
1665
2436
  // A checked-dynamic argument (`console.log('... actual %d.',
1666
- // context.actual)` — test/common's exit report): VALIDATE it as a
1667
- // number (dynCheck) and format. A non-number dyn value throws the
1668
- // catchable TypeError where Node would print its ToNumber (NaN
1669
- // for objects) — it throws instead of returning a wrong result
1670
- // (SEMANTICS.md).
2437
+ // context.actual)` — test/common's exit report): Number(arg).
1671
2438
  if (value.type.kind === "dyn") {
1672
- return {
2439
+ return formatDynInteger(lowerer, value, (held) => ({
1673
2440
  kind: "libCall",
1674
- fn: "insp.f64",
1675
- args: [{ kind: "dynCheck", value, type: F64, loc }],
1676
- type: STRING,
2441
+ fn: "dyn.numberConstructor",
2442
+ args: [held],
2443
+ type: F64,
1677
2444
  loc,
1678
- };
2445
+ }), loc);
1679
2446
  }
1680
2447
  lowerer.noLowering(`util.format %d of '${lowerer.fmt(value.type)}' values`, node, "numbers, booleans, and strings lower; ToNumber over other types has no static lowering");
1681
2448
  break;
@@ -1683,6 +2450,9 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1683
2450
  case 105: {
1684
2451
  // %i — parseInt(ToString(arg)): the spec-exact composition.
1685
2452
  const value = lowerer.lowerExpr(node);
2453
+ const fixed = formatIntegerFixed(value, "%i", loc);
2454
+ if (fixed)
2455
+ return fixed;
1686
2456
  if (value.type.kind === "f64" ||
1687
2457
  value.type.kind === "bool" ||
1688
2458
  value.type.kind === "string") {
@@ -1698,6 +2468,19 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1698
2468
  };
1699
2469
  return { kind: "libCall", fn: "insp.f64", args: [parsed], type: STRING, loc };
1700
2470
  }
2471
+ // parseInt(String(arg)) over a checked-dynamic argument.
2472
+ if (value.type.kind === "dyn") {
2473
+ return formatDynInteger(lowerer, value, (held) => ({
2474
+ kind: "libCall",
2475
+ fn: "num.parseInt",
2476
+ args: [
2477
+ { kind: "libCall", fn: "dyn.toStringCoerce", args: [held], type: STRING, loc },
2478
+ numLit(0, loc),
2479
+ ],
2480
+ type: F64,
2481
+ loc,
2482
+ }), loc);
2483
+ }
1701
2484
  lowerer.noLowering(`util.format %i of '${lowerer.fmt(value.type)}' values`, node);
1702
2485
  break;
1703
2486
  }
@@ -1717,17 +2500,17 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1717
2500
  return strLit("undefined", loc);
1718
2501
  }
1719
2502
  // A checked-dynamic argument (`console.error('headers: %j',
1720
- // headers)` — the suite's http logging idiom): the runtime dyn
1721
- // walk stringifies JS-exactly (root undefined/function prints
1722
- // "undefined"; a handle in the tree throws the "not supported yet"
1723
- // Error).
2503
+ // headers)` — the suite's http logging idiom): the runtime runs
2504
+ // JSON.stringify's walk (toJSON hooks included; a root it drops
2505
+ // prints "undefined") and prints "[Circular]" for a circular
2506
+ // structure. A typed argument prints "[Circular]" the same way.
1724
2507
  if (value.type.kind === "dyn") {
1725
2508
  return { kind: "libCall", fn: "insp.jsonDyn", args: [value], type: STRING, loc };
1726
2509
  }
1727
2510
  if (!lowerer.jsonStringifySafe(value.type)) {
1728
2511
  lowerer.noLowering(`util.format %j of '${lowerer.fmt(value.type)}' values`, node, "only JSON-safe static types lower");
1729
2512
  }
1730
- return { kind: "jsonStringify", value, type: STRING, loc };
2513
+ return { kind: "jsonStringify", value, circular: true, type: STRING, loc };
1731
2514
  }
1732
2515
  case 102: {
1733
2516
  // %f — parseFloat(String(arg)) formatted: a number keeps its value
@@ -1894,21 +2677,21 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1894
2677
  switch (bi.member) {
1895
2678
  case "styleText":
1896
2679
  case "isDeepStrictEqual": {
1897
- if (expr.arguments.some(ts.isSpreadElement))
2680
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
1898
2681
  lowerer.noLowering(`util.${bi.member} with spread arguments`, expr);
1899
2682
  const stmts = [];
1900
2683
  const args = [];
1901
2684
  // Save all inputs before evaluating surplus arguments: comparison may
1902
2685
  // read mutable objects or throw, so it must happen after every argument.
1903
2686
  for (let i = 0; i < 3; i++) {
1904
- const input = expr.arguments[i]
1905
- ? lowerer.lowerExprExpecting(expr.arguments[i], DYN)
2687
+ const input = expr.arguments.nodes[i]
2688
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[i], DYN)
1906
2689
  : dynUndefinedExpr(loc);
1907
2690
  const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
1908
2691
  stmts.push({ kind: "varDecl", localId: saved.id, init: input, loc });
1909
2692
  args.push(varRef(saved.id, DYN, loc));
1910
2693
  }
1911
- for (const arg of expr.arguments.slice(3))
2694
+ for (const arg of expr.arguments.nodes.slice(3))
1912
2695
  stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
1913
2696
  const type = bi.member === "styleText" ? STRING : BOOL;
1914
2697
  return {
@@ -1926,10 +2709,10 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1926
2709
  case "debug":
1927
2710
  return lowerUtilCallableCall(lowerer, expr, bi.member, loc);
1928
2711
  case "getSystemErrorMap": {
1929
- if (expr.arguments.some(ts.isSpreadElement))
2712
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
1930
2713
  lowerer.noLowering("util.getSystemErrorMap with spread arguments", expr);
1931
2714
  const result = lowerSystemErrorMap(lowerer, loc);
1932
- const stmts = expr.arguments.map((arg) => ({
2715
+ const stmts = expr.arguments.nodes.map((arg) => ({
1933
2716
  kind: "exprStmt",
1934
2717
  expr: lowerer.lowerExpr(arg),
1935
2718
  loc,
@@ -1940,24 +2723,24 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1940
2723
  case "getSystemErrorMessage":
1941
2724
  case "stripVTControlCharacters":
1942
2725
  case "toUSVString": {
1943
- if (expr.arguments.some(ts.isSpreadElement))
2726
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
1944
2727
  lowerer.noLowering(`util.${bi.member} with spread arguments`, expr);
1945
- const input = expr.arguments[0]
1946
- ? lowerer.lowerExprExpecting(expr.arguments[0], DYN)
2728
+ const input = expr.arguments.nodes[0]
2729
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[0], DYN)
1947
2730
  : {
1948
2731
  kind: "dynFrom",
1949
2732
  value: { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc },
1950
2733
  type: DYN,
1951
2734
  loc,
1952
2735
  };
1953
- if (expr.arguments.length <= 1)
2736
+ if (expr.arguments.nodes.length <= 1)
1954
2737
  return { kind: "libCall", fn: `util.${bi.member}`, args: [input], type: STRING, loc };
1955
2738
  const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
1956
2739
  return {
1957
2740
  kind: "seqExpr",
1958
2741
  stmts: [
1959
2742
  { kind: "varDecl", localId: saved.id, init: input, loc },
1960
- ...expr.arguments
2743
+ ...expr.arguments.nodes
1961
2744
  .slice(1)
1962
2745
  .map((arg) => ({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc })),
1963
2746
  ],
@@ -1981,11 +2764,11 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1981
2764
  case "parseArgs":
1982
2765
  return lowerParseArgsCall(lowerer, expr, loc);
1983
2766
  case "parseEnv": {
1984
- if (expr.arguments.length > 1 || expr.arguments.some(ts.isSpreadElement)) {
2767
+ if (expr.arguments.nodes.length > 1 || expr.arguments.nodes.some(ts.isSpreadElement)) {
1985
2768
  lowerer.noLowering("util.parseEnv with spread or extra arguments", expr);
1986
2769
  }
1987
- const input = expr.arguments[0]
1988
- ? lowerer.lowerExprExpecting(expr.arguments[0], DYN)
2770
+ const input = expr.arguments.nodes[0]
2771
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[0], DYN)
1989
2772
  : dynUndefinedExpr(loc);
1990
2773
  const parsed = {
1991
2774
  kind: "libCall",
@@ -2014,7 +2797,7 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
2014
2797
  * answer native dyn wrappers; a static function slot checks the wrapper
2015
2798
  * when it receives it, and dyn slots keep calling it with JS arity. */
2016
2799
  function lowerUtilCallableCall(lowerer, expr, member, loc) {
2017
- if (expr.arguments.some(ts.isSpreadElement))
2800
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
2018
2801
  lowerer.noLowering(`util.${member} with spread arguments`, expr);
2019
2802
  const fn = member === "inherits"
2020
2803
  ? "util.inherits"
@@ -2026,8 +2809,15 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2026
2809
  const arity = member === "deprecate" ? 4 : member === "callbackify" ? 1 : 2;
2027
2810
  // Program classes keep static prototypes: there is no function object
2028
2811
  // whose prototype chain the runtime could relink or wrap.
2812
+ // EventEmitter and the stream classes are the exception as superCtor:
2813
+ // the runtime has untyped constructors for them (builtin-class-dyn.ts).
2029
2814
  const classArgs = member === "inherits" ? 2 : member === "deprecate" ? 1 : 0;
2030
- for (const arg of expr.arguments.slice(0, classArgs)) {
2815
+ const builtinBase = member === "inherits" && expr.arguments.nodes[1] !== undefined
2816
+ ? builtinClassKindOf(lowerer, expr.arguments.nodes[1])
2817
+ : null;
2818
+ for (const [index, arg] of expr.arguments.nodes.slice(0, classArgs).entries()) {
2819
+ if (index === 1 && builtinBase !== null)
2820
+ continue;
2031
2821
  if (lowerer.mapTypeOf(lowerer.typeOf(arg))?.kind === "classval")
2032
2822
  lowerer.noLowering(`util.${member} over a class constructor`, arg, member === "inherits"
2033
2823
  ? "declare the subclass with extends"
@@ -2038,14 +2828,17 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2038
2828
  const stmts = [];
2039
2829
  const args = [];
2040
2830
  for (let i = 0; i < arity; i++) {
2041
- const input = expr.arguments[i]
2042
- ? lowerer.lowerExprExpecting(expr.arguments[i], DYN)
2043
- : dynUndefinedExpr(loc);
2831
+ const node = expr.arguments.nodes[i];
2832
+ const input = !node
2833
+ ? dynUndefinedExpr(loc)
2834
+ : i === 1 && builtinBase !== null
2835
+ ? (builtinClassDynValueOf(lowerer, node) ?? lowerer.lowerExprExpecting(node, DYN))
2836
+ : lowerer.lowerExprExpecting(node, DYN);
2044
2837
  const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
2045
2838
  stmts.push({ kind: "varDecl", localId: saved.id, init: input, loc });
2046
2839
  args.push(varRef(saved.id, DYN, loc));
2047
2840
  }
2048
- for (const arg of expr.arguments.slice(arity))
2841
+ for (const arg of expr.arguments.nodes.slice(arity))
2049
2842
  stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
2050
2843
  const type = fn === "util.inherits" ? VOID : DYN;
2051
2844
  const result = { kind: "libCall", fn, args, type, loc };
@@ -2057,7 +2850,7 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2057
2850
  * a statically typed callback parameter cannot receive a value its type
2058
2851
  * excludes. Untyped (JavaScript or unknown) slots keep the wrapper dyn. */
2059
2852
  function callbackifyErrorExcludesNull(lowerer, expr) {
2060
- if (isJsSourceFile(expr.getSourceFile()))
2853
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
2061
2854
  return false;
2062
2855
  const checker = lowerer.checker;
2063
2856
  const slot = checker.getContextualType(expr) ?? lowerer.typeOf(expr);
@@ -2079,11 +2872,11 @@ function callbackifyErrorExcludesNull(lowerer, expr) {
2079
2872
  * variants and a null-prototype values object); statically typed member
2080
2873
  * reads leave that tree through the ordinary dyn checks. */
2081
2874
  function lowerParseArgsCall(lowerer, expr, loc) {
2082
- if (expr.arguments.length > 1 || expr.arguments.some(ts.isSpreadElement)) {
2083
- lowerer.noLowering(`util.parseArgs with ${expr.arguments.length} arguments`, expr, "the lowered form is parseArgs() or parseArgs(config)");
2875
+ if (expr.arguments.nodes.length > 1 || expr.arguments.nodes.some(ts.isSpreadElement)) {
2876
+ lowerer.noLowering(`util.parseArgs with ${expr.arguments.nodes.length} arguments`, expr, "the lowered form is parseArgs() or parseArgs(config)");
2084
2877
  }
2085
2878
  let config;
2086
- const configNode = expr.arguments[0];
2879
+ const configNode = expr.arguments.nodes[0];
2087
2880
  if (!configNode) {
2088
2881
  config = { kind: "dynObjLit", fields: [], type: DYN, loc };
2089
2882
  }
@@ -2137,9 +2930,9 @@ function lowerParseArgsCall(lowerer, expr, loc) {
2137
2930
  * forms and TypeScript keep the SC2020 fence: a typed consumer asserting
2138
2931
  * real frames must fail at compile time instead of reading placeholders. */
2139
2932
  function lowerGetCallSitesCall(lowerer, expr, loc) {
2140
- if (expr.arguments.length !== 0)
2933
+ if (expr.arguments.nodes.length !== 0)
2141
2934
  return null;
2142
- if (!isJsSourceFile(expr.getSourceFile()))
2935
+ if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
2143
2936
  return null;
2144
2937
  const frame = () => {
2145
2938
  const field = (name, value) => ({
@@ -2152,7 +2945,7 @@ function lowerGetCallSitesCall(lowerer, expr, loc) {
2152
2945
  field("functionName", { kind: "strLit", value: "", type: STRING, loc }),
2153
2946
  field("scriptName", {
2154
2947
  kind: "strLit",
2155
- value: expr.getSourceFile().fileName,
2948
+ value: ts.getSourceFileOfNode(expr).fileName,
2156
2949
  type: STRING,
2157
2950
  loc,
2158
2951
  }),