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