@scriptc/compiler 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +270 -72
  2. package/ambient/scriptc-overrides.d.ts +21 -0
  3. package/dist/backend/executable-features.js +3 -0
  4. package/dist/backend/executable-features.js.map +1 -1
  5. package/dist/backend/library-pack.js +2 -1
  6. package/dist/backend/library-pack.js.map +1 -1
  7. package/dist/backend/linker.js +11 -1
  8. package/dist/backend/linker.js.map +1 -1
  9. package/dist/backend/lld.d.ts +9 -0
  10. package/dist/backend/lld.js +48 -0
  11. package/dist/backend/lld.js.map +1 -0
  12. package/dist/backend/lld.test.d.ts +1 -0
  13. package/dist/backend/lld.test.js +53 -0
  14. package/dist/backend/lld.test.js.map +1 -0
  15. package/dist/backend/llvm/appended-array-literals.d.ts +11 -1
  16. package/dist/backend/llvm/appended-array-literals.js +29 -0
  17. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  18. package/dist/backend/llvm/blocks.js +10 -1
  19. package/dist/backend/llvm/blocks.js.map +1 -1
  20. package/dist/backend/llvm/bytes-alias.d.ts +13 -4
  21. package/dist/backend/llvm/bytes-alias.js +16 -5
  22. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  23. package/dist/backend/llvm/bytes-bounds.d.ts +5 -1
  24. package/dist/backend/llvm/bytes-bounds.js +199 -2
  25. package/dist/backend/llvm/bytes-bounds.js.map +1 -1
  26. package/dist/backend/llvm/bytes-loop-versions.d.ts +45 -3
  27. package/dist/backend/llvm/bytes-loop-versions.js +244 -20
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +18 -6
  30. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  31. package/dist/backend/llvm/call-lifetimes.d.ts +8 -2
  32. package/dist/backend/llvm/call-lifetimes.js +87 -18
  33. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  34. package/dist/backend/llvm/call-lifetimes.test.js +132 -0
  35. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  36. package/dist/backend/llvm/classes.d.ts +3 -2
  37. package/dist/backend/llvm/classes.js +4 -4
  38. package/dist/backend/llvm/classes.js.map +1 -1
  39. package/dist/backend/llvm/counted-loops.d.ts +14 -2
  40. package/dist/backend/llvm/counted-loops.js +54 -5
  41. package/dist/backend/llvm/counted-loops.js.map +1 -1
  42. package/dist/backend/llvm/debug-info.d.ts +42 -1
  43. package/dist/backend/llvm/debug-info.js +72 -6
  44. package/dist/backend/llvm/debug-info.js.map +1 -1
  45. package/dist/backend/llvm/dense-array-loops.js +2 -2
  46. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  47. package/dist/backend/llvm/dense-array-loops.test.js +1 -0
  48. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  49. package/dist/backend/llvm/dyn.d.ts +69 -8
  50. package/dist/backend/llvm/dyn.js +396 -49
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emit-function.js +30 -16
  53. package/dist/backend/llvm/emit-function.js.map +1 -1
  54. package/dist/backend/llvm/emit-journal.d.ts +8 -4
  55. package/dist/backend/llvm/emit-journal.js +75 -5
  56. package/dist/backend/llvm/emit-journal.js.map +1 -1
  57. package/dist/backend/llvm/emit-module.d.ts +4 -0
  58. package/dist/backend/llvm/emit-module.js +74 -29
  59. package/dist/backend/llvm/emit-module.js.map +1 -1
  60. package/dist/backend/llvm/emit-statements.js +297 -28
  61. package/dist/backend/llvm/emit-statements.js.map +1 -1
  62. package/dist/backend/llvm/emitter.d.ts +144 -13
  63. package/dist/backend/llvm/emitter.js +523 -92
  64. package/dist/backend/llvm/emitter.js.map +1 -1
  65. package/dist/backend/llvm/emitter.test.js +11 -2
  66. package/dist/backend/llvm/emitter.test.js.map +1 -1
  67. package/dist/backend/llvm/expr-async.js +11 -13
  68. package/dist/backend/llvm/expr-async.js.map +1 -1
  69. package/dist/backend/llvm/expr-bytes.d.ts +6 -4
  70. package/dist/backend/llvm/expr-bytes.js +45 -16
  71. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  72. package/dist/backend/llvm/expr-calls.js +13 -11
  73. package/dist/backend/llvm/expr-calls.js.map +1 -1
  74. package/dist/backend/llvm/expr-containers.d.ts +11 -0
  75. package/dist/backend/llvm/expr-containers.js +101 -9
  76. package/dist/backend/llvm/expr-containers.js.map +1 -1
  77. package/dist/backend/llvm/expr-context.d.ts +3 -0
  78. package/dist/backend/llvm/expr-control.js +83 -0
  79. package/dist/backend/llvm/expr-control.js.map +1 -1
  80. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  81. package/dist/backend/llvm/expr-dynamic.js +22 -4
  82. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.js +121 -14
  84. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  85. package/dist/backend/llvm/expr-stream-bridges.js +111 -26
  86. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  87. package/dist/backend/llvm/forked-analysis.d.ts +8 -0
  88. package/dist/backend/llvm/forked-analysis.js +43 -0
  89. package/dist/backend/llvm/forked-analysis.js.map +1 -0
  90. package/dist/backend/llvm/integer-values.d.ts +12 -0
  91. package/dist/backend/llvm/integer-values.js +69 -5
  92. package/dist/backend/llvm/integer-values.js.map +1 -1
  93. package/dist/backend/llvm/integer-views.d.ts +2 -1
  94. package/dist/backend/llvm/integer-views.js +12 -1
  95. package/dist/backend/llvm/integer-views.js.map +1 -1
  96. package/dist/backend/llvm/js-ic.d.ts +4 -0
  97. package/dist/backend/llvm/js-ic.js +133 -15
  98. package/dist/backend/llvm/js-ic.js.map +1 -1
  99. package/dist/backend/llvm/layouts.d.ts +1 -0
  100. package/dist/backend/llvm/layouts.js.map +1 -1
  101. package/dist/backend/llvm/lazy-captures.d.ts +6 -1
  102. package/dist/backend/llvm/lazy-captures.js +10 -5
  103. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  104. package/dist/backend/llvm/lib-abi.d.ts +5 -0
  105. package/dist/backend/llvm/lib-abi.js +19 -0
  106. package/dist/backend/llvm/lib-abi.js.map +1 -1
  107. package/dist/backend/llvm/lib-dispatch.js +249 -33
  108. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  109. package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
  110. package/dist/backend/llvm/lib-filesystem.js +32 -0
  111. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  112. package/dist/backend/llvm/lib-http2.js +2 -2
  113. package/dist/backend/llvm/lib-http2.js.map +1 -1
  114. package/dist/backend/llvm/lib-network.js +2 -0
  115. package/dist/backend/llvm/lib-network.js.map +1 -1
  116. package/dist/backend/llvm/lib-process.js +48 -1
  117. package/dist/backend/llvm/lib-process.js.map +1 -1
  118. package/dist/backend/llvm/lib-shared.js +64 -0
  119. package/dist/backend/llvm/lib-shared.js.map +1 -1
  120. package/dist/backend/llvm/lib-tls.js +28 -3
  121. package/dist/backend/llvm/lib-tls.js.map +1 -1
  122. package/dist/backend/llvm/local-union-storage.test.js +2 -1
  123. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  124. package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
  125. package/dist/backend/llvm/loop-array-borrows.js +11 -5
  126. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  127. package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
  128. package/dist/backend/llvm/map-entry-fusion.js +20 -11
  129. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  130. package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
  131. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
  132. package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
  133. package/dist/backend/llvm/map-number-lookup.js +41 -9
  134. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  135. package/dist/backend/llvm/map-number-lookup.test.js +70 -2
  136. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  137. package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
  138. package/dist/backend/llvm/map-read-lifetimes.js +136 -6
  139. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  140. package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
  141. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  142. package/dist/backend/llvm/nullable-unions.d.ts +5 -0
  143. package/dist/backend/llvm/nullable-unions.js +29 -2
  144. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  145. package/dist/backend/llvm/nullable-unions.test.js +25 -1
  146. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  147. package/dist/backend/llvm/publish.js +3 -3
  148. package/dist/backend/llvm/publish.js.map +1 -1
  149. package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
  150. package/dist/backend/llvm/record-union-keys.test.js +161 -0
  151. package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
  152. package/dist/backend/llvm/reference-effects.js +3 -0
  153. package/dist/backend/llvm/reference-effects.js.map +1 -1
  154. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  155. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  156. package/dist/backend/llvm/shapes.d.ts +4 -5
  157. package/dist/backend/llvm/shapes.js +106 -58
  158. package/dist/backend/llvm/shapes.js.map +1 -1
  159. package/dist/backend/llvm/shapes.test.js +14 -2
  160. package/dist/backend/llvm/shapes.test.js.map +1 -1
  161. package/dist/backend/llvm/speculative-integers.d.ts +50 -3
  162. package/dist/backend/llvm/speculative-integers.js +411 -24
  163. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  164. package/dist/backend/llvm/speculative-integers.test.js +103 -1
  165. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  166. package/dist/backend/llvm/split.d.ts +10 -1
  167. package/dist/backend/llvm/split.js +243 -59
  168. package/dist/backend/llvm/split.js.map +1 -1
  169. package/dist/backend/llvm/split.test.js +92 -13
  170. package/dist/backend/llvm/split.test.js.map +1 -1
  171. package/dist/backend/llvm/stack-captures.js +1 -5
  172. package/dist/backend/llvm/stack-captures.js.map +1 -1
  173. package/dist/backend/llvm/stack-objects.test.js +3 -2
  174. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  175. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  176. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  177. package/dist/backend/llvm/string-reads.d.ts +13 -0
  178. package/dist/backend/llvm/string-reads.js +22 -0
  179. package/dist/backend/llvm/string-reads.js.map +1 -1
  180. package/dist/backend/llvm/string-slices.d.ts +36 -2
  181. package/dist/backend/llvm/string-slices.js +308 -12
  182. package/dist/backend/llvm/string-slices.js.map +1 -1
  183. package/dist/backend/llvm/string-slices.test.js +182 -3
  184. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  185. package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
  186. package/dist/backend/llvm/string-unit-versions.js +191 -0
  187. package/dist/backend/llvm/string-unit-versions.js.map +1 -0
  188. package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
  189. package/dist/backend/llvm/string-unit-versions.test.js +117 -0
  190. package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
  191. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
  192. package/dist/backend/llvm/test-boxed-unions.js +24 -8
  193. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  194. package/dist/backend/llvm/union-repr.d.ts +4 -3
  195. package/dist/backend/llvm/union-repr.js +6 -5
  196. package/dist/backend/llvm/union-repr.js.map +1 -1
  197. package/dist/backend/llvm/unwind-abi.d.ts +52 -0
  198. package/dist/backend/llvm/unwind-abi.js +498 -0
  199. package/dist/backend/llvm/unwind-abi.js.map +1 -0
  200. package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
  201. package/dist/backend/llvm/unwind-abi.test.js +255 -0
  202. package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
  203. package/dist/backend/llvm/walkers.js +13 -0
  204. package/dist/backend/llvm/walkers.js.map +1 -1
  205. package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
  206. package/dist/backend/llvm/wrapping-sums.js +31 -14
  207. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  208. package/dist/backend/loop-polls.d.ts +6 -0
  209. package/dist/backend/loop-polls.js +24 -0
  210. package/dist/backend/loop-polls.js.map +1 -1
  211. package/dist/backend/may-throw.js +8 -8
  212. package/dist/backend/may-throw.js.map +1 -1
  213. package/dist/backend/native/contracts.d.ts +12 -2
  214. package/dist/backend/native/executable.js +48 -6
  215. package/dist/backend/native/executable.js.map +1 -1
  216. package/dist/backend/native/library.js +4 -3
  217. package/dist/backend/native/library.js.map +1 -1
  218. package/dist/backend/native/program-shards.d.ts +2 -2
  219. package/dist/backend/native/program-shards.js +2 -2
  220. package/dist/backend/native/program-shards.js.map +1 -1
  221. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  222. package/dist/backend/native/runtime-inputs.js +4 -1
  223. package/dist/backend/native/runtime-inputs.js.map +1 -1
  224. package/dist/backend/native/vendor.d.ts +1 -1
  225. package/dist/backend/native/vendor.js +1 -1
  226. package/dist/backend/native/vendor.js.map +1 -1
  227. package/dist/backend/native-codegen-core.d.ts +5 -3
  228. package/dist/backend/native-codegen-core.js +13 -6
  229. package/dist/backend/native-codegen-core.js.map +1 -1
  230. package/dist/backend/native-codegen.d.ts +3 -1
  231. package/dist/backend/native-codegen.js +4 -3
  232. package/dist/backend/native-codegen.js.map +1 -1
  233. package/dist/backend/native-codegen.test.js +6 -4
  234. package/dist/backend/native-codegen.test.js.map +1 -1
  235. package/dist/backend/native-link-info-core.d.ts +8 -0
  236. package/dist/backend/native-link-info-core.js.map +1 -1
  237. package/dist/backend/native-profile.d.ts +14 -0
  238. package/dist/backend/native-profile.js +28 -0
  239. package/dist/backend/native-profile.js.map +1 -1
  240. package/dist/backend/native-profile.test.js +8 -1
  241. package/dist/backend/native-profile.test.js.map +1 -1
  242. package/dist/backend/native-toolchain.test.js +11 -11
  243. package/dist/backend/native-toolchain.test.js.map +1 -1
  244. package/dist/backend/runtime-abi.d.ts +2 -2
  245. package/dist/backend/runtime-abi.js +2 -2
  246. package/dist/backend/runtime-pack-core.d.ts +3 -1
  247. package/dist/backend/runtime-pack-core.js +2 -0
  248. package/dist/backend/runtime-pack-core.js.map +1 -1
  249. package/dist/backend/runtime-pack-native.d.ts +17 -5
  250. package/dist/backend/runtime-pack-native.js +186 -14
  251. package/dist/backend/runtime-pack-native.js.map +1 -1
  252. package/dist/backend/runtime-pack-native.test.js +160 -3
  253. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  254. package/dist/backend/runtime-pack-targets.test.js +2 -1
  255. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  256. package/dist/backend/runtime-pack.test.js +2 -1
  257. package/dist/backend/runtime-pack.test.js.map +1 -1
  258. package/dist/backend/target-cpu.d.ts +26 -0
  259. package/dist/backend/target-cpu.js +98 -0
  260. package/dist/backend/target-cpu.js.map +1 -0
  261. package/dist/backend/target-cpu.test.d.ts +1 -0
  262. package/dist/backend/target-cpu.test.js +38 -0
  263. package/dist/backend/target-cpu.test.js.map +1 -0
  264. package/dist/backend/vendor-archives.d.ts +4 -1
  265. package/dist/backend/vendor-archives.js +78 -4
  266. package/dist/backend/vendor-archives.js.map +1 -1
  267. package/dist/backend/vendor-inputs.d.ts +3 -1
  268. package/dist/backend/vendor-inputs.js +3 -1
  269. package/dist/backend/vendor-inputs.js.map +1 -1
  270. package/dist/backend/warm-cache.js +1 -0
  271. package/dist/backend/warm-cache.js.map +1 -1
  272. package/dist/cli/command.js +98 -12
  273. package/dist/cli/command.js.map +1 -1
  274. package/dist/cli/usage.d.ts +25 -1
  275. package/dist/cli/usage.js +40 -3
  276. package/dist/cli/usage.js.map +1 -1
  277. package/dist/compat/fetch-profile.d.ts +15 -6
  278. package/dist/compat/fetch-profile.js +519 -498
  279. package/dist/compat/fetch-profile.js.map +1 -1
  280. package/dist/compile-types.d.ts +14 -0
  281. package/dist/contracts/int32-elements.js +2 -1
  282. package/dist/contracts/int32-elements.js.map +1 -1
  283. package/dist/coverage/report.d.ts +14 -3
  284. package/dist/coverage/report.js +216 -0
  285. package/dist/coverage/report.js.map +1 -1
  286. package/dist/coverage/surface-manifest.js +25 -25
  287. package/dist/coverage/surface-manifest.js.map +1 -1
  288. package/dist/coverage/verdict-cache.d.ts +2 -0
  289. package/dist/coverage/verdict-cache.js +10 -1
  290. package/dist/coverage/verdict-cache.js.map +1 -1
  291. package/dist/diagnostics/diagnostic.d.ts +19 -0
  292. package/dist/diagnostics/diagnostic.js +53 -2
  293. package/dist/diagnostics/diagnostic.js.map +1 -1
  294. package/dist/diagnostics/envelope.d.ts +54 -0
  295. package/dist/diagnostics/envelope.js +7 -1
  296. package/dist/diagnostics/envelope.js.map +1 -1
  297. package/dist/diagnostics/render.d.ts +7 -0
  298. package/dist/diagnostics/render.js +15 -4
  299. package/dist/diagnostics/render.js.map +1 -1
  300. package/dist/executable/executable-cache.d.ts +6 -0
  301. package/dist/executable/executable-cache.js +5 -0
  302. package/dist/executable/executable-cache.js.map +1 -1
  303. package/dist/executable/executable-cache.test.js +3 -0
  304. package/dist/executable/executable-cache.test.js.map +1 -1
  305. package/dist/executable/prepare.js +5 -1
  306. package/dist/executable/prepare.js.map +1 -1
  307. package/dist/frontend/analysis.js +26 -2
  308. package/dist/frontend/analysis.js.map +1 -1
  309. package/dist/frontend/decl-projection.js +105 -10
  310. package/dist/frontend/decl-projection.js.map +1 -1
  311. package/dist/frontend/fork-target.js +67 -1
  312. package/dist/frontend/fork-target.js.map +1 -1
  313. package/dist/frontend/fork-target.test.js +43 -0
  314. package/dist/frontend/fork-target.test.js.map +1 -1
  315. package/dist/frontend/input-tracker.d.ts +4 -1
  316. package/dist/frontend/input-tracker.js +42 -4
  317. package/dist/frontend/input-tracker.js.map +1 -1
  318. package/dist/frontend/input-tracker.test.js +45 -0
  319. package/dist/frontend/input-tracker.test.js.map +1 -1
  320. package/dist/frontend/lowering/abstract-equality.js +38 -1
  321. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  322. package/dist/frontend/lowering/argument-counts.d.ts +36 -0
  323. package/dist/frontend/lowering/argument-counts.js +201 -0
  324. package/dist/frontend/lowering/argument-counts.js.map +1 -0
  325. package/dist/frontend/lowering/array-values.d.ts +27 -0
  326. package/dist/frontend/lowering/array-values.js +112 -0
  327. package/dist/frontend/lowering/array-values.js.map +1 -1
  328. package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
  329. package/dist/frontend/lowering/binding-analysis.js +9 -3
  330. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  331. package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
  332. package/dist/frontend/lowering/builtin-namespaces.js +238 -0
  333. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
  334. package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
  335. package/dist/frontend/lowering/builtins/async-context.js +62 -3
  336. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  337. package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
  338. package/dist/frontend/lowering/builtins/compression.js +86 -5
  339. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  340. package/dist/frontend/lowering/builtins/crypto.js +3 -1
  341. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  342. package/dist/frontend/lowering/builtins/date-classes.js +17 -1
  343. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
  344. package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
  345. package/dist/frontend/lowering/builtins/dates.js +163 -9
  346. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/filesystem-calls.js +29 -4
  348. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  349. package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
  350. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  351. package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
  352. package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
  353. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
  355. package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
  356. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  357. package/dist/frontend/lowering/builtins/json.d.ts +4 -1
  358. package/dist/frontend/lowering/builtins/json.js +9 -3
  359. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  360. package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
  361. package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
  362. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  363. package/dist/frontend/lowering/builtins/module-calls.js +6 -3
  364. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  365. package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
  366. package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
  367. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  368. package/dist/frontend/lowering/builtins/promises.d.ts +1 -1
  369. package/dist/frontend/lowering/builtins/promises.js +293 -139
  370. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  372. package/dist/frontend/lowering/builtins/readline.js +22 -11
  373. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  374. package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
  375. package/dist/frontend/lowering/builtins/reflection.js +41 -1
  376. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  377. package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
  378. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  379. package/dist/frontend/lowering/builtins/webassembly.js +4 -1
  380. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  381. package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
  382. package/dist/frontend/lowering/builtins/x509.js +431 -0
  383. package/dist/frontend/lowering/builtins/x509.js.map +1 -0
  384. package/dist/frontend/lowering/call-arguments.js +44 -0
  385. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  386. package/dist/frontend/lowering/call-signatures.js +1 -2
  387. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  388. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  389. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  390. package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
  391. package/dist/frontend/lowering/cjs-inline-require.js +308 -5
  392. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  393. package/dist/frontend/lowering/class-attributes.d.ts +7 -0
  394. package/dist/frontend/lowering/class-attributes.js +52 -10
  395. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  396. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +23 -0
  397. package/dist/frontend/lowering/class-dynamic-dispatch.js +288 -9
  398. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  399. package/dist/frontend/lowering/class-method-mutations.js +97 -26
  400. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  401. package/dist/frontend/lowering/class-method-values.js +71 -1
  402. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  403. package/dist/frontend/lowering/class-protocols.d.ts +25 -0
  404. package/dist/frontend/lowering/class-protocols.js +183 -1
  405. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  406. package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
  407. package/dist/frontend/lowering/class-prototypes.js +83 -2
  408. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  409. package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
  410. package/dist/frontend/lowering/class-to-primitive.js +79 -7
  411. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  412. package/dist/frontend/lowering/coercions/state.d.ts +1 -0
  413. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  414. package/dist/frontend/lowering/coercions/structural.js +89 -10
  415. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  416. package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
  417. package/dist/frontend/lowering/coercions/unions.js +13 -6
  418. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  419. package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
  420. package/dist/frontend/lowering/completion-callbacks.js +146 -0
  421. package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
  422. package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
  423. package/dist/frontend/lowering/containers/array-callbacks.js +58 -21
  424. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  425. package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
  426. package/dist/frontend/lowering/containers/array-construction.js +107 -9
  427. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  428. package/dist/frontend/lowering/containers/array-methods.js +96 -8
  429. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  430. package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
  431. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  432. package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
  433. package/dist/frontend/lowering/containers/bytes.js +453 -45
  434. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  435. package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
  436. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  437. package/dist/frontend/lowering/containers/collection-methods.js +12 -0
  438. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  439. package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
  440. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  441. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
  442. package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
  443. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  444. package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
  445. package/dist/frontend/lowering/containers/replacer-params.js +294 -0
  446. package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
  447. package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
  448. package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
  449. package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
  450. package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
  451. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  452. package/dist/frontend/lowering/containers/string-replacement.js +7 -3
  453. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  454. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
  455. package/dist/frontend/lowering/cycle-initialization.js +4 -1
  456. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  457. package/dist/frontend/lowering/date-values.d.ts +14 -0
  458. package/dist/frontend/lowering/date-values.js +254 -0
  459. package/dist/frontend/lowering/date-values.js.map +1 -0
  460. package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
  461. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  462. package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
  463. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  464. package/dist/frontend/lowering/dispatch-sites.js +1 -0
  465. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  466. package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
  467. package/dist/frontend/lowering/expressions/array-literals.js +125 -26
  468. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  469. package/dist/frontend/lowering/expressions/binary.js +102 -26
  470. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  471. package/dist/frontend/lowering/expressions/element-access.js +129 -6
  472. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  473. package/dist/frontend/lowering/expressions/identifiers.js +66 -4
  474. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  475. package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
  476. package/dist/frontend/lowering/expressions/narrowing.js +8 -1
  477. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  478. package/dist/frontend/lowering/expressions/object-literals.js +8 -2
  479. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  480. package/dist/frontend/lowering/expressions/property-access.js +121 -34
  481. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  482. package/dist/frontend/lowering/expressions/relational.js +76 -11
  483. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  484. package/dist/frontend/lowering/expressions/typeof.js +12 -1
  485. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  486. package/dist/frontend/lowering/expressions/updates.js +37 -11
  487. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  488. package/dist/frontend/lowering/f64-handles.d.ts +8 -0
  489. package/dist/frontend/lowering/f64-handles.js +16 -0
  490. package/dist/frontend/lowering/f64-handles.js.map +1 -0
  491. package/dist/frontend/lowering/frozen-records.d.ts +5 -0
  492. package/dist/frontend/lowering/frozen-records.js +12 -4
  493. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  494. package/dist/frontend/lowering/function-context.d.ts +3 -0
  495. package/dist/frontend/lowering/function-context.js.map +1 -1
  496. package/dist/frontend/lowering/function-returns.js +30 -0
  497. package/dist/frontend/lowering/function-returns.js.map +1 -1
  498. package/dist/frontend/lowering/generic-functions.js +17 -6
  499. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  500. package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
  501. package/dist/frontend/lowering/indexed-unions.js +401 -0
  502. package/dist/frontend/lowering/indexed-unions.js.map +1 -0
  503. package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
  504. package/dist/frontend/lowering/instantiation-path.js.map +1 -1
  505. package/dist/frontend/lowering/instantiation-path.test.js +6 -4
  506. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
  507. package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
  508. package/dist/frontend/lowering/iterator-adapters.js +26 -33
  509. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  510. package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
  511. package/dist/frontend/lowering/js-collection-types.js +490 -0
  512. package/dist/frontend/lowering/js-collection-types.js.map +1 -0
  513. package/dist/frontend/lowering/key-order-witness.js +210 -32
  514. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  515. package/dist/frontend/lowering/key-order-witness.test.js +104 -4
  516. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  517. package/dist/frontend/lowering/lib-boundary.js +2 -2
  518. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  519. package/dist/frontend/lowering/lower-assert.d.ts +14 -0
  520. package/dist/frontend/lowering/lower-assert.js +298 -29
  521. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  522. package/dist/frontend/lowering/lower-builtin-values.js +3 -3
  523. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  524. package/dist/frontend/lowering/lower-calls.js +116 -10
  525. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  526. package/dist/frontend/lowering/lower-classes.d.ts +59 -7
  527. package/dist/frontend/lowering/lower-classes.js +668 -222
  528. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  529. package/dist/frontend/lowering/lower-console.js +2 -1
  530. package/dist/frontend/lowering/lower-console.js.map +1 -1
  531. package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
  532. package/dist/frontend/lowering/lower-exprs.js +254 -3
  533. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  534. package/dist/frontend/lowering/lower-functions.js +7 -0
  535. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  536. package/dist/frontend/lowering/lower-generators.js +5 -4
  537. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  538. package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
  539. package/dist/frontend/lowering/lower-inspect.js +299 -57
  540. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  541. package/dist/frontend/lowering/lower-modules.js +49 -22
  542. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  543. package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
  544. package/dist/frontend/lowering/lower-namespaces.js +44 -1
  545. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  546. package/dist/frontend/lowering/lower-node-module.js +1 -1
  547. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  548. package/dist/frontend/lowering/lower-server.js +126 -32
  549. package/dist/frontend/lowering/lower-server.js.map +1 -1
  550. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
  551. package/dist/frontend/lowering/lower-stdlib.js +51 -37
  552. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  553. package/dist/frontend/lowering/lower-stmts.js +393 -79
  554. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  555. package/dist/frontend/lowering/lower-stream.js +515 -121
  556. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  557. package/dist/frontend/lowering/lowerer.d.ts +82 -12
  558. package/dist/frontend/lowering/lowerer.js +317 -44
  559. package/dist/frontend/lowering/lowerer.js.map +1 -1
  560. package/dist/frontend/lowering/lowerer.test.js +1 -1
  561. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  562. package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
  563. package/dist/frontend/lowering/module-namespace-elements.js +118 -1
  564. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  565. package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
  566. package/dist/frontend/lowering/object-factory-new.js +20 -6
  567. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  568. package/dist/frontend/lowering/overload-choice.d.ts +33 -0
  569. package/dist/frontend/lowering/overload-choice.js +190 -0
  570. package/dist/frontend/lowering/overload-choice.js.map +1 -0
  571. package/dist/frontend/lowering/private-brands.d.ts +5 -0
  572. package/dist/frontend/lowering/private-brands.js +39 -0
  573. package/dist/frontend/lowering/private-brands.js.map +1 -1
  574. package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
  575. package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
  576. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  577. package/dist/frontend/lowering/sanitize-class-types.js +2 -0
  578. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  579. package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
  580. package/dist/frontend/lowering/site-dependencies.js +0 -15
  581. package/dist/frontend/lowering/site-dependencies.js.map +1 -1
  582. package/dist/frontend/lowering/site-dependencies.test.js +7 -5
  583. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
  584. package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
  585. package/dist/frontend/lowering/string-index-bounds.js +21 -7
  586. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  587. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  588. package/dist/frontend/lowering/surfaces.js +1630 -1540
  589. package/dist/frontend/lowering/surfaces.js.map +1 -1
  590. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  591. package/dist/frontend/lowering/symbol-fields.js +45 -2
  592. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  593. package/dist/frontend/lowering/union-narrow.d.ts +5 -2
  594. package/dist/frontend/lowering/union-narrow.js +6 -3
  595. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  596. package/dist/frontend/lowering/union-narrow.test.js +10 -0
  597. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  598. package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
  599. package/dist/frontend/npm-static-namespace-defaults.js +163 -0
  600. package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
  601. package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
  602. package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
  603. package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
  604. package/dist/frontend/npm-static-prune.js +152 -111
  605. package/dist/frontend/npm-static-prune.js.map +1 -1
  606. package/dist/frontend/npm-static.js +35 -32
  607. package/dist/frontend/npm-static.js.map +1 -1
  608. package/dist/frontend/package-shims.d.ts +7 -4
  609. package/dist/frontend/package-shims.js +39 -40
  610. package/dist/frontend/package-shims.js.map +1 -1
  611. package/dist/frontend/pipeline-native.d.ts +2 -2
  612. package/dist/frontend/pipeline-native.js +2 -2
  613. package/dist/frontend/pipeline-native.js.map +1 -1
  614. package/dist/frontend/pipeline.d.ts +19 -2
  615. package/dist/frontend/pipeline.js +103 -12
  616. package/dist/frontend/pipeline.js.map +1 -1
  617. package/dist/frontend/program-analysis.d.ts +7 -1
  618. package/dist/frontend/program-analysis.js +8 -0
  619. package/dist/frontend/program-analysis.js.map +1 -1
  620. package/dist/frontend/program.d.ts +28 -5
  621. package/dist/frontend/program.js +422 -76
  622. package/dist/frontend/program.js.map +1 -1
  623. package/dist/frontend/resolve.d.ts +2 -0
  624. package/dist/frontend/resolve.js +5 -0
  625. package/dist/frontend/resolve.js.map +1 -1
  626. package/dist/frontend/services.d.ts +3 -0
  627. package/dist/frontend/services.js +31 -4
  628. package/dist/frontend/services.js.map +1 -1
  629. package/dist/frontend/shape-inference/analyze.d.ts +93 -0
  630. package/dist/frontend/shape-inference/analyze.js +3138 -0
  631. package/dist/frontend/shape-inference/analyze.js.map +1 -0
  632. package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
  633. package/dist/frontend/shape-inference/constant-graphs.js +357 -0
  634. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
  635. package/dist/frontend/shape-inference/domain.d.ts +32 -0
  636. package/dist/frontend/shape-inference/domain.js +104 -0
  637. package/dist/frontend/shape-inference/domain.js.map +1 -0
  638. package/dist/frontend/shape-inference/index.d.ts +7 -0
  639. package/dist/frontend/shape-inference/index.js +19 -0
  640. package/dist/frontend/shape-inference/index.js.map +1 -0
  641. package/dist/frontend/shape-inference/report.d.ts +21 -0
  642. package/dist/frontend/shape-inference/report.js +348 -0
  643. package/dist/frontend/shape-inference/report.js.map +1 -0
  644. package/dist/frontend/token-equivalence.d.ts +6 -0
  645. package/dist/frontend/token-equivalence.js +66 -9
  646. package/dist/frontend/token-equivalence.js.map +1 -1
  647. package/dist/frontend/token-equivalence.test.js +33 -1
  648. package/dist/frontend/token-equivalence.test.js.map +1 -1
  649. package/dist/frontend/ts7/checker-features.d.ts +15 -0
  650. package/dist/frontend/ts7/checker-features.js +45 -0
  651. package/dist/frontend/ts7/checker-features.js.map +1 -0
  652. package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
  653. package/dist/frontend/ts7/checker-features.test.js +40 -0
  654. package/dist/frontend/ts7/checker-features.test.js.map +1 -0
  655. package/dist/frontend/ts7/checker-server.d.ts +19 -0
  656. package/dist/frontend/ts7/checker-server.js +46 -0
  657. package/dist/frontend/ts7/checker-server.js.map +1 -0
  658. package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
  659. package/dist/frontend/ts7/checker-server.test.js +38 -0
  660. package/dist/frontend/ts7/checker-server.test.js.map +1 -0
  661. package/dist/frontend/ts7/lib-diagnostics.js +39 -13
  662. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  663. package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
  664. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  665. package/dist/frontend/ts7/native-api.d.ts +1 -0
  666. package/dist/frontend/ts7/native-api.js +25 -2
  667. package/dist/frontend/ts7/native-api.js.map +1 -1
  668. package/dist/frontend/ts7/native-process.d.ts +9 -2
  669. package/dist/frontend/ts7/native-process.js +22 -4
  670. package/dist/frontend/ts7/native-process.js.map +1 -1
  671. package/dist/frontend/ts7/program-host.d.ts +11 -0
  672. package/dist/frontend/ts7/program-host.js +36 -22
  673. package/dist/frontend/ts7/program-host.js.map +1 -1
  674. package/dist/frontend/ts7/semantic-json.d.ts +9 -0
  675. package/dist/frontend/ts7/semantic-json.js +25 -5
  676. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  677. package/dist/frontend/ts7/semantic-model.d.ts +3 -0
  678. package/dist/frontend/ts7/semantic-model.js +8 -1
  679. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  680. package/dist/frontend/ts7/semantic-model.test.js +6 -1
  681. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  682. package/dist/frontend/ts7/semantic-types.d.ts +1 -1
  683. package/dist/frontend/ts7/semantic-types.js +1 -1
  684. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  685. package/dist/frontend/ts7/source-parser.js +3 -1
  686. package/dist/frontend/ts7/source-parser.js.map +1 -1
  687. package/dist/frontend/tsc-codes.js +10 -0
  688. package/dist/frontend/tsc-codes.js.map +1 -1
  689. package/dist/frontend/type-mapper.d.ts +18 -6
  690. package/dist/frontend/type-mapper.js +205 -44
  691. package/dist/frontend/type-mapper.js.map +1 -1
  692. package/dist/index.d.ts +44 -3
  693. package/dist/index.js +39 -8
  694. package/dist/index.js.map +1 -1
  695. package/dist/ir/builtin-effects.js +37 -0
  696. package/dist/ir/builtin-effects.js.map +1 -1
  697. package/dist/ir/builtin-signatures.d.ts +7 -2
  698. package/dist/ir/builtin-signatures.js +5104 -4894
  699. package/dist/ir/builtin-signatures.js.map +1 -1
  700. package/dist/ir/callback-specialization.d.ts +4 -2
  701. package/dist/ir/callback-specialization.js +24 -9
  702. package/dist/ir/callback-specialization.js.map +1 -1
  703. package/dist/ir/capture-values.js +4 -2
  704. package/dist/ir/capture-values.js.map +1 -1
  705. package/dist/ir/char-unit-locals.d.ts +12 -2
  706. package/dist/ir/char-unit-locals.js +400 -58
  707. package/dist/ir/char-unit-locals.js.map +1 -1
  708. package/dist/ir/char-unit-locals.test.js +111 -0
  709. package/dist/ir/char-unit-locals.test.js.map +1 -1
  710. package/dist/ir/constant-globals.js +18 -4
  711. package/dist/ir/constant-globals.js.map +1 -1
  712. package/dist/ir/expression-inlining.d.ts +15 -0
  713. package/dist/ir/expression-inlining.js +166 -0
  714. package/dist/ir/expression-inlining.js.map +1 -0
  715. package/dist/ir/expression-inlining.test.d.ts +1 -0
  716. package/dist/ir/expression-inlining.test.js +123 -0
  717. package/dist/ir/expression-inlining.test.js.map +1 -0
  718. package/dist/ir/function-references.js +2 -0
  719. package/dist/ir/function-references.js.map +1 -1
  720. package/dist/ir/function-references.test.js +6 -0
  721. package/dist/ir/function-references.test.js.map +1 -1
  722. package/dist/ir/int32-arrays.d.ts +27 -6
  723. package/dist/ir/int32-arrays.js +106 -18
  724. package/dist/ir/int32-arrays.js.map +1 -1
  725. package/dist/ir/int32-slots.d.ts +26 -1
  726. package/dist/ir/int32-slots.js +291 -5
  727. package/dist/ir/int32-slots.js.map +1 -1
  728. package/dist/ir/int32-slots.test.js +38 -0
  729. package/dist/ir/int32-slots.test.js.map +1 -1
  730. package/dist/ir/integer-loop-facts.d.ts +5 -0
  731. package/dist/ir/integer-loop-facts.js +90 -1
  732. package/dist/ir/integer-loop-facts.js.map +1 -1
  733. package/dist/ir/integer-loops.d.ts +14 -1
  734. package/dist/ir/integer-loops.js +107 -11
  735. package/dist/ir/integer-loops.js.map +1 -1
  736. package/dist/ir/integer-loops.test.js +70 -0
  737. package/dist/ir/integer-loops.test.js.map +1 -1
  738. package/dist/ir/integer-ranges.js +18 -2
  739. package/dist/ir/integer-ranges.js.map +1 -1
  740. package/dist/ir/integer-ranges.test.js +64 -4
  741. package/dist/ir/integer-ranges.test.js.map +1 -1
  742. package/dist/ir/ir.d.ts +63 -11
  743. package/dist/ir/ir.js +47 -7
  744. package/dist/ir/ir.js.map +1 -1
  745. package/dist/ir/ir.test.js +2 -1
  746. package/dist/ir/ir.test.js.map +1 -1
  747. package/dist/ir/js-ic.d.ts +10 -3
  748. package/dist/ir/js-ic.js +14 -2
  749. package/dist/ir/js-ic.js.map +1 -1
  750. package/dist/ir/js-ic.test.js +11 -0
  751. package/dist/ir/js-ic.test.js.map +1 -1
  752. package/dist/ir/node-index.d.ts +7 -0
  753. package/dist/ir/node-index.js +32 -0
  754. package/dist/ir/node-index.js.map +1 -1
  755. package/dist/ir/receiver-readers.d.ts +6 -1
  756. package/dist/ir/receiver-readers.js +53 -28
  757. package/dist/ir/receiver-readers.js.map +1 -1
  758. package/dist/ir/row-pairs.d.ts +15 -0
  759. package/dist/ir/row-pairs.js +373 -0
  760. package/dist/ir/row-pairs.js.map +1 -0
  761. package/dist/ir/row-pairs.test.d.ts +1 -0
  762. package/dist/ir/row-pairs.test.js +129 -0
  763. package/dist/ir/row-pairs.test.js.map +1 -0
  764. package/dist/ir/runtime-features.d.ts +17 -4
  765. package/dist/ir/runtime-features.js +94 -13
  766. package/dist/ir/runtime-features.js.map +1 -1
  767. package/dist/ir/scalar-records.d.ts +15 -0
  768. package/dist/ir/scalar-records.js +301 -1
  769. package/dist/ir/scalar-records.js.map +1 -1
  770. package/dist/ir/scalar-records.test.js +181 -1
  771. package/dist/ir/scalar-records.test.js.map +1 -1
  772. package/dist/ir/self-captures.js +8 -0
  773. package/dist/ir/self-captures.js.map +1 -1
  774. package/dist/ir/validate.js +78 -28
  775. package/dist/ir/validate.js.map +1 -1
  776. package/dist/library/fence-eval.js +4 -4
  777. package/dist/library/fence-eval.js.map +1 -1
  778. package/dist/library/ir-policy.js +5 -0
  779. package/dist/library/ir-policy.js.map +1 -1
  780. package/dist/library/library-cache.d.ts +1 -0
  781. package/dist/library/library-cache.js +1 -0
  782. package/dist/library/library-cache.js.map +1 -1
  783. package/dist/library/library-cache.test.js +13 -0
  784. package/dist/library/library-cache.test.js.map +1 -1
  785. package/dist/native/cache.d.ts +5 -1
  786. package/dist/native/cache.js +15 -3
  787. package/dist/native/cache.js.map +1 -1
  788. package/dist/native/cli.js +6 -0
  789. package/dist/native/cli.js.map +1 -1
  790. package/dist/native/compiler.d.ts +3 -0
  791. package/dist/native/compiler.js +72 -26
  792. package/dist/native/compiler.js.map +1 -1
  793. package/dist/native/compiler.test.js +87 -2
  794. package/dist/native/compiler.test.js.map +1 -1
  795. package/dist/native/executable-cache-open.test.d.ts +1 -0
  796. package/dist/native/executable-cache-open.test.js +80 -0
  797. package/dist/native/executable-cache-open.test.js.map +1 -0
  798. package/dist/native/executable-cache.d.ts +43 -3
  799. package/dist/native/executable-cache.js +177 -36
  800. package/dist/native/executable-cache.js.map +1 -1
  801. package/dist/native/executable-cache.test.js +103 -0
  802. package/dist/native/executable-cache.test.js.map +1 -1
  803. package/dist/native/prepare.d.ts +1 -1
  804. package/dist/native/prepare.js +49 -17
  805. package/dist/native/prepare.js.map +1 -1
  806. package/dist/native/prepare.test.js +69 -3
  807. package/dist/native/prepare.test.js.map +1 -1
  808. package/dist/native/sanitizer.d.ts +1 -1
  809. package/dist/native/sanitizer.js +17 -3
  810. package/dist/native/sanitizer.js.map +1 -1
  811. package/dist/native/sanitizer.test.js +4 -0
  812. package/dist/native/sanitizer.test.js.map +1 -1
  813. package/dist/node-islands/classify.d.ts +14 -0
  814. package/dist/node-islands/classify.js +114 -0
  815. package/dist/node-islands/classify.js.map +1 -0
  816. package/dist/node-islands/detect.d.ts +13 -0
  817. package/dist/node-islands/detect.js +805 -0
  818. package/dist/node-islands/detect.js.map +1 -0
  819. package/dist/node-islands/detect.test.d.ts +1 -0
  820. package/dist/node-islands/detect.test.js +136 -0
  821. package/dist/node-islands/detect.test.js.map +1 -0
  822. package/dist/node-islands/origin.d.ts +21 -0
  823. package/dist/node-islands/origin.js +60 -0
  824. package/dist/node-islands/origin.js.map +1 -0
  825. package/dist/node-islands/policy.d.ts +49 -0
  826. package/dist/node-islands/policy.js +130 -0
  827. package/dist/node-islands/policy.js.map +1 -0
  828. package/dist/node-islands/report.d.ts +22 -0
  829. package/dist/node-islands/report.js +326 -0
  830. package/dist/node-islands/report.js.map +1 -0
  831. package/dist/node-islands/report.test.d.ts +1 -0
  832. package/dist/node-islands/report.test.js +228 -0
  833. package/dist/node-islands/report.test.js.map +1 -0
  834. package/dist/node-islands/rules.d.ts +20 -0
  835. package/dist/node-islands/rules.js +91 -0
  836. package/dist/node-islands/rules.js.map +1 -0
  837. package/dist/node-islands/scan.d.ts +53 -0
  838. package/dist/node-islands/scan.js +104 -0
  839. package/dist/node-islands/scan.js.map +1 -0
  840. package/dist/node-islands/summary.d.ts +78 -0
  841. package/dist/node-islands/summary.js +26 -0
  842. package/dist/node-islands/summary.js.map +1 -0
  843. package/dist/project-config.d.ts +50 -0
  844. package/dist/project-config.js +372 -0
  845. package/dist/project-config.js.map +1 -0
  846. package/dist/project-config.test.d.ts +1 -0
  847. package/dist/project-config.test.js +154 -0
  848. package/dist/project-config.test.js.map +1 -0
  849. package/dist/wasm/discover.js +6 -31
  850. package/dist/wasm/discover.js.map +1 -1
  851. package/package.json +20 -20
  852. package/surface-manifest.json +21 -38
