@scriptc/compiler 0.4.6 → 0.4.8

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 (1082) hide show
  1. package/ambient/node-fallback/child_process.d.ts +71 -22
  2. package/ambient/node-fallback/crypto.d.ts +15 -7
  3. package/ambient/node-fallback/events.d.ts +29 -6
  4. package/ambient/node-fallback/fs-promises.d.ts +1 -1
  5. package/ambient/node-fallback/fs.d.ts +57 -12
  6. package/ambient/node-fallback/http.d.ts +26 -18
  7. package/ambient/node-fallback/https.d.ts +5 -2
  8. package/ambient/node-fallback/net.d.ts +25 -0
  9. package/ambient/node-fallback/os.d.ts +11 -1
  10. package/ambient/node-fallback/path-posix.d.ts +6 -0
  11. package/ambient/node-fallback/path-win32.d.ts +5 -0
  12. package/ambient/node-fallback/path.d.ts +2 -0
  13. package/ambient/node-fallback/querystring.d.ts +3 -3
  14. package/ambient/node-fallback/zlib.d.ts +31 -2
  15. package/ambient/scriptc-node-fallback.d.ts +95 -20
  16. package/ambient/scriptc.d.ts +7 -2
  17. package/dist/backend/executable-features.js +22 -1
  18. package/dist/backend/executable-features.js.map +1 -1
  19. package/dist/backend/immutability.d.ts +12 -1
  20. package/dist/backend/immutability.js +50 -4
  21. package/dist/backend/immutability.js.map +1 -1
  22. package/dist/backend/immutability.test.js +95 -1
  23. package/dist/backend/immutability.test.js.map +1 -1
  24. package/dist/backend/library-pack.d.ts +6 -0
  25. package/dist/backend/library-pack.js +18 -5
  26. package/dist/backend/library-pack.js.map +1 -1
  27. package/dist/backend/library-pack.test.d.ts +1 -0
  28. package/dist/backend/library-pack.test.js +28 -0
  29. package/dist/backend/library-pack.test.js.map +1 -0
  30. package/dist/backend/linker.d.ts +20 -2
  31. package/dist/backend/linker.js +221 -35
  32. package/dist/backend/linker.js.map +1 -1
  33. package/dist/backend/lld.d.ts +15 -6
  34. package/dist/backend/lld.js +24 -16
  35. package/dist/backend/lld.js.map +1 -1
  36. package/dist/backend/lld.test.js +13 -5
  37. package/dist/backend/lld.test.js.map +1 -1
  38. package/dist/backend/llvm/alloc.d.ts +15 -2
  39. package/dist/backend/llvm/alloc.js +172 -36
  40. package/dist/backend/llvm/alloc.js.map +1 -1
  41. package/dist/backend/llvm/alloc.test.js +69 -1
  42. package/dist/backend/llvm/alloc.test.js.map +1 -1
  43. package/dist/backend/llvm/arenas.d.ts +17 -4
  44. package/dist/backend/llvm/arenas.js +105 -10
  45. package/dist/backend/llvm/arenas.js.map +1 -1
  46. package/dist/backend/llvm/arenas.test.js +229 -0
  47. package/dist/backend/llvm/arenas.test.js.map +1 -1
  48. package/dist/backend/llvm/bytes-alias.js +10 -1
  49. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  50. package/dist/backend/llvm/bytes-headers.js +6 -0
  51. package/dist/backend/llvm/bytes-headers.js.map +1 -1
  52. package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
  53. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  54. package/dist/backend/llvm/call-lifetimes.js +10 -0
  55. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  56. package/dist/backend/llvm/classes.d.ts +16 -9
  57. package/dist/backend/llvm/classes.js +142 -37
  58. package/dist/backend/llvm/classes.js.map +1 -1
  59. package/dist/backend/llvm/classes.test.js +42 -0
  60. package/dist/backend/llvm/classes.test.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.test.js +50 -1
  62. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  63. package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
  64. package/dist/backend/llvm/cpu-dispatch.js +34 -9
  65. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  66. package/dist/backend/llvm/dyn.d.ts +64 -3
  67. package/dist/backend/llvm/dyn.js +251 -15
  68. package/dist/backend/llvm/dyn.js.map +1 -1
  69. package/dist/backend/llvm/emit-function.js +68 -5
  70. package/dist/backend/llvm/emit-function.js.map +1 -1
  71. package/dist/backend/llvm/emit-module.js +226 -77
  72. package/dist/backend/llvm/emit-module.js.map +1 -1
  73. package/dist/backend/llvm/emit-module.test.d.ts +1 -0
  74. package/dist/backend/llvm/emit-module.test.js +52 -0
  75. package/dist/backend/llvm/emit-module.test.js.map +1 -0
  76. package/dist/backend/llvm/emit-statements.js +138 -34
  77. package/dist/backend/llvm/emit-statements.js.map +1 -1
  78. package/dist/backend/llvm/emitter.d.ts +142 -10
  79. package/dist/backend/llvm/emitter.js +523 -73
  80. package/dist/backend/llvm/emitter.js.map +1 -1
  81. package/dist/backend/llvm/emitter.test.js +31 -3
  82. package/dist/backend/llvm/emitter.test.js.map +1 -1
  83. package/dist/backend/llvm/expr-async.js +19 -1
  84. package/dist/backend/llvm/expr-async.js.map +1 -1
  85. package/dist/backend/llvm/expr-bytes.js +16 -1
  86. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  87. package/dist/backend/llvm/expr-calls.d.ts +4 -1
  88. package/dist/backend/llvm/expr-calls.js +38 -6
  89. package/dist/backend/llvm/expr-calls.js.map +1 -1
  90. package/dist/backend/llvm/expr-dynamic.js +237 -23
  91. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  92. package/dist/backend/llvm/expr-primitives.js +123 -12
  93. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  94. package/dist/backend/llvm/expr-records.d.ts +1 -1
  95. package/dist/backend/llvm/expr-records.js +124 -56
  96. package/dist/backend/llvm/expr-records.js.map +1 -1
  97. package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
  98. package/dist/backend/llvm/expr-stream-bridges.js +59 -2
  99. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  100. package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
  101. package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
  102. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  103. package/dist/backend/llvm/integer-values.d.ts +2 -0
  104. package/dist/backend/llvm/integer-values.js +6 -0
  105. package/dist/backend/llvm/integer-values.js.map +1 -1
  106. package/dist/backend/llvm/js-groups.d.ts +21 -0
  107. package/dist/backend/llvm/js-groups.js +277 -0
  108. package/dist/backend/llvm/js-groups.js.map +1 -0
  109. package/dist/backend/llvm/js-ic.d.ts +57 -1
  110. package/dist/backend/llvm/js-ic.js +389 -22
  111. package/dist/backend/llvm/js-ic.js.map +1 -1
  112. package/dist/backend/llvm/lib-dispatch.js +152 -1
  113. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  114. package/dist/backend/llvm/lib-filesystem.js +116 -11
  115. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  116. package/dist/backend/llvm/lib-network.js +33 -6
  117. package/dist/backend/llvm/lib-network.js.map +1 -1
  118. package/dist/backend/llvm/lib-process.js +180 -27
  119. package/dist/backend/llvm/lib-process.js.map +1 -1
  120. package/dist/backend/llvm/lib-shared.js +139 -2
  121. package/dist/backend/llvm/lib-shared.js.map +1 -1
  122. package/dist/backend/llvm/lib-stream.js +67 -0
  123. package/dist/backend/llvm/lib-stream.js.map +1 -1
  124. package/dist/backend/llvm/local-union-storage.test.js +32 -0
  125. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  126. package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
  127. package/dist/backend/llvm/loop-entry-versions.js +43 -21
  128. package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
  129. package/dist/backend/llvm/loop-state.d.ts +7 -1
  130. package/dist/backend/llvm/loop-state.js +26 -3
  131. package/dist/backend/llvm/loop-state.js.map +1 -1
  132. package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
  133. package/dist/backend/llvm/map-entry-fusion.js +3 -3
  134. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  135. package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
  136. package/dist/backend/llvm/map-number-lookup.js +7 -3
  137. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  138. package/dist/backend/llvm/map-number-lookup.test.js +58 -17
  139. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  140. package/dist/backend/llvm/nullable-unions.js +7 -6
  141. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  142. package/dist/backend/llvm/nullable-unions.test.js +4 -1
  143. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  144. package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
  145. package/dist/backend/llvm/receiver-brackets.test.js +68 -0
  146. package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
  147. package/dist/backend/llvm/receivers.js +3 -0
  148. package/dist/backend/llvm/receivers.js.map +1 -1
  149. package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
  150. package/dist/backend/llvm/record-entry-fusion.js +217 -0
  151. package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
  152. package/dist/backend/llvm/record-results.d.ts +5 -2
  153. package/dist/backend/llvm/record-results.js +13 -12
  154. package/dist/backend/llvm/record-results.js.map +1 -1
  155. package/dist/backend/llvm/record-views.d.ts +22 -2
  156. package/dist/backend/llvm/record-views.js +147 -12
  157. package/dist/backend/llvm/record-views.js.map +1 -1
  158. package/dist/backend/llvm/record-views.test.js +76 -0
  159. package/dist/backend/llvm/record-views.test.js.map +1 -1
  160. package/dist/backend/llvm/reference-effects.js +1 -0
  161. package/dist/backend/llvm/reference-effects.js.map +1 -1
  162. package/dist/backend/llvm/reference-writes.js +4 -0
  163. package/dist/backend/llvm/reference-writes.js.map +1 -1
  164. package/dist/backend/llvm/region-ir.js +1 -0
  165. package/dist/backend/llvm/region-ir.js.map +1 -1
  166. package/dist/backend/llvm/region-sites.d.ts +18 -0
  167. package/dist/backend/llvm/region-sites.js +79 -1
  168. package/dist/backend/llvm/region-sites.js.map +1 -1
  169. package/dist/backend/llvm/runtime-registries.test.js +53 -6
  170. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  171. package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
  172. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  173. package/dist/backend/llvm/shapes.d.ts +36 -3
  174. package/dist/backend/llvm/shapes.js +201 -16
  175. package/dist/backend/llvm/shapes.js.map +1 -1
  176. package/dist/backend/llvm/shapes.test.js +4 -0
  177. package/dist/backend/llvm/shapes.test.js.map +1 -1
  178. package/dist/backend/llvm/speculative-integers.d.ts +10 -1
  179. package/dist/backend/llvm/speculative-integers.js +59 -8
  180. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  181. package/dist/backend/llvm/stack-objects.d.ts +1 -2
  182. package/dist/backend/llvm/stack-objects.js +8 -5
  183. package/dist/backend/llvm/stack-objects.js.map +1 -1
  184. package/dist/backend/llvm/unwind-abi.d.ts +3 -3
  185. package/dist/backend/llvm/unwind-abi.js +8 -3
  186. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  187. package/dist/backend/llvm/walkers.d.ts +12 -0
  188. package/dist/backend/llvm/walkers.js +47 -3
  189. package/dist/backend/llvm/walkers.js.map +1 -1
  190. package/dist/backend/may-throw.js +12 -2
  191. package/dist/backend/may-throw.js.map +1 -1
  192. package/dist/backend/may-throw.test.js +13 -0
  193. package/dist/backend/may-throw.test.js.map +1 -1
  194. package/dist/backend/native/contracts.d.ts +94 -0
  195. package/dist/backend/native/executable.js +134 -10
  196. package/dist/backend/native/executable.js.map +1 -1
  197. package/dist/backend/native/helper-identity-record.d.ts +11 -0
  198. package/dist/backend/native/helper-identity-record.js +76 -0
  199. package/dist/backend/native/helper-identity-record.js.map +1 -0
  200. package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
  201. package/dist/backend/native/helper-identity-record.test.js +101 -0
  202. package/dist/backend/native/helper-identity-record.test.js.map +1 -0
  203. package/dist/backend/native/library.js +10 -2
  204. package/dist/backend/native/library.js.map +1 -1
  205. package/dist/backend/native/runtime-inputs.js +8 -1
  206. package/dist/backend/native/runtime-inputs.js.map +1 -1
  207. package/dist/backend/native/vendor.d.ts +1 -1
  208. package/dist/backend/native/vendor.js +1 -1
  209. package/dist/backend/native/vendor.js.map +1 -1
  210. package/dist/backend/native-codegen-core.d.ts +13 -10
  211. package/dist/backend/native-codegen-core.js +26 -13
  212. package/dist/backend/native-codegen-core.js.map +1 -1
  213. package/dist/backend/native-codegen.js +30 -8
  214. package/dist/backend/native-codegen.js.map +1 -1
  215. package/dist/backend/native-codegen.test.js +110 -14
  216. package/dist/backend/native-codegen.test.js.map +1 -1
  217. package/dist/backend/native-link-info-core.d.ts +72 -0
  218. package/dist/backend/native-link-info-core.js.map +1 -1
  219. package/dist/backend/native-link-info.js +1 -0
  220. package/dist/backend/native-link-info.js.map +1 -1
  221. package/dist/backend/native-profile.d.ts +4 -1
  222. package/dist/backend/native-profile.js +12 -1
  223. package/dist/backend/native-profile.js.map +1 -1
  224. package/dist/backend/native-profile.test.js +10 -0
  225. package/dist/backend/native-profile.test.js.map +1 -1
  226. package/dist/backend/publication.d.ts +4 -1
  227. package/dist/backend/publication.js +4 -2
  228. package/dist/backend/publication.js.map +1 -1
  229. package/dist/backend/runtime-abi.d.ts +2 -2
  230. package/dist/backend/runtime-abi.js +2 -2
  231. package/dist/backend/runtime-pack-core.d.ts +46 -7
  232. package/dist/backend/runtime-pack-core.js +37 -2
  233. package/dist/backend/runtime-pack-core.js.map +1 -1
  234. package/dist/backend/runtime-pack-native.d.ts +18 -1
  235. package/dist/backend/runtime-pack-native.js +138 -29
  236. package/dist/backend/runtime-pack-native.js.map +1 -1
  237. package/dist/backend/runtime-pack-native.test.js +166 -4
  238. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  239. package/dist/backend/runtime-pack-targets.test.js +3 -1
  240. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  241. package/dist/backend/runtime-pack.d.ts +7 -0
  242. package/dist/backend/runtime-pack.js +25 -3
  243. package/dist/backend/runtime-pack.js.map +1 -1
  244. package/dist/backend/runtime-pack.test.js +213 -12
  245. package/dist/backend/runtime-pack.test.js.map +1 -1
  246. package/dist/backend/tree-classes.d.ts +42 -0
  247. package/dist/backend/tree-classes.js +723 -0
  248. package/dist/backend/tree-classes.js.map +1 -0
  249. package/dist/backend/tree-classes.test.d.ts +1 -0
  250. package/dist/backend/tree-classes.test.js +338 -0
  251. package/dist/backend/tree-classes.test.js.map +1 -0
  252. package/dist/backend/vendor-archives.d.ts +8 -1
  253. package/dist/backend/vendor-archives.js +313 -8
  254. package/dist/backend/vendor-archives.js.map +1 -1
  255. package/dist/backend/vendor-inputs.d.ts +60 -3
  256. package/dist/backend/vendor-inputs.js +109 -3
  257. package/dist/backend/vendor-inputs.js.map +1 -1
  258. package/dist/backend/vendor-inputs.test.js +62 -1
  259. package/dist/backend/vendor-inputs.test.js.map +1 -1
  260. package/dist/backend/warm-cache.js +2 -0
  261. package/dist/backend/warm-cache.js.map +1 -1
  262. package/dist/compat/fetch-profile.d.ts +7 -1
  263. package/dist/compat/fetch-profile.js +25 -12
  264. package/dist/compat/fetch-profile.js.map +1 -1
  265. package/dist/compile-types.d.ts +7 -0
  266. package/dist/contracts/check.d.ts +3 -0
  267. package/dist/contracts/check.js +18 -5
  268. package/dist/contracts/check.js.map +1 -1
  269. package/dist/coverage/report.js +47 -0
  270. package/dist/coverage/report.js.map +1 -1
  271. package/dist/coverage/surface-manifest.js +1 -1
  272. package/dist/coverage/surface-manifest.js.map +1 -1
  273. package/dist/diagnostics/codes.d.ts +14 -0
  274. package/dist/diagnostics/codes.js +14 -0
  275. package/dist/diagnostics/codes.js.map +1 -1
  276. package/dist/diagnostics/diagnostic.d.ts +68 -0
  277. package/dist/diagnostics/diagnostic.js +186 -6
  278. package/dist/diagnostics/diagnostic.js.map +1 -1
  279. package/dist/diagnostics/dynamic-tier.js +3 -1
  280. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  281. package/dist/diagnostics/envelope.d.ts +18 -0
  282. package/dist/diagnostics/envelope.js.map +1 -1
  283. package/dist/executable/executable-cache.d.ts +48 -0
  284. package/dist/executable/executable-cache.js +38 -0
  285. package/dist/executable/executable-cache.js.map +1 -1
  286. package/dist/executable/executable-cache.test.js +127 -1
  287. package/dist/executable/executable-cache.test.js.map +1 -1
  288. package/dist/executable/prepare.d.ts +13 -3
  289. package/dist/executable/prepare.js +438 -234
  290. package/dist/executable/prepare.js.map +1 -1
  291. package/dist/frontend/analysis.js +200 -18
  292. package/dist/frontend/analysis.js.map +1 -1
  293. package/dist/frontend/builtin-modules.d.ts +4 -0
  294. package/dist/frontend/builtin-modules.js +10 -0
  295. package/dist/frontend/builtin-modules.js.map +1 -1
  296. package/dist/frontend/early-errors.d.ts +24 -0
  297. package/dist/frontend/early-errors.js +836 -0
  298. package/dist/frontend/early-errors.js.map +1 -0
  299. package/dist/frontend/early-errors.test.d.ts +1 -0
  300. package/dist/frontend/early-errors.test.js +207 -0
  301. package/dist/frontend/early-errors.test.js.map +1 -0
  302. package/dist/frontend/inferred-js-diagnostics.test.js +88 -0
  303. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  304. package/dist/frontend/input-tracker.d.ts +47 -0
  305. package/dist/frontend/input-tracker.js +173 -36
  306. package/dist/frontend/input-tracker.js.map +1 -1
  307. package/dist/frontend/input-tracker.test.js +86 -2
  308. package/dist/frontend/input-tracker.test.js.map +1 -1
  309. package/dist/frontend/js-inference.d.ts +2 -0
  310. package/dist/frontend/js-inference.js +18 -0
  311. package/dist/frontend/js-inference.js.map +1 -0
  312. package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
  313. package/dist/frontend/jsx-opinion-sites.test.js +86 -0
  314. package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
  315. package/dist/frontend/lib-exports.d.ts +23 -4
  316. package/dist/frontend/lib-exports.js +98 -26
  317. package/dist/frontend/lib-exports.js.map +1 -1
  318. package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
  319. package/dist/frontend/lowering/binding-analysis.js +86 -4
  320. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  321. package/dist/frontend/lowering/buffers.d.ts +8 -0
  322. package/dist/frontend/lowering/buffers.js +43 -0
  323. package/dist/frontend/lowering/buffers.js.map +1 -0
  324. package/dist/frontend/lowering/builtin-calls.js +13 -0
  325. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  326. package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
  327. package/dist/frontend/lowering/builtin-namespaces.js +41 -3
  328. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  329. package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
  330. package/dist/frontend/lowering/builtin-statics.js +407 -0
  331. package/dist/frontend/lowering/builtin-statics.js.map +1 -0
  332. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  333. package/dist/frontend/lowering/builtins/arguments.js +12 -0
  334. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  335. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
  336. package/dist/frontend/lowering/builtins/atomics.js +87 -1
  337. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  338. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
  339. package/dist/frontend/lowering/builtins/child-process-methods.js +52 -12
  340. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  341. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
  342. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
  343. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  344. package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
  345. package/dist/frontend/lowering/builtins/child-process.js +565 -28
  346. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
  348. package/dist/frontend/lowering/builtins/compression.js +41 -21
  349. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  350. package/dist/frontend/lowering/builtins/constants.js +7 -2
  351. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
  353. package/dist/frontend/lowering/builtins/dates.js +23 -1
  354. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  355. package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
  356. package/dist/frontend/lowering/builtins/environment.js +213 -2
  357. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  358. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  359. package/dist/frontend/lowering/builtins/filesystem-calls.js +75 -18
  360. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  361. package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
  362. package/dist/frontend/lowering/builtins/filesystem.js +185 -16
  363. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  364. package/dist/frontend/lowering/builtins/json.js +4 -0
  365. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  366. package/dist/frontend/lowering/builtins/module-calls.js +42 -3
  367. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  368. package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
  369. package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
  370. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
  372. package/dist/frontend/lowering/builtins/numbers.js +10 -2
  373. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  374. package/dist/frontend/lowering/builtins/operating-system.d.ts +9 -5
  375. package/dist/frontend/lowering/builtins/operating-system.js +101 -20
  376. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  377. package/dist/frontend/lowering/builtins/process.d.ts +18 -2
  378. package/dist/frontend/lowering/builtins/process.js +386 -25
  379. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  380. package/dist/frontend/lowering/builtins/promises.js +169 -8
  381. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  382. package/dist/frontend/lowering/builtins/properties.js +6 -2
  383. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  384. package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
  385. package/dist/frontend/lowering/builtins/querystring.js +202 -18
  386. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  387. package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
  388. package/dist/frontend/lowering/builtins/readline.js +200 -38
  389. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  390. package/dist/frontend/lowering/builtins/reflection.js +60 -1
  391. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  392. package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
  393. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  394. package/dist/frontend/lowering/builtins/url.js +55 -13
  395. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
  397. package/dist/frontend/lowering/builtins/v8.js +7 -5
  398. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  399. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
  400. package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
  401. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
  402. package/dist/frontend/lowering/builtins/webassembly.js +2 -0
  403. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  404. package/dist/frontend/lowering/call-arguments.d.ts +10 -0
  405. package/dist/frontend/lowering/call-arguments.js +37 -2
  406. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  407. package/dist/frontend/lowering/call-signatures.d.ts +10 -0
  408. package/dist/frontend/lowering/call-signatures.js +180 -0
  409. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  410. package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
  411. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  412. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  413. package/dist/frontend/lowering/cjs-inline-require.js +5 -0
  414. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  415. package/dist/frontend/lowering/class-construction.d.ts +14 -2
  416. package/dist/frontend/lowering/class-construction.js +99 -5
  417. package/dist/frontend/lowering/class-construction.js.map +1 -1
  418. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +14 -0
  419. package/dist/frontend/lowering/class-dynamic-dispatch.js +1376 -1009
  420. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  421. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
  422. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  423. package/dist/frontend/lowering/class-protocols.js +59 -10
  424. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  425. package/dist/frontend/lowering/class-prototypes.js +20 -15
  426. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  427. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  428. package/dist/frontend/lowering/class-runtime-statics.js +35 -1
  429. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  430. package/dist/frontend/lowering/class-unions.js +21 -4
  431. package/dist/frontend/lowering/class-unions.js.map +1 -1
  432. package/dist/frontend/lowering/class-views.d.ts +13 -0
  433. package/dist/frontend/lowering/class-views.js +51 -0
  434. package/dist/frontend/lowering/class-views.js.map +1 -0
  435. package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
  436. package/dist/frontend/lowering/coercions/function-adapters.js +63 -10
  437. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  438. package/dist/frontend/lowering/coercions/state.d.ts +15 -0
  439. package/dist/frontend/lowering/coercions/state.js +24 -0
  440. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  441. package/dist/frontend/lowering/coercions/structural-plans.js +75 -3
  442. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  443. package/dist/frontend/lowering/coercions/structural.js +39 -2
  444. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  445. package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
  446. package/dist/frontend/lowering/coercions/unions.js +54 -10
  447. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  448. package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
  449. package/dist/frontend/lowering/constructor-returns.js +284 -58
  450. package/dist/frontend/lowering/constructor-returns.js.map +1 -1
  451. package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
  452. package/dist/frontend/lowering/containers/array-callbacks.js +288 -90
  453. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  454. package/dist/frontend/lowering/containers/array-construction.js +37 -8
  455. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  456. package/dist/frontend/lowering/containers/array-from-async.js +139 -3
  457. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  458. package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
  459. package/dist/frontend/lowering/containers/array-iteration.js +24 -7
  460. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
  461. package/dist/frontend/lowering/containers/array-methods.js +30 -11
  462. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  463. package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
  464. package/dist/frontend/lowering/containers/bytes.js +450 -86
  465. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  466. package/dist/frontend/lowering/containers/callback-arguments.d.ts +16 -0
  467. package/dist/frontend/lowering/containers/callback-arguments.js +74 -12
  468. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  469. package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
  470. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  471. package/dist/frontend/lowering/containers/collection-methods.js +52 -17
  472. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  473. package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
  474. package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
  475. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  476. package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
  477. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  478. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
  479. package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
  480. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  481. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
  482. package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
  483. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  484. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  485. package/dist/frontend/lowering/crypto-tables.js +5 -5
  486. package/dist/frontend/lowering/dispatch-sites.js +3 -0
  487. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  488. package/dist/frontend/lowering/divergences.d.ts +40 -0
  489. package/dist/frontend/lowering/divergences.js +239 -20
  490. package/dist/frontend/lowering/divergences.js.map +1 -1
  491. package/dist/frontend/lowering/effect-free.d.ts +12 -0
  492. package/dist/frontend/lowering/effect-free.js +44 -0
  493. package/dist/frontend/lowering/effect-free.js.map +1 -0
  494. package/dist/frontend/lowering/expressions/array-literals.d.ts +24 -0
  495. package/dist/frontend/lowering/expressions/array-literals.js +88 -10
  496. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  497. package/dist/frontend/lowering/expressions/binary.js +216 -14
  498. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  499. package/dist/frontend/lowering/expressions/element-access.js +272 -11
  500. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  501. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
  502. package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
  503. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  504. package/dist/frontend/lowering/expressions/identifiers.js +173 -4
  505. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  506. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
  507. package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
  508. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  509. package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
  510. package/dist/frontend/lowering/expressions/narrowing.js +195 -18
  511. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  512. package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
  513. package/dist/frontend/lowering/expressions/object-literals.js +951 -240
  514. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  515. package/dist/frontend/lowering/expressions/optional-chains.js +71 -21
  516. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  517. package/dist/frontend/lowering/expressions/property-access.d.ts +39 -0
  518. package/dist/frontend/lowering/expressions/property-access.js +1141 -87
  519. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  520. package/dist/frontend/lowering/expressions/relational.js +262 -4
  521. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  522. package/dist/frontend/lowering/expressions/typeof.js +25 -0
  523. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  524. package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
  525. package/dist/frontend/lowering/expressions/union-fields.js +103 -13
  526. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  527. package/dist/frontend/lowering/expressions/updates.js +156 -22
  528. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  529. package/dist/frontend/lowering/frozen-records.d.ts +6 -0
  530. package/dist/frontend/lowering/frozen-records.js +10 -4
  531. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  532. package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
  533. package/dist/frontend/lowering/frozen-records.test.js +44 -0
  534. package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
  535. package/dist/frontend/lowering/function-names.d.ts +9 -0
  536. package/dist/frontend/lowering/function-names.js +95 -0
  537. package/dist/frontend/lowering/function-names.js.map +1 -0
  538. package/dist/frontend/lowering/function-returns.js +42 -13
  539. package/dist/frontend/lowering/function-returns.js.map +1 -1
  540. package/dist/frontend/lowering/general-streams.js +5 -0
  541. package/dist/frontend/lowering/general-streams.js.map +1 -1
  542. package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
  543. package/dist/frontend/lowering/generator-delegation.js +301 -118
  544. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  545. package/dist/frontend/lowering/generic-functions.d.ts +75 -0
  546. package/dist/frontend/lowering/generic-functions.js +790 -18
  547. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  548. package/dist/frontend/lowering/global-function-values.d.ts +25 -0
  549. package/dist/frontend/lowering/global-function-values.js +193 -0
  550. package/dist/frontend/lowering/global-function-values.js.map +1 -0
  551. package/dist/frontend/lowering/global-values.d.ts +15 -4
  552. package/dist/frontend/lowering/global-values.js +67 -9
  553. package/dist/frontend/lowering/global-values.js.map +1 -1
  554. package/dist/frontend/lowering/handle-properties.js +34 -1
  555. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  556. package/dist/frontend/lowering/host-global-values.d.ts +31 -0
  557. package/dist/frontend/lowering/host-global-values.js +121 -0
  558. package/dist/frontend/lowering/host-global-values.js.map +1 -0
  559. package/dist/frontend/lowering/host-globals.d.ts +74 -0
  560. package/dist/frontend/lowering/host-globals.js +344 -0
  561. package/dist/frontend/lowering/host-globals.js.map +1 -0
  562. package/dist/frontend/lowering/http2-constants.js +1 -1
  563. package/dist/frontend/lowering/iterator-adapters.js +46 -17
  564. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  565. package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
  566. package/dist/frontend/lowering/iterator-prototype.js +160 -0
  567. package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
  568. package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
  569. package/dist/frontend/lowering/key-order-witness.js +571 -9
  570. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  571. package/dist/frontend/lowering/key-order-witness.test.js +1 -0
  572. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  573. package/dist/frontend/lowering/lib-boundary.js +25 -3
  574. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  575. package/dist/frontend/lowering/lower-assert.js +140 -16
  576. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  577. package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
  578. package/dist/frontend/lowering/lower-async-iteration.js +15 -0
  579. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  580. package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
  581. package/dist/frontend/lowering/lower-builtin-values.js +342 -58
  582. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  583. package/dist/frontend/lowering/lower-calls.d.ts +47 -1
  584. package/dist/frontend/lowering/lower-calls.js +1354 -273
  585. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  586. package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
  587. package/dist/frontend/lowering/lower-calls.test.js +121 -0
  588. package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
  589. package/dist/frontend/lowering/lower-classes.d.ts +36 -5
  590. package/dist/frontend/lowering/lower-classes.js +630 -89
  591. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  592. package/dist/frontend/lowering/lower-event-emitter.d.ts +15 -2
  593. package/dist/frontend/lowering/lower-event-emitter.js +610 -98
  594. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  595. package/dist/frontend/lowering/lower-exprs.d.ts +15 -1
  596. package/dist/frontend/lowering/lower-exprs.js +96 -20
  597. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  598. package/dist/frontend/lowering/lower-functions.js +27 -6
  599. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  600. package/dist/frontend/lowering/lower-generators.js +57 -10
  601. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  602. package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
  603. package/dist/frontend/lowering/lower-global-value.js +14 -5
  604. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  605. package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
  606. package/dist/frontend/lowering/lower-inspect.js +713 -92
  607. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  608. package/dist/frontend/lowering/lower-modules.js +135 -27
  609. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  610. package/dist/frontend/lowering/lower-namespaces.js +18 -0
  611. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  612. package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
  613. package/dist/frontend/lowering/lower-node-island.js +472 -67
  614. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  615. package/dist/frontend/lowering/lower-server.js +463 -96
  616. package/dist/frontend/lowering/lower-server.js.map +1 -1
  617. package/dist/frontend/lowering/lower-shared-modules.js +13 -1
  618. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
  619. package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
  620. package/dist/frontend/lowering/lower-stdlib.js +77 -18
  621. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  622. package/dist/frontend/lowering/lower-stmts.d.ts +24 -4
  623. package/dist/frontend/lowering/lower-stmts.js +831 -136
  624. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  625. package/dist/frontend/lowering/lower-stream.js +126 -8
  626. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  627. package/dist/frontend/lowering/lower-timers.js +243 -48
  628. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  629. package/dist/frontend/lowering/lower-url.js +6 -3
  630. package/dist/frontend/lowering/lower-url.js.map +1 -1
  631. package/dist/frontend/lowering/lowerer.d.ts +363 -21
  632. package/dist/frontend/lowering/lowerer.js +1224 -129
  633. package/dist/frontend/lowering/lowerer.js.map +1 -1
  634. package/dist/frontend/lowering/lowerer.test.js +19 -1
  635. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  636. package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
  637. package/dist/frontend/lowering/lowering-facts.js +323 -0
  638. package/dist/frontend/lowering/lowering-facts.js.map +1 -0
  639. package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
  640. package/dist/frontend/lowering/lowering-facts.test.js +100 -0
  641. package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
  642. package/dist/frontend/lowering/module-namespace-elements.js +15 -0
  643. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  644. package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
  645. package/dist/frontend/lowering/nan-coded-reads.js +112 -9
  646. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  647. package/dist/frontend/lowering/new-target.js +2 -2
  648. package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
  649. package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
  650. package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
  651. package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
  652. package/dist/frontend/lowering/optional-arguments.js +26 -2
  653. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  654. package/dist/frontend/lowering/partial-assertions.d.ts +36 -0
  655. package/dist/frontend/lowering/partial-assertions.js +189 -0
  656. package/dist/frontend/lowering/partial-assertions.js.map +1 -0
  657. package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
  658. package/dist/frontend/lowering/primitive-throws.js +241 -0
  659. package/dist/frontend/lowering/primitive-throws.js.map +1 -0
  660. package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
  661. package/dist/frontend/lowering/primitive-wrappers.js +221 -0
  662. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
  663. package/dist/frontend/lowering/private-statics.d.ts +46 -0
  664. package/dist/frontend/lowering/private-statics.js +322 -0
  665. package/dist/frontend/lowering/private-statics.js.map +1 -0
  666. package/dist/frontend/lowering/record-inherited.d.ts +17 -1
  667. package/dist/frontend/lowering/record-inherited.js +16 -2
  668. package/dist/frontend/lowering/record-inherited.js.map +1 -1
  669. package/dist/frontend/lowering/record-links.d.ts +73 -0
  670. package/dist/frontend/lowering/record-links.js +797 -0
  671. package/dist/frontend/lowering/record-links.js.map +1 -0
  672. package/dist/frontend/lowering/record-sources.d.ts +12 -1
  673. package/dist/frontend/lowering/record-sources.js +60 -0
  674. package/dist/frontend/lowering/record-sources.js.map +1 -1
  675. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
  676. package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
  677. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  678. package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
  679. package/dist/frontend/lowering/runtime-optional-report.js +300 -0
  680. package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
  681. package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
  682. package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
  683. package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
  684. package/dist/frontend/lowering/static-typeof.d.ts +3 -1
  685. package/dist/frontend/lowering/static-typeof.js +6 -1
  686. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  687. package/dist/frontend/lowering/strict-equality.d.ts +4 -0
  688. package/dist/frontend/lowering/strict-equality.js +14 -0
  689. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  690. package/dist/frontend/lowering/strict-mode.d.ts +1 -5
  691. package/dist/frontend/lowering/strict-mode.js +4 -30
  692. package/dist/frontend/lowering/strict-mode.js.map +1 -1
  693. package/dist/frontend/lowering/structural-instances.d.ts +7 -0
  694. package/dist/frontend/lowering/structural-instances.js +23 -0
  695. package/dist/frontend/lowering/structural-instances.js.map +1 -1
  696. package/dist/frontend/lowering/surfaces.d.ts +42 -1
  697. package/dist/frontend/lowering/surfaces.js +212 -71
  698. package/dist/frontend/lowering/surfaces.js.map +1 -1
  699. package/dist/frontend/lowering/union-retag.d.ts +13 -1
  700. package/dist/frontend/lowering/union-retag.js +55 -1
  701. package/dist/frontend/lowering/union-retag.js.map +1 -1
  702. package/dist/frontend/lowering/union-retag.test.js +51 -0
  703. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  704. package/dist/frontend/lowering/unit-journal.d.ts +136 -17
  705. package/dist/frontend/lowering/unit-journal.js +324 -53
  706. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  707. package/dist/frontend/lowering/unit-journal.test.js +126 -3
  708. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  709. package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
  710. package/dist/frontend/lowering/unit-reuse.js +1008 -0
  711. package/dist/frontend/lowering/unit-reuse.js.map +1 -0
  712. package/dist/frontend/lowering/width-lift.d.ts +12 -0
  713. package/dist/frontend/lowering/zlib-constants.js +3 -2
  714. package/dist/frontend/lowering/zlib-constants.js.map +1 -1
  715. package/dist/frontend/npm-file-import.test.d.ts +1 -0
  716. package/dist/frontend/npm-file-import.test.js +76 -0
  717. package/dist/frontend/npm-file-import.test.js.map +1 -0
  718. package/dist/frontend/npm-static.js +95 -11
  719. package/dist/frontend/npm-static.js.map +1 -1
  720. package/dist/frontend/npm-static.test.js +95 -2
  721. package/dist/frontend/npm-static.test.js.map +1 -1
  722. package/dist/frontend/npm.d.ts +9 -0
  723. package/dist/frontend/npm.js +82 -0
  724. package/dist/frontend/npm.js.map +1 -1
  725. package/dist/frontend/pipeline-native.js +2 -1
  726. package/dist/frontend/pipeline-native.js.map +1 -1
  727. package/dist/frontend/pipeline.d.ts +9 -4
  728. package/dist/frontend/pipeline.js +162 -38
  729. package/dist/frontend/pipeline.js.map +1 -1
  730. package/dist/frontend/pipeline.test.js +68 -11
  731. package/dist/frontend/pipeline.test.js.map +1 -1
  732. package/dist/frontend/program-node.d.ts +3 -0
  733. package/dist/frontend/program-node.js +13 -6
  734. package/dist/frontend/program-node.js.map +1 -1
  735. package/dist/frontend/program.d.ts +71 -2
  736. package/dist/frontend/program.js +836 -411
  737. package/dist/frontend/program.js.map +1 -1
  738. package/dist/frontend/program.test.js +37 -1
  739. package/dist/frontend/program.test.js.map +1 -1
  740. package/dist/frontend/provenance-core.js +4 -0
  741. package/dist/frontend/provenance-core.js.map +1 -1
  742. package/dist/frontend/services-node.d.ts +7 -0
  743. package/dist/frontend/services-node.js +32 -1
  744. package/dist/frontend/services-node.js.map +1 -1
  745. package/dist/frontend/services-node.test.js +51 -0
  746. package/dist/frontend/services-node.test.js.map +1 -1
  747. package/dist/frontend/services.d.ts +14 -0
  748. package/dist/frontend/services.js +52 -2
  749. package/dist/frontend/services.js.map +1 -1
  750. package/dist/frontend/services.test.js +61 -1
  751. package/dist/frontend/services.test.js.map +1 -1
  752. package/dist/frontend/shape-inference/analyze.d.ts +5 -0
  753. package/dist/frontend/shape-inference/analyze.js +104 -4
  754. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  755. package/dist/frontend/shape-inference/domain.js +0 -1
  756. package/dist/frontend/shape-inference/domain.js.map +1 -1
  757. package/dist/frontend/shape-inference/index.js +5 -1
  758. package/dist/frontend/shape-inference/index.js.map +1 -1
  759. package/dist/frontend/shape-inference/memo.d.ts +2 -1
  760. package/dist/frontend/shape-inference/memo.js +6 -2
  761. package/dist/frontend/shape-inference/memo.js.map +1 -1
  762. package/dist/frontend/shape-inference/overlay.d.ts +1 -1
  763. package/dist/frontend/shape-inference/overlay.js +184 -4
  764. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  765. package/dist/frontend/shape-inference/static-objects.js +11 -6
  766. package/dist/frontend/shape-inference/static-objects.js.map +1 -1
  767. package/dist/frontend/source-phase-imports.test.d.ts +1 -0
  768. package/dist/frontend/source-phase-imports.test.js +37 -0
  769. package/dist/frontend/source-phase-imports.test.js.map +1 -0
  770. package/dist/frontend/tier-analysis.d.ts +9 -0
  771. package/dist/frontend/tier-analysis.js +1 -0
  772. package/dist/frontend/tier-analysis.js.map +1 -1
  773. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  774. package/dist/frontend/ts7/ast-node.js +12 -0
  775. package/dist/frontend/ts7/ast-node.js.map +1 -1
  776. package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
  777. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
  778. package/dist/frontend/ts7/ast-wire.js +3 -5
  779. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  780. package/dist/frontend/ts7/checker-backend.d.ts +13 -0
  781. package/dist/frontend/ts7/checker-backend.js +84 -2
  782. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  783. package/dist/frontend/ts7/checker-backend.test.js +126 -2
  784. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  785. package/dist/frontend/ts7/program-host.d.ts +22 -1
  786. package/dist/frontend/ts7/program-host.js +49 -4
  787. package/dist/frontend/ts7/program-host.js.map +1 -1
  788. package/dist/frontend/ts7/program-host.test.js +83 -0
  789. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  790. package/dist/frontend/ts7/rpc-process.d.ts +16 -1
  791. package/dist/frontend/ts7/rpc-process.js +170 -92
  792. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  793. package/dist/frontend/ts7/rpc-process.test.js +49 -21
  794. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  795. package/dist/frontend/tsc-codes.d.ts +57 -3
  796. package/dist/frontend/tsc-codes.js +956 -101
  797. package/dist/frontend/tsc-codes.js.map +1 -1
  798. package/dist/frontend/tsc-codes.test.js +221 -12
  799. package/dist/frontend/tsc-codes.test.js.map +1 -1
  800. package/dist/frontend/type-mapper.d.ts +98 -11
  801. package/dist/frontend/type-mapper.js +770 -182
  802. package/dist/frontend/type-mapper.js.map +1 -1
  803. package/dist/index.d.ts +1 -1
  804. package/dist/index.js +224 -15
  805. package/dist/index.js.map +1 -1
  806. package/dist/index.test.d.ts +1 -0
  807. package/dist/index.test.js +60 -0
  808. package/dist/index.test.js.map +1 -0
  809. package/dist/ir/api.d.ts +1 -1
  810. package/dist/ir/api.js +1 -1
  811. package/dist/ir/api.js.map +1 -1
  812. package/dist/ir/build.d.ts +3 -2
  813. package/dist/ir/build.js +4 -2
  814. package/dist/ir/build.js.map +1 -1
  815. package/dist/ir/builtin-effects.js +96 -0
  816. package/dist/ir/builtin-effects.js.map +1 -1
  817. package/dist/ir/builtin-signatures.d.ts +1 -1
  818. package/dist/ir/builtin-signatures.js +453 -26
  819. package/dist/ir/builtin-signatures.js.map +1 -1
  820. package/dist/ir/callback-specialization.d.ts +3 -2
  821. package/dist/ir/callback-specialization.js +35 -25
  822. package/dist/ir/callback-specialization.js.map +1 -1
  823. package/dist/ir/capture-values.d.ts +8 -4
  824. package/dist/ir/capture-values.js +9 -6
  825. package/dist/ir/capture-values.js.map +1 -1
  826. package/dist/ir/char-unit-locals.d.ts +6 -2
  827. package/dist/ir/char-unit-locals.js +11 -2
  828. package/dist/ir/char-unit-locals.js.map +1 -1
  829. package/dist/ir/class-key-index.d.ts +18 -0
  830. package/dist/ir/class-key-index.js +29 -0
  831. package/dist/ir/class-key-index.js.map +1 -0
  832. package/dist/ir/class-key-index.test.d.ts +1 -0
  833. package/dist/ir/class-key-index.test.js +25 -0
  834. package/dist/ir/class-key-index.test.js.map +1 -0
  835. package/dist/ir/codec.d.ts +82 -0
  836. package/dist/ir/codec.generated.d.ts +13 -0
  837. package/dist/ir/codec.generated.js +5350 -0
  838. package/dist/ir/codec.generated.js.map +1 -0
  839. package/dist/ir/codec.js +325 -0
  840. package/dist/ir/codec.js.map +1 -0
  841. package/dist/ir/codec.test.d.ts +1 -0
  842. package/dist/ir/codec.test.js +225 -0
  843. package/dist/ir/codec.test.js.map +1 -0
  844. package/dist/ir/constant-globals.d.ts +5 -2
  845. package/dist/ir/constant-globals.js +25 -27
  846. package/dist/ir/constant-globals.js.map +1 -1
  847. package/dist/ir/expression-inlining.d.ts +4 -2
  848. package/dist/ir/expression-inlining.js +8 -2
  849. package/dist/ir/expression-inlining.js.map +1 -1
  850. package/dist/ir/field-values.d.ts +5 -2
  851. package/dist/ir/field-values.js +32 -21
  852. package/dist/ir/field-values.js.map +1 -1
  853. package/dist/ir/fields.generated.d.ts +29 -10
  854. package/dist/ir/fields.generated.js +1039 -11
  855. package/dist/ir/fields.generated.js.map +1 -1
  856. package/dist/ir/fields.test.js +46 -2
  857. package/dist/ir/fields.test.js.map +1 -1
  858. package/dist/ir/final-fields.js +1 -1
  859. package/dist/ir/final-fields.js.map +1 -1
  860. package/dist/ir/function-references.d.ts +6 -4
  861. package/dist/ir/function-references.js +11 -4
  862. package/dist/ir/function-references.js.map +1 -1
  863. package/dist/ir/function-references.test.js +14 -0
  864. package/dist/ir/function-references.test.js.map +1 -1
  865. package/dist/ir/init-only-globals.d.ts +4 -2
  866. package/dist/ir/init-only-globals.js +17 -18
  867. package/dist/ir/init-only-globals.js.map +1 -1
  868. package/dist/ir/inline-array-sources.js +4 -1
  869. package/dist/ir/inline-array-sources.js.map +1 -1
  870. package/dist/ir/inline-array-views.d.ts +13 -0
  871. package/dist/ir/inline-array-views.js +945 -0
  872. package/dist/ir/inline-array-views.js.map +1 -0
  873. package/dist/ir/inline-arrays.d.ts +7 -0
  874. package/dist/ir/inline-arrays.js +190 -55
  875. package/dist/ir/inline-arrays.js.map +1 -1
  876. package/dist/ir/inline-arrays.test.js +140 -2
  877. package/dist/ir/inline-arrays.test.js.map +1 -1
  878. package/dist/ir/int32-slots.js +7 -0
  879. package/dist/ir/int32-slots.js.map +1 -1
  880. package/dist/ir/integer-ranges.js +16 -6
  881. package/dist/ir/integer-ranges.js.map +1 -1
  882. package/dist/ir/ir.d.ts +130 -44
  883. package/dist/ir/ir.js +7 -0
  884. package/dist/ir/ir.js.map +1 -1
  885. package/dist/ir/js-groups.d.ts +51 -0
  886. package/dist/ir/js-groups.js +394 -0
  887. package/dist/ir/js-groups.js.map +1 -0
  888. package/dist/ir/js-groups.test.d.ts +1 -0
  889. package/dist/ir/js-groups.test.js +555 -0
  890. package/dist/ir/js-groups.test.js.map +1 -0
  891. package/dist/ir/js-ic.d.ts +10 -9
  892. package/dist/ir/js-ic.js +58 -25
  893. package/dist/ir/js-ic.js.map +1 -1
  894. package/dist/ir/js-ic.test.js +37 -3
  895. package/dist/ir/js-ic.test.js.map +1 -1
  896. package/dist/ir/jsval.js +374 -63
  897. package/dist/ir/jsval.js.map +1 -1
  898. package/dist/ir/jsval.test.js +96 -2
  899. package/dist/ir/jsval.test.js.map +1 -1
  900. package/dist/ir/loop-entry-ranges.js +112 -9
  901. package/dist/ir/loop-entry-ranges.js.map +1 -1
  902. package/dist/ir/loop-entry-ranges.test.js +40 -0
  903. package/dist/ir/loop-entry-ranges.test.js.map +1 -1
  904. package/dist/ir/node-index.d.ts +23 -6
  905. package/dist/ir/node-index.js +126 -49
  906. package/dist/ir/node-index.js.map +1 -1
  907. package/dist/ir/numeric-call-specialization.d.ts +4 -2
  908. package/dist/ir/numeric-call-specialization.js +40 -26
  909. package/dist/ir/numeric-call-specialization.js.map +1 -1
  910. package/dist/ir/paired-while-loops.d.ts +4 -2
  911. package/dist/ir/paired-while-loops.js +8 -2
  912. package/dist/ir/paired-while-loops.js.map +1 -1
  913. package/dist/ir/parameter-versions.d.ts +13 -3
  914. package/dist/ir/parameter-versions.js +63 -40
  915. package/dist/ir/parameter-versions.js.map +1 -1
  916. package/dist/ir/property-bags.d.ts +4 -2
  917. package/dist/ir/property-bags.js +22 -17
  918. package/dist/ir/property-bags.js.map +1 -1
  919. package/dist/ir/receiver-readers.js +58 -2
  920. package/dist/ir/receiver-readers.js.map +1 -1
  921. package/dist/ir/row-pairs.d.ts +4 -2
  922. package/dist/ir/row-pairs.js +12 -11
  923. package/dist/ir/row-pairs.js.map +1 -1
  924. package/dist/ir/runtime-features.d.ts +139 -5
  925. package/dist/ir/runtime-features.js +397 -19
  926. package/dist/ir/runtime-features.js.map +1 -1
  927. package/dist/ir/runtime-features.test.js +135 -1
  928. package/dist/ir/runtime-features.test.js.map +1 -1
  929. package/dist/ir/runtime-jam-loops.d.ts +35 -0
  930. package/dist/ir/runtime-jam-loops.js +604 -0
  931. package/dist/ir/runtime-jam-loops.js.map +1 -0
  932. package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
  933. package/dist/ir/runtime-jam-loops.test.js +565 -0
  934. package/dist/ir/runtime-jam-loops.test.js.map +1 -0
  935. package/dist/ir/saturating-loop-jams.d.ts +11 -2
  936. package/dist/ir/saturating-loop-jams.js +56 -16
  937. package/dist/ir/saturating-loop-jams.js.map +1 -1
  938. package/dist/ir/saturating-loop-jams.test.js +39 -1
  939. package/dist/ir/saturating-loop-jams.test.js.map +1 -1
  940. package/dist/ir/scalar-records.d.ts +5 -2
  941. package/dist/ir/scalar-records.js +12 -2
  942. package/dist/ir/scalar-records.js.map +1 -1
  943. package/dist/ir/self-captures.d.ts +4 -2
  944. package/dist/ir/self-captures.js +40 -28
  945. package/dist/ir/self-captures.js.map +1 -1
  946. package/dist/ir/self-captures.test.js +15 -0
  947. package/dist/ir/self-captures.test.js.map +1 -1
  948. package/dist/ir/serialize.d.ts +8 -2
  949. package/dist/ir/serialize.js +92 -24
  950. package/dist/ir/serialize.js.map +1 -1
  951. package/dist/ir/serialize.test.js +26 -0
  952. package/dist/ir/serialize.test.js.map +1 -1
  953. package/dist/ir/tiers.js +1 -0
  954. package/dist/ir/tiers.js.map +1 -1
  955. package/dist/ir/traverse.js +4 -0
  956. package/dist/ir/traverse.js.map +1 -1
  957. package/dist/ir/typed-argument-clones.d.ts +30 -0
  958. package/dist/ir/typed-argument-clones.js +789 -0
  959. package/dist/ir/typed-argument-clones.js.map +1 -0
  960. package/dist/ir/union-arm-loops.d.ts +3 -0
  961. package/dist/ir/union-arm-loops.js +373 -0
  962. package/dist/ir/union-arm-loops.js.map +1 -0
  963. package/dist/ir/union-arm-loops.test.d.ts +1 -0
  964. package/dist/ir/union-arm-loops.test.js +230 -0
  965. package/dist/ir/union-arm-loops.test.js.map +1 -0
  966. package/dist/ir/validate.js +170 -22
  967. package/dist/ir/validate.js.map +1 -1
  968. package/dist/ir/validate.test.js +46 -0
  969. package/dist/ir/validate.test.js.map +1 -1
  970. package/dist/library/compiler-self-identity.d.ts +8 -2
  971. package/dist/library/compiler-self-identity.js +92 -18
  972. package/dist/library/compiler-self-identity.js.map +1 -1
  973. package/dist/library/compiler-self-identity.test.js +150 -3
  974. package/dist/library/compiler-self-identity.test.js.map +1 -1
  975. package/dist/library/int-infer.d.ts +5 -0
  976. package/dist/library/int-infer.js +15 -3
  977. package/dist/library/int-infer.js.map +1 -1
  978. package/dist/library/ir-policy.js +4 -0
  979. package/dist/library/ir-policy.js.map +1 -1
  980. package/dist/library/library-cache.d.ts +4 -0
  981. package/dist/library/library-cache.js +2 -0
  982. package/dist/library/library-cache.js.map +1 -1
  983. package/dist/library/library-cache.test.js +26 -0
  984. package/dist/library/library-cache.test.js.map +1 -1
  985. package/dist/library/prepare.js +99 -31
  986. package/dist/library/prepare.js.map +1 -1
  987. package/dist/native/cache.d.ts +7 -0
  988. package/dist/native/cache.js +49 -0
  989. package/dist/native/cache.js.map +1 -1
  990. package/dist/native/cache.test.js +13 -1
  991. package/dist/native/cache.test.js.map +1 -1
  992. package/dist/native/cli.js +2 -0
  993. package/dist/native/cli.js.map +1 -1
  994. package/dist/native/compiler.js +26 -5
  995. package/dist/native/compiler.js.map +1 -1
  996. package/dist/native/executable-cache-open.test.js +31 -5
  997. package/dist/native/executable-cache-open.test.js.map +1 -1
  998. package/dist/native/executable-cache.d.ts +6 -1
  999. package/dist/native/executable-cache.js +7 -1
  1000. package/dist/native/executable-cache.js.map +1 -1
  1001. package/dist/native/prepare.d.ts +3 -0
  1002. package/dist/native/prepare.js +74 -28
  1003. package/dist/native/prepare.js.map +1 -1
  1004. package/dist/native/prepare.test.js +25 -3
  1005. package/dist/native/prepare.test.js.map +1 -1
  1006. package/dist/native/sanitizer.js +63 -4
  1007. package/dist/native/sanitizer.js.map +1 -1
  1008. package/dist/native/sanitizer.test.js +93 -2
  1009. package/dist/native/sanitizer.test.js.map +1 -1
  1010. package/dist/native/toolchain.js +9 -2
  1011. package/dist/native/toolchain.js.map +1 -1
  1012. package/dist/node-islands/boundary.d.ts +37 -1
  1013. package/dist/node-islands/boundary.js +65 -7
  1014. package/dist/node-islands/boundary.js.map +1 -1
  1015. package/dist/node-islands/boundary.test.d.ts +1 -0
  1016. package/dist/node-islands/boundary.test.js +76 -0
  1017. package/dist/node-islands/boundary.test.js.map +1 -0
  1018. package/dist/node-islands/detect.d.ts +27 -1
  1019. package/dist/node-islands/detect.js +475 -40
  1020. package/dist/node-islands/detect.js.map +1 -1
  1021. package/dist/node-islands/detect.test.js +175 -4
  1022. package/dist/node-islands/detect.test.js.map +1 -1
  1023. package/dist/node-islands/effect-gate.js +30 -20
  1024. package/dist/node-islands/effect-gate.js.map +1 -1
  1025. package/dist/node-islands/effect-gate.test.js +4 -1
  1026. package/dist/node-islands/effect-gate.test.js.map +1 -1
  1027. package/dist/node-islands/graph-islands.d.ts +40 -0
  1028. package/dist/node-islands/graph-islands.js +128 -0
  1029. package/dist/node-islands/graph-islands.js.map +1 -0
  1030. package/dist/node-islands/growth.d.ts +57 -0
  1031. package/dist/node-islands/growth.js +205 -0
  1032. package/dist/node-islands/growth.js.map +1 -0
  1033. package/dist/node-islands/libnode.d.ts +1 -1
  1034. package/dist/node-islands/libnode.js +1 -1
  1035. package/dist/node-islands/libnode.js.map +1 -1
  1036. package/dist/node-islands/modules.d.ts +28 -0
  1037. package/dist/node-islands/modules.js +156 -0
  1038. package/dist/node-islands/modules.js.map +1 -1
  1039. package/dist/node-islands/modules.test.js +105 -1
  1040. package/dist/node-islands/modules.test.js.map +1 -1
  1041. package/dist/node-islands/policy.js +2 -3
  1042. package/dist/node-islands/policy.js.map +1 -1
  1043. package/dist/node-islands/probe-recorder.d.ts +1 -0
  1044. package/dist/node-islands/probe-recorder.js +596 -0
  1045. package/dist/node-islands/probe-recorder.js.map +1 -0
  1046. package/dist/node-islands/probe-recorder.test.d.ts +1 -0
  1047. package/dist/node-islands/probe-recorder.test.js +80 -0
  1048. package/dist/node-islands/probe-recorder.test.js.map +1 -0
  1049. package/dist/node-islands/report.d.ts +12 -0
  1050. package/dist/node-islands/report.js +28 -0
  1051. package/dist/node-islands/report.js.map +1 -1
  1052. package/dist/node-islands/report.test.js +4 -0
  1053. package/dist/node-islands/report.test.js.map +1 -1
  1054. package/dist/node-islands/rules.js +9 -0
  1055. package/dist/node-islands/rules.js.map +1 -1
  1056. package/dist/node-islands/scan.d.ts +16 -1
  1057. package/dist/node-islands/scan.js +110 -9
  1058. package/dist/node-islands/scan.js.map +1 -1
  1059. package/dist/node-islands/snapshot.d.ts +38 -1
  1060. package/dist/node-islands/snapshot.js +165 -161
  1061. package/dist/node-islands/snapshot.js.map +1 -1
  1062. package/dist/node-islands/snapshot.test.js +63 -2
  1063. package/dist/node-islands/snapshot.test.js.map +1 -1
  1064. package/dist/node-islands/summary.js +8 -0
  1065. package/dist/node-islands/summary.js.map +1 -1
  1066. package/dist/node-islands/type-strip.d.ts +11 -0
  1067. package/dist/node-islands/type-strip.js +157 -0
  1068. package/dist/node-islands/type-strip.js.map +1 -0
  1069. package/dist/node-islands/type-strip.test.d.ts +1 -0
  1070. package/dist/node-islands/type-strip.test.js +31 -0
  1071. package/dist/node-islands/type-strip.test.js.map +1 -0
  1072. package/dist/project-config.d.ts +4 -0
  1073. package/dist/project-config.js +19 -0
  1074. package/dist/project-config.js.map +1 -1
  1075. package/dist/project-config.test.js +10 -0
  1076. package/dist/project-config.test.js.map +1 -1
  1077. package/dist/wasm/translate.js +11 -5
  1078. package/dist/wasm/translate.js.map +1 -1
  1079. package/dist/wasm/translate.test.js +35 -0
  1080. package/dist/wasm/translate.test.js.map +1 -1
  1081. package/package.json +20 -20
  1082. package/surface-manifest.json +221 -122
