@scriptc/compiler 0.3.5 → 0.4.0

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 (1243) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +960 -82
  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 +13 -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 +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +324 -179
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +576 -268
  87. package/dist/backend/llvm/emitter.js +801 -4447
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dispatch.js +1 -0
  109. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  110. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  111. package/dist/backend/llvm/expr-dynamic.js +92 -63
  112. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  114. package/dist/backend/llvm/expr-primitives.js +132 -25
  115. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  116. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  117. package/dist/backend/llvm/expr-records.d.ts +1 -1
  118. package/dist/backend/llvm/expr-records.js +32 -11
  119. package/dist/backend/llvm/expr-records.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  121. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-abi.test.js +2 -2
  126. package/dist/backend/llvm/integer-clones.test.js +3 -3
  127. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  128. package/dist/backend/llvm/integer-remainder.js +156 -22
  129. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  130. package/dist/backend/llvm/intern-tables.test.js +1 -1
  131. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  132. package/dist/backend/llvm/jsval-encoding.js +20 -0
  133. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  134. package/dist/backend/llvm/jsval.d.ts +12 -0
  135. package/dist/backend/llvm/jsval.js +488 -0
  136. package/dist/backend/llvm/jsval.js.map +1 -0
  137. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  138. package/dist/backend/llvm/lazy-captures.js +39 -17
  139. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  140. package/dist/backend/llvm/lib-abi.js +1 -1
  141. package/dist/backend/llvm/lib-abi.js.map +1 -1
  142. package/dist/backend/llvm/lib-connect.js +1 -1
  143. package/dist/backend/llvm/lib-connect.js.map +1 -1
  144. package/dist/backend/llvm/lib-datagram.js +14 -8
  145. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  146. package/dist/backend/llvm/lib-dispatch.js +217 -24
  147. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  148. package/dist/backend/llvm/lib-filesystem.js +102 -13
  149. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  150. package/dist/backend/llvm/lib-http2.js +3 -3
  151. package/dist/backend/llvm/lib-http2.js.map +1 -1
  152. package/dist/backend/llvm/lib-lookup.js +2 -2
  153. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  154. package/dist/backend/llvm/lib-network.js +77 -25
  155. package/dist/backend/llvm/lib-network.js.map +1 -1
  156. package/dist/backend/llvm/lib-process.js +100 -50
  157. package/dist/backend/llvm/lib-process.js.map +1 -1
  158. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  159. package/dist/backend/llvm/lib-shared.js +229 -5
  160. package/dist/backend/llvm/lib-shared.js.map +1 -1
  161. package/dist/backend/llvm/lib-stream.js +46 -16
  162. package/dist/backend/llvm/lib-stream.js.map +1 -1
  163. package/dist/backend/llvm/lib-test.js +57 -8
  164. package/dist/backend/llvm/lib-test.js.map +1 -1
  165. package/dist/backend/llvm/lib-tls.js +4 -9
  166. package/dist/backend/llvm/lib-tls.js.map +1 -1
  167. package/dist/backend/llvm/local-array-reads.js +2 -2
  168. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  169. package/dist/backend/llvm/local-extents.d.ts +19 -0
  170. package/dist/backend/llvm/local-extents.js +169 -0
  171. package/dist/backend/llvm/local-extents.js.map +1 -0
  172. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  173. package/dist/backend/llvm/local-extents.test.js +92 -0
  174. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  175. package/dist/backend/llvm/local-union-storage.js +7 -7
  176. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  177. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  178. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  179. package/dist/backend/llvm/map-number-lookup.js +2 -2
  180. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  181. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  182. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  183. package/dist/backend/llvm/narrow-guards.js +151 -0
  184. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  185. package/dist/backend/llvm/nullable-unions.d.ts +70 -9
  186. package/dist/backend/llvm/nullable-unions.js +105 -6
  187. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  188. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  189. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  190. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  191. package/dist/backend/llvm/publish.d.ts +4 -0
  192. package/dist/backend/llvm/publish.js +14 -2
  193. package/dist/backend/llvm/publish.js.map +1 -1
  194. package/dist/backend/llvm/publish.test.js +1 -1
  195. package/dist/backend/llvm/receivers.d.ts +31 -0
  196. package/dist/backend/llvm/receivers.js +395 -0
  197. package/dist/backend/llvm/receivers.js.map +1 -0
  198. package/dist/backend/llvm/record-results.d.ts +13 -2
  199. package/dist/backend/llvm/record-results.js +66 -6
  200. package/dist/backend/llvm/record-results.js.map +1 -1
  201. package/dist/backend/llvm/reference-effects.js +9 -0
  202. package/dist/backend/llvm/reference-effects.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  204. package/dist/backend/llvm/reference-writes.js +143 -6
  205. package/dist/backend/llvm/reference-writes.js.map +1 -1
  206. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  207. package/dist/backend/llvm/reference-writes.test.js +88 -0
  208. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  209. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  210. package/dist/backend/llvm/regex-matchers.js +33 -0
  211. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  212. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  213. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  214. package/dist/backend/llvm/regions.d.ts +1 -1
  215. package/dist/backend/llvm/regions.js +9 -6
  216. package/dist/backend/llvm/regions.js.map +1 -1
  217. package/dist/backend/llvm/regions.test.js +1 -1
  218. package/dist/backend/llvm/shapes.d.ts +69 -43
  219. package/dist/backend/llvm/shapes.js +285 -21
  220. package/dist/backend/llvm/shapes.js.map +1 -1
  221. package/dist/backend/llvm/shapes.test.js +37 -3
  222. package/dist/backend/llvm/shapes.test.js.map +1 -1
  223. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  224. package/dist/backend/llvm/speculative-integers.js +571 -0
  225. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  226. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  227. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  228. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  229. package/dist/backend/llvm/split-loops.js +2 -2
  230. package/dist/backend/llvm/split-loops.js.map +1 -1
  231. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  232. package/dist/backend/llvm/stack-objects.js +133 -10
  233. package/dist/backend/llvm/stack-objects.js.map +1 -1
  234. package/dist/backend/llvm/stack-objects.test.js +55 -1
  235. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  236. package/dist/backend/llvm/stack-unions.test.js +1 -1
  237. package/dist/backend/llvm/string-construction.test.js +1 -1
  238. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  239. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  240. package/dist/backend/llvm/string-slices.d.ts +25 -0
  241. package/dist/backend/llvm/string-slices.js +207 -1
  242. package/dist/backend/llvm/string-slices.js.map +1 -1
  243. package/dist/backend/llvm/string-slices.test.js +139 -2
  244. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  245. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  246. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  247. package/dist/backend/llvm/thread-slots.js +142 -0
  248. package/dist/backend/llvm/thread-slots.js.map +1 -0
  249. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  250. package/dist/backend/llvm/thread-slots.test.js +110 -0
  251. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  252. package/dist/backend/llvm/union-repr.d.ts +7 -7
  253. package/dist/backend/llvm/union-repr.js +18 -2
  254. package/dist/backend/llvm/union-repr.js.map +1 -1
  255. package/dist/backend/llvm/union-retype.test.js +17 -3
  256. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  257. package/dist/backend/llvm/walkers.d.ts +2 -2
  258. package/dist/backend/llvm/walkers.js +51 -26
  259. package/dist/backend/llvm/walkers.js.map +1 -1
  260. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  261. package/dist/backend/llvm/wasm-modules.js +66 -0
  262. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  263. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  264. package/dist/backend/llvm/wrapping-sums.js +11 -3
  265. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  266. package/dist/backend/mangle.d.ts +7 -0
  267. package/dist/backend/mangle.js +11 -0
  268. package/dist/backend/mangle.js.map +1 -1
  269. package/dist/backend/may-throw.d.ts +3 -0
  270. package/dist/backend/may-throw.js +6 -2
  271. package/dist/backend/may-throw.js.map +1 -1
  272. package/dist/backend/may-throw.test.js +1 -1
  273. package/dist/backend/native/contracts.d.ts +37 -0
  274. package/dist/backend/native/executable.js +192 -134
  275. package/dist/backend/native/executable.js.map +1 -1
  276. package/dist/backend/native/library.js +1 -0
  277. package/dist/backend/native/library.js.map +1 -1
  278. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  279. package/dist/backend/native/runtime-inputs.js +2 -0
  280. package/dist/backend/native/runtime-inputs.js.map +1 -1
  281. package/dist/backend/native-link-info-core.d.ts +30 -0
  282. package/dist/backend/native-link-info-core.js.map +1 -1
  283. package/dist/backend/publication.test.js +1 -1
  284. package/dist/backend/runtime-pack-core.d.ts +9 -1
  285. package/dist/backend/runtime-pack-core.js +10 -1
  286. package/dist/backend/runtime-pack-core.js.map +1 -1
  287. package/dist/backend/runtime-pack-native.js +1 -1
  288. package/dist/backend/runtime-pack-native.js.map +1 -1
  289. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  290. package/dist/backend/runtime-pack-native.test.js +31 -0
  291. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  292. package/dist/backend/runtime-pack-targets.test.js +5 -0
  293. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  294. package/dist/backend/runtime-pack.d.ts +7 -3
  295. package/dist/backend/runtime-pack.js +12 -6
  296. package/dist/backend/runtime-pack.js.map +1 -1
  297. package/dist/backend/runtime-pack.test.js +20 -6
  298. package/dist/backend/runtime-pack.test.js.map +1 -1
  299. package/dist/backend/stack-observations.d.ts +22 -0
  300. package/dist/backend/stack-observations.js +382 -0
  301. package/dist/backend/stack-observations.js.map +1 -0
  302. package/dist/backend/stack-observations.test.d.ts +1 -0
  303. package/dist/backend/stack-observations.test.js +233 -0
  304. package/dist/backend/stack-observations.test.js.map +1 -0
  305. package/dist/backend/target-diagnostics.js +8 -0
  306. package/dist/backend/target-diagnostics.js.map +1 -1
  307. package/dist/backend/target-diagnostics.test.js +1 -1
  308. package/dist/backend/warm-cache.js +5 -0
  309. package/dist/backend/warm-cache.js.map +1 -1
  310. package/dist/backend/young-nursery.d.ts +7 -0
  311. package/dist/backend/young-nursery.js +10 -0
  312. package/dist/backend/young-nursery.js.map +1 -0
  313. package/dist/cli/command.js +44 -4
  314. package/dist/cli/command.js.map +1 -1
  315. package/dist/cli/usage.d.ts +11 -1
  316. package/dist/cli/usage.js +20 -1
  317. package/dist/cli/usage.js.map +1 -1
  318. package/dist/compat/fetch-profile.js +10 -1
  319. package/dist/compat/fetch-profile.js.map +1 -1
  320. package/dist/compile-types.d.ts +13 -0
  321. package/dist/contracts/check.js +25 -6
  322. package/dist/contracts/check.js.map +1 -1
  323. package/dist/contracts/int32-elements.d.ts +115 -0
  324. package/dist/contracts/int32-elements.js +1179 -0
  325. package/dist/contracts/int32-elements.js.map +1 -0
  326. package/dist/coverage/report.d.ts +16 -0
  327. package/dist/coverage/report.js +182 -1
  328. package/dist/coverage/report.js.map +1 -1
  329. package/dist/coverage/surface-manifest.js +19 -6
  330. package/dist/coverage/surface-manifest.js.map +1 -1
  331. package/dist/coverage/verdict-cache.d.ts +2 -0
  332. package/dist/coverage/verdict-cache.js +12 -0
  333. package/dist/coverage/verdict-cache.js.map +1 -1
  334. package/dist/coverage/verdict-cache.test.js +2 -1
  335. package/dist/coverage/verdict-cache.test.js.map +1 -1
  336. package/dist/diagnostics/diagnostic.d.ts +11 -7
  337. package/dist/diagnostics/diagnostic.js +35 -23
  338. package/dist/diagnostics/diagnostic.js.map +1 -1
  339. package/dist/diagnostics/envelope.d.ts +39 -2
  340. package/dist/diagnostics/envelope.js.map +1 -1
  341. package/dist/diagnostics/render.d.ts +7 -0
  342. package/dist/diagnostics/render.js +50 -13
  343. package/dist/diagnostics/render.js.map +1 -1
  344. package/dist/diagnostics/render.test.d.ts +1 -0
  345. package/dist/diagnostics/render.test.js +49 -0
  346. package/dist/diagnostics/render.test.js.map +1 -0
  347. package/dist/executable/executable-cache.d.ts +17 -0
  348. package/dist/executable/executable-cache.js +13 -1
  349. package/dist/executable/executable-cache.js.map +1 -1
  350. package/dist/executable/executable-cache.test.js +7 -1
  351. package/dist/executable/executable-cache.test.js.map +1 -1
  352. package/dist/executable/prepare.js +2 -1
  353. package/dist/executable/prepare.js.map +1 -1
  354. package/dist/frontend/analysis.js +6 -1
  355. package/dist/frontend/analysis.js.map +1 -1
  356. package/dist/frontend/builtin-modules.d.ts +16 -2
  357. package/dist/frontend/builtin-modules.js +40 -7
  358. package/dist/frontend/builtin-modules.js.map +1 -1
  359. package/dist/frontend/cjs-syntax.js +52 -51
  360. package/dist/frontend/cjs-syntax.js.map +1 -1
  361. package/dist/frontend/contract-types.d.ts +3 -0
  362. package/dist/frontend/contract-types.js +36 -7
  363. package/dist/frontend/contract-types.js.map +1 -1
  364. package/dist/frontend/experimental-import.d.ts +5 -1
  365. package/dist/frontend/experimental-import.js +26 -7
  366. package/dist/frontend/experimental-import.js.map +1 -1
  367. package/dist/frontend/fork-target.js +20 -22
  368. package/dist/frontend/fork-target.js.map +1 -1
  369. package/dist/frontend/fork-target.test.js +2 -1
  370. package/dist/frontend/fork-target.test.js.map +1 -1
  371. package/dist/frontend/function-completion.js +6 -6
  372. package/dist/frontend/function-completion.js.map +1 -1
  373. package/dist/frontend/helper-tokens.js +15 -3
  374. package/dist/frontend/helper-tokens.js.map +1 -1
  375. package/dist/frontend/helper-tokens.test.js +7 -1
  376. package/dist/frontend/helper-tokens.test.js.map +1 -1
  377. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  378. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  379. package/dist/frontend/input-tracker.d.ts +3 -0
  380. package/dist/frontend/input-tracker.js +32 -3
  381. package/dist/frontend/input-tracker.js.map +1 -1
  382. package/dist/frontend/lib-contract.js +36 -32
  383. package/dist/frontend/lib-contract.js.map +1 -1
  384. package/dist/frontend/lib-exports.js +3 -3
  385. package/dist/frontend/lib-exports.js.map +1 -1
  386. package/dist/frontend/lowering/array-values.d.ts +8 -3
  387. package/dist/frontend/lowering/array-values.js +60 -11
  388. package/dist/frontend/lowering/array-values.js.map +1 -1
  389. package/dist/frontend/lowering/assert-instances.js +4 -4
  390. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  391. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  392. package/dist/frontend/lowering/assertion-identity.js +70 -0
  393. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  394. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  395. package/dist/frontend/lowering/assertion-members.js +185 -0
  396. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  397. package/dist/frontend/lowering/binding-analysis.js +27 -20
  398. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  399. package/dist/frontend/lowering/builtin-calls.js +72 -4
  400. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  401. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  402. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  403. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  404. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  405. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  406. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  407. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  408. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  409. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/blob.js +8 -6
  411. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  413. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  414. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
  416. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  417. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  418. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  420. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  421. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  422. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  423. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  425. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  426. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  428. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  429. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/compression.js +230 -52
  432. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  433. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  434. package/dist/frontend/lowering/builtins/constants.js +28 -7
  435. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  436. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  437. package/dist/frontend/lowering/builtins/crypto.js +223 -38
  438. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  439. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  440. package/dist/frontend/lowering/builtins/dates.js +92 -16
  441. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  443. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  444. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/environment.js +3 -3
  446. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  447. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  448. package/dist/frontend/lowering/builtins/errors.js +174 -6
  449. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
  451. package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
  452. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  453. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  454. package/dist/frontend/lowering/builtins/filesystem.js +213 -76
  455. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  457. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  459. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  461. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  462. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  464. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  465. package/dist/frontend/lowering/builtins/json.js +232 -24
  466. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  468. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  470. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  471. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/module-calls.js +67 -46
  473. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  475. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  476. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  478. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  479. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  481. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  482. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  484. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  486. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  487. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  488. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  489. package/dist/frontend/lowering/builtins/performance.js +259 -8
  490. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  491. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  492. package/dist/frontend/lowering/builtins/process.js +468 -99
  493. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  495. package/dist/frontend/lowering/builtins/promises.js +326 -43
  496. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  497. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  498. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  499. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  500. package/dist/frontend/lowering/builtins/properties.js +37 -1
  501. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  502. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  503. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  504. package/dist/frontend/lowering/builtins/readline.d.ts +55 -13
  505. package/dist/frontend/lowering/builtins/readline.js +931 -69
  506. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  508. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  510. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  512. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  513. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/strings.js +101 -12
  515. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  516. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  517. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  518. package/dist/frontend/lowering/builtins/timers.js +75 -30
  519. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  521. package/dist/frontend/lowering/builtins/url.js +120 -17
  522. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  523. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  524. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  526. package/dist/frontend/lowering/builtins/v8.js +105 -0
  527. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  529. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  530. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  532. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  533. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  534. package/dist/frontend/lowering/builtins/workers.d.ts +16 -0
  535. package/dist/frontend/lowering/builtins/workers.js +246 -3
  536. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  537. package/dist/frontend/lowering/call-arguments.js +69 -14
  538. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  539. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  540. package/dist/frontend/lowering/call-signatures.js +254 -47
  541. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  542. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  543. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  544. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  545. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  546. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  547. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  548. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  549. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  550. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  551. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  552. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  553. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  554. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  555. package/dist/frontend/lowering/class-attributes.js +378 -0
  556. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  557. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  558. package/dist/frontend/lowering/class-callbacks.js +21 -10
  559. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  560. package/dist/frontend/lowering/class-construction.js +49 -4
  561. package/dist/frontend/lowering/class-construction.js.map +1 -1
  562. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  563. package/dist/frontend/lowering/class-descriptors.js +8 -8
  564. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  565. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  566. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  567. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  568. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  569. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  570. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  571. package/dist/frontend/lowering/class-iterables.js +31 -0
  572. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  573. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  574. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  575. package/dist/frontend/lowering/class-method-values.js +56 -10
  576. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  577. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  578. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  579. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  580. package/dist/frontend/lowering/class-protocols.js +738 -22
  581. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  582. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  583. package/dist/frontend/lowering/class-prototypes.js +80 -18
  584. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  585. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  586. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  587. package/dist/frontend/lowering/class-static-data.js +2 -2
  588. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  589. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  590. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  591. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  592. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  593. package/dist/frontend/lowering/class-unions.js +102 -1
  594. package/dist/frontend/lowering/class-unions.js.map +1 -1
  595. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  596. package/dist/frontend/lowering/code-generation.js +127 -0
  597. package/dist/frontend/lowering/code-generation.js.map +1 -0
  598. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  599. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  600. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  601. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  602. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  603. package/dist/frontend/lowering/coercions/structural.js +35 -3
  604. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  605. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  606. package/dist/frontend/lowering/coercions/unions.js +57 -1
  607. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  608. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  609. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  610. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  611. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  612. package/dist/frontend/lowering/construction-escapes.js +8 -8
  613. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  614. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  615. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  616. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  617. package/dist/frontend/lowering/constructor-returns.js +477 -0
  618. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  619. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  620. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  621. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  622. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  623. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  624. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  625. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  626. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  627. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  628. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  629. package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
  630. package/dist/frontend/lowering/containers/array-from-async.js +427 -0
  631. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  632. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  633. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  634. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  635. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  636. package/dist/frontend/lowering/containers/bytes.js +161 -101
  637. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  638. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  639. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  640. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  641. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  642. package/dist/frontend/lowering/containers/collection-grouping.js +219 -27
  643. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  644. package/dist/frontend/lowering/containers/collection-methods.js +81 -48
  645. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  646. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  647. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  648. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  649. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  650. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  651. package/dist/frontend/lowering/containers/for-of.js +19 -19
  652. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  653. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  654. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  655. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  656. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  657. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  658. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  659. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  660. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  661. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  662. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  663. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  664. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  665. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  666. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  667. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  668. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  669. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  670. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  671. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  672. package/dist/frontend/lowering/devirtualize.js +27 -7
  673. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  674. package/dist/frontend/lowering/divergences.d.ts +0 -5
  675. package/dist/frontend/lowering/divergences.js +238 -128
  676. package/dist/frontend/lowering/divergences.js.map +1 -1
  677. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  678. package/dist/frontend/lowering/dyn-streams.js +257 -0
  679. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  680. package/dist/frontend/lowering/error-methods.js +4 -1
  681. package/dist/frontend/lowering/error-methods.js.map +1 -1
  682. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  683. package/dist/frontend/lowering/error-name-order.js +93 -0
  684. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  685. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  686. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  687. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  688. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  689. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  690. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  691. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  692. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  693. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  694. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  695. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  696. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  697. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  698. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  699. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  700. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  701. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  702. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  703. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  704. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  705. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  706. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  707. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  708. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  709. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  710. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  711. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  712. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  713. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  714. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  715. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  716. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  717. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  719. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  720. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  721. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  722. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  723. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  724. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  725. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  726. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  727. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  728. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  729. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  730. package/dist/frontend/lowering/expressions/updates.js +780 -0
  731. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  732. package/dist/frontend/lowering/function-context.d.ts +10 -0
  733. package/dist/frontend/lowering/function-context.js +11 -1
  734. package/dist/frontend/lowering/function-context.js.map +1 -1
  735. package/dist/frontend/lowering/function-returns.js +52 -28
  736. package/dist/frontend/lowering/function-returns.js.map +1 -1
  737. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  738. package/dist/frontend/lowering/general-streams.js +108 -0
  739. package/dist/frontend/lowering/general-streams.js.map +1 -0
  740. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  741. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  742. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  743. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  744. package/dist/frontend/lowering/generic-functions.js +393 -75
  745. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  746. package/dist/frontend/lowering/import-meta.js +2 -2
  747. package/dist/frontend/lowering/import-meta.js.map +1 -1
  748. package/dist/frontend/lowering/intern-tables.js +10 -9
  749. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  750. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  751. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  752. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  753. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  754. package/dist/frontend/lowering/js-class-fields.js +170 -0
  755. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  756. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  757. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  758. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  759. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  760. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  761. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  762. package/dist/frontend/lowering/json-require.d.ts +22 -0
  763. package/dist/frontend/lowering/json-require.js +131 -0
  764. package/dist/frontend/lowering/json-require.js.map +1 -0
  765. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  766. package/dist/frontend/lowering/key-order-witness.js +641 -0
  767. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  768. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  769. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  770. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  771. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  772. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  773. package/dist/frontend/lowering/lower-assert.js +61 -60
  774. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  775. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  776. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  777. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  778. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  779. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  780. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  781. package/dist/frontend/lowering/lower-calls.js +1298 -452
  782. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  783. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  784. package/dist/frontend/lowering/lower-classes.js +1499 -456
  785. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  786. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  787. package/dist/frontend/lowering/lower-comptime.js +111 -13
  788. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  789. package/dist/frontend/lowering/lower-console.js +13 -11
  790. package/dist/frontend/lowering/lower-console.js.map +1 -1
  791. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  792. package/dist/frontend/lowering/lower-dgram.js +179 -8
  793. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  794. package/dist/frontend/lowering/lower-enums.js +113 -14
  795. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  796. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  797. package/dist/frontend/lowering/lower-event-emitter.js +268 -71
  798. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  799. package/dist/frontend/lowering/lower-event-target.js +2 -2
  800. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  801. package/dist/frontend/lowering/lower-expando.js +17 -13
  802. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  803. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  804. package/dist/frontend/lowering/lower-exprs.js +1493 -12407
  805. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  806. package/dist/frontend/lowering/lower-functions.js +68 -22
  807. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  808. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  809. package/dist/frontend/lowering/lower-generators.js +29 -16
  810. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  811. package/dist/frontend/lowering/lower-global-value.js +5 -1
  812. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  813. package/dist/frontend/lowering/lower-inspect.js +354 -99
  814. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  815. package/dist/frontend/lowering/lower-mixins.js +23 -20
  816. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  817. package/dist/frontend/lowering/lower-mock.d.ts +19 -2
  818. package/dist/frontend/lowering/lower-mock.js +557 -74
  819. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  820. package/dist/frontend/lowering/lower-modules.js +268 -61
  821. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  822. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  823. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  824. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  825. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  826. package/dist/frontend/lowering/lower-node-module.js +147 -14
  827. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  828. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  829. package/dist/frontend/lowering/lower-server.js +638 -105
  830. package/dist/frontend/lowering/lower-server.js.map +1 -1
  831. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  832. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  833. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  834. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  835. package/dist/frontend/lowering/lower-stmts.js +1589 -398
  836. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  837. package/dist/frontend/lowering/lower-stream.d.ts +4 -3
  838. package/dist/frontend/lowering/lower-stream.js +714 -75
  839. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  840. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  841. package/dist/frontend/lowering/lower-test.js +574 -100
  842. package/dist/frontend/lowering/lower-test.js.map +1 -1
  843. package/dist/frontend/lowering/lower-timers.js +80 -32
  844. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  845. package/dist/frontend/lowering/lower-url.js +1 -1
  846. package/dist/frontend/lowering/lower-url.js.map +1 -1
  847. package/dist/frontend/lowering/lowerer.d.ts +409 -26
  848. package/dist/frontend/lowering/lowerer.js +1918 -305
  849. package/dist/frontend/lowering/lowerer.js.map +1 -1
  850. package/dist/frontend/lowering/lowerer.test.js +10 -4
  851. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  852. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  853. package/dist/frontend/lowering/maybe-promise.js +249 -0
  854. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  855. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  856. package/dist/frontend/lowering/module-member-this.js +262 -0
  857. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  858. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  859. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  860. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  861. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  862. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  863. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  864. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  865. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  866. package/dist/frontend/lowering/native-ffi.js +11 -11
  867. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  868. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  869. package/dist/frontend/lowering/null-prototype.js +33 -0
  870. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  871. package/dist/frontend/lowering/object-factory-new.js +6 -8
  872. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  873. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  874. package/dist/frontend/lowering/private-brands.js +265 -0
  875. package/dist/frontend/lowering/private-brands.js.map +1 -0
  876. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  877. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  878. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  879. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  880. package/dist/frontend/lowering/require-initialization.js +246 -0
  881. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  882. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  883. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  884. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  885. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  886. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  887. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  888. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  889. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  890. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  891. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  892. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  893. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  894. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  895. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  896. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  897. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  898. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  899. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  900. package/dist/frontend/lowering/split-consumers.js +4 -4
  901. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  902. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  903. package/dist/frontend/lowering/static-function-names.js +212 -0
  904. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  905. package/dist/frontend/lowering/static-this.js +6 -6
  906. package/dist/frontend/lowering/static-this.js.map +1 -1
  907. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  908. package/dist/frontend/lowering/strict-mode.js +31 -0
  909. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  910. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  911. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  912. package/dist/frontend/lowering/string-index.d.ts +12 -0
  913. package/dist/frontend/lowering/string-index.js +72 -1
  914. package/dist/frontend/lowering/string-index.js.map +1 -1
  915. package/dist/frontend/lowering/surfaces.d.ts +15 -6
  916. package/dist/frontend/lowering/surfaces.js +278 -45
  917. package/dist/frontend/lowering/surfaces.js.map +1 -1
  918. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  919. package/dist/frontend/lowering/symbol-fields.js +204 -36
  920. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  921. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  922. package/dist/frontend/lowering/symbol-methods.js +24 -6
  923. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  924. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  925. package/dist/frontend/lowering/thread-slots.js +208 -0
  926. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  927. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  928. package/dist/frontend/lowering/typed-arguments.js +472 -0
  929. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  930. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  931. package/dist/frontend/lowering/union-retag.js +27 -0
  932. package/dist/frontend/lowering/union-retag.js.map +1 -1
  933. package/dist/frontend/lowering/union-retag.test.js +24 -1
  934. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  935. package/dist/frontend/lowering/var-hoisting.js +6 -6
  936. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  937. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  938. package/dist/frontend/mock-shapes.d.ts +5 -0
  939. package/dist/frontend/mock-shapes.js +39 -7
  940. package/dist/frontend/mock-shapes.js.map +1 -1
  941. package/dist/frontend/module-source-candidates.js +1 -1
  942. package/dist/frontend/module-source-candidates.js.map +1 -1
  943. package/dist/frontend/module-source-candidates.test.js +2 -1
  944. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  945. package/dist/frontend/module-syntax.js +8 -8
  946. package/dist/frontend/module-syntax.js.map +1 -1
  947. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  948. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  949. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  950. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  951. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  952. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  953. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  954. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  955. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  956. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  957. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  958. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  959. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  960. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  961. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  962. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  963. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  964. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  965. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  966. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  967. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  968. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  969. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  970. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  971. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  972. package/dist/frontend/npm-static-prune.js +36 -24
  973. package/dist/frontend/npm-static-prune.js.map +1 -1
  974. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  975. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  976. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  977. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  978. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  979. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  980. package/dist/frontend/npm-static-subtyping.js +7 -9
  981. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  982. package/dist/frontend/npm-static.d.ts +17 -1
  983. package/dist/frontend/npm-static.js +167 -16
  984. package/dist/frontend/npm-static.js.map +1 -1
  985. package/dist/frontend/npm-static.test.js +22 -1
  986. package/dist/frontend/npm-static.test.js.map +1 -1
  987. package/dist/frontend/pipeline.js +164 -26
  988. package/dist/frontend/pipeline.js.map +1 -1
  989. package/dist/frontend/pipeline.test.js +22 -1
  990. package/dist/frontend/pipeline.test.js.map +1 -1
  991. package/dist/frontend/program-analysis.d.ts +6 -1
  992. package/dist/frontend/program-analysis.js +7 -0
  993. package/dist/frontend/program-analysis.js.map +1 -1
  994. package/dist/frontend/program.d.ts +92 -2
  995. package/dist/frontend/program.js +1557 -254
  996. package/dist/frontend/program.js.map +1 -1
  997. package/dist/frontend/program.test.js +76 -6
  998. package/dist/frontend/program.test.js.map +1 -1
  999. package/dist/frontend/resolve.js +36 -2
  1000. package/dist/frontend/resolve.js.map +1 -1
  1001. package/dist/frontend/resolve.test.js +49 -0
  1002. package/dist/frontend/resolve.test.js.map +1 -1
  1003. package/dist/frontend/services.d.ts +20 -1
  1004. package/dist/frontend/services.js +40 -3
  1005. package/dist/frontend/services.js.map +1 -1
  1006. package/dist/frontend/services.test.js +2 -1
  1007. package/dist/frontend/services.test.js.map +1 -1
  1008. package/dist/frontend/threads-import.js +1 -1
  1009. package/dist/frontend/threads-import.js.map +1 -1
  1010. package/dist/frontend/tier-analysis.d.ts +71 -0
  1011. package/dist/frontend/tier-analysis.js +522 -0
  1012. package/dist/frontend/tier-analysis.js.map +1 -0
  1013. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1014. package/dist/frontend/ts7/api-conformance.js +7 -0
  1015. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1016. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1017. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1018. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1019. package/dist/frontend/ts7/ast-node.js +64 -18
  1020. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1021. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1022. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1023. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1024. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1025. package/dist/frontend/ts7/ast.d.ts +1 -0
  1026. package/dist/frontend/ts7/ast.js +3 -2
  1027. package/dist/frontend/ts7/ast.js.map +1 -1
  1028. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1029. package/dist/frontend/ts7/checker-backend.js +88 -0
  1030. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1031. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1032. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1033. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1034. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1035. package/dist/frontend/ts7/checker-cache.js +0 -6
  1036. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1037. package/dist/frontend/ts7/checker.d.ts +18 -11
  1038. package/dist/frontend/ts7/checker.js +42 -55
  1039. package/dist/frontend/ts7/checker.js.map +1 -1
  1040. package/dist/frontend/ts7/checker.test.js +10 -7
  1041. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1042. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1043. package/dist/frontend/ts7/diagnostic.js +22 -0
  1044. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1045. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1046. package/dist/frontend/ts7/node-functions.js +18 -0
  1047. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1048. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1049. package/dist/frontend/ts7/program-host.js +12 -0
  1050. package/dist/frontend/ts7/program-host.js.map +1 -1
  1051. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1052. package/dist/frontend/ts7/rpc-api.js +8 -1
  1053. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1054. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1055. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1056. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1057. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1058. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1059. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1060. package/dist/frontend/ts7/semantic-model.js +88 -16
  1061. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1062. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1063. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1064. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1065. package/dist/frontend/ts7/semantic-types.js +1 -1
  1066. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1067. package/dist/frontend/ts7/session.d.ts +11 -11
  1068. package/dist/frontend/ts7/session.js +8 -5
  1069. package/dist/frontend/ts7/session.js.map +1 -1
  1070. package/dist/frontend/ts7/session.test.js +9 -5
  1071. package/dist/frontend/ts7/session.test.js.map +1 -1
  1072. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1073. package/dist/frontend/ts7/source-parser.js +24 -3
  1074. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1075. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1076. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1077. package/dist/frontend/type-mapper.d.ts +122 -2
  1078. package/dist/frontend/type-mapper.js +2612 -695
  1079. package/dist/frontend/type-mapper.js.map +1 -1
  1080. package/dist/frontend/type-only-imports.d.ts +28 -0
  1081. package/dist/frontend/type-only-imports.js +122 -0
  1082. package/dist/frontend/type-only-imports.js.map +1 -0
  1083. package/dist/frontend/worker-target.js +8 -8
  1084. package/dist/frontend/worker-target.js.map +1 -1
  1085. package/dist/index.d.ts +3 -1
  1086. package/dist/index.js +47 -10
  1087. package/dist/index.js.map +1 -1
  1088. package/dist/ir/analysis.js +4 -2
  1089. package/dist/ir/analysis.js.map +1 -1
  1090. package/dist/ir/api.d.ts +1 -1
  1091. package/dist/ir/api.js +1 -1
  1092. package/dist/ir/api.js.map +1 -1
  1093. package/dist/ir/array-length-stability.d.ts +30 -0
  1094. package/dist/ir/array-length-stability.js +236 -0
  1095. package/dist/ir/array-length-stability.js.map +1 -0
  1096. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1097. package/dist/ir/array-length-stability.test.js +113 -0
  1098. package/dist/ir/array-length-stability.test.js.map +1 -0
  1099. package/dist/ir/build.d.ts +2 -2
  1100. package/dist/ir/build.js +1 -1
  1101. package/dist/ir/build.js.map +1 -1
  1102. package/dist/ir/builtin-effects.js +139 -0
  1103. package/dist/ir/builtin-effects.js.map +1 -1
  1104. package/dist/ir/builtin-signatures.d.ts +1 -1
  1105. package/dist/ir/builtin-signatures.js +655 -25
  1106. package/dist/ir/builtin-signatures.js.map +1 -1
  1107. package/dist/ir/byte-numbers.js +3 -0
  1108. package/dist/ir/byte-numbers.js.map +1 -1
  1109. package/dist/ir/callback-specialization.d.ts +37 -0
  1110. package/dist/ir/callback-specialization.js +459 -0
  1111. package/dist/ir/callback-specialization.js.map +1 -0
  1112. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1113. package/dist/ir/callback-specialization.test.js +208 -0
  1114. package/dist/ir/callback-specialization.test.js.map +1 -0
  1115. package/dist/ir/capture-values.d.ts +0 -1
  1116. package/dist/ir/capture-values.js +51 -40
  1117. package/dist/ir/capture-values.js.map +1 -1
  1118. package/dist/ir/constant-globals.test.js +1 -1
  1119. package/dist/ir/constant-tables.test.js +1 -1
  1120. package/dist/ir/field-values.test.js +1 -1
  1121. package/dist/ir/final-fields.test.js +1 -1
  1122. package/dist/ir/function-references.test.js +10 -1
  1123. package/dist/ir/function-references.test.js.map +1 -1
  1124. package/dist/ir/init-only-globals.test.js +1 -1
  1125. package/dist/ir/initializer-bindings.test.js +1 -1
  1126. package/dist/ir/int32-slots.d.ts +14 -0
  1127. package/dist/ir/int32-slots.js +119 -14
  1128. package/dist/ir/int32-slots.js.map +1 -1
  1129. package/dist/ir/int32-slots.test.js +29 -1
  1130. package/dist/ir/int32-slots.test.js.map +1 -1
  1131. package/dist/ir/integer-loop-facts.d.ts +16 -6
  1132. package/dist/ir/integer-loop-facts.js +143 -38
  1133. package/dist/ir/integer-loop-facts.js.map +1 -1
  1134. package/dist/ir/integer-loops.d.ts +1 -1
  1135. package/dist/ir/integer-loops.js +39 -9
  1136. package/dist/ir/integer-loops.js.map +1 -1
  1137. package/dist/ir/integer-loops.test.js +104 -0
  1138. package/dist/ir/integer-loops.test.js.map +1 -1
  1139. package/dist/ir/integer-ranges.d.ts +3 -0
  1140. package/dist/ir/integer-ranges.js +4 -6
  1141. package/dist/ir/integer-ranges.js.map +1 -1
  1142. package/dist/ir/integer-ranges.test.js +142 -1
  1143. package/dist/ir/integer-ranges.test.js.map +1 -1
  1144. package/dist/ir/intrinsic-signatures.js +6 -0
  1145. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1146. package/dist/ir/ir.d.ts +234 -58
  1147. package/dist/ir/ir.js +123 -12
  1148. package/dist/ir/ir.js.map +1 -1
  1149. package/dist/ir/ir.test.js +10 -0
  1150. package/dist/ir/ir.test.js.map +1 -1
  1151. package/dist/ir/jsval.d.ts +8 -0
  1152. package/dist/ir/jsval.js +365 -0
  1153. package/dist/ir/jsval.js.map +1 -0
  1154. package/dist/ir/jsval.test.d.ts +1 -0
  1155. package/dist/ir/jsval.test.js +239 -0
  1156. package/dist/ir/jsval.test.js.map +1 -0
  1157. package/dist/ir/runtime-features.d.ts +150 -33
  1158. package/dist/ir/runtime-features.js +672 -339
  1159. package/dist/ir/runtime-features.js.map +1 -1
  1160. package/dist/ir/runtime-features.test.js +62 -0
  1161. package/dist/ir/runtime-features.test.js.map +1 -1
  1162. package/dist/ir/scalar-records.test.js +1 -1
  1163. package/dist/ir/self-captures.d.ts +33 -0
  1164. package/dist/ir/self-captures.js +245 -0
  1165. package/dist/ir/self-captures.js.map +1 -0
  1166. package/dist/ir/self-captures.test.d.ts +1 -0
  1167. package/dist/ir/self-captures.test.js +135 -0
  1168. package/dist/ir/self-captures.test.js.map +1 -0
  1169. package/dist/ir/serialize.d.ts +1 -1
  1170. package/dist/ir/serialize.js +7 -4
  1171. package/dist/ir/serialize.js.map +1 -1
  1172. package/dist/ir/tiers.d.ts +26 -0
  1173. package/dist/ir/tiers.js +101 -0
  1174. package/dist/ir/tiers.js.map +1 -0
  1175. package/dist/ir/tiers.test.d.ts +1 -0
  1176. package/dist/ir/tiers.test.js +140 -0
  1177. package/dist/ir/tiers.test.js.map +1 -0
  1178. package/dist/ir/traverse.js +107 -94
  1179. package/dist/ir/traverse.js.map +1 -1
  1180. package/dist/ir/traverse.test.js +33 -30
  1181. package/dist/ir/traverse.test.js.map +1 -1
  1182. package/dist/ir/unshare.js +65 -3
  1183. package/dist/ir/unshare.js.map +1 -1
  1184. package/dist/ir/unshare.test.js +1 -1
  1185. package/dist/ir/validate.js +220 -71
  1186. package/dist/ir/validate.js.map +1 -1
  1187. package/dist/ir/validate.test.js +64 -9
  1188. package/dist/ir/validate.test.js.map +1 -1
  1189. package/dist/library/fence-eval.test.js +1 -1
  1190. package/dist/library/int-infer.test.js +4 -4
  1191. package/dist/library/ir-policy.js +18 -0
  1192. package/dist/library/ir-policy.js.map +1 -1
  1193. package/dist/library/library-cache.d.ts +1 -0
  1194. package/dist/library/library-cache.js.map +1 -1
  1195. package/dist/library/library-cache.test.js +5 -5
  1196. package/dist/library/library-profile.d.ts +4 -4
  1197. package/dist/library/library-profile.js +35 -7
  1198. package/dist/library/library-profile.js.map +1 -1
  1199. package/dist/library/prepare.js +13 -1
  1200. package/dist/library/prepare.js.map +1 -1
  1201. package/dist/native/cli.js +5 -0
  1202. package/dist/native/cli.js.map +1 -1
  1203. package/dist/native/compiler.js +2 -2
  1204. package/dist/native/compiler.js.map +1 -1
  1205. package/dist/native/compiler.test.js +2 -2
  1206. package/dist/native/prepare.js +7 -0
  1207. package/dist/native/prepare.js.map +1 -1
  1208. package/dist/native/sanitizer.test.js +12 -0
  1209. package/dist/native/sanitizer.test.js.map +1 -1
  1210. package/dist/native/toolchain.d.ts +2 -0
  1211. package/dist/native/toolchain.js +10 -1
  1212. package/dist/native/toolchain.js.map +1 -1
  1213. package/dist/native/toolchain.test.js +39 -1
  1214. package/dist/native/toolchain.test.js.map +1 -1
  1215. package/dist/startup-cache.d.ts +1 -0
  1216. package/dist/startup-cache.js +1 -0
  1217. package/dist/startup-cache.js.map +1 -1
  1218. package/dist/wasm/base64.d.ts +5 -0
  1219. package/dist/wasm/base64.js +62 -0
  1220. package/dist/wasm/base64.js.map +1 -0
  1221. package/dist/wasm/binary.d.ts +36 -0
  1222. package/dist/wasm/binary.js +1976 -0
  1223. package/dist/wasm/binary.js.map +1 -0
  1224. package/dist/wasm/binary.test.d.ts +1 -0
  1225. package/dist/wasm/binary.test.js +190 -0
  1226. package/dist/wasm/binary.test.js.map +1 -0
  1227. package/dist/wasm/discover.d.ts +38 -0
  1228. package/dist/wasm/discover.js +377 -0
  1229. package/dist/wasm/discover.js.map +1 -0
  1230. package/dist/wasm/discover.test.d.ts +1 -0
  1231. package/dist/wasm/discover.test.js +24 -0
  1232. package/dist/wasm/discover.test.js.map +1 -0
  1233. package/dist/wasm/module.d.ts +151 -0
  1234. package/dist/wasm/module.js +575 -0
  1235. package/dist/wasm/module.js.map +1 -0
  1236. package/dist/wasm/translate.d.ts +48 -0
  1237. package/dist/wasm/translate.js +2129 -0
  1238. package/dist/wasm/translate.js.map +1 -0
  1239. package/dist/wasm/translate.test.d.ts +1 -0
  1240. package/dist/wasm/translate.test.js +207 -0
  1241. package/dist/wasm/translate.test.js.map +1 -0
  1242. package/package.json +21 -20
  1243. package/surface-manifest.json +332 -36