@@ -1,14 +1,17 @@
1
1
  import { keyedHelperName } from "./stable-names.js";
2
2
  import { perKeyOrder } from "./key-order-witness.js";
3
+ import { classPrototypeView } from "./class-prototypes.js";
3
4
  import { dynUndefinedExpr, boolLit, helperLoc, nodeThrowExpr, numLit, strLit, varRef, } from "../../ir/build.js";
4
5
  import { builtinClassDynValueOf, builtinClassKindOf } from "./builtins/builtin-class-dyn.js";
5
6
  import { InternalCompilerError } from "../../errors.js";
6
7
  import * as ts from "../ts7/adapter.js";
7
8
  import { unsignedHex } from "../../format-integer.js";
9
+ import { jsFuncNameOf } from "./lowerer.js";
8
10
  import { isJsSourceFile } from "../program.js";
9
- 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, shapeKeyOrders, typeKey, } from "../../ir/ir.js";
11
+ import { BOOL, CAUGHT, 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, shapeKeyOrders, typeKey, } from "../../ir/ir.js";
12
+ import { accessorCall, findMethodOn } from "./lower-classes.js";
10
13
  import { isSafeToDiscard, isSafeToRepeat } from "./expressions/evaluation-safety.js";
11
- import { symbolFieldDisplayName } from "./symbol-fields.js";
14
+ import { symbolFieldDisplayName, TO_STRING_TAG_FIELD } from "./symbol-fields.js";
12
15
  import { eventTargetRootOf } from "./lower-event-target.js";