@@ -10,7 +10,7 @@ import { unsignedHex } from "../../format-integer.js";
10
10
  import { jsFuncNameOf } from "./lowerer.js";
11
11
  import { isJsSourceFile, locOf } from "../program.js";
12
12
  import { noLoweringDiag } from "../../diagnostics/diagnostic.js";
13
- import { BOOL, CAUGHT, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, funcOf, arrayOf, CLASS_FIELD_ATTRIBUTES_PREFIX, classDynViewSupported, DYN_CLASS_PROPERTIES, isClassOwnEnumerableFieldName, isDirentShape, isDynTypedRefType, recordTextCodecClass, shapeHasAccessorSlots, shapeKeyOrders, typeKey, } from "../../ir/ir.js";
13
+ import { BOOL, CAUGHT, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, funcOf, arrayOf, CLASS_FIELD_ATTRIBUTES_PREFIX, classDynViewSupported, DYN_CLASS_PROPERTIES, isClassOwnEnumerableFieldName, isDirentShape, isDynTypedRefType, accessorSlotProp, recordTextCodecClass, shapeKeyOrders, typeKey, } from "../../ir/ir.js";
14
14
  import { accessorCall, findMethodOn } from "./lower-classes.js";
15
15
  import { isSafeToDiscard, isSafeToRepeat } from "./expressions/evaluation-safety.js";