@@ -1,15 +1,17 @@
1
1
  import { dynUndefinedExpr, boolLit, helperLoc, 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";
10
11
  import { lowerSystemErrorMap } from "./lower-system-errors.js";
11
12
  import { isPerfEntryType, perfEntryJson } from "./builtins/performance.js";
12
13
  import { recordMayKeepSource, recordSourceTest } from "./record-sources.js";
14
+ import { nullProtoRecordShape, recordNullProtoTest } from "./null-prototype.js";
13
15
  /* ── IR construction shorthand ───────────────────────────────────────── */
14
16
  function concatAll(parts, loc) {
15
17
  if (parts.length === 0)
@@ -108,12 +110,17 @@ function inspectSupport(lowerer, t, visiting, out) {
108
110
  case "regex":
109
111
  case "symbol":
110
112
  case "bigint":
113
+ case "date":
111
114
  case "dyn":
112
115
  return null;
113
116
  case "array":
114
117
  return inspectSupport(lowerer, t.elem, visiting, out);
115
118
  case "bytes":
116
- 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)";
119
+ // A Uint8Array and a Buffer share the u8 representation and print
120
+ // differently; the other element kinds are never Buffers.
121
+ return t.elem === "u8"
122
+ ? "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)"
123
+ : null;
117
124
  case "record": {
118
125
  if (visiting.has(t.shapeId)) {
119
126
  out.recursive = true;
@@ -197,9 +204,10 @@ function inspectSupport(lowerer, t, visiting, out) {
197
204
  ? null
198
205
  : "error subclasses with declared fields have no inspect lowering yet (the extra own properties are runtime-dynamic)";
199
206
  }
200
- // A class with subclasses renders through its checked-dynamic view,
201
- // which names the instance's own class and holds its own fields.
202
- if (info.subclasses.length > 0) {
207
+ // A class with subclasses, or a JavaScript class, renders through its
208
+ // checked-dynamic view, which names the instance's own class and holds
209
+ // its own properties.
210
+ if (classInspectsThroughView(lowerer, info)) {
203
211
  if (!isDynTypedRefType(t) || visiting.has(t.className))
204
212
  return null;
205
213
  visiting.add(t.className);
@@ -235,6 +243,10 @@ function inspectSupport(lowerer, t, visiting, out) {
235
243
  visiting.delete(t.className);
236
244
  return null;
237
245
  }
246
+ // Generator objects print through their checked capsule: Node's
247
+ // `Object [Generator] {}`, or the tag of the iterator they implement.
248
+ case "generator":
249
+ return null;
238
250
  default:
239
251
  return `'${lowerer.fmt(t)}' values have no inspect lowering`;
240
252
  }
@@ -299,10 +311,31 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
299
311
  return { kind: "libCall", fn: "sym.toString", args: [value], type: STRING, loc };
300
312
  case "bigint":
301
313
  return { kind: "libCall", fn: "bigint.inspect", args: [value], type: STRING, loc };
314
+ case "date":
315
+ // Node prints a Date's toISOString() at every depth, and its
316
+ // toString() ("Invalid Date") when the time value is NaN.
317
+ return { kind: "libCall", fn: "insp.date", args: [value], type: STRING, loc };
302
318
  case "bytes":
319
+ if (t.elem !== "u8") {
320
+ return {
321
+ kind: "libCall",
322
+ fn: "insp.typedArray",
323
+ args: [value, recurse, depth],
324
+ type: STRING,
325
+ loc,
326
+ };
327
+ }
303
328
  return { kind: "libCall", fn: "insp.buffer", args: [value], type: STRING, loc };
304
329
  case "dyn":
305
330
  return { kind: "libCall", fn: "insp.dyn", args: [value, recurse, depth], type: STRING, loc };
331
+ case "generator":
332
+ return {
333
+ kind: "libCall",
334
+ fn: "insp.dyn",
335
+ args: [lowerer.coerceToExpected(value, DYN), recurse, depth],
336
+ type: STRING,
337
+ loc,
338
+ };
306
339
  case "object":
307
340
  if (eventTargetRootOf(lowerer.classes.get(t.className)) !== null) {
308
341
  return {
@@ -322,7 +355,7 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
322
355
  loc,
323
356
  };
324
357
  }
325
- if (lowerer.classes.get(t.className)?.subclasses.length) {
358
+ if (classInspectsThroughView(lowerer, lowerer.classes.get(t.className))) {
326
359
  return {
327
360
  kind: "libCall",
328
361
  fn: "insp.dyn",
@@ -425,6 +458,29 @@ function typeConstituents(lowerer, u) {
425
458
  return [];
426
459
  }
427
460
  }
461
+ /** Whether instances of a class render through its checked-dynamic view
462
+ * instead of a helper over the declared layout. The view names the
463
+ * instance's own class, which a base-typed value may not know statically,
464
+ * and lists own properties in creation order. A JavaScript class needs that
465
+ * order: its fields can be created conditionally, outside the constructor,
466
+ * or by writes to the instance after construction. */
467
+ function classInspectsThroughView(lowerer, info) {
468
+ if (info === undefined)
469
+ return false;
470
+ if (info.subclasses.length > 0)
471
+ return true;
472
+ return (info.decl != null &&
473
+ isJsSourceFile(ts.getSourceFileOfNode(info.decl)) &&
474
+ classDynViewSupported(info.def.fields, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
475
+ }
476
+ /** Whether a class holds properties added outside its declared layout, or
477
+ * fields Object.defineProperty can make non-enumerable, which only its
478
+ * checked-dynamic view lists as Node does. Decided after lowering, when the
479
+ * class has its final fields. */
480
+ function classInspectsAddedProperties(lowerer, info) {
481
+ return (info.def.fields.some((field) => field.name === DYN_CLASS_PROPERTIES || field.name.startsWith(CLASS_FIELD_ATTRIBUTES_PREFIX)) &&
482
+ classDynViewSupported(info.def.fields, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
483
+ }
428
484
  /* ── the interned per-type helper ────────────────────────────────────── */
429
485
  /** `%util.insp.<n>(v, r, d): string` — formatValue over the static type:
430
486
  * empty composites answer their literals (before the depth check, Node's
@@ -455,8 +511,8 @@ function inspectHelper(lowerer, t, loc) {
455
511
  // CYCLE-CAPABLE composites (typeReachesItself) run Node's circular
456
512
  // machinery: circCheck first (a value already on the traversal stack
457
513
  // renders [Circular *N] — before the empty/depth answers, Node's
458
- // order), seen-push after begin, and refWrap around end's result (the
459
- // <ref *N> prefix on values the walk found circular). Acyclic types
514
+ // order), seen-push after begin, and refWrap around end's result (end
515
+ // adds the <ref *N> prefix on values the walk found circular). Acyclic types
460
516
  // keep the zero-cost path.
461
517
  const onCycle = (t.kind === "record" || t.kind === "array" || t.kind === "map" || t.kind === "object") &&
462
518
  typeReachesItself(lowerer, t);
@@ -763,6 +819,19 @@ function inspectHelper(lowerer, t, loc) {
763
819
  const n = () => varRef("n.0", F64, loc);
764
820
  const i = () => varRef("i.0", F64, loc);
765
821
  const k = () => varRef("k.0", STRING, loc);
822
+ // A null-prototype record (Object.groupBy) prints Node's
823
+ // "[Object: null prototype]" base.
824
+ const nullProto = nullProtoRecordShape(lowerer, t) !== null;
825
+ const byProto = (plain, bare) => nullProto
826
+ ? {
827
+ kind: "ternary",
828
+ cond: recordNullProtoTest(v(), t.shapeId, loc),
829
+ then: strLit(bare, loc),
830
+ else_: strLit(plain, loc),
831
+ type: STRING,
832
+ loc,
833
+ }
834
+ : strLit(plain, loc);
766
835
  const keyedRead = () => ({
767
836
  kind: "recordKeyGet",
768
837
  obj: v(),
@@ -795,11 +864,17 @@ function inspectHelper(lowerer, t, loc) {
795
864
  {
796
865
  kind: "if",
797
866
  cond: { kind: "bin", op: "===", left: n(), right: numLit(0, loc), type: BOOL, loc },
798
- then: [ret(strLit("{}", loc))],
867
+ then: [ret(byProto("{}", "[Object: null prototype] {}"))],
868
+ else_: null,
869
+ loc,
870
+ },
871
+ {
872
+ kind: "if",
873
+ cond: { kind: "bin", op: ">", left: r(), right: d(), type: BOOL, loc },
874
+ then: [ret(byProto("[Object]", "[Object: null prototype]"))],
799
875
  else_: null,
800
876
  loc,
801
877
  },
802
- depthGate("[Object]"),
803
878
  ...begin(),
804
879
  {
805
880
  kind: "for",
@@ -826,7 +901,7 @@ function inspectHelper(lowerer, t, loc) {
826
901
  ],
827
902
  loc,
828
903
  },
829
- ret(end(strLit("", loc), strLit("{", loc), strLit("}", loc), false, boolLit(false, loc))),
904
+ ret(end(byProto("", "[Object: null prototype]"), strLit("{", loc), strLit("}", loc), false, boolLit(false, loc))),
830
905
  ];
831
906
  break;
832
907
  }
@@ -837,6 +912,7 @@ function inspectHelper(lowerer, t, loc) {
837
912
  // Object.keys' declared order (SEMANTICS.md 36's stance). Retained
838
913
  // reachability can settle this shape after the helper is first
839
914
  // interned, so rebuild the field walk once metadata is final.
915
+ lowerer.keyOrder.observe(t);
840
916
  rebuildShapeOrderBody = () => {
841
917
  const current = lowerer.shapes.get(t.shapeId) ?? shape;
842
918
  const order = current.declaredOrder ?? current.fields.map((f) => f.name);
@@ -1051,7 +1127,7 @@ function inspectHelper(lowerer, t, loc) {
1051
1127
  // #private fields never render: they are not properties in any
1052
1128
  // observable way — Node's inspect omits them entirely (verified),
1053
1129
  // so a class whose only fields are private prints as `C {}`.
1054
- const visible = info.def.fields.filter((f) => !f.name.startsWith("#"));
1130
+ const visible = info.def.fields.filter((f) => isClassOwnEnumerableFieldName(f.name));
1055
1131
  if (visible.length === 0) {
1056
1132
  body = [ret(strLit(display === "" ? "{}" : `${display} {}`, loc))];
1057
1133
  break;
@@ -1139,6 +1215,9 @@ function inspectHelper(lowerer, t, loc) {
1139
1215
  };
1140
1216
  prependCycleGuard();
1141
1217
  }
1218
+ // Typed as the IR function itself: the finalizer below replaces the
1219
+ // body of the very object liftedFns holds (natively, a differently typed
1220
+ // literal would be copied into the list).
1142
1221
  const fn = {
1143
1222
  name,
1144
1223
  params: [
@@ -1151,6 +1230,25 @@ function inspectHelper(lowerer, t, loc) {
1151
1230
  body,
1152
1231
  loc,
1153
1232
  };
1233
+ const inspected = t.kind === "object" ? lowerer.classes.get(t.className) : undefined;
1234
+ if (inspected !== undefined) {
1235
+ // Dynamic stores add a property bag to the class after this helper was
1236
+ // built. The checked-dynamic view lists the bag's properties after the
1237
+ // declared fields, so a class that has one renders through the view.
1238
+ lowerer.shapeOrderHelperFinalizers.push(() => {
1239
+ if (!classInspectsAddedProperties(lowerer, inspected))
1240
+ return;
1241
+ fn.body = [
1242
+ ret({
1243
+ kind: "libCall",
1244
+ fn: "insp.dyn",
1245
+ args: [{ kind: "dynFrom", value: v(), liveRef: true, type: DYN, loc }, r(), d()],
1246
+ type: STRING,
1247
+ loc,
1248
+ }),
1249
+ ];
1250
+ });
1251
+ }
1154
1252
  if (rebuildShapeOrderBody !== null) {
1155
1253
  lowerer.shapeOrderHelperFinalizers.push(() => {
1156
1254
  rebuildShapeOrderBody();
@@ -1278,15 +1376,20 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
1278
1376
  }
1279
1377
  if (t.kind === "bytes") {
1280
1378
  // One runtime representation serves Buffer AND Uint8Array; their
1281
- // renderings differ, so the argument's checker type picks — and only
1282
- // Buffer lowers (lowerInspectCall's stance).
1379
+ // renderings differ, so the argument's checker type picks
1380
+ // (lowerInspectCall's stance).
1283
1381
  const tname = lowerer.checker.typeToString(lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(node)));
1284
- const isBuffer = tname === "Buffer" ||
1285
- tname === "NonSharedBuffer" ||
1286
- tname.startsWith("Buffer<") ||
1287
- tname.startsWith("NonSharedBuffer<");
1288
- if (t.elem !== "u8" || !isBuffer) {
1289
- lowerer.unsupported("SC1090", node, `${surface} of '${tname}' values (Buffer's <Buffer ..> form is the lowered typed-array rendering; other typed arrays fence)`);
1382
+ if (isDataViewTypeName(tname)) {
1383
+ lowerer.unsupported("SC1090", node, `${surface} of '${tname}' values (Buffer and the numeric typed arrays are the lowered byte renderings; DataView has none yet)`);
1384
+ }
1385
+ if (!isBufferTypeName(tname)) {
1386
+ return {
1387
+ kind: "libCall",
1388
+ fn: "insp.typedArray",
1389
+ args: [value, numLit(0, loc), numLit(2, loc)],
1390
+ type: STRING,
1391
+ loc,
1392
+ };
1290
1393
  }
1291
1394
  return inspectExpr(lowerer, t, value, numLit(0, loc), numLit(2, loc), loc);
1292
1395
  }
@@ -1295,6 +1398,10 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
1295
1398
  // is not a value here, so the composition fences with the rewrite.
1296
1399
  lowerer.unsupported("SC1090", node, `${surface} of a void call result (call it as its own statement, then ${surface}(undefined))`);
1297
1400
  }
1401
+ // A read that always throws (an ambient name, a binding whose
1402
+ // initializer threw) never produces a value to render.
1403
+ if (value.kind === "libCall" && value.fn === "global.undefRead")
1404
+ return formatValueExpr(lowerer, DYN, { ...value, type: DYN }, 2, loc);
1298
1405
  const walk = { recursive: false };
1299
1406
  const reason = inspectSupport(lowerer, t, new Set(), walk);
1300
1407
  if (reason !== null) {
@@ -1302,18 +1409,25 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
1302
1409
  }
1303
1410
  return formatValueExpr(lowerer, t, value, 2, loc);
1304
1411
  }
1305
- /* ── the callsite: options, direct function/class names ──────────────── */
1306
- /** The parsed options literal: the resolved depth (numeric; Infinity for
1307
- * `null`), with every non-default knob fenced by name. */
1412
+ /** The checker's spelling of a Buffer, whose bytes print as <Buffer ..>. */
1413
+ function isBufferTypeName(tname) {
1414
+ return (tname === "Buffer" ||
1415
+ tname === "NonSharedBuffer" ||
1416
+ tname.startsWith("Buffer<") ||
1417
+ tname.startsWith("NonSharedBuffer<"));
1418
+ }
1419
+ function isDataViewTypeName(tname) {
1420
+ return tname === "DataView" || tname.startsWith("DataView<");
1421
+ }
1308
1422
  function parseInspectOptions(lowerer, node, recursive, dir = false) {
1309
1423
  const surface = dir ? "console.dir" : "util.inspect";
1424
+ const options = { depth: 2, breakLength: 80, compact: 3, sorted: false };
1310
1425
  if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
1311
- return 2;
1426
+ return options;
1312
1427
  if (!ts.isObjectLiteralExpression(node)) {
1313
1428
  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");
1314
1429
  }
1315
- let depth = 2;
1316
- for (const prop of node.properties) {
1430
+ for (const prop of node.properties.nodes) {
1317
1431
  if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
1318
1432
  lowerer.noLowering(`${surface} options in this form`, prop, "plain `key: literal` entries are the lowered options");
1319
1433
  }
@@ -1336,14 +1450,14 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
1336
1450
  // machinery ([Circular *N]) cuts every cycle, so the walk is
1337
1451
  // bounded by the (finite) object graph — exactly Node.
1338
1452
  void recursive;
1339
- depth = Infinity;
1453
+ options.depth = Infinity;
1340
1454
  }
1341
1455
  else if (!(ts.isIdentifier(value) && value.text === "undefined")) {
1342
1456
  const n = numeric();
1343
1457
  if (n === null) {
1344
1458
  lowerer.noLowering(`${surface} with a non-literal depth option`, value, "depth must be a numeric literal (or null)");
1345
1459
  }
1346
- depth = n;
1460
+ options.depth = n;
1347
1461
  }
1348
1462
  }
1349
1463
  else if (key === "colors") {
@@ -1352,14 +1466,27 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
1352
1466
  }
1353
1467
  }
1354
1468
  else if (key === "compact") {
1355
- if (numeric() !== 3) {
1356
- lowerer.noLowering(`${surface} with a non-default compact option`, value, "only the default compact: 3 is lowered");
1469
+ // Node tries the single-line form and groups arrays only for a
1470
+ // compact of at least 1; false and smaller numbers break every
1471
+ // composite onto its own lines. compact: true is the older layout.
1472
+ const n = value.kind === ts.SyntaxKind.FalseKeyword ? 0 : numeric();
1473
+ if (n === null || Number.isNaN(n)) {
1474
+ lowerer.noLowering(`${surface} with this compact option`, value, "compact must be false or a numeric literal (compact: true has no lowering)");
1475
+ }
1476
+ options.compact = Math.max(n, 0);
1477
+ }
1478
+ else if (key === "sorted") {
1479
+ if (value.kind !== ts.SyntaxKind.TrueKeyword && value.kind !== ts.SyntaxKind.FalseKeyword) {
1480
+ lowerer.noLowering(`${surface} with this sorted option`, value, "sorted must be true or false (a comparator function has no lowering)");
1357
1481
  }
1482
+ options.sorted = value.kind === ts.SyntaxKind.TrueKeyword;
1358
1483
  }
1359
1484
  else if (key === "breakLength") {
1360
- if (numeric() !== 80) {
1361
- lowerer.noLowering(`${surface} with a non-default breakLength option`, value, "only the default breakLength: 80 is lowered");
1485
+ const n = ts.isIdentifier(value) && value.text === "Infinity" ? Infinity : numeric();
1486
+ if (n === null || Number.isNaN(n)) {
1487
+ lowerer.noLowering(`${surface} with a non-literal breakLength option`, value, "breakLength must be a numeric literal or Infinity");
1362
1488
  }
1489
+ options.breakLength = n;
1363
1490
  }
1364
1491
  else if (dir && key === "customInspect") {
1365
1492
  // console.dir's own default; only that value is lowered.
@@ -1368,10 +1495,42 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
1368
1495
  }
1369
1496
  }
1370
1497
  else {
1371
- 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"}`);
1498
+ 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)"}`);
1372
1499
  }
1373
1500
  }
1374
- return depth;
1501
+ return options;
1502
+ }
1503
+ /** A render under non-default breakLength/compact/sorted: the value is evaluated
1504
+ * first, the layout applies to this render only, and the defaults return
1505
+ * afterwards. */
1506
+ function withInspectLayout(lowerer, options, value, render, loc) {
1507
+ if (options.breakLength === 80 && options.compact === 3 && !options.sorted)
1508
+ return render(value);
1509
+ const input = lowerer.declareHiddenLocal("%inspectInput", value.type);
1510
+ const text = lowerer.declareHiddenLocal("%inspectText", STRING);
1511
+ const layout = (breakLength, compact, sorted) => ({
1512
+ kind: "exprStmt",
1513
+ expr: {
1514
+ kind: "libCall",
1515
+ fn: "insp.layout",
1516
+ args: [numLit(breakLength, loc), numLit(compact, loc), boolLit(sorted, loc)],
1517
+ type: VOID,
1518
+ loc,
1519
+ },
1520
+ loc,
1521
+ });
1522
+ return {
1523
+ kind: "seqExpr",
1524
+ stmts: [
1525
+ { kind: "varDecl", localId: input.id, init: value, loc },
1526
+ layout(options.breakLength, options.compact, options.sorted),
1527
+ { kind: "varDecl", localId: text.id, init: render(varRef(input.id, value.type, loc)), loc },
1528
+ layout(80, 3, false),
1529
+ ],
1530
+ result: varRef(text.id, STRING, loc),
1531
+ type: STRING,
1532
+ loc,
1533
+ };
1375
1534
  }
1376
1535
  /** `util.inspect(fn)` / `util.inspect(Cls)` over a DIRECT identifier
1377
1536
  * naming a declared function or class: the name is compile-time truth,
@@ -1396,7 +1555,7 @@ function directCallableInspect(lowerer, node, loc) {
1396
1555
  const base = cls.base ? ` extends ${cls.base.def.name.replace(/^%/, "")}` : "";
1397
1556
  return strLit(`[class ${cls.def.name}${base}]`, loc);
1398
1557
  }
1399
- const decl = lowerer.checker.declarationsOf(sym)[0];
1558
+ const decl = sym.declarations[0];
1400
1559
  if (!decl)
1401
1560
  return null;
1402
1561
  if (ts.isFunctionDeclaration(decl) && decl.name) {
@@ -1415,10 +1574,10 @@ function directCallableInspect(lowerer, node, loc) {
1415
1574
  }
1416
1575
  /** util.inspect(value[, options]) — the spoke's inspect entry. */
1417
1576
  function lowerInspectCall(lowerer, expr, loc) {
1418
- if (expr.arguments.length < 1 || expr.arguments.length > 2) {
1419
- lowerer.noLowering(`util.inspect with ${expr.arguments.length} arguments`, expr, "the supported forms are inspect(value) and inspect(value, options)");
1577
+ if (expr.arguments.nodes.length < 1 || expr.arguments.nodes.length > 2) {
1578
+ lowerer.noLowering(`util.inspect with ${expr.arguments.nodes.length} arguments`, expr, "the supported forms are inspect(value) and inspect(value, options)");
1420
1579
  }
1421
- return lowerInspectValue(lowerer, expr.arguments[0], expr.arguments[1], loc, false);
1580
+ return lowerInspectValue(lowerer, expr.arguments.nodes[0], expr.arguments.nodes[1], loc, false);
1422
1581
  }
1423
1582
  /** `inspect(value, options)` over one value node: the shared body of
1424
1583
  * util.inspect and console.dir. console.dir is Node's `inspect(object,
@@ -1446,22 +1605,29 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
1446
1605
  if (value.type.kind === "bytes") {
1447
1606
  // One runtime representation serves Buffer AND Uint8Array; their
1448
1607
  // renderings differ (<Buffer aa> vs Uint8Array(1) [ 170 ]), so the
1449
- // TOP-LEVEL argument's checker type picks — and only Buffer lowers.
1450
- // Nested bytes fence in inspectSupport (no checker type survives
1451
- // into shapes).
1608
+ // TOP-LEVEL argument's checker type picks. Nested u8 bytes fence in
1609
+ // inspectSupport (no checker type survives into shapes).
1452
1610
  const tname = lowerer.checker.typeToString(lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(valueNode)));
1453
- const isBuffer = tname === "Buffer" ||
1454
- tname === "NonSharedBuffer" ||
1455
- tname.startsWith("Buffer<") ||
1456
- tname.startsWith("NonSharedBuffer<");
1457
- if (dir) {
1611
+ const isBuffer = isBufferTypeName(tname);
1612
+ if (dir && isBuffer) {
1458
1613
  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");
1459
1614
  }
1460
- if (value.type.elem !== "u8" || !isBuffer) {
1461
- lowerer.noLowering(`util.inspect of '${tname}' values`, valueNode, "Buffer's <Buffer ..> form is the lowered typed-array rendering; other typed arrays fence");
1615
+ if (isDataViewTypeName(tname)) {
1616
+ lowerer.noLowering(`util.inspect of '${tname}' values`, valueNode, "Buffer and the numeric typed arrays are the lowered byte renderings; DataView has none yet");
1617
+ }
1618
+ const options = parseInspectOptions(lowerer, optionsNode, false, dir);
1619
+ if (!isBuffer) {
1620
+ // A numeric typed array: Uint8Array(n) [ ... ] under the depth and
1621
+ // layout options.
1622
+ return withInspectLayout(lowerer, options, value, (input) => ({
1623
+ kind: "libCall",
1624
+ fn: "insp.typedArray",
1625
+ args: [input, numLit(0, loc), numLit(options.depth, loc)],
1626
+ type: STRING,
1627
+ loc,
1628
+ }), loc);
1462
1629
  }
1463
- const bufDepth = parseInspectOptions(lowerer, optionsNode, false, dir);
1464
- void bufDepth; // Buffers render fully at any depth (custom inspect)
1630
+ // Buffers render fully at any depth and on one line (custom inspect).
1465
1631
  return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(2, loc), loc);
1466
1632
  }
1467
1633
  const walk = { recursive: false };
@@ -1469,17 +1635,18 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
1469
1635
  if (reason !== null) {
1470
1636
  lowerer.noLowering(`${surface} of '${lowerer.fmt(value.type)}' values`, valueNode, reason);
1471
1637
  }
1472
- const depth = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
1638
+ const options = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
1639
+ const depth = options.depth;
1473
1640
  if (dir && value.type.kind === "dyn") {
1474
- return {
1641
+ return withInspectLayout(lowerer, options, value, (input) => ({
1475
1642
  kind: "libCall",
1476
1643
  fn: "console.dirDyn",
1477
- args: [value, numLit(depth, loc)],
1644
+ args: [input, numLit(depth, loc)],
1478
1645
  type: STRING,
1479
1646
  loc,
1480
- };
1647
+ }), loc);
1481
1648
  }
1482
- return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
1649
+ return withInspectLayout(lowerer, options, value, (input) => inspectExpr(lowerer, value.type, input, numLit(0, loc), numLit(depth, loc), loc), loc);
1483
1650
  }
1484
1651
  /* ── util.format / util.formatWithOptions ────────────────────────────── */
1485
1652
  /** One argument as format's %s conversion (Node: numbers via
@@ -1558,16 +1725,79 @@ function formatOArg(lowerer, node, depth, loc) {
1558
1725
  }
1559
1726
  return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
1560
1727
  }
1728
+ /** %d and %i over a checked-dynamic argument, as Node's formatWithOptions
1729
+ * reads it: a bigint prints as `${n}n`, a symbol as NaN, and any other
1730
+ * value as `number` (Number(arg) for %d, parseInt(String(arg)) for %i)
1731
+ * formatted. The argument evaluates once. */
1732
+ function formatDynInteger(lowerer, value, number, loc) {
1733
+ const held = lowerer.declareHiddenLocal("%formatArg", DYN);
1734
+ const ref = () => varRef(held.id, DYN, loc);
1735
+ return {
1736
+ kind: "seqExpr",
1737
+ stmts: [{ kind: "varDecl", localId: held.id, init: value, loc }],
1738
+ result: {
1739
+ kind: "ternary",
1740
+ cond: { kind: "dynTest", test: "bigint", value: ref(), type: BOOL, loc },
1741
+ then: {
1742
+ kind: "strConcat",
1743
+ left: { kind: "libCall", fn: "dyn.toStringCoerce", args: [ref()], type: STRING, loc },
1744
+ right: strLit("n", loc),
1745
+ type: STRING,
1746
+ loc,
1747
+ },
1748
+ else_: {
1749
+ kind: "ternary",
1750
+ cond: { kind: "dynTest", test: "symbol", value: ref(), type: BOOL, loc },
1751
+ then: strLit("NaN", loc),
1752
+ else_: { kind: "libCall", fn: "insp.f64", args: [number(ref())], type: STRING, loc },
1753
+ type: STRING,
1754
+ loc,
1755
+ },
1756
+ type: STRING,
1757
+ loc,
1758
+ },
1759
+ type: STRING,
1760
+ loc,
1761
+ };
1762
+ }
1763
+ /** %d and %i over the argument types Node formats without a number
1764
+ * conversion: a bigint prints as `${n}n` (formatBigInt) and a symbol as NaN;
1765
+ * null is Number(null) (0) under %d and parseInt("null") (NaN) under %i, and
1766
+ * undefined (including a void call) is NaN under both. Other arguments
1767
+ * still evaluate. Null for other types. */
1768
+ function formatIntegerFixed(value, spec, loc) {
1769
+ if (value.type.kind === "bigint") {
1770
+ return { kind: "libCall", fn: "bigint.inspect", args: [value], type: STRING, loc };
1771
+ }
1772
+ let text;
1773
+ if (value.type.kind === "symbol" ||
1774
+ value.type.kind === "undefinedT" ||
1775
+ value.type.kind === "void")
1776
+ text = "NaN";
1777
+ else if (value.type.kind === "nullT")
1778
+ text = spec === "%d" ? "0" : "NaN";
1779
+ else
1780
+ return null;
1781
+ if (value.kind === "unitLit")
1782
+ return strLit(text, loc);
1783
+ return {
1784
+ kind: "seqExpr",
1785
+ stmts: [{ kind: "exprStmt", expr: value, loc }],
1786
+ result: strLit(text, loc),
1787
+ type: STRING,
1788
+ loc,
1789
+ };
1790
+ }
1561
1791
  /** util.format(...) / util.formatWithOptions({}, ...): the compile-time
1562
1792
  * %-substitution over a literal format string (formatWithOptionsInternal
1563
1793
  * ported exactly — the arg cursor, the args-exhausted guard, %c's
1564
1794
  * consume-and-drop), with per-static-type conversions. Non-literal
1565
1795
  * format strings lower only in the substitution-free shapes. */
1566
1796
  export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverride, literalPrefix = "") {
1567
- const argNodes = [...(argNodesOverride ?? expr.arguments)];
1797
+ const argNodes = [...(argNodesOverride ?? expr.arguments.nodes)];
1568
1798
  if (withOptions) {
1569
1799
  const opts = argNodes.shift();
1570
- if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.length > 0) {
1800
+ if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.nodes.length > 0) {
1571
1801
  lowerer.noLowering("util.formatWithOptions with a non-empty options literal", opts ?? expr, "only the empty literal {} (the defaults — exactly util.format) is lowered");
1572
1802
  }
1573
1803
  }
@@ -1612,6 +1842,9 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1612
1842
  // strings through the runtime's ECMA-exact StringToNumber
1613
1843
  // (num.fromString — the same lowering Number(aString) takes).
1614
1844
  const value = lowerer.lowerExpr(node);
1845
+ const fixed = formatIntegerFixed(value, "%d", loc);
1846
+ if (fixed)
1847
+ return fixed;
1615
1848
  if (value.type.kind === "f64")
1616
1849
  return { kind: "libCall", fn: "insp.f64", args: [value], type: STRING, loc };
1617
1850
  if (value.type.kind === "string") {
@@ -1643,19 +1876,15 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1643
1876
  };
1644
1877
  }
1645
1878
  // A checked-dynamic argument (`console.log('... actual %d.',
1646
- // context.actual)` — test/common's exit report): VALIDATE it as a
1647
- // number (dynCheck) and format. A non-number dyn value throws the
1648
- // catchable TypeError where Node would print its ToNumber (NaN
1649
- // for objects) — it throws instead of returning a wrong result
1650
- // (SEMANTICS.md).
1879
+ // context.actual)` — test/common's exit report): Number(arg).
1651
1880
  if (value.type.kind === "dyn") {
1652
- return {
1881
+ return formatDynInteger(lowerer, value, (held) => ({
1653
1882
  kind: "libCall",
1654
- fn: "insp.f64",
1655
- args: [{ kind: "dynCheck", value, type: F64, loc }],
1656
- type: STRING,
1883
+ fn: "dyn.numberConstructor",
1884
+ args: [held],
1885
+ type: F64,
1657
1886
  loc,
1658
- };
1887
+ }), loc);
1659
1888
  }
1660
1889
  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");
1661
1890
  break;
@@ -1663,6 +1892,9 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1663
1892
  case 105: {
1664
1893
  // %i — parseInt(ToString(arg)): the spec-exact composition.
1665
1894
  const value = lowerer.lowerExpr(node);
1895
+ const fixed = formatIntegerFixed(value, "%i", loc);
1896
+ if (fixed)
1897
+ return fixed;
1666
1898
  if (value.type.kind === "f64" ||
1667
1899
  value.type.kind === "bool" ||
1668
1900
  value.type.kind === "string") {
@@ -1678,6 +1910,19 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1678
1910
  };
1679
1911
  return { kind: "libCall", fn: "insp.f64", args: [parsed], type: STRING, loc };
1680
1912
  }
1913
+ // parseInt(String(arg)) over a checked-dynamic argument.
1914
+ if (value.type.kind === "dyn") {
1915
+ return formatDynInteger(lowerer, value, (held) => ({
1916
+ kind: "libCall",
1917
+ fn: "num.parseInt",
1918
+ args: [
1919
+ { kind: "libCall", fn: "dyn.toStringCoerce", args: [held], type: STRING, loc },
1920
+ numLit(0, loc),
1921
+ ],
1922
+ type: F64,
1923
+ loc,
1924
+ }), loc);
1925
+ }
1681
1926
  lowerer.noLowering(`util.format %i of '${lowerer.fmt(value.type)}' values`, node);
1682
1927
  break;
1683
1928
  }
@@ -1697,17 +1942,17 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
1697
1942
  return strLit("undefined", loc);
1698
1943
  }
1699
1944
  // A checked-dynamic argument (`console.error('headers: %j',
1700
- // headers)` — the suite's http logging idiom): the runtime dyn
1701
- // walk stringifies JS-exactly (root undefined/function prints
1702
- // "undefined"; a handle in the tree throws the "not supported yet"
1703
- // Error).
1945
+ // headers)` — the suite's http logging idiom): the runtime runs
1946
+ // JSON.stringify's walk (toJSON hooks included; a root it drops
1947
+ // prints "undefined") and prints "[Circular]" for a circular
1948
+ // structure. A typed argument prints "[Circular]" the same way.
1704
1949
  if (value.type.kind === "dyn") {
1705
1950
  return { kind: "libCall", fn: "insp.jsonDyn", args: [value], type: STRING, loc };
1706
1951
  }
1707
1952
  if (!lowerer.jsonStringifySafe(value.type)) {
1708
1953
  lowerer.noLowering(`util.format %j of '${lowerer.fmt(value.type)}' values`, node, "only JSON-safe static types lower");
1709
1954
  }
1710
- return { kind: "jsonStringify", value, type: STRING, loc };
1955
+ return { kind: "jsonStringify", value, circular: true, type: STRING, loc };
1711
1956
  }
1712
1957
  case 102: {
1713
1958
  // %f — parseFloat(String(arg)) formatted: a number keeps its value
@@ -1874,21 +2119,21 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1874
2119
  switch (bi.member) {
1875
2120
  case "styleText":
1876
2121
  case "isDeepStrictEqual": {
1877
- if (expr.arguments.some(ts.isSpreadElement))
2122
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
1878
2123
  lowerer.noLowering(`util.${bi.member} with spread arguments`, expr);
1879
2124
  const stmts = [];
1880
2125
  const args = [];
1881
2126
  // Save all inputs before evaluating surplus arguments: comparison may
1882
2127
  // read mutable objects or throw, so it must happen after every argument.
1883
2128
  for (let i = 0; i < 3; i++) {
1884
- const input = expr.arguments[i]
1885
- ? lowerer.lowerExprExpecting(expr.arguments[i], DYN)
2129
+ const input = expr.arguments.nodes[i]
2130
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[i], DYN)
1886
2131
  : dynUndefinedExpr(loc);
1887
2132
  const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
1888
2133
  stmts.push({ kind: "varDecl", localId: saved.id, init: input, loc });
1889
2134
  args.push(varRef(saved.id, DYN, loc));
1890
2135
  }
1891
- for (const arg of expr.arguments.slice(3))
2136
+ for (const arg of expr.arguments.nodes.slice(3))
1892
2137
  stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
1893
2138
  const type = bi.member === "styleText" ? STRING : BOOL;
1894
2139
  return {
@@ -1906,10 +2151,10 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1906
2151
  case "debug":
1907
2152
  return lowerUtilCallableCall(lowerer, expr, bi.member, loc);
1908
2153
  case "getSystemErrorMap": {
1909
- if (expr.arguments.some(ts.isSpreadElement))
2154
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
1910
2155
  lowerer.noLowering("util.getSystemErrorMap with spread arguments", expr);
1911
2156
  const result = lowerSystemErrorMap(lowerer, loc);
1912
- const stmts = expr.arguments.map((arg) => ({
2157
+ const stmts = expr.arguments.nodes.map((arg) => ({
1913
2158
  kind: "exprStmt",
1914
2159
  expr: lowerer.lowerExpr(arg),
1915
2160
  loc,
@@ -1920,24 +2165,24 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1920
2165
  case "getSystemErrorMessage":
1921
2166
  case "stripVTControlCharacters":
1922
2167
  case "toUSVString": {
1923
- if (expr.arguments.some(ts.isSpreadElement))
2168
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
1924
2169
  lowerer.noLowering(`util.${bi.member} with spread arguments`, expr);
1925
- const input = expr.arguments[0]
1926
- ? lowerer.lowerExprExpecting(expr.arguments[0], DYN)
2170
+ const input = expr.arguments.nodes[0]
2171
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[0], DYN)
1927
2172
  : {
1928
2173
  kind: "dynFrom",
1929
2174
  value: { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc },
1930
2175
  type: DYN,
1931
2176
  loc,
1932
2177
  };
1933
- if (expr.arguments.length <= 1)
2178
+ if (expr.arguments.nodes.length <= 1)
1934
2179
  return { kind: "libCall", fn: `util.${bi.member}`, args: [input], type: STRING, loc };
1935
2180
  const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
1936
2181
  return {
1937
2182
  kind: "seqExpr",
1938
2183
  stmts: [
1939
2184
  { kind: "varDecl", localId: saved.id, init: input, loc },
1940
- ...expr.arguments
2185
+ ...expr.arguments.nodes
1941
2186
  .slice(1)
1942
2187
  .map((arg) => ({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc })),
1943
2188
  ],
@@ -1961,11 +2206,11 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1961
2206
  case "parseArgs":
1962
2207
  return lowerParseArgsCall(lowerer, expr, loc);
1963
2208
  case "parseEnv": {
1964
- if (expr.arguments.length > 1 || expr.arguments.some(ts.isSpreadElement)) {
2209
+ if (expr.arguments.nodes.length > 1 || expr.arguments.nodes.some(ts.isSpreadElement)) {
1965
2210
  lowerer.noLowering("util.parseEnv with spread or extra arguments", expr);
1966
2211
  }
1967
- const input = expr.arguments[0]
1968
- ? lowerer.lowerExprExpecting(expr.arguments[0], DYN)
2212
+ const input = expr.arguments.nodes[0]
2213
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[0], DYN)
1969
2214
  : dynUndefinedExpr(loc);
1970
2215
  const parsed = {
1971
2216
  kind: "libCall",
@@ -1994,7 +2239,7 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
1994
2239
  * answer native dyn wrappers; a static function slot checks the wrapper
1995
2240
  * when it receives it, and dyn slots keep calling it with JS arity. */
1996
2241
  function lowerUtilCallableCall(lowerer, expr, member, loc) {
1997
- if (expr.arguments.some(ts.isSpreadElement))
2242
+ if (expr.arguments.nodes.some(ts.isSpreadElement))
1998
2243
  lowerer.noLowering(`util.${member} with spread arguments`, expr);
1999
2244
  const fn = member === "inherits"
2000
2245
  ? "util.inherits"
@@ -2006,8 +2251,15 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2006
2251
  const arity = member === "deprecate" ? 4 : member === "callbackify" ? 1 : 2;
2007
2252
  // Program classes keep static prototypes: there is no function object
2008
2253
  // whose prototype chain the runtime could relink or wrap.
2254
+ // EventEmitter and the stream classes are the exception as superCtor:
2255
+ // the runtime has untyped constructors for them (builtin-class-dyn.ts).
2009
2256
  const classArgs = member === "inherits" ? 2 : member === "deprecate" ? 1 : 0;
2010
- for (const arg of expr.arguments.slice(0, classArgs)) {
2257
+ const builtinBase = member === "inherits" && expr.arguments.nodes[1] !== undefined
2258
+ ? builtinClassKindOf(lowerer, expr.arguments.nodes[1])
2259
+ : null;
2260
+ for (const [index, arg] of expr.arguments.nodes.slice(0, classArgs).entries()) {
2261
+ if (index === 1 && builtinBase !== null)
2262
+ continue;
2011
2263
  if (lowerer.mapTypeOf(lowerer.typeOf(arg))?.kind === "classval")
2012
2264
  lowerer.noLowering(`util.${member} over a class constructor`, arg, member === "inherits"
2013
2265
  ? "declare the subclass with extends"
@@ -2018,14 +2270,17 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2018
2270
  const stmts = [];
2019
2271
  const args = [];
2020
2272
  for (let i = 0; i < arity; i++) {
2021
- const input = expr.arguments[i]
2022
- ? lowerer.lowerExprExpecting(expr.arguments[i], DYN)
2023
- : dynUndefinedExpr(loc);
2273
+ const node = expr.arguments.nodes[i];
2274
+ const input = !node
2275
+ ? dynUndefinedExpr(loc)
2276
+ : i === 1 && builtinBase !== null
2277
+ ? (builtinClassDynValueOf(lowerer, node) ?? lowerer.lowerExprExpecting(node, DYN))
2278
+ : lowerer.lowerExprExpecting(node, DYN);
2024
2279
  const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
2025
2280
  stmts.push({ kind: "varDecl", localId: saved.id, init: input, loc });
2026
2281
  args.push(varRef(saved.id, DYN, loc));
2027
2282
  }
2028
- for (const arg of expr.arguments.slice(arity))
2283
+ for (const arg of expr.arguments.nodes.slice(arity))
2029
2284
  stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
2030
2285
  const type = fn === "util.inherits" ? VOID : DYN;
2031
2286
  const result = { kind: "libCall", fn, args, type, loc };
@@ -2037,7 +2292,7 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2037
2292
  * a statically typed callback parameter cannot receive a value its type
2038
2293
  * excludes. Untyped (JavaScript or unknown) slots keep the wrapper dyn. */
2039
2294
  function callbackifyErrorExcludesNull(lowerer, expr) {
2040
- if (isJsSourceFile(expr.getSourceFile()))
2295
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
2041
2296
  return false;
2042
2297
  const checker = lowerer.checker;
2043
2298
  const slot = checker.getContextualType(expr) ?? lowerer.typeOf(expr);
@@ -2059,11 +2314,11 @@ function callbackifyErrorExcludesNull(lowerer, expr) {
2059
2314
  * variants and a null-prototype values object); statically typed member
2060
2315
  * reads leave that tree through the ordinary dyn checks. */
2061
2316
  function lowerParseArgsCall(lowerer, expr, loc) {
2062
- if (expr.arguments.length > 1 || expr.arguments.some(ts.isSpreadElement)) {
2063
- lowerer.noLowering(`util.parseArgs with ${expr.arguments.length} arguments`, expr, "the lowered form is parseArgs() or parseArgs(config)");
2317
+ if (expr.arguments.nodes.length > 1 || expr.arguments.nodes.some(ts.isSpreadElement)) {
2318
+ lowerer.noLowering(`util.parseArgs with ${expr.arguments.nodes.length} arguments`, expr, "the lowered form is parseArgs() or parseArgs(config)");
2064
2319
  }
2065
2320
  let config;
2066
- const configNode = expr.arguments[0];
2321
+ const configNode = expr.arguments.nodes[0];
2067
2322
  if (!configNode) {
2068
2323
  config = { kind: "dynObjLit", fields: [], type: DYN, loc };
2069
2324
  }
@@ -2117,9 +2372,9 @@ function lowerParseArgsCall(lowerer, expr, loc) {
2117
2372
  * forms and TypeScript keep the SC2020 fence: a typed consumer asserting
2118
2373
  * real frames must fail at compile time instead of reading placeholders. */
2119
2374
  function lowerGetCallSitesCall(lowerer, expr, loc) {
2120
- if (expr.arguments.length !== 0)
2375
+ if (expr.arguments.nodes.length !== 0)
2121
2376
  return null;
2122
- if (!isJsSourceFile(expr.getSourceFile()))
2377
+ if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
2123
2378
  return null;
2124
2379
  const frame = () => {
2125
2380
  const field = (name, value) => ({
@@ -2132,7 +2387,7 @@ function lowerGetCallSitesCall(lowerer, expr, loc) {
2132
2387
  field("functionName", { kind: "strLit", value: "", type: STRING, loc }),
2133
2388
  field("scriptName", {
2134
2389
  kind: "strLit",
2135
- value: expr.getSourceFile().fileName,
2390
+ value: ts.getSourceFileOfNode(expr).fileName,
2136
2391
  type: STRING,
2137
2392
  loc,
2138
2393
  }),