13
16
  import { dateRootOf } from "./builtins/date-classes.js";
14
17
  import { lowerSystemErrorMap } from "./lower-system-errors.js";
@@ -646,11 +649,7 @@ function inspectSupport(lowerer, t, visiting, out) {
646
649
  case "array":
647
650
  return inspectSupport(lowerer, t.elem, visiting, out);
648
651
  case "bytes":
649
- // A Uint8Array and a Buffer share the u8 representation and print
650
- // differently; the other element kinds are never Buffers.
651
- return t.elem === "u8"
652
- ? "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)"
653
- : null;
652
+ return null;
654
653
  case "record": {
655
654
  if (visiting.has(t.shapeId)) {
656
655
  out.recursive = true;
@@ -786,7 +785,10 @@ function inspectSupport(lowerer, t, visiting, out) {
786
785
  }
787
786
  // Generator objects print through their checked capsule: Node's
788
787
  // `Object [Generator] {}`, or the tag of the iterator they implement.
788
+ // URLs and URLSearchParams print through their handles.
789
789
  case "generator":
790
+ case "url":
791
+ case "searchParams":
790
792
  return null;
791
793
  default:
792
794
  return `'${lowerer.fmt(t)}' values have no inspect lowering`;
@@ -819,6 +821,106 @@ function isNumberFlag(lowerer, t, v, loc) {
819
821
  * with the depth budget `depth` — a direct scalar libCall or a call of
820
822
  * the interned per-type helper. */
821
823
  export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
824
+ const render = inspectExprBody(lowerer, t, value, recurse, depth, loc);
825
+ // A top-level render through emitted helpers that can reach a refusal
826
+ // (the 'not supported yet' Error of insp.dyn) unwinds the inspector to
827
+ // its state before the render on every exit: the Error propagates out of
828
+ // the helpers before they close their frames.
829
+ if (render.kind !== "call" ||
830
+ recurse.kind !== "numLit" ||
831
+ recurse.value !== 0 ||
832
+ !inspectMayRefuse(lowerer, t))
833
+ return render;
834
+ return withInspectUnwind(lowerer, render, t, loc);
835
+ }
836
+ /** A top-level helper render (`call helper(v, r, d)`) through a lifted
837
+ * wrapper that takes insp.mark first and runs insp.unwind however the
838
+ * render ends: `try { return helper(v, r, d); } finally { insp.unwind(); }`.
839
+ * A seqExpr cannot hold the try. */
840
+ function withInspectUnwind(lowerer, render, t, loc) {
841
+ const key = `unwind:${render.callee}`;
842
+ let name = lowerer.inspectHelpers.get(key);
843
+ if (name === undefined) {
844
+ name = keyedHelperName(lowerer, "%util.inspUnwound", key);
845
+ lowerer.inspectHelpers.set(key, name);
846
+ const params = [
847
+ { localId: "v.0", name: "v", type: t },
848
+ { localId: "r.0", name: "r", type: F64 },
849
+ { localId: "d.0", name: "d", type: F64 },
850
+ ];
851
+ const call = (fn) => ({
852
+ kind: "exprStmt",
853
+ expr: { kind: "libCall", fn, args: [], type: VOID, loc },
854
+ loc,
855
+ });
856
+ lowerer.liftedFns.push({
857
+ name,
858
+ params,
859
+ returnType: STRING,
860
+ locals: params.map((p) => ({ id: p.localId, name: p.name, type: p.type, mutable: false })),
861
+ body: [
862
+ call("insp.mark"),
863
+ {
864
+ kind: "tryCatch",
865
+ tryBody: [
866
+ {
867
+ kind: "return",
868
+ value: {
869
+ kind: "call",
870
+ callee: render.callee,
871
+ args: params.map((p) => varRef(p.localId, p.type, loc)),
872
+ type: STRING,
873
+ loc,
874
+ },
875
+ loc,
876
+ },
877
+ ],
878
+ catchBody: null,
879
+ catchLocalId: null,
880
+ finallyBody: [call("insp.unwind")],
881
+ loc,
882
+ },
883
+ ],
884
+ loc,
885
+ });
886
+ }
887
+ return { ...render, callee: name };
888
+ }
889
+ /** Whether inspecting a `t` value can end in an inspection refusal: `t`
890
+ * or a type reachable from it is a checked-dynamic value, a generator, a
891
+ * Dirent row or a class instance, or a record or array that can keep
892
+ * undeclared properties, which can render through a checked-dynamic view. */
893
+ function inspectMayRefuse(lowerer, t) {
894
+ const seen = new Set();
895
+ const walk = (u) => {
896
+ if (u.kind === "dyn" || u.kind === "generator")
897
+ return true;
898
+ if (u.kind === "record") {
899
+ const shape = lowerer.shapes.get(u.shapeId);
900
+ if (shape && isDirentShape(shape))
901
+ return true;
902
+ // The kept source properties render through the checked view (the
903
+ // helper's source gate).
904
+ if (recordMayKeepSource(lowerer, u))
905
+ return true;
906
+ }
907
+ // So do an array's properties besides its elements.
908
+ if (u.kind === "array" && lowerer.dynConvertible(u))
909
+ return true;
910
+ // A class instance can render through its checked-dynamic view, which
911
+ // a helper built earlier may only learn at the end of lowering
912
+ // (classInspectsAddedProperties).
913
+ if (u.kind === "object")
914
+ return true;
915
+ const k = typeKey(u);
916
+ if (seen.has(k))
917
+ return false;
918
+ seen.add(k);
919
+ return typeConstituents(lowerer, u).some(walk);
920
+ };
921
+ return walk(t);
922
+ }
923
+ function inspectExprBody(lowerer, t, value, recurse, depth, loc) {
822
924
  // A Dirent row renders through its dyn view: Node's `Dirent { ... }`
823
925
  // with the Symbol(type) key.
824
926
  if (t.kind === "record") {
@@ -866,9 +968,29 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
866
968
  loc,
867
969
  };
868
970
  }
869
- return { kind: "libCall", fn: "insp.buffer", args: [value], type: STRING, loc };
971
+ // A Uint8Array, a Buffer and a DataView share the u8 representation
972
+ // and print differently: the view's own flags pick.
973
+ return {
974
+ kind: "libCall",
975
+ fn: "insp.bytes",
976
+ args: [value, recurse, depth],
977
+ type: STRING,
978
+ loc,
979
+ };
870
980
  case "dyn":
871
981
  return { kind: "libCall", fn: "insp.dyn", args: [value, recurse, depth], type: STRING, loc };
982
+ // URLs and URLSearchParams render through their checked-dynamic
983
+ // handles: Node's `URL { href: ..., hash: ... }` and
984
+ // `URLSearchParams { 'a' => '1' }`.
985
+ case "url":
986
+ case "searchParams":
987
+ return {
988
+ kind: "libCall",
989
+ fn: "insp.dyn",
990
+ args: [lowerer.coerceToExpected(value, DYN), recurse, depth],
991
+ type: STRING,
992
+ loc,
993
+ };
872
994
  case "generator":
873
995
  return {
874
996
  kind: "libCall",
@@ -1695,8 +1817,68 @@ function inspectHelper(lowerer, t, loc) {
1695
1817
  // observable way — Node's inspect omits them entirely (verified),
1696
1818
  // so a class whose only fields are private prints as `C {}`.
1697
1819
  const visible = info.def.fields.filter((f) => isClassOwnEnumerableFieldName(f.name));
1820
+ // A Symbol.toStringTag getter (an own tag field is listed instead)
1821
+ // brackets the tag after the name, `Name [tag] {`, when it is a
1822
+ // nonempty string other than the name. A getter that throws shows
1823
+ // no tag, as in Node.
1824
+ const tagGetter = info.fields.has(TO_STRING_TAG_FIELD)
1825
+ ? null
1826
+ : findMethodOn(lowerer, info, "get:sym:toStringTag");
1827
+ let named = (plain) => strLit(plain, loc);
1828
+ if (tagGetter?.sig.ret.kind === "string") {
1829
+ const owner = tagGetter.declarer.def.name;
1830
+ locals.push({ id: "tag.0", name: "tag", type: STRING, mutable: true }, { id: "tagError.0", name: "tagError", type: CAUGHT, mutable: false });
1831
+ body.push({ kind: "varDecl", localId: "tag.0", init: strLit("", loc), loc }, {
1832
+ kind: "tryCatch",
1833
+ tryBody: [
1834
+ {
1835
+ kind: "assign",
1836
+ localId: "tag.0",
1837
+ value: accessorCall(lowerer, owner, "get:sym:toStringTag", lowerer.upcastTo(v(), owner), [], STRING, loc),
1838
+ loc,
1839
+ },
1840
+ ],
1841
+ catchBody: [],
1842
+ catchLocalId: "tagError.0",
1843
+ finallyBody: null,
1844
+ loc,
1845
+ });
1846
+ const tag = () => varRef("tag.0", STRING, loc);
1847
+ const shown = {
1848
+ kind: "logical",
1849
+ op: "&&",
1850
+ left: {
1851
+ kind: "strEq",
1852
+ negated: true,
1853
+ left: tag(),
1854
+ right: strLit("", loc),
1855
+ type: BOOL,
1856
+ loc,
1857
+ },
1858
+ right: {
1859
+ kind: "strEq",
1860
+ negated: true,
1861
+ left: tag(),
1862
+ right: strLit(display, loc),
1863
+ type: BOOL,
1864
+ loc,
1865
+ },
1866
+ type: BOOL,
1867
+ loc,
1868
+ };
1869
+ const head = concatAll([strLit(`${display === "" ? "Object" : display} [`, loc), tag(), strLit("]", loc)], loc);
1870
+ named = (plain, make) => ({
1871
+ kind: "ternary",
1872
+ cond: shown,
1873
+ then: make(head),
1874
+ else_: strLit(plain, loc),
1875
+ type: STRING,
1876
+ loc,
1877
+ });
1878
+ }
1879
+ const after = (text) => (head) => concatAll([head, strLit(text, loc)], loc);
1698
1880
  if (visible.length === 0) {
1699
- body = [ret(strLit(display === "" ? "{}" : `${display} {}`, loc))];
1881
+ body.push(ret(named(display === "" ? "{}" : `${display} {}`, after(" {}"))));
1700
1882
  break;
1701
1883
  }
1702
1884
  const get = (field, type) => ({
@@ -1707,7 +1889,15 @@ function inspectHelper(lowerer, t, loc) {
1707
1889
  type,
1708
1890
  loc,
1709
1891
  });
1710
- body = [depthGate(display === "" ? "[Object]" : `[${display}]`), ...begin()];
1892
+ body.push({
1893
+ kind: "if",
1894
+ cond: { kind: "bin", op: ">", left: r(), right: d(), type: BOOL, loc },
1895
+ then: [
1896
+ ret(named(display === "" ? "[Object]" : `[${display}]`, (head) => concatAll([strLit("[", loc), head, strLit("]", loc)], loc))),
1897
+ ],
1898
+ else_: null,
1899
+ loc,
1900
+ }, ...begin());
1711
1901
  // def.fields carries layout order: the base chain first, then own —
1712
1902
  // exactly the own-property insertion order of a constructor that
1713
1903
  // assigns in declaration order (SEMANTICS.md 36's stance). SYMBOL-
@@ -1728,7 +1918,7 @@ function inspectHelper(lowerer, t, loc) {
1728
1918
  const key = symNames.has(f.name) ? symbolFieldDisplayName(f.name) : inspectKey(f.name);
1729
1919
  body.push(entry(concatAll([strLit(`${key}: `, loc), child(f.type, get(f.name, f.type))], loc), boolLit(false, loc)));
1730
1920
  }
1731
- body.push(ret(end(strLit("", loc), strLit(display === "" ? "{" : `${display} {`, loc), strLit("}", loc), false, boolLit(false, loc))));
1921
+ body.push(ret(end(strLit("", loc), named(display === "" ? "{" : `${display} {`, after(" {")), strLit("}", loc), false, boolLit(false, loc))));
1732
1922
  break;
1733
1923
  }
1734
1924
  default:
@@ -1957,15 +2147,17 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
1957
2147
  lowerer.unsupported("SC1090", node, `${surface} of '${tname}' values (Buffer and the numeric typed arrays are the lowered byte renderings; DataView has none yet)`);
1958
2148
  }
1959
2149
  if (!isBufferTypeName(tname)) {
2150
+ // A u8 value the checker types as a Uint8Array may still hold a
2151
+ // Buffer, which Node prints as one: the view's flags pick.
1960
2152
  return {
1961
2153
  kind: "libCall",
1962
- fn: "insp.typedArray",
2154
+ fn: t.elem === "u8" ? "insp.bytes" : "insp.typedArray",
1963
2155
  args: [value, numLit(0, loc), numLit(2, loc)],
1964
2156
  type: STRING,
1965
2157
  loc,
1966
2158
  };
1967
2159
  }
1968
- return inspectExpr(lowerer, t, value, numLit(0, loc), numLit(2, loc), loc);
2160
+ return { kind: "libCall", fn: "insp.buffer", args: [value], type: STRING, loc };
1969
2161
  }
1970
2162
  if (t.kind === "void") {
1971
2163
  // Node prints "undefined" for a void call's result; a void expression
@@ -2076,35 +2268,49 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
2076
2268
  }
2077
2269
  /** A render under non-default breakLength/compact/sorted: the value is evaluated
2078
2270
  * first, the layout applies to this render only, and the defaults return
2079
- * afterwards. */
2080
- function withInspectLayout(lowerer, options, value, render, loc) {
2271
+ * however the render ends, an inspection refusal included. The render runs
2272
+ * in a lifted function, `(v) => { insp.layout(...); try { return render(v); }
2273
+ * finally { insp.layout(80, 3, false); } }`, since a seqExpr cannot hold the
2274
+ * try; `tag` names the render for the function's key. */
2275
+ function withInspectLayout(lowerer, options, value, tag, render, loc) {
2081
2276
  if (options.breakLength === 80 && options.compact === 3 && !options.sorted)
2082
2277
  return render(value);
2083
- const input = lowerer.declareHiddenLocal("%inspectInput", value.type);
2084
- const text = lowerer.declareHiddenLocal("%inspectText", STRING);
2085
- const layout = (breakLength, compact, sorted) => ({
2086
- kind: "exprStmt",
2087
- expr: {
2088
- kind: "libCall",
2089
- fn: "insp.layout",
2090
- args: [numLit(breakLength, loc), numLit(compact, loc), boolLit(sorted, loc)],
2091
- type: VOID,
2278
+ const key = `layout:${tag}:${typeKey(value.type)}:${options.breakLength}:${options.compact}:${options.sorted}:${options.depth}`;
2279
+ let name = lowerer.inspectHelpers.get(key);
2280
+ if (name === undefined) {
2281
+ name = keyedHelperName(lowerer, "%util.inspLayout", key);
2282
+ lowerer.inspectHelpers.set(key, name);
2283
+ const layout = (breakLength, compact, sorted) => ({
2284
+ kind: "exprStmt",
2285
+ expr: {
2286
+ kind: "libCall",
2287
+ fn: "insp.layout",
2288
+ args: [numLit(breakLength, loc), numLit(compact, loc), boolLit(sorted, loc)],
2289
+ type: VOID,
2290
+ loc,
2291
+ },
2092
2292
  loc,
2093
- },
2094
- loc,
2095
- });
2096
- return {
2097
- kind: "seqExpr",
2098
- stmts: [
2099
- { kind: "varDecl", localId: input.id, init: value, loc },
2100
- layout(options.breakLength, options.compact, options.sorted),
2101
- { kind: "varDecl", localId: text.id, init: render(varRef(input.id, value.type, loc)), loc },
2102
- layout(80, 3, false),
2103
- ],
2104
- result: varRef(text.id, STRING, loc),
2105
- type: STRING,
2106
- loc,
2107
- };
2293
+ });
2294
+ lowerer.liftedFns.push({
2295
+ name,
2296
+ params: [{ localId: "v.0", name: "v", type: value.type }],
2297
+ returnType: STRING,
2298
+ locals: [{ id: "v.0", name: "v", type: value.type, mutable: false }],
2299
+ body: [
2300
+ layout(options.breakLength, options.compact, options.sorted),
2301
+ {
2302
+ kind: "tryCatch",
2303
+ tryBody: [{ kind: "return", value: render(varRef("v.0", value.type, loc)), loc }],
2304
+ catchBody: null,
2305
+ catchLocalId: null,
2306
+ finallyBody: [layout(80, 3, false)],
2307
+ loc,
2308
+ },
2309
+ ],
2310
+ loc,
2311
+ });
2312
+ }
2313
+ return { kind: "call", callee: name, args: [value], type: STRING, loc };
2108
2314
  }
2109
2315
  /** `util.inspect(fn)` / `util.inspect(Cls)` over a DIRECT identifier
2110
2316
  * naming a declared function or class: the name is compile-time truth,
@@ -2132,6 +2338,13 @@ function directCallableInspect(lowerer, node, loc) {
2132
2338
  const decl = sym.declarations[0];
2133
2339
  if (!decl)
2134
2340
  return null;
2341
+ // A JavaScript function can hold own properties (`f.x = 1`, computed
2342
+ // keys), which the runtime walk prints after its name.
2343
+ if (isJsSourceFile(node.getSourceFile())) {
2344
+ const type = lowerer.mapTypeOf(lowerer.typeOf(node));
2345
+ if (type?.kind === "func" && lowerer.dynConvertible(type))
2346
+ return null;
2347
+ }
2135
2348
  if (ts.isFunctionDeclaration(decl) && decl.name) {
2136
2349
  return strLit(`[Function: ${decl.name.text}]`, loc);
2137
2350
  }
@@ -2175,7 +2388,15 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
2175
2388
  ? `[Function: ${valueNode.name.text}]`
2176
2389
  : "[Function (anonymous)]", loc);
2177
2390
  }
2178
- const value = lowerer.lowerExpr(valueNode);
2391
+ let value = lowerer.lowerExpr(valueNode);
2392
+ // A JavaScript function renders through the runtime walk, which prints
2393
+ // its own properties after its name.
2394
+ if (value.type.kind === "func" &&
2395
+ isJsSourceFile(valueNode.getSourceFile()) &&
2396
+ lowerer.dynConvertible(value.type)) {
2397
+ const name = jsFuncNameOf(valueNode);
2398
+ value = { kind: "dynFrom", value, type: DYN, ...(name !== null ? { fnName: name } : {}), loc };
2399
+ }
2179
2400
  if (value.type.kind === "bytes") {
2180
2401
  // One runtime representation serves Buffer AND Uint8Array; their
2181
2402
  // renderings differ (<Buffer aa> vs Uint8Array(1) [ 170 ]), so the
@@ -2193,16 +2414,18 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
2193
2414
  if (!isBuffer) {
2194
2415
  // A numeric typed array: Uint8Array(n) [ ... ] under the depth and
2195
2416
  // layout options.
2196
- return withInspectLayout(lowerer, options, value, (input) => ({
2417
+ return withInspectLayout(lowerer, options, value, "typedArray", (input) => ({
2197
2418
  kind: "libCall",
2198
- fn: "insp.typedArray",
2419
+ fn: value.type.kind === "bytes" && value.type.elem === "u8"
2420
+ ? "insp.bytes"
2421
+ : "insp.typedArray",
2199
2422
  args: [input, numLit(0, loc), numLit(options.depth, loc)],
2200
2423
  type: STRING,
2201
2424
  loc,
2202
2425
  }), loc);
2203
2426
  }
2204
2427
  // Buffers render fully at any depth and on one line (custom inspect).
2205
- return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(2, loc), loc);
2428
+ return { kind: "libCall", fn: "insp.buffer", args: [value], type: STRING, loc };
2206
2429
  }
2207
2430
  const walk = { recursive: false };
2208
2431
  const reason = inspectSupport(lowerer, value.type, new Set(), walk);
@@ -2212,7 +2435,7 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
2212
2435
  const options = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
2213
2436
  const depth = options.depth;
2214
2437
  if (dir && value.type.kind === "dyn") {
2215
- return withInspectLayout(lowerer, options, value, (input) => ({
2438
+ return withInspectLayout(lowerer, options, value, "dirDyn", (input) => ({
2216
2439
  kind: "libCall",
2217
2440
  fn: "console.dirDyn",
2218
2441
  args: [input, numLit(depth, loc)],
@@ -2220,7 +2443,7 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
2220
2443
  loc,
2221
2444
  }), loc);
2222
2445
  }
2223
- return withInspectLayout(lowerer, options, value, (input) => inspectExpr(lowerer, value.type, input, numLit(0, loc), numLit(depth, loc), loc), loc);
2446
+ return withInspectLayout(lowerer, options, value, "inspect", (input) => inspectExpr(lowerer, value.type, input, numLit(0, loc), numLit(depth, loc), loc), loc);
2224
2447
  }
2225
2448
  /* ── util.format / util.formatWithOptions ────────────────────────────── */
2226
2449
  /** One argument as format's %s conversion (Node: numbers via
@@ -2283,10 +2506,21 @@ function formatSArg(lowerer, node, depth, loc) {
2283
2506
  return inspectExpr(lowerer, t, value, numLit(0, loc), numLit(depth, loc), loc);
2284
2507
  }
2285
2508
  /** %O (depth 2) / %o (showHidden, depth 4) — inspect with the spec's
2286
- * option deltas; %o fences over arrays (showHidden adds their hidden
2287
- * [length] entry, which has no lowering). */
2509
+ * option deltas. A checked-dynamic argument renders through the runtime's
2510
+ * showHidden walk; static %o fences over arrays and nested dynamic values
2511
+ * (showHidden adds an array's hidden [length] entry, which the static
2512
+ * rendering has no lowering for). */
2288
2513
  function formatOArg(lowerer, node, depth, loc) {
2289
2514
  const value = lowerer.lowerExpr(node);
2515
+ if (depth === 4 && value.type.kind === "dyn") {
2516
+ return {
2517
+ kind: "libCall",
2518
+ fn: "insp.dynHidden",
2519
+ args: [value, numLit(4, loc)],
2520
+ type: STRING,
2521
+ loc,
2522
+ };
2523
+ }
2290
2524
  if (value.type.kind === "bytes") {
2291
2525
  lowerer.noLowering(`util.format %${depth === 4 ? "o" : "O"} of typed-array values`, node, "pass util.inspect(buf) explicitly");
2292
2526
  }
@@ -2294,8 +2528,8 @@ function formatOArg(lowerer, node, depth, loc) {
2294
2528
  const reason = inspectSupport(lowerer, value.type, new Set(), walk);
2295
2529
  if (reason !== null)
2296
2530
  lowerer.noLowering(`util.format %${depth === 4 ? "o" : "O"} of '${lowerer.fmt(value.type)}' values`, node, reason);
2297
- if (depth === 4 && typeTreeHasArray(lowerer, value.type, new Set())) {
2298
- lowerer.noLowering("util.format %o over arrays", node, "%o renders with showHidden (arrays gain a hidden [length] entry) — use %O for the default rendering");
2531
+ if (depth === 4 && typeTreeHasHidden(lowerer, value.type, new Set())) {
2532
+ lowerer.noLowering("util.format %o over arrays", node, "%o renders with showHidden (arrays gain a hidden [length] entry) — use %O for the default rendering, or pass the value as unknown");
2299
2533
  }
2300
2534
  return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
2301
2535
  }
@@ -2648,9 +2882,10 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
2648
2882
  return concatAll(parts, loc);
2649
2883
  }
2650
2884
  /** Arrays anywhere in the tree — the %o (showHidden) gate. */
2651
- function typeTreeHasArray(lowerer, t, visiting) {
2885
+ function typeTreeHasHidden(lowerer, t, visiting) {
2652
2886
  switch (t.kind) {
2653
2887
  case "array":
2888
+ case "dyn":
2654
2889
  return true;
2655
2890
  case "record": {
2656
2891
  if (visiting.has(t.shapeId))
@@ -2659,23 +2894,23 @@ function typeTreeHasArray(lowerer, t, visiting) {
2659
2894
  const shape = lowerer.shapes.get(t.shapeId);
2660
2895
  if (shape?.tuple)
2661
2896
  return true;
2662
- return (shape?.fields ?? []).some((f) => typeTreeHasArray(lowerer, f.type, visiting));
2897
+ return (shape?.fields ?? []).some((f) => typeTreeHasHidden(lowerer, f.type, visiting));
2663
2898
  }
2664
2899
  case "map":
2665
- return (typeTreeHasArray(lowerer, t.key, visiting) || typeTreeHasArray(lowerer, t.value, visiting));
2900
+ return (typeTreeHasHidden(lowerer, t.key, visiting) || typeTreeHasHidden(lowerer, t.value, visiting));
2666
2901
  case "set":
2667
- return typeTreeHasArray(lowerer, t.elem, visiting);
2902
+ return typeTreeHasHidden(lowerer, t.elem, visiting);
2668
2903
  case "union": {
2669
2904
  if (visiting.has(t.unionId))
2670
2905
  return false;
2671
2906
  visiting.add(t.unionId);
2672
- return (lowerer.unions.get(t.unionId)?.arms ?? []).some((a) => typeTreeHasArray(lowerer, a, visiting));
2907
+ return (lowerer.unions.get(t.unionId)?.arms ?? []).some((a) => typeTreeHasHidden(lowerer, a, visiting));
2673
2908
  }
2674
2909
  case "object": {
2675
2910
  if (visiting.has(t.className))
2676
2911
  return false;
2677
2912
  visiting.add(t.className);
2678
- return (lowerer.classes.get(t.className)?.def.fields ?? []).some((f) => typeTreeHasArray(lowerer, f.type, visiting));
2913
+ return (lowerer.classes.get(t.className)?.def.fields ?? []).some((f) => typeTreeHasHidden(lowerer, f.type, visiting));
2679
2914
  }
2680
2915
  case "bytes":
2681
2916
  return true;
@@ -2831,8 +3066,13 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2831
3066
  const builtinBase = member === "inherits" && expr.arguments.nodes[1] !== undefined
2832
3067
  ? builtinClassKindOf(lowerer, expr.arguments.nodes[1])
2833
3068
  : null;
3069
+ // A superCtor class whose prototype has a complete view (a module-level
3070
+ // JavaScript class named directly) passes that view to the runtime.
3071
+ const superView = member === "inherits" && builtinBase === null && expr.arguments.nodes[1] !== undefined
3072
+ ? classPrototypeView(lowerer, expr.arguments.nodes[1], loc)
3073
+ : null;
2834
3074
  for (const [index, arg] of expr.arguments.nodes.slice(0, classArgs).entries()) {
2835
- if (index === 1 && builtinBase !== null)
3075
+ if (index === 1 && (builtinBase !== null || superView !== null))
2836
3076
  continue;
2837
3077
  if (lowerer.mapTypeOf(lowerer.typeOf(arg))?.kind === "classval")
2838
3078
  lowerer.noLowering(`util.${member} over a class constructor`, arg, member === "inherits"
@@ -2857,7 +3097,9 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
2857
3097
  for (const arg of expr.arguments.nodes.slice(arity))
2858
3098
  stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
2859
3099
  const type = fn === "util.inherits" ? VOID : DYN;
2860
- const result = { kind: "libCall", fn, args, type, loc };
3100
+ const result = superView
3101
+ ? { kind: "libCall", fn: "util.inheritsPrototype", args: [...args, superView], type, loc }
3102
+ : { kind: "libCall", fn, args, type, loc };
2861
3103
  return { kind: "seqExpr", stmts, result, type: result.type, loc };
2862
3104
  }
2863
3105
  /** Whether the slot receiving a callbackify wrapper declares a callback