16
16
  import { INSPECT_CUSTOM_MEMBER, symbolFieldDisplayName, TO_STRING_TAG_FIELD, } from "./symbol-fields.js";
@@ -19,6 +19,7 @@ import { dateRootOf } from "./builtins/date-classes.js";
19
19
  import { lowerSystemErrorMap } from "./lower-system-errors.js";
20
20
  import { isPerfEntryType, perfEntryJson } from "./builtins/performance.js";
21
21
  import { recordMayKeepSource, recordSourceTest } from "./record-sources.js";
22
+ import { registerLinkedHelper } from "./record-links.js";
22
23
  import { nullProtoRecordShape, recordNullProtoTest } from "./null-prototype.js";
23
24
  import { dynArgumentPack } from "./call-arguments.js";
24
25
  /* ── IR construction shorthand ───────────────────────────────────────── */
@@ -222,14 +223,15 @@ function errorInstanceReachesItself(lowerer, c) {
222
223
  }
223
224
  /** An error value whose runtime class may be a program-declared subclass,
224
225
  * which may declare fields (`class Bailable extends Error { bail = false }`)
225
- * or carry a `cause`: Node prints the error base (`[Bailable [Error]: m]`,
226
- * the stackless form compiled errors use) followed by the own properties,
227
- * `[Bailable [Error]: m] { bail: true }`, with the usual single-line/
228
- * multi-line choice counting the base. Each program class (most-derived
229
- * first) is an instanceof arm; other values keep the runtime's error
230
- * rendering. Beyond the depth budget an instance with own properties
231
- * prints `[Name]`, as Node does for any object with keys; one without
232
- * prints its header. */
226
+ * or carry a `cause`: Node prints the error base — its stack, headed
227
+ * `Bailable [Error]: m` by improveStack, or the bracketed
228
+ * `[Bailable [Error]: m]` when the stack has no frame line — followed by
229
+ * the own properties, `{ bail: true }` after the last frame, with the
230
+ * usual single-line/multi-line choice counting the base. Each program
231
+ * class (most-derived first) is an instanceof arm; other values keep the
232
+ * runtime's error rendering. Beyond the depth budget an instance with own
233
+ * properties prints `[Name]`, as Node does for any object with keys; one
234
+ * without prints its header. */
233
235
  function errorInspectHelper(lowerer, t, info, loc) {
234
236
  const key = `insp.userError:${typeKey(t)}`;
235
237
  const existing = lowerer.inspectHelpers.get(key);
@@ -548,10 +550,12 @@ function userErrorClasses(info) {
548
550
  visit(info);
549
551
  return out;
550
552
  }
551
- /** Node's improveStack over the stackless base (`[Error: m]`): when the
552
- * instance's constructor name differs from its `name` and the name ends in
553
- * "Error", the header names both — `[Bailable [Error]: m]`, or
554
- * `[FetchError: m]` when the constructor name already contains it. */
553
+ /** Node's improveStack over the rendering's base: when the instance's
554
+ * constructor name differs from its `name` and the name ends in "Error",
555
+ * the header names both — `[Bailable [Error]: m]`, or `[FetchError: m]`
556
+ * when the constructor name already contains it. Two bases reach here: the
557
+ * bracket form (`[Error: m]`, an error whose stack is empty) and the stack
558
+ * itself (`Error: m\n at ...`, whose first line carries the header). */
555
559
  function improvedErrorBase(lowerer, value, base, display, loc) {
556
560
  const str = (method, receiver, args, type) => ({
557
561
  kind: "strIntrinsic",
@@ -605,6 +609,36 @@ function improvedErrorBase(lowerer, value, base, display, loc) {
605
609
  type: STRING,
606
610
  loc,
607
611
  };
612
+ /** The name's length — where a stack base's header ends. */
613
+ const nameLength = () => str("length", nameRef(), [], F64);
614
+ /** The base's character at `name.length`: `:` or `\n` after the name, or
615
+ * the empty answer when the base is the name alone (Node's
616
+ * `stack.length === len` arm). */
617
+ const atNameEnd = () => str("charAt", baseRef(), [nameLength()], STRING);
618
+ const stackCond = and(and(eq(nameRef(), strLit(display, loc), true), str("endsWith", nameRef(), [strLit("Error", loc)], BOOL)), and(str("startsWith", baseRef(), [nameRef()], BOOL), {
619
+ kind: "logical",
620
+ op: "||",
621
+ left: {
622
+ kind: "logical",
623
+ op: "||",
624
+ left: eq(atNameEnd(), strLit(":", loc)),
625
+ right: eq(atNameEnd(), strLit("\n", loc)),
626
+ type: BOOL,
627
+ loc,
628
+ },
629
+ right: eq(atNameEnd(), strLit("", loc)),
630
+ type: BOOL,
631
+ loc,
632
+ }));
633
+ const stackRest = () => str("slice", baseRef(), [nameLength()], STRING);
634
+ const improvedStack = {
635
+ kind: "ternary",
636
+ cond: str("includes", strLit(display, loc), [nameRef()], BOOL),
637
+ then: concatAll([strLit(display, loc), stackRest()], loc),
638
+ else_: concatAll([strLit(`${display} [`, loc), nameRef(), strLit("]", loc), stackRest()], loc),
639
+ type: STRING,
640
+ loc,
641
+ };
608
642
  return {
609
643
  kind: "seqExpr",
610
644
  stmts: [
@@ -623,7 +657,21 @@ function improvedErrorBase(lowerer, value, base, display, loc) {
623
657
  },
624
658
  { kind: "varDecl", localId: "raw.0", init: base, loc },
625
659
  ],
626
- result: { kind: "ternary", cond, then: improved, else_: baseRef(), type: STRING, loc },
660
+ result: {
661
+ kind: "ternary",
662
+ cond,
663
+ then: improved,
664
+ else_: {
665
+ kind: "ternary",
666
+ cond: stackCond,
667
+ then: improvedStack,
668
+ else_: baseRef(),
669
+ type: STRING,
670
+ loc,
671
+ },
672
+ type: STRING,
673
+ loc,
674
+ },
627
675
  type: STRING,
628
676
  loc,
629
677
  };
@@ -662,15 +710,9 @@ function inspectSupport(lowerer, t, visiting, out) {
662
710
  const shape = lowerer.shapes.get(t.shapeId);
663
711
  if (!shape)
664
712
  return "this record shape has no inspect lowering";
665
- const codec = recordTextCodecClass(shape);
666
- if (codec !== null)
667
- return `${codec} instances have no inspect lowering yet`;
668
- // Accessor-carrying shapes: Node prints the accessor names as
669
- // `x: [Getter]` / `[Setter]` / `[Getter/Setter]` in insertion order
670
- // — a position the static field walk does not track (accessor slots
671
- // live outside declaredOrder), so the render fences by name.
672
- if (shapeHasAccessorSlots(shape)) {
673
- return "shapes carrying get/set accessor properties have no inspect lowering yet (Node prints the accessor names as [Getter]/[Setter] in insertion order — read the properties explicitly)";
713
+ if (recordTextCodecClass(shape) !== null) {
714
+ visiting.delete(t.shapeId);
715
+ return null;
674
716
  }
675
717
  if (shape.indexValue !== undefined) {
676
718
  // PURE index-signature shapes (Record<string, V> — no declared
@@ -689,6 +731,22 @@ function inspectSupport(lowerer, t, visiting, out) {
689
731
  return null;
690
732
  }
691
733
  for (const f of shape.fields) {
734
+ // An accessor's closure slot never renders itself: the property's
735
+ // entry prints Node's label, or the getter's RESULT under the
736
+ // getters option (a setter-only property stays a label). A getter
737
+ // that returns nothing renders `[Getter: undefined]` — the label
738
+ // path already, so its void result is no fence.
739
+ const slot = accessorSlotProp(f.name);
740
+ if (slot && f.type.kind === "func") {
741
+ if (slot.kind === "set")
742
+ continue;
743
+ if (f.type.ret.kind === "void")
744
+ continue;
745
+ const why = inspectSupport(lowerer, f.type.ret, visiting, out);
746
+ if (why !== null)
747
+ return why;
748
+ continue;
749
+ }
692
750
  const why = inspectSupport(lowerer, f.type, visiting, out);
693
751
  if (why !== null)
694
752
  return why;
@@ -930,10 +988,11 @@ function inspectMayRefuse(lowerer, t) {
930
988
  }
931
989
  function inspectExprBody(lowerer, t, value, recurse, depth, loc, ownRendering) {
932
990
  // A Dirent row renders through its dyn view: Node's `Dirent { ... }`
933
- // with the Symbol(type) key.
991
+ // with the Symbol(type) key. So do TextEncoder and TextDecoder, through
992
+ // their handles' inspectors.
934
993
  if (t.kind === "record") {
935
994
  const shape = lowerer.shapes.get(t.shapeId);
936
- if (shape && isDirentShape(shape)) {
995
+ if (shape && (isDirentShape(shape) || recordTextCodecClass(shape) !== null)) {
937
996
  return {
938
997
  kind: "libCall",
939
998
  fn: "insp.dyn",
@@ -1096,6 +1155,14 @@ export function typeReachesItself(lowerer, t) {
1096
1155
  };
1097
1156
  return walk(t);
1098
1157
  }
1158
+ /** Whether a record shape carries an accessor getter, whose result can be
1159
+ * the walked value itself. */
1160
+ function shapeHasGetter(lowerer, shapeId) {
1161
+ const shape = lowerer.shapes.get(shapeId);
1162
+ if (!shape)
1163
+ return false;
1164
+ return shape.fields.some((f) => accessorSlotProp(f.name)?.kind === "get" && f.type.kind === "func");
1165
+ }
1099
1166
  /** True when a value of `t` can be cyclic: `t` or any type reachable from
1100
1167
  * it reaches itself. */
1101
1168
  export function typeReachesCycle(lowerer, t) {
@@ -1249,6 +1316,24 @@ export function typeReachesCustomInspect(lowerer, t) {
1249
1316
  };
1250
1317
  return walk(t);
1251
1318
  }
1319
+ /** Whether a `t` value can reach a TextEncoder or TextDecoder, whose
1320
+ * handles print through Node's custom inspectors. */
1321
+ function typeReachesTextCodec(lowerer, t) {
1322
+ const seen = new Set();
1323
+ const walk = (u) => {
1324
+ const k = typeKey(u);
1325
+ if (seen.has(k))
1326
+ return false;
1327
+ seen.add(k);
1328
+ if (u.kind === "record") {
1329
+ const shape = lowerer.shapes.get(u.shapeId);
1330
+ if (shape && recordTextCodecClass(shape) !== null)
1331
+ return true;
1332
+ }
1333
+ return typeConstituents(lowerer, u).some(walk);
1334
+ };
1335
+ return walk(t);
1336
+ }
1252
1337
  /** `%util.inspCustom.<n>(v, r, d): string` — formatValue's custom hook
1253
1338
  * over a class whose instances have a `[util.inspect.custom]` method:
1254
1339
  * with ctx.customInspect set, the method's result (a string re-indented
@@ -1482,8 +1567,11 @@ function inspectHelper(lowerer, t, loc) {
1482
1567
  // order), seen-push after begin, and refWrap around end's result (end
1483
1568
  // adds the <ref *N> prefix on values the walk found circular). Acyclic types
1484
1569
  // keep the zero-cost path.
1570
+ // An accessor's getter answers any value — the walked value itself
1571
+ // included — which no declared field type shows, so a shape with a
1572
+ // getter keeps Node's circular bookkeeping on.
1485
1573
  const onCycle = (t.kind === "record" || t.kind === "array" || t.kind === "map" || t.kind === "object") &&
1486
- typeReachesItself(lowerer, t);
1574
+ (typeReachesItself(lowerer, t) || (t.kind === "record" && shapeHasGetter(lowerer, t.shapeId)));
1487
1575
  const begin = () => [
1488
1576
  exprStmt({ kind: "libCall", fn: "insp.begin", args: [rPlus1()], type: { kind: "void" }, loc }),
1489
1577
  ...(onCycle
@@ -1581,6 +1669,15 @@ function inspectHelper(lowerer, t, loc) {
1581
1669
  const i = () => varRef("i.0", F64, loc);
1582
1670
  const next = () => varRef("next.0", F64, loc);
1583
1671
  const hasMore = () => lt(i(), n());
1672
+ // The render's maxArrayLength: entries show while the output holds
1673
+ // fewer than the limit, at every nesting level (Node's ctx).
1674
+ const limit = () => ({
1675
+ kind: "libCall",
1676
+ fn: "insp.maxArrayLength",
1677
+ args: [],
1678
+ type: F64,
1679
+ loc,
1680
+ });
1584
1681
  // A foreign element (state 3) holds a value outside the element type.
1585
1682
  const foreignElements = elementMayBeForeign(lowerer, t.elem);
1586
1683
  const foreign = () => ({
@@ -1651,7 +1748,7 @@ function inspectHelper(lowerer, t, loc) {
1651
1748
  kind: "logical",
1652
1749
  op: "&&",
1653
1750
  left: hasMore(),
1654
- right: lt(shown(), numLit(100, loc)),
1751
+ right: lt(shown(), limit()),
1655
1752
  type: BOOL,
1656
1753
  loc,
1657
1754
  },
@@ -1788,16 +1885,71 @@ function inspectHelper(lowerer, t, loc) {
1788
1885
  break;
1789
1886
  }
1790
1887
  if (shape.tuple) {
1791
- // Tuples ARE arrays to Node: bracket form, array-extras grouping.
1792
- if (shape.fields.length === 0) {
1888
+ // Tuples ARE arrays to Node: bracket form, array-extras grouping,
1889
+ // and the same maxArrayLength bound on the entries shown.
1890
+ const count = shape.fields.length;
1891
+ if (count === 0) {
1793
1892
  body = [ret(strLit("[]", loc))];
1794
1893
  break;
1795
1894
  }
1796
- body = [depthGate("[Array]"), ...begin()];
1797
- for (const f of shape.fields) {
1798
- body.push(entry(child(f.type, get(f.name, f.type)), isNumberFlag(lowerer, f.type, () => get(f.name, f.type), loc)));
1895
+ locals.push({ id: "lim.0", name: "lim", type: F64, mutable: false });
1896
+ const lim = () => varRef("lim.0", F64, loc);
1897
+ const lt = (left, right) => ({
1898
+ kind: "bin",
1899
+ op: "<",
1900
+ left,
1901
+ right,
1902
+ type: BOOL,
1903
+ loc,
1904
+ });
1905
+ const bounded = () => lt(lim(), numLit(count, loc));
1906
+ body = [
1907
+ depthGate("[Array]"),
1908
+ {
1909
+ kind: "varDecl",
1910
+ localId: "lim.0",
1911
+ init: { kind: "libCall", fn: "insp.maxArrayLength", args: [], type: F64, loc },
1912
+ loc,
1913
+ },
1914
+ ...begin(),
1915
+ ];
1916
+ for (let i = 0; i < count; i++) {
1917
+ const f = shape.fields[i];
1918
+ body.push({
1919
+ kind: "if",
1920
+ cond: lt(numLit(i, loc), lim()),
1921
+ then: [
1922
+ entry(child(f.type, get(f.name, f.type)), isNumberFlag(lowerer, f.type, () => get(f.name, f.type), loc)),
1923
+ ],
1924
+ else_: null,
1925
+ loc,
1926
+ });
1799
1927
  }
1800
- body.push(ret(end(strLit("", loc), strLit("[", loc), strLit("]", loc), true, boolLit(false, loc))));
1928
+ body.push({
1929
+ kind: "if",
1930
+ cond: bounded(),
1931
+ then: [
1932
+ entry({
1933
+ kind: "libCall",
1934
+ fn: "insp.moreItems",
1935
+ args: [
1936
+ {
1937
+ kind: "bin",
1938
+ op: "-",
1939
+ left: numLit(count, loc),
1940
+ right: lim(),
1941
+ type: F64,
1942
+ loc,
1943
+ },
1944
+ ],
1945
+ type: STRING,
1946
+ loc,
1947
+ }, boolLit(false, loc)),
1948
+ ],
1949
+ else_: null,
1950
+ loc,
1951
+ });
1952
+ body.push(ret(end(strLit("", loc), strLit("[", loc), strLit("]", loc), true, bounded())));
1801
1953
  break;
1802
1954
  }
1803
1955
  if (shape.indexValue && shape.fields.length === 0) {
@@ -1908,9 +2060,238 @@ function inspectHelper(lowerer, t, loc) {
1908
2060
  // reachability can settle this shape after the helper is first
1909
2061
  // interned, so rebuild the field walk once metadata is final.
1910
2062
  lowerer.keyOrder.observe(t);
2063
+ const accessors = new Map();
2064
+ for (const f of shape.fields) {
2065
+ const slot = accessorSlotProp(f.name);
2066
+ if (!slot || f.type.kind !== "func")
2067
+ continue;
2068
+ const slots = accessors.get(slot.prop) ?? {};
2069
+ if (slot.kind === "get")
2070
+ slots.get = f.type;
2071
+ else
2072
+ slots.set = f.type;
2073
+ accessors.set(slot.prop, slots);
2074
+ }
2075
+ if (accessors.size > 0) {
2076
+ // The getters option, read once per render: the helper is shared
2077
+ // by every call site, so the option is run-time state.
2078
+ locals.push({ id: "gm.0", name: "gm", type: F64, mutable: false });
2079
+ for (let i = 0; i < accessors.size; i++) {
2080
+ locals.push({ id: `a.${i}`, name: "a", type: STRING, mutable: true }, { id: `ae.${i}`, name: "ae", type: CAUGHT, mutable: false });
2081
+ }
2082
+ }
2083
+ const ACCESSOR_PRIMITIVES = new Set([
2084
+ "f64",
2085
+ "string",
2086
+ "bool",
2087
+ "undefinedT",
2088
+ "nullT",
2089
+ "bigint",
2090
+ "symbol",
2091
+ ]);
2092
+ let accessorIndex = 0;
2093
+ const accessorValueLocals = new Set();
2094
+ /** `key: <label>` for an accessor property, invoking its getter when
2095
+ * the getters option names it: the result renders by kind (Node's
2096
+ * formatProperty), a throw as `[Label: <Inspection threw (err)>]`. */
2097
+ const accessorEntry = (name, slots) => {
2098
+ const index = accessorIndex++;
2099
+ const strId = `a.${index}`;
2100
+ const caughtId = `ae.${index}`;
2101
+ const label = slots.get ? (slots.set ? "Getter/Setter" : "Getter") : "Setter";
2102
+ const s = () => varRef(strId, STRING, loc);
2103
+ const entryOf = (value) => entry(concatAll([strLit(`${inspectKey(name)}: `, loc), value], loc), boolLit(false, loc));
2104
+ const getType = slots.get;
2105
+ if (getType === undefined) {
2106
+ return [
2107
+ { kind: "varDecl", localId: strId, init: strLit(`[${label}]`, loc), loc },
2108
+ entryOf(s()),
2109
+ ];
2110
+ }
2111
+ const called = {
2112
+ kind: "callValue",
2113
+ callee: {
2114
+ kind: "recordGet",
2115
+ obj: v(),
2116
+ shapeId: t.shapeId,
2117
+ field: `%get:${name}`,
2118
+ type: getType,
2119
+ loc,
2120
+ },
2121
+ args: [],
2122
+ type: getType.ret,
2123
+ loc,
2124
+ };
2125
+ const resultT = getType.ret;
2126
+ // What the getter answered renders by RUNTIME kind (Node's
2127
+ // formatProperty): a null and the primitives `[Label: <primitive>]`,
2128
+ // an object or a function `[Label] <value>`. A checker union
2129
+ // dispatches on the arm that holds; a checked-dynamic answer is
2130
+ // classified by the runtime. A getter that returns nothing runs for
2131
+ // its effects and renders Node's `[Getter: undefined]`.
2132
+ const primitiveText = (armT, value) => concatAll([strLit(`[${label}: `, loc), child(armT, value), strLit("]", loc)], loc);
2133
+ const rendered = (armT, value) => {
2134
+ if (armT.kind === "dyn")
2135
+ return {
2136
+ kind: "libCall",
2137
+ fn: "insp.accessorValue",
2138
+ args: [value, strLit(label, loc), rPlus1(), d()],
2139
+ type: STRING,
2140
+ loc,
2141
+ };
2142
+ return ACCESSOR_PRIMITIVES.has(armT.kind)
2143
+ ? primitiveText(armT, value)
2144
+ : concatAll([strLit(`[${label}] `, loc), child(armT, value)], loc);
2145
+ };
2146
+ // The getter runs in an inspection context of its own: util.inspect
2147
+ // calls INSIDE it start from Node's fresh defaults and must leave
2148
+ // this walk's options, frames and circular bookkeeping alone. What
2149
+ // it answered renders in THIS context, at the property's level.
2150
+ const valueId = `av.${index}`;
2151
+ const tokenId = `at.${index}`;
2152
+ const hasValue = resultT.kind !== "void";
2153
+ if (hasValue && !accessorValueLocals.has(valueId)) {
2154
+ accessorValueLocals.add(valueId);
2155
+ // Declared by the try's varDecl, so the answer's release is the
2156
+ // try's; nothing reads it outside.
2157
+ locals.push({ id: valueId, name: "av", type: resultT, mutable: false });
2158
+ }
2159
+ if (!accessorValueLocals.has(tokenId)) {
2160
+ accessorValueLocals.add(tokenId);
2161
+ locals.push({ id: tokenId, name: "at", type: F64, mutable: true });
2162
+ }
2163
+ const val = () => varRef(valueId, resultT, loc);
2164
+ const render = [];
2165
+ if (resultT.kind === "void") {
2166
+ render.push({
2167
+ kind: "assign",
2168
+ localId: strId,
2169
+ value: strLit(`[${label}: undefined]`, loc),
2170
+ loc,
2171
+ });
2172
+ }
2173
+ else if (resultT.kind === "union") {
2174
+ const def = lowerer.unions.get(resultT.unionId);
2175
+ if (!def)
2176
+ throw new InternalCompilerError(`inspect of unknown union ${resultT.unionId}`);
2177
+ // The result is read once, then the arm holding decides the form.
2178
+ def.arms.forEach((arm, tag) => {
2179
+ const narrowed = {
2180
+ kind: "unionNarrow",
2181
+ unionId: resultT.unionId,
2182
+ tag,
2183
+ value: val(),
2184
+ type: arm,
2185
+ loc,
2186
+ };
2187
+ render.push({
2188
+ kind: "if",
2189
+ cond: {
2190
+ kind: "unionIsTag",
2191
+ unionId: resultT.unionId,
2192
+ tag,
2193
+ negated: false,
2194
+ value: val(),
2195
+ type: BOOL,
2196
+ loc,
2197
+ },
2198
+ then: [{ kind: "assign", localId: strId, value: rendered(arm, narrowed), loc }],
2199
+ else_: null,
2200
+ loc,
2201
+ });
2202
+ });
2203
+ }
2204
+ else {
2205
+ render.push({ kind: "assign", localId: strId, value: rendered(resultT, val()), loc });
2206
+ }
2207
+ const threw = concatAll([
2208
+ strLit(`[${label}: <Inspection threw (`, loc),
2209
+ child(DYN, {
2210
+ kind: "caughtToDyn",
2211
+ value: varRef(caughtId, CAUGHT, loc),
2212
+ type: DYN,
2213
+ loc,
2214
+ }),
2215
+ strLit(")>]", loc),
2216
+ ], loc);
2217
+ // Node's condition reads the option's truthiness first: `true`
2218
+ // runs every getter, 'get' the ones without a setter and 'set' the
2219
+ // ones with one.
2220
+ const mode = (n) => ({
2221
+ kind: "bin",
2222
+ op: "===",
2223
+ left: varRef("gm.0", F64, loc),
2224
+ right: numLit(n, loc),
2225
+ type: BOOL,
2226
+ loc,
2227
+ });
2228
+ const either = (a, b) => ({
2229
+ kind: "logical",
2230
+ op: "||",
2231
+ left: a,
2232
+ right: b,
2233
+ type: BOOL,
2234
+ loc,
2235
+ });
2236
+ const libStmt = (fn, args = []) => ({
2237
+ kind: "exprStmt",
2238
+ expr: { kind: "libCall", fn, args, type: VOID, loc },
2239
+ loc,
2240
+ });
2241
+ const endCall = libStmt("insp.customCallEnd", [varRef(tokenId, F64, loc)]);
2242
+ return [
2243
+ { kind: "varDecl", localId: strId, init: strLit(`[${label}]`, loc), loc },
2244
+ {
2245
+ kind: "if",
2246
+ cond: slots.set ? either(mode(1), mode(3)) : either(mode(1), mode(2)),
2247
+ then: [
2248
+ libStmt("insp.mark"),
2249
+ {
2250
+ kind: "assign",
2251
+ localId: tokenId,
2252
+ value: { kind: "libCall", fn: "insp.customCallBegin", args: [], type: F64, loc },
2253
+ loc,
2254
+ },
2255
+ {
2256
+ // Node's try spans the getter call AND the result's
2257
+ // rendering, so a throw from either answers the threw
2258
+ // label. The call's context ends before the result renders
2259
+ // (it renders in this walk's); the mark puts this walk's
2260
+ // options and frames back when the rendering throws and
2261
+ // left them open.
2262
+ kind: "tryCatch",
2263
+ tryBody: [
2264
+ // Declared here, so the answer's release is the try's:
2265
+ // nothing reads it outside.
2266
+ hasValue
2267
+ ? { kind: "varDecl", localId: valueId, init: called, loc }
2268
+ : { kind: "exprStmt", expr: called, loc },
2269
+ endCall,
2270
+ ...render,
2271
+ libStmt("insp.unwind"),
2272
+ ],
2273
+ catchLocalId: caughtId,
2274
+ // A throw from the getter leaves its call open; a throw
2275
+ // from the rendering leaves frames open. The mark returns
2276
+ // this walk to where it was either way.
2277
+ catchBody: [
2278
+ libStmt("insp.unwind"),
2279
+ { kind: "assign", localId: strId, value: threw, loc },
2280
+ ],
2281
+ finallyBody: null,
2282
+ loc,
2283
+ },
2284
+ ],
2285
+ else_: null,
2286
+ loc,
2287
+ },
2288
+ entryOf(s()),
2289
+ ];
2290
+ };
1911
2291
  rebuildShapeOrderBody = () => {
1912
2292
  const current = lowerer.shapes.get(t.shapeId) ?? shape;
1913
- const order = current.declaredOrder ?? current.fields.map((f) => f.name);
2293
+ accessorIndex = 0;
2294
+ const order = current.accessorOrder ?? current.declaredOrder ?? current.fields.map((f) => f.name);
1914
2295
  const byName = new Map(current.fields.map((f) => [f.name, f.type]));
1915
2296
  // Optional fields render only while present (an omitted or
1916
2297
  // deleted property is not shown; an explicit undefined is). A
@@ -1933,13 +2314,27 @@ function inspectHelper(lowerer, t, loc) {
1933
2314
  });
1934
2315
  }
1935
2316
  body.push(depthGate("[Object]"), ...begin());
1936
- // One walk per key order (see perKeyOrder).
1937
- const orders = shapeKeyOrders(current);
2317
+ if (accessors.size > 0) {
2318
+ body.push({
2319
+ kind: "varDecl",
2320
+ localId: "gm.0",
2321
+ init: { kind: "libCall", fn: "insp.gettersMode", args: [], type: F64, loc },
2322
+ loc,
2323
+ });
2324
+ }
2325
+ // One walk per key order (see perKeyOrder). An accessor-carrying
2326
+ // shape enumerates in accessorOrder, exactly as its
2327
+ // checked-dynamic copy does (dyn.ts).
2328
+ const orders = current.accessorOrder !== undefined ? [current.accessorOrder] : shapeKeyOrders(current);
1938
2329
  const walks = orders.map(() => []);
1939
2330
  for (const [k, fname] of orders.flatMap((order, k) => order.map((name) => [k, name]))) {
1940
2331
  const ft = byName.get(fname);
1941
- if (!ft)
2332
+ if (!ft) {
2333
+ const slots = accessors.get(fname);
2334
+ if (slots)
2335
+ walks[k].push(...accessorEntry(fname, slots));
1942
2336
  continue;
2337
+ }
1943
2338
  const show = entry(concatAll([strLit(`${inspectKey(fname)}: `, loc), child(ft, get(fname, ft))], loc), boolLit(false, loc));
1944
2339
  const present = lowerer.recordFieldPresent(v(), t.shapeId, fname, loc);
1945
2340
  walks[k].push(present.kind === "recordHas"
@@ -1980,11 +2375,20 @@ function inspectHelper(lowerer, t, loc) {
1980
2375
  const keyT = isMap
1981
2376
  ? t.key
1982
2377
  : t.elem;
2378
+ // Node's maxArrayLength bounds the entries shown; the tail counts the
2379
+ // entries past the limit.
2380
+ const limit = () => ({
2381
+ kind: "libCall",
2382
+ fn: "insp.maxArrayLength",
2383
+ args: [],
2384
+ type: F64,
2385
+ loc,
2386
+ });
1983
2387
  const hasMore = () => ({
1984
2388
  kind: "bin",
1985
2389
  op: ">",
1986
2390
  left: n(),
1987
- right: numLit(100, loc),
2391
+ right: limit(),
1988
2392
  type: BOOL,
1989
2393
  loc,
1990
2394
  });
@@ -2040,7 +2444,7 @@ function inspectHelper(lowerer, t, loc) {
2040
2444
  },
2041
2445
  {
2042
2446
  kind: "if",
2043
- cond: { kind: "bin", op: "===", left: c(), right: numLit(100, loc), type: BOOL, loc },
2447
+ cond: { kind: "bin", op: "===", left: c(), right: limit(), type: BOOL, loc },
2044
2448
  then: [{ kind: "break", loc }],
2045
2449
  else_: null,
2046
2450
  loc,
@@ -2062,9 +2466,7 @@ function inspectHelper(lowerer, t, loc) {
2062
2466
  entry({
2063
2467
  kind: "libCall",
2064
2468
  fn: "insp.moreItems",
2065
- args: [
2066
- { kind: "bin", op: "-", left: n(), right: numLit(100, loc), type: F64, loc },
2067
- ],
2469
+ args: [{ kind: "bin", op: "-", left: n(), right: limit(), type: F64, loc }],
2068
2470
  type: STRING,
2069
2471
  loc,
2070
2472
  }, boolLit(false, loc)),
@@ -2332,8 +2734,30 @@ function inspectHelper(lowerer, t, loc) {
2332
2734
  });
2333
2735
  }
2334
2736
  lowerer.liftedFns.push(fn);
2737
+ if (t.kind === "record" && recordMayKeepSource(lowerer, t))
2738
+ registerLinkedHelper(lowerer, fn, t.shapeId, "inspect");
2335
2739
  return name;
2336
2740
  }
2741
+ /** The rendering of `value` at recursion `r` and depth budget `d`: its
2742
+ * type's inspect helper, or the checked-dynamic view's rendering when the
2743
+ * type has no inspect lowering (a record with a function field). */
2744
+ export function inspectHelperCall(lowerer, value, r, d, loc) {
2745
+ if (inspectSupport(lowerer, value.type, new Set(), { recursive: false }) !== null)
2746
+ return {
2747
+ kind: "libCall",
2748
+ fn: "insp.dyn",
2749
+ args: [{ kind: "dynFrom", value, liveRef: true, type: DYN, loc }, r, d],
2750
+ type: STRING,
2751
+ loc,
2752
+ };
2753
+ return {
2754
+ kind: "call",
2755
+ callee: inspectHelper(lowerer, value.type, loc),
2756
+ args: [value, r, d],
2757
+ type: STRING,
2758
+ loc,
2759
+ };
2760
+ }
2337
2761
  /* ── the console/format top-level value rendering ────────────────────── */
2338
2762
  /** Node's formatWithOptions REST-ARG rule over one statically-typed value
2339
2763
  * (console.log's non-format arguments, util.format's %s and trailing
@@ -2502,9 +2926,13 @@ function parseInspectOptions(lowerer, node, recursive, dir = false, atRunTime =
2502
2926
  breakLength: 80,
2503
2927
  compact: 3,
2504
2928
  sorted: false,
2929
+ maxArrayLength: 100,
2930
+ maxStringLength: 10000,
2505
2931
  runtime: false,
2506
2932
  depthKind: 0,
2507
2933
  customInspect: !dir,
2934
+ showHidden: false,
2935
+ getters: 0,
2508
2936
  };
2509
2937
  if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
2510
2938
  return options;
@@ -2607,11 +3035,92 @@ function parseInspectOptions(lowerer, node, recursive, dir = false, atRunTime =
2607
3035
  }
2608
3036
  options.breakLength = n;
2609
3037
  }
3038
+ else if (key === "maxStringLength") {
3039
+ if (value.kind === ts.SyntaxKind.NullKeyword ||
3040
+ (ts.isIdentifier(value) && value.text === "Infinity")) {
3041
+ // Node resolves null to Infinity: every character shows.
3042
+ options.maxStringLength = Infinity;
3043
+ }
3044
+ else {
3045
+ const n = numeric();
3046
+ if (n === null && atRunTime) {
3047
+ options.runtime = true;
3048
+ continue;
3049
+ }
3050
+ if (n === null || !Number.isInteger(n) || n < 0) {
3051
+ lowerer.noLowering(`${surface} with this maxStringLength option`, value, "maxStringLength must be a non-negative integer literal (or null)");
3052
+ }
3053
+ options.maxStringLength = n;
3054
+ }
3055
+ }
3056
+ else if (key === "maxArrayLength") {
3057
+ if (value.kind === ts.SyntaxKind.NullKeyword ||
3058
+ (ts.isIdentifier(value) && value.text === "Infinity")) {
3059
+ // Node resolves null to Infinity: every element shows.
3060
+ options.maxArrayLength = Infinity;
3061
+ }
3062
+ else {
3063
+ const n = numeric();
3064
+ if (n === null && atRunTime) {
3065
+ options.runtime = true;
3066
+ continue;
3067
+ }
3068
+ if (n === null || !Number.isInteger(n) || n < 0) {
3069
+ lowerer.noLowering(`${surface} with this maxArrayLength option`, value, "maxArrayLength must be a non-negative integer literal (or null)");
3070
+ }
3071
+ options.maxArrayLength = n;
3072
+ }
3073
+ }
3074
+ else if (key === "getters") {
3075
+ // Node reads the option's truthiness first and compares it to true
3076
+ // and to 'get'/'set' after: any other value keeps the labels.
3077
+ const spelled = ts.isStringLiteral(value) ? value.text : null;
3078
+ if (value.kind === ts.SyntaxKind.TrueKeyword)
3079
+ options.getters = 1;
3080
+ else if (value.kind === ts.SyntaxKind.FalseKeyword)
3081
+ options.getters = 0;
3082
+ else if (spelled === "get")
3083
+ options.getters = 2;
3084
+ else if (spelled === "set")
3085
+ options.getters = 3;
3086
+ else if (spelled !== null ||
3087
+ numeric() !== null ||
3088
+ value.kind === ts.SyntaxKind.NullKeyword ||
3089
+ (ts.isIdentifier(value) && value.text === "undefined")) {
3090
+ options.getters = 0;
3091
+ }
3092
+ else if (atRunTime) {
3093
+ options.runtime = true;
3094
+ continue;
3095
+ }
3096
+ else {
3097
+ lowerer.noLowering(`${surface} with this getters option`, value, "getters must be true, false, 'get' or 'set'");
3098
+ }
3099
+ }
2610
3100
  else if (!dir &&
2611
3101
  key === "customInspect" &&
2612
3102
  (value.kind === ts.SyntaxKind.TrueKeyword || value.kind === ts.SyntaxKind.FalseKeyword)) {
2613
3103
  options.customInspect = value.kind === ts.SyntaxKind.TrueKeyword;
2614
3104
  }
3105
+ else if (key === "showHidden") {
3106
+ if (value.kind === ts.SyntaxKind.FalseKeyword) {
3107
+ // util.inspect's and console.dir's default.
3108
+ }
3109
+ else if (dir) {
3110
+ // console.dir's static entries carry no hidden keys; the option
3111
+ // renders the value's checked-dynamic view instead (dirHidden).
3112
+ if (value.kind !== ts.SyntaxKind.TrueKeyword) {
3113
+ lowerer.noLowering("console.dir with this showHidden option", value, "showHidden must be true or false");
3114
+ }
3115
+ options.showHidden = true;
3116
+ }
3117
+ else {
3118
+ // The hidden entries (an array's [length], a typed array's extras,
3119
+ // non-enumerable and symbol keys) render in the checked-dynamic
3120
+ // walk, so the option takes the runtime reader.
3121
+ options.runtime = true;
3122
+ }
3123
+ }
2615
3124
  else if (dir && key === "customInspect") {
2616
3125
  // console.dir's own default; only that value is lowered.
2617
3126
  if (value.kind !== ts.SyntaxKind.FalseKeyword) {
@@ -2619,49 +3128,111 @@ function parseInspectOptions(lowerer, node, recursive, dir = false, atRunTime =
2619
3128
  }
2620
3129
  }
2621
3130
  else {
2622
- 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)"}`);
3131
+ lowerer.noLowering(`${surface} with the '${key}' option`, prop, `the lowered options are depth (numeric literal or null), colors: false, showHidden (true or false), compact (false or a number), breakLength, maxArrayLength and maxStringLength (a non-negative integer or null), getters (true, false, 'get' or 'set'), ${dir ? "sorted (true or false), and customInspect: false" : "and sorted (true or false)"}`);
2623
3132
  }
2624
3133
  }
2625
3134
  return options;
2626
3135
  }
2627
- /** A render under non-default breakLength/compact/sorted: the value is evaluated
2628
- * first, the layout applies to this render only, and the defaults return
2629
- * however the render ends, an inspection refusal included. The render runs
2630
- * in a lifted function, `(v) => { insp.layout(...); try { return render(v); }
2631
- * finally { insp.layout(80, 3, false); } }`, since a seqExpr cannot hold the
2632
- * try; `tag` names the render for the function's key. */
3136
+ /** A render under non-default breakLength/compact/sorted/maxArrayLength/
3137
+ * maxStringLength/getters: the value is evaluated first, the options apply
3138
+ * to this render only, and the defaults return however the render ends, an
3139
+ * inspection refusal included. The render runs in a lifted function,
3140
+ * `(v) => { set...; try { return render(v); } finally { restore...; } }`,
3141
+ * since a seqExpr cannot hold the try; `tag` names the render for the
3142
+ * function's key. */
2633
3143
  function withInspectLayout(lowerer, options, value, tag, render, loc) {
2634
- if (options.breakLength === 80 && options.compact === 3 && !options.sorted)
3144
+ if (options.breakLength === 80 &&
3145
+ options.compact === 3 &&
3146
+ !options.sorted &&
3147
+ options.maxArrayLength === 100 &&
3148
+ options.maxStringLength === 10000 &&
3149
+ options.getters === 0)
2635
3150
  return render(value);
2636
- const key = `layout:${tag}:${typeKey(value.type)}:${options.breakLength}:${options.compact}:${options.sorted}:${options.depth}`;
3151
+ const key = `layout:${tag}:${typeKey(value.type)}:${options.breakLength}:${options.compact}:${options.sorted}:${options.maxArrayLength}:${options.maxStringLength}:${options.getters}:${options.depth}`;
2637
3152
  let name = lowerer.inspectHelpers.get(key);
2638
3153
  if (name === undefined) {
2639
3154
  name = keyedHelperName(lowerer, "%util.inspLayout", key);
2640
3155
  lowerer.inspectHelpers.set(key, name);
2641
- const layout = (breakLength, compact, sorted) => ({
3156
+ const layout = (breakLength, compact, sorted, maxArrayLength) => ({
2642
3157
  kind: "exprStmt",
2643
3158
  expr: {
2644
3159
  kind: "libCall",
2645
3160
  fn: "insp.layout",
2646
- args: [numLit(breakLength, loc), numLit(compact, loc), boolLit(sorted, loc)],
3161
+ args: [
3162
+ numLit(breakLength, loc),
3163
+ numLit(compact, loc),
3164
+ boolLit(sorted, loc),
3165
+ numLit(maxArrayLength, loc),
3166
+ ],
2647
3167
  type: VOID,
2648
3168
  loc,
2649
3169
  },
2650
3170
  loc,
2651
3171
  });
3172
+ const locals = [{ id: "v.0", name: "v", type: value.type, mutable: false }];
3173
+ const apply = [
3174
+ layout(options.breakLength, options.compact, options.sorted, options.maxArrayLength),
3175
+ ];
3176
+ const restore = [layout(80, 3, false, 100)];
3177
+ if (options.maxStringLength !== 10000) {
3178
+ // insp.maxStringLength answers the previous value.
3179
+ const previous = `previous.${locals.length}`;
3180
+ locals.push({ id: previous, name: "previous", type: F64, mutable: false });
3181
+ const limit = (arg) => ({
3182
+ kind: "libCall",
3183
+ fn: "insp.maxStringLength",
3184
+ args: [arg],
3185
+ type: F64,
3186
+ loc,
3187
+ });
3188
+ apply.push({
3189
+ kind: "varDecl",
3190
+ localId: previous,
3191
+ init: limit(numLit(options.maxStringLength, loc)),
3192
+ loc,
3193
+ });
3194
+ restore.unshift({
3195
+ kind: "exprStmt",
3196
+ expr: limit(varRef(previous, F64, loc)),
3197
+ loc,
3198
+ });
3199
+ }
3200
+ if (options.getters !== 0) {
3201
+ // insp.getters answers the previous value.
3202
+ const previous = `previous.${locals.length}`;
3203
+ locals.push({ id: previous, name: "previous", type: F64, mutable: false });
3204
+ const getters = (arg) => ({
3205
+ kind: "libCall",
3206
+ fn: "insp.getters",
3207
+ args: [arg],
3208
+ type: F64,
3209
+ loc,
3210
+ });
3211
+ apply.push({
3212
+ kind: "varDecl",
3213
+ localId: previous,
3214
+ init: getters(numLit(options.getters, loc)),
3215
+ loc,
3216
+ });
3217
+ restore.unshift({
3218
+ kind: "exprStmt",
3219
+ expr: getters(varRef(previous, F64, loc)),
3220
+ loc,
3221
+ });
3222
+ }
2652
3223
  lowerer.liftedFns.push({
2653
3224
  name,
2654
3225
  params: [{ localId: "v.0", name: "v", type: value.type }],
2655
3226
  returnType: STRING,
2656
- locals: [{ id: "v.0", name: "v", type: value.type, mutable: false }],
3227
+ locals,
2657
3228
  body: [
2658
- layout(options.breakLength, options.compact, options.sorted),
3229
+ ...apply,
2659
3230
  {
2660
3231
  kind: "tryCatch",
2661
3232
  tryBody: [{ kind: "return", value: render(varRef("v.0", value.type, loc)), loc }],
2662
3233
  catchBody: null,
2663
3234
  catchLocalId: null,
2664
- finallyBody: [layout(80, 3, false)],
3235
+ finallyBody: restore,
2665
3236
  loc,
2666
3237
  },
2667
3238
  ],
@@ -2788,14 +3359,18 @@ function lowerRuntimeInspect(lowerer, args, loc) {
2788
3359
  * walk that refuses a Buffer anywhere inside. */
2789
3360
  export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
2790
3361
  const surface = dir ? "console.dir" : "util.inspect";
3362
+ // console.dir's showHidden renders the checked-dynamic walk with its
3363
+ // hidden entries, so the baked forms below must not swallow the option.
3364
+ const dirPreview = dir ? parseInspectOptions(lowerer, optionsNode, false, dir) : null;
2791
3365
  // Inline function/class literals and direct declared names render as
2792
3366
  // their baked forms; other function-typed values fence below.
2793
3367
  const direct = directCallableInspect(lowerer, valueNode, loc);
2794
- if (direct) {
3368
+ if (direct && !dirPreview?.showHidden) {
2795
3369
  parseInspectOptions(lowerer, optionsNode, false, dir);
2796
3370
  return direct;
2797
3371
  }
2798
- if (ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode)) {
3372
+ if ((ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode)) &&
3373
+ !dirPreview?.showHidden) {
2799
3374
  parseInspectOptions(lowerer, optionsNode, false, dir);
2800
3375
  return strLit(valueNode.kind === ts.SyntaxKind.FunctionExpression &&
2801
3376
  valueNode.name
@@ -2811,6 +3386,23 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
2811
3386
  const name = jsFuncNameOf(valueNode);
2812
3387
  value = { kind: "dynFrom", value, type: DYN, ...(name !== null ? { fnName: name } : {}), loc };
2813
3388
  }
3389
+ if (dirPreview?.showHidden) {
3390
+ // console.dir's hidden entries (an array's [length], a typed array's
3391
+ // extras, non-enumerable and symbol keys) render in the checked-dynamic
3392
+ // walk with custom inspection off, dir's default; the value needs a
3393
+ // checked view to reach it.
3394
+ if (value.type.kind !== "dyn" && !lowerer.dynConvertible(value.type)) {
3395
+ lowerer.noLowering(`console.dir with showHidden of '${lowerer.fmt(value.type)}' values`, valueNode, "the hidden entries render through the value's checked-dynamic view, which this type has no conversion to");
3396
+ }
3397
+ const input = value.type.kind === "dyn" ? value : { kind: "dynFrom", value, type: DYN, loc };
3398
+ return withInspectLayout(lowerer, dirPreview, input, "dirHidden", (v) => ({
3399
+ kind: "libCall",
3400
+ fn: "console.dirHidden",
3401
+ args: [v, numLit(dirPreview.depth, loc)],
3402
+ type: STRING,
3403
+ loc,
3404
+ }), loc);
3405
+ }
2814
3406
  if (value.type.kind === "bytes") {
2815
3407
  // One runtime representation serves Buffer AND Uint8Array; their
2816
3408
  // renderings differ (<Buffer aa> vs Uint8Array(1) [ 170 ]), so the
@@ -2852,36 +3444,60 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
2852
3444
  // unbounded depth given as Infinity or undefined, and customInspect:
2853
3445
  // false (console.dir's default), apply around the render when the value
2854
3446
  // can reach a custom method; the previous settings return afterwards.
2855
- const reachesCustom = typeReachesCustomInspect(lowerer, value.type) || typeReachesDyn(lowerer, value.type);
3447
+ const reachesCustom = typeReachesCustomInspect(lowerer, value.type) ||
3448
+ typeReachesDyn(lowerer, value.type) ||
3449
+ typeReachesTextCodec(lowerer, value.type);
2856
3450
  const depthContext = reachesCustom && depth === Infinity && options.depthKind !== 1;
2857
3451
  const customContext = reachesCustom && !options.customInspect;
2858
3452
  if (depthContext || customContext) {
2859
- const stmts = [];
2860
- const restore = [];
2861
- const setting = (fn, arg, type) => {
2862
- const previous = lowerer.declareHiddenLocal("%inspectContext", type);
2863
- const call = (a) => ({ kind: "libCall", fn, args: [a], type, loc });
2864
- stmts.push({ kind: "varDecl", localId: previous.id, init: call(arg), loc });
2865
- restore.push({ kind: "exprStmt", expr: call(varRef(previous.id, type, loc)), loc });
2866
- };
2867
- if (customContext)
2868
- setting("insp.customInspect", boolLit(false, loc), BOOL);
2869
- if (depthContext)
2870
- setting("insp.depthKind", numLit(options.depthKind, loc), F64);
2871
- const text = lowerer.declareHiddenLocal("%inspectText", STRING);
2872
- stmts.push({
2873
- kind: "varDecl",
2874
- localId: text.id,
2875
- init: withInspectLayout(lowerer, options, value, "inspect", (input) => inspectExpr(lowerer, value.type, input, numLit(0, loc), numLit(depth, loc), loc), loc),
2876
- loc,
2877
- });
2878
- return {
2879
- kind: "seqExpr",
2880
- stmts: [...stmts, ...restore.reverse()],
2881
- result: varRef(text.id, STRING, loc),
2882
- type: STRING,
2883
- loc,
2884
- };
3453
+ // The settings apply in a lifted function, `(v) => { set; try { return
3454
+ // render(v); } finally { restore; } }`, so the previous ones return on
3455
+ // every exit, an inspection refusal's throw included (a seqExpr cannot
3456
+ // hold the try).
3457
+ const key = `context:${typeKey(value.type)}:${customContext}:${depthContext}:${options.depthKind}:${options.breakLength}:${options.compact}:${options.sorted}:${options.maxArrayLength}:${options.maxStringLength}:${options.getters}:${depth}`;
3458
+ let name = lowerer.inspectHelpers.get(key);
3459
+ if (name === undefined) {
3460
+ name = keyedHelperName(lowerer, "%util.inspContext", key);
3461
+ lowerer.inspectHelpers.set(key, name);
3462
+ const locals = [{ id: "v.0", name: "v", type: value.type, mutable: false }];
3463
+ const stmts = [];
3464
+ const restore = [];
3465
+ const setting = (fn, arg, type) => {
3466
+ const previous = `previous.${locals.length}`;
3467
+ locals.push({ id: previous, name: "previous", type, mutable: false });
3468
+ const call = (a) => ({ kind: "libCall", fn, args: [a], type, loc });
3469
+ stmts.push({ kind: "varDecl", localId: previous, init: call(arg), loc });
3470
+ restore.push({ kind: "exprStmt", expr: call(varRef(previous, type, loc)), loc });
3471
+ };
3472
+ if (customContext)
3473
+ setting("insp.customInspect", boolLit(false, loc), BOOL);
3474
+ if (depthContext)
3475
+ setting("insp.depthKind", numLit(options.depthKind, loc), F64);
3476
+ const input = varRef("v.0", value.type, loc);
3477
+ stmts.push({
3478
+ kind: "tryCatch",
3479
+ tryBody: [
3480
+ {
3481
+ kind: "return",
3482
+ value: withInspectLayout(lowerer, options, input, "inspect", (v) => inspectExpr(lowerer, value.type, v, numLit(0, loc), numLit(depth, loc), loc), loc),
3483
+ loc,
3484
+ },
3485
+ ],
3486
+ catchBody: null,
3487
+ catchLocalId: null,
3488
+ finallyBody: restore.reverse(),
3489
+ loc,
3490
+ });
3491
+ lowerer.liftedFns.push({
3492
+ name,
3493
+ params: [{ localId: "v.0", name: "v", type: value.type }],
3494
+ returnType: STRING,
3495
+ locals,
3496
+ body: stmts,
3497
+ loc,
3498
+ });
3499
+ }
3500
+ return { kind: "call", callee: name, args: [value], type: STRING, loc };
2885
3501
  }
2886
3502
  if (dir && value.type.kind === "dyn") {
2887
3503
  return withInspectLayout(lowerer, options, value, "dirDyn", (input) => ({
@@ -2958,17 +3574,18 @@ function formatSValue(lowerer, node, value, depth, loc) {
2958
3574
  return inspectExpr(lowerer, t, value, numLit(0, loc), numLit(depth, loc), loc);
2959
3575
  }
2960
3576
  /** %O (depth 2) / %o (showHidden, depth 4) — inspect with the spec's
2961
- * option deltas. A checked-dynamic argument renders through the runtime's
2962
- * showHidden walk; static %o fences over arrays and nested dynamic values
2963
- * (showHidden adds an array's hidden [length] entry, which the static
2964
- * rendering has no lowering for). */
3577
+ * option deltas. A showHidden argument that the checked-dynamic tree can
3578
+ * hold (arrays — whose hidden [length] entry the static rendering has no
3579
+ * lowering for — records, maps, sets, typed arrays and nested dynamic
3580
+ * values) renders through the runtime's showHidden walk; the static
3581
+ * rendering covers the default %O. */
2965
3582
  function formatOArg(lowerer, node, depth, loc) {
2966
3583
  const value = lowerer.lowerExpr(node);
2967
- if (depth === 4 && value.type.kind === "dyn") {
3584
+ if (depth === 4 && (value.type.kind === "dyn" || lowerer.dynConvertible(value.type))) {
2968
3585
  return {
2969
3586
  kind: "libCall",
2970
3587
  fn: "insp.dynHidden",
2971
- args: [value, numLit(4, loc)],
3588
+ args: [lowerer.coerceToExpected(value, DYN), numLit(4, loc)],
2972
3589
  type: STRING,
2973
3590
  loc,
2974
3591
  };
@@ -2984,6 +3601,8 @@ function formatOArg(lowerer, node, depth, loc) {
2984
3601
  lowerer.noLowering("util.format %o over values with [util.inspect.custom] methods", node, "%o passes showHidden to the methods — use %O");
2985
3602
  }
2986
3603
  if (depth === 4 && typeTreeHasHidden(lowerer, value.type, new Set())) {
3604
+ // The static rendering below has no showHidden entries; the tree is
3605
+ // not one the checked-dynamic walk can hold.
2987
3606
  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");
2988
3607
  }
2989
3608
  return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
@@ -3578,7 +4197,9 @@ export function heldFormatArgs(lowerer, argNodes, loc) {
3578
4197
  lowerer.noLowering(unconvertibleSurface(refused.type), refused.node, UNCONVERTIBLE_HINT);
3579
4198
  return { stmts, args, specifies, format, joinable };
3580
4199
  }
3581
- /** Arrays anywhere in the tree — the %o (showHidden) gate. */
4200
+ /** Arrays, byte views or checked-dynamic values anywhere in the tree — the
4201
+ * static %o (showHidden) gate, for the types the checked-dynamic walk
4202
+ * cannot hold. */
3582
4203
  function typeTreeHasHidden(lowerer, t, visiting) {
3583
4204
  switch (t.kind) {
3584
4205
  case "array":