@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
@@ -1,8 +1,11 @@
1
- import { BOOL, F64, KEY_ORDER_FIELD, shapeHasAccessorSlots, typeEquals, UNDEFINED_T, VOID, } from "../../ir/ir.js";
1
+ import { dynUndefinedExpr, strLit } from "../../ir/build.js";
2
+ import { BOOL, DYN, F64, KEY_ORDER_FIELD, shapeHasAccessorSlots, typeEquals, UNDEFINED_T, VOID, } from "../../ir/ir.js";
2
3
  import { everyExprChild, everyStmtChild, everyTypeChild, transformStmtList, } from "../../ir/traverse.js";
3
4
  import * as ts from "../ts7/adapter.js";
4
5
  import { ALWAYS_THROW_LIB_FNS } from "../../ir/builtin-effects.js";
5
- import { recordMayKeepSource } from "./record-sources.js";
6
+ import { replaceChildExpr } from "../../ir/fields.generated.js";
7
+ import { InternalCompilerError } from "../../errors.js";
8
+ import { recordMayKeepSource, recordSourceTest } from "./record-sources.js";
6
9
  /** The statements a key-order helper runs for record `ref`: `walks[0]`,
7
10
  * its walk over the shape's table, or, for a shape with orderVariants, a
8
11
  * branch per order (walks[i] for order i) on the value's KEY_ORDER_FIELD.
@@ -39,25 +42,77 @@ export class KeyOrderNotes {
39
42
  literals = new Map();
40
43
  copies = new Map();
41
44
  methodResults = new Map();
45
+ /** Literals whose spreads copy source keys the target does not declare
46
+ * (a width spread), with their contributors (keepWidthSpreads), and
47
+ * every spread literal over a shape that can keep a source (same-shape
48
+ * copies, which keep the source's undeclared keys when it has any). */
49
+ widths = new Map();
50
+ /** `"k" in r` answers over a closed record whose literal key the shape
51
+ * does not declare, with the receiver the static form evaluated
52
+ * (keepSourceProbes). */
53
+ sourceProbes = new Map();
54
+ /** Same-shape `{ ...r, k: v }` clones (lowerObjectLiteral's recordClone
55
+ * fast path), which copy the source's own keys too (keepRecordClones). */
56
+ clones = new Set();
42
57
  /** Shapes a frontend order surface (keys, values/entries, inspect,
43
58
  * index-signature merges) walks. */
44
59
  observed = new Set();
45
60
  /** Shapes whose table this pass replaced. */
46
61
  changed = new Set();
62
+ /** Width-spread literals this pass kept as a record's source
63
+ * (keepWidthSpreads). A kept copy holds undeclared keys, so the
64
+ * index-signature capture must consult it (lowerer.ts). */
65
+ keptWidthSpreads = 0;
66
+ /** The shapes those kept copies build. A width spread or clone only
67
+ * keeps a source on a shape in here, so the reflective helpers
68
+ * (lower-calls.ts) stay static for every other shape, and the pass reads
69
+ * it back as a spread source that can already hold one. */
70
+ keptSourceShapes = new Set();
47
71
  /** The sizes of the notes' tables (unit-journal.ts). */
48
72
  journalSizes() {
49
73
  return [
50
74
  this.literals.size,
51
75
  this.copies.size,
52
76
  this.methodResults.size,
77
+ this.widths.size,
78
+ this.sourceProbes.size,
79
+ this.clones.size,
53
80
  this.observed.size,
54
81
  this.changed.size,
82
+ this.keptSourceShapes.size,
55
83
  ];
56
84
  }
57
85
  literal(node, segments) {
58
86
  this.literals.set(node, segments);
59
87
  return node;
60
88
  }
89
+ /** A record literal whose spreads copy source keys the target does not
90
+ * declare (`drops`), with its contributors. */
91
+ width(node, segments, drops) {
92
+ this.widths.set(node, { segments, drops });
93
+ return node;
94
+ }
95
+ widthOf(node) {
96
+ return this.widths.get(node);
97
+ }
98
+ /** A statically-false `"k" in r` over a closed record, which a kept
99
+ * source can make true. */
100
+ sourceProbe(node, receiver, key) {
101
+ this.sourceProbes.set(node, { receiver, key });
102
+ return node;
103
+ }
104
+ sourceProbeOf(node) {
105
+ return this.sourceProbes.get(node);
106
+ }
107
+ /** A same-shape `{ ...r, k: v }` clone, which copies the source's own
108
+ * keys as Node does. */
109
+ clone(node) {
110
+ this.clones.add(node);
111
+ return node;
112
+ }
113
+ isClone(node) {
114
+ return this.clones.has(node);
115
+ }
61
116
  copy(node, sourceShapeId) {
62
117
  this.copies.set(node, sourceShapeId);
63
118
  return node;
@@ -80,6 +135,14 @@ export class KeyOrderNotes {
80
135
  const method = this.methodResults.get(from);
81
136
  if (method !== undefined)
82
137
  this.methodResults.set(to, method);
138
+ const width = this.widths.get(from);
139
+ if (width !== undefined)
140
+ this.widths.set(to, width);
141
+ const probe = this.sourceProbes.get(from);
142
+ if (probe !== undefined)
143
+ this.sourceProbes.set(to, probe);
144
+ if (this.clones.has(from))
145
+ this.clones.add(to);
83
146
  }
84
147
  observe(type) {
85
148
  if (type.kind === "record")
@@ -201,6 +264,8 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
201
264
  return f;
202
265
  };
203
266
  const observedRoots = [];
267
+ /** The receivers of the program's own-key presence tests. */
268
+ const presenceRoots = [];
204
269
  const inits = new Map();
205
270
  const undefinedArmed = (t) => t.kind === "union" && lowerer.armTag(t.unionId, UNDEFINED_T) >= 0;
206
271
  const containsAbsent = (value) => value.kind === "fieldAbsent" ||
@@ -303,6 +368,12 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
303
368
  else
304
369
  shapesIn(type, runtimeShapes, runtimeSeen, true);
305
370
  };
371
+ /** The shapes a checked conversion in this program builds, which are the
372
+ * only values that already hold a source when this pass runs (the ones
373
+ * this pass keeps join keptSourceShapes as it decides). Collected by the
374
+ * walk below, which already meets every conversion. */
375
+ const convertedShapes = new Set();
376
+ const convertedSeen = new Set();
306
377
  // ── collection ──────────────────────────────────────────────────────
307
378
  let pos = 0;
308
379
  let fnName = "";
@@ -311,6 +382,13 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
311
382
  * each one is built. A literal's notes are shared by its rebuilt copies,
312
383
  * so `literalSites` counts every literal of each witness. */
313
384
  const leadingSpreads = new Map();
385
+ /** Width literals (KeyOrderNotes.width), where each is built. */
386
+ const widthSites = [];
387
+ /** `"k" in r` sites a kept source can answer true (keepSourceProbes). */
388
+ const probeSites = [];
389
+ /** Same-shape `{ ...r, k: v }` clones that copy the source's own keys
390
+ * (keepRecordClones). */
391
+ const cloneSites = [];
314
392
  const literalSites = new Map();
315
393
  const loops = [];
316
394
  let loopIds = 0;
@@ -349,6 +427,13 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
349
427
  inits.set(id, { count: 1, fn: fnName, loop: loopKey(), pos, fresh });
350
428
  };
351
429
  const visitExpr = (e) => {
430
+ const probe = notes.sourceProbeOf(e);
431
+ if (probe !== undefined && currentFn !== null) {
432
+ probeSites.push({ node: e, fn: currentFn });
433
+ presenceRoots.push(probe.receiver.type);
434
+ }
435
+ if (e.kind === "call" && e.callee.startsWith("%obj.hasOwn") && e.args[0] !== undefined)
436
+ presenceRoots.push(e.args[0].type);
352
437
  switch (e.kind) {
353
438
  case "recordLit": {
354
439
  if (e.type.kind !== "record")
@@ -382,6 +467,8 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
382
467
  case "recordClone": {
383
468
  if (e.type.kind !== "record")
384
469
  return;
470
+ if (notes.isClone(e) && currentFn !== null)
471
+ cloneSites.push({ node: e, fn: currentFn });
385
472
  const f = factsOf(e.type.shapeId);
386
473
  f.clones = true;
387
474
  for (const o of e.overrides)
@@ -396,6 +483,9 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
396
483
  const literal = e.result;
397
484
  if (literal.kind !== "recordLit" || currentFn === null)
398
485
  return;
486
+ const width = notes.widthOf(literal);
487
+ if (width !== undefined)
488
+ widthSites.push({ wrapper: e, literal, fn: currentFn, note: width });
399
489
  const segments = notes.literalOf(literal);
400
490
  const first = segments?.[0];
401
491
  if (segments === undefined || first?.kind !== "spread" || first.value === undefined)
@@ -465,6 +555,7 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
465
555
  return;
466
556
  }
467
557
  case "dynCheck":
558
+ conversionShapes(lowerer, e.type, convertedShapes, convertedSeen);
468
559
  if (e.adopt === true)
469
560
  shapesIn(e.type, declaredShapes, declaredSeen);
470
561
  // Conversions that build no record: a boxed primitive, and a
@@ -540,6 +631,151 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
540
631
  for (const id of declaredShapes)
541
632
  if (!runtimeShapes.has(id))
542
633
  factsOf(id).pinned = true;
634
+ // ── width spreads ───────────────────────────────────────────────────
635
+ // A width spread keeps the copy's own keys when an order surface can
636
+ // observe its target (keepWidthSpreads). The observation is the one the
637
+ // tables use below, before ordered spreads join it. A source can be
638
+ // another width spread's target, so this runs until no site joins.
639
+ const keptWidths = new Set();
640
+ const keptClones = new Set();
641
+ /** The statements each kept site's literal evaluates in (the wrapper's
642
+ * prologue), which the per-instance order plan reads a spread's source
643
+ * binding from after keepWidthSpreads moved the literal into a
644
+ * declaration of its own. */
645
+ const keptLiteralStmts = new Map();
646
+ /** Shapes a kept dropping copy builds: the copy holds keys the shape has
647
+ * no slot for, so its order is its kept source's, and the shape keeps
648
+ * today's table (as a literal with a dropped field does without the
649
+ * kept source). */
650
+ const keptDropShapes = new Set();
651
+ {
652
+ const early = new Set();
653
+ const earlySeen = new Set();
654
+ for (const id of notes.observed)
655
+ shapesIn({ kind: "record", shapeId: id }, early, earlySeen);
656
+ for (const root of observedRoots)
657
+ shapesIn(root, early, earlySeen);
658
+ // A presence test (`"k" in r`, Object.hasOwn) observes a record's own
659
+ // keys as an order surface does.
660
+ for (const root of presenceRoots)
661
+ shapesIn(root, early, earlySeen);
662
+ // An observed copy shows the own keys of each record it spreads, so a
663
+ // spread source is observed through it, transitively.
664
+ for (let grew = true; grew;) {
665
+ grew = false;
666
+ for (const { literal, note } of widthSites) {
667
+ if (literal.type.kind !== "record" || !early.has(literal.type.shapeId))
668
+ continue;
669
+ for (const segment of note.segments) {
670
+ if (segment.kind !== "spread")
671
+ continue;
672
+ const before = early.size;
673
+ shapesIn(segment.value.type, early, earlySeen);
674
+ if (early.size !== before)
675
+ grew = true;
676
+ }
677
+ }
678
+ // A copy narrowed from a record links to it (record-links.ts) and
679
+ // shows the record's own keys, so the record is observed through it.
680
+ for (const link of lowerer.recordLinks.values()) {
681
+ if (!early.has(link.to))
682
+ continue;
683
+ const before = early.size;
684
+ shapesIn({ kind: "record", shapeId: link.from }, early, earlySeen);
685
+ if (early.size !== before)
686
+ grew = true;
687
+ }
688
+ }
689
+ for (let grew = true; grew;) {
690
+ grew = false;
691
+ for (const { wrapper, literal, note } of widthSites) {
692
+ if (!note.drops || keptWidths.has(wrapper) || literal.type.kind !== "record")
693
+ continue;
694
+ if (!early.has(literal.type.shapeId) || !widthKeepable(lowerer, wrapper, note.segments))
695
+ continue;
696
+ keptWidths.add(wrapper);
697
+ notes.keptSourceShapes.add(literal.type.shapeId);
698
+ grew = true;
699
+ for (const segment of note.segments)
700
+ if (segment.kind === "spread")
701
+ shapesIn(segment.value.type, early, earlySeen);
702
+ }
703
+ }
704
+ // A same-shape copy (`{ ...r }`, `{ ...r, ...s }`) of a record that
705
+ // kept undeclared keys copies them too. A copy keeps its source's own
706
+ // keys, so a source can itself be such a copy; admit a non-dropping
707
+ // site only when a spread source of it can actually hold a source (a
708
+ // shape a checked conversion builds or an earlier kept copy's), so a
709
+ // program — or a copy of a shape no conversion ever produces — stays
710
+ // byte-identical.
711
+ if (lowerer.recordSourcesPossible || keptWidths.size > 0) {
712
+ for (let grew = true; grew;) {
713
+ grew = false;
714
+ for (const { wrapper, literal, note } of widthSites) {
715
+ if (note.drops || keptWidths.has(wrapper) || literal.type.kind !== "record")
716
+ continue;
717
+ if (!early.has(literal.type.shapeId) || !widthKeepable(lowerer, wrapper, note.segments))
718
+ continue;
719
+ if (!note.segments.some((segment) => segment.kind === "spread" &&
720
+ reachesKeptSource(lowerer, segment.value.type, convertedShapes)))
721
+ continue;
722
+ keptWidths.add(wrapper);
723
+ notes.keptSourceShapes.add(literal.type.shapeId);
724
+ grew = true;
725
+ for (const segment of note.segments)
726
+ if (segment.kind === "spread")
727
+ shapesIn(segment.value.type, early, earlySeen);
728
+ }
729
+ }
730
+ }
731
+ for (const { wrapper, literal, note } of widthSites) {
732
+ if (!keptWidths.has(wrapper) || literal.type.kind !== "record")
733
+ continue;
734
+ const shapeId = literal.type.shapeId;
735
+ notes.keptSourceShapes.add(shapeId);
736
+ if (!note.drops) {
737
+ // A same-shape copy keeps its own order (a spread of the literal's
738
+ // own shape reads its source's index): its witness stays, and the
739
+ // plan finds the source binding through the wrapper's prologue.
740
+ keptLiteralStmts.set(literal, wrapper.stmts);
741
+ continue;
742
+ }
743
+ // A kept copy that drops keys enumerates through its own kept source,
744
+ // so like a checked conversion it contributes no order to its shape's
745
+ // table, and the shape keeps today's table.
746
+ const segments = notes.literalOf(literal);
747
+ const literals = facts.get(shapeId)?.literals;
748
+ const at = segments === undefined || literals === undefined ? -1 : literals.indexOf(segments);
749
+ if (at >= 0)
750
+ literals.splice(at, 1);
751
+ keptDropShapes.add(shapeId);
752
+ }
753
+ // Same-shape clones of a record that can keep keys copy them too, when
754
+ // the program converts checked values or keeps a width spread and the
755
+ // shape is observed. The source, not the clone, decides: a clone of a
756
+ // shape no conversion produces finds no keys to keep.
757
+ if (lowerer.recordSourcesPossible || keptWidths.size > 0) {
758
+ for (const { node } of cloneSites) {
759
+ if (node.kind !== "recordClone")
760
+ continue;
761
+ const cloneT = node.type;
762
+ if (cloneT.kind !== "record" || !early.has(cloneT.shapeId))
763
+ continue;
764
+ if (!recordMayKeepSource(lowerer, cloneT))
765
+ continue;
766
+ if (!reachesKeptSource(lowerer, node.source.type, convertedShapes))
767
+ continue;
768
+ keptClones.add(node);
769
+ notes.keptSourceShapes.add(cloneT.shapeId);
770
+ }
771
+ }
772
+ }
773
+ // A program that keeps no width spread is byte-identical to main: the
774
+ // reflective surfaces below (and the two helper finalizers in
775
+ // lower-calls.ts, which consult keptSourceShapes) stay static there, as
776
+ // they did before this pass.
777
+ keepSourceProbes(lowerer, notes, probeSites, keptWidths.size > 0 || keptClones.size > 0);
778
+ keepRecordClones(lowerer, cloneSites, keptClones);
543
779
  // ── scope ───────────────────────────────────────────────────────────
544
780
  // Only plain declared-field shapes with a table take part.
545
781
  const inScope = (shape) => shape !== undefined &&
@@ -580,8 +816,10 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
580
816
  return keys.join("\0") !== table;
581
817
  });
582
818
  });
583
- if (!interesting)
819
+ if (!interesting) {
820
+ keepWidthSpreads(notes, widthSites, keptWidths, new Set());
584
821
  return;
822
+ }
585
823
  // ── presence classes and late-write constraints ─────────────────────
586
824
  const maybeAbsent = (id, key) => {
587
825
  const shape = shapes.get(id);
@@ -758,7 +996,12 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
758
996
  }
759
997
  return out;
760
998
  };
761
- /** Today's table with every witness edge applied, or "unknown". */
999
+ /** Today's table with every witness edge applied, or "unknown".
1000
+ *
1001
+ * Kahn's algorithm takes the ready key the table holds first, which is
1002
+ * the order the tables have always used. Ranks are unique, so a scan for
1003
+ * the smallest ready rank settles each step exactly as reordering the
1004
+ * whole ready set did. */
762
1005
  const merge = (table, edges) => {
763
1006
  const rank = new Map(table.map((k, i) => [k, i]));
764
1007
  const succ = new Map(table.map((k) => [k, new Set()]));
@@ -775,8 +1018,18 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
775
1018
  const order = [];
776
1019
  const ready = table.filter((k) => indeg.get(k) === 0);
777
1020
  while (ready.length > 0) {
778
- ready.sort((a, b) => rank.get(a) - rank.get(b));
779
- const k = ready.shift();
1021
+ let at = 0;
1022
+ let best = rank.get(ready[0]);
1023
+ for (let i = 1; i < ready.length; i++) {
1024
+ const r = rank.get(ready[i]);
1025
+ if (r < best) {
1026
+ best = r;
1027
+ at = i;
1028
+ }
1029
+ }
1030
+ const k = ready[at];
1031
+ ready[at] = ready[ready.length - 1];
1032
+ ready.pop();
780
1033
  order.push(k);
781
1034
  for (const next of succ.get(k)) {
782
1035
  indeg.set(next, indeg.get(next) - 1);
@@ -792,6 +1045,9 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
792
1045
  };
793
1046
  // ── resolution over inheritance edges ───────────────────────────────
794
1047
  const result = new Map();
1048
+ /** A shape's late-write edges: they read that shape's facts only, so they
1049
+ * stay valid until the facts change (a shape becomes built at run time,
1050
+ * below). */
795
1051
  const late = new Map();
796
1052
  const dependencies = (id) => {
797
1053
  const f = facts.get(id);
@@ -910,7 +1166,6 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
910
1166
  };
911
1167
  const resolveAll = () => {
912
1168
  result.clear();
913
- late.clear();
914
1169
  for (const scc of sccs) {
915
1170
  const members = new Set(scc);
916
1171
  const guess = new Map();
@@ -955,8 +1210,11 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
955
1210
  if ((source === "unknown" && !self) || !ordersSpread(segments, sites))
956
1211
  continue;
957
1212
  orderedSpreads.add(segments);
958
- if (target.kind === "record")
1213
+ if (target.kind === "record") {
959
1214
  factsOf(target.shapeId).runtime = true;
1215
+ // Its presence answers and late-write edges just changed.
1216
+ late.delete(target.shapeId);
1217
+ }
960
1218
  grew = true;
961
1219
  }
962
1220
  if (grew)
@@ -969,6 +1227,15 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
969
1227
  shapesIn({ kind: "record", shapeId: id }, observed, observedSeen);
970
1228
  for (const root of observedRoots)
971
1229
  shapesIn(root, observed, observedSeen);
1230
+ // A kept width spread snapshots its sources' own keys, an order surface
1231
+ // over each source.
1232
+ for (const { wrapper, note } of widthSites) {
1233
+ if (!keptWidths.has(wrapper))
1234
+ continue;
1235
+ for (const segment of note.segments)
1236
+ if (segment.kind === "spread")
1237
+ shapesIn(segment.value.type, observed, observedSeen);
1238
+ }
972
1239
  // An ordered spread's copies of values without a source take the source's
973
1240
  // order from its table, which must then hold the resolved order.
974
1241
  const orderedTarget = (sites) => {
@@ -998,6 +1265,7 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
998
1265
  // Ordered spreads carry their source's order over (see above).
999
1266
  let orderedResults = 0;
1000
1267
  const rewritten = new Set();
1268
+ keepWidthSpreads(notes, widthSites, keptWidths, rewritten);
1001
1269
  for (const [segments, sites] of leadingSpreads) {
1002
1270
  const first = segments[0];
1003
1271
  if (!orderedSpreads.has(segments) || first?.kind !== "spread" || first.value === undefined)
@@ -1307,6 +1575,12 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
1307
1575
  const siteOf = (e) => {
1308
1576
  if (e.kind === "seqExpr" && e.result.kind === "recordLit")
1309
1577
  prologues.set(e.result, e.stmts);
1578
+ // A kept width spread's literal now initializes its own declaration, but
1579
+ // it still evaluates the spread's source binding in the wrapper's
1580
+ // prologue (keepWidthSpreads).
1581
+ const host = keptLiteralStmts.get(e);
1582
+ if (host !== undefined && e.kind === "recordLit")
1583
+ prologues.set(e, host);
1310
1584
  if (e.kind === "recordLit" && e.type.kind === "record" && variants.has(e.type.shapeId)) {
1311
1585
  const list = sites.get(e.type.shapeId) ?? [];
1312
1586
  list.push(e);
@@ -1436,7 +1710,7 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
1436
1710
  return indexOfOrder(orders, complete(resolved.order.filter((k) => keys.has(k)), orders[0]));
1437
1711
  };
1438
1712
  const plan = new Map();
1439
- const dropped = new Set();
1713
+ const dropped = new Set(keptDropShapes);
1440
1714
  for (const [id, list] of sites) {
1441
1715
  for (const lit of list) {
1442
1716
  const index = orderIndex(id, lit);
@@ -1591,4 +1865,292 @@ export function applyKeyOrderWitnesses(lowerer, fns) {
1591
1865
  shape.orderVariants = tables;
1592
1866
  }
1593
1867
  }
1868
+ /** The replacements recorded for `fn`. */
1869
+ function replacementsIn(byFn, fn) {
1870
+ let replacements = byFn.get(fn);
1871
+ if (replacements === undefined)
1872
+ byFn.set(fn, (replacements = new Map()));
1873
+ return replacements;
1874
+ }
1875
+ /** Replaces each node of `replacements` in `fn` through the node that holds
1876
+ * it (replaceChildExpr), and the nodes under a replacement in turn. A node
1877
+ * is never rewritten into another kind in place: the compiler compiles this
1878
+ * file too, and a node it builds keeps its kind's fields. */
1879
+ function replaceThroughParents(fn, replacements) {
1880
+ if (replacements.size === 0)
1881
+ return;
1882
+ let replaced = 0;
1883
+ const children = (parent) => ({
1884
+ expr: (child) => {
1885
+ const to = replacements.get(child);
1886
+ if (to !== undefined && replaceChildExpr(parent, child, to))
1887
+ replaced++;
1888
+ visitExpr(to ?? child);
1889
+ return true;
1890
+ },
1891
+ stmt: (child) => {
1892
+ visitStmt(child);
1893
+ return true;
1894
+ },
1895
+ });
1896
+ function visitExpr(node) {
1897
+ const { expr, stmt } = children(node);
1898
+ everyExprChild(node, expr, stmt);
1899
+ }
1900
+ function visitStmt(node) {
1901
+ const { expr, stmt } = children(node);
1902
+ everyStmtChild(node, expr, stmt);
1903
+ }
1904
+ for (const stmt of fn.body)
1905
+ visitStmt(stmt);
1906
+ if (replaced !== replacements.size)
1907
+ throw new InternalCompilerError(`key-order-witness: ${replacements.size - replaced} kept site(s) not found in ${fn.name}`);
1908
+ }
1909
+ /** Width spreads: `{ ...wide }` into a narrower declared record. Node's copy
1910
+ * holds every own key of the source; the static copy holds the declared
1911
+ * ones. When an order surface can observe the target shape (the same
1912
+ * observation the order tables use), the literal keeps the copy's whole
1913
+ * own-key list as the record's kept source (scr_record_source_note): each
1914
+ * spread source's own keys are snapshot as the spread runs, explicit keys
1915
+ * hold placeholders at their position, and the record stays the source of
1916
+ * truth for every declared key. Programs no surface observes keep the
1917
+ * static copy byte for byte. */
1918
+ function widthKeepable(lowerer, wrapper, width) {
1919
+ return width.every((segment) => segment.kind === "key" ||
1920
+ ((segment.value.type.kind === "dyn" || lowerer.dynConvertible(segment.value.type)) &&
1921
+ wrapper.stmts.some((stmt) => stmt.kind === "varDecl" && stmt.localId === segment.value.localId)));
1922
+ }
1923
+ function keepWidthSpreads(notes, sites, kept, rewritten) {
1924
+ let index = 0;
1925
+ for (const { wrapper, literal, fn, note } of sites) {
1926
+ if (!kept.has(wrapper) || rewritten.has(wrapper))
1927
+ continue;
1928
+ rewritten.add(wrapper);
1929
+ notes.keptWidthSpreads++;
1930
+ const width = note.segments;
1931
+ const loc = literal.loc;
1932
+ const site = index++;
1933
+ const empty = () => ({ kind: "dynObjLit", fields: [], type: DYN, loc });
1934
+ const assign = (target, from) => ({
1935
+ kind: "libCall",
1936
+ fn: "dyn.assign",
1937
+ args: [target, from],
1938
+ type: DYN,
1939
+ loc,
1940
+ });
1941
+ let mirror = empty();
1942
+ let spreadIndex = 0;
1943
+ for (const segment of width) {
1944
+ if (segment.kind === "key") {
1945
+ mirror = assign(mirror, {
1946
+ kind: "dynObjLit",
1947
+ fields: [{ key: strLit(segment.name, loc), value: dynUndefinedExpr(loc) }],
1948
+ type: DYN,
1949
+ loc,
1950
+ });
1951
+ continue;
1952
+ }
1953
+ // The spread copies the source's own keys when it runs: snapshot them
1954
+ // right after the literal evaluated the source.
1955
+ const localId = `%widthKeys.${site}.${spreadIndex++}`;
1956
+ fn.locals.push({ id: localId, name: "%widthKeys", type: DYN, mutable: false });
1957
+ const boxed = segment.value.type.kind === "dyn"
1958
+ ? segment.value
1959
+ : { kind: "dynFrom", value: segment.value, liveRef: true, type: DYN, loc };
1960
+ const at = wrapper.stmts.findIndex((stmt) => stmt.kind === "varDecl" && stmt.localId === segment.value.localId);
1961
+ wrapper.stmts.splice(at + 1, 0, {
1962
+ kind: "varDecl",
1963
+ localId,
1964
+ init: assign(empty(), boxed),
1965
+ loc,
1966
+ });
1967
+ mirror = assign(mirror, { kind: "varRef", localId, type: DYN, loc });
1968
+ }
1969
+ const builtId = `%widthKept.${site}`;
1970
+ fn.locals.push({ id: builtId, name: "%widthKept", type: literal.type, mutable: false });
1971
+ const built = { kind: "varRef", localId: builtId, type: literal.type, loc };
1972
+ wrapper.stmts.push({ kind: "varDecl", localId: builtId, init: literal, loc }, {
1973
+ kind: "exprStmt",
1974
+ expr: { kind: "libCall", fn: "record.sourceNote", args: [built, mirror], type: VOID, loc },
1975
+ loc,
1976
+ });
1977
+ wrapper.result = built;
1978
+ }
1979
+ }
1980
+ /** Whether a value of this type reaches a record layout that holds a kept
1981
+ * source: a plain record a checked conversion builds or an earlier kept
1982
+ * copy's shape, or a union with such an arm. */
1983
+ function reachesKeptSource(lowerer, type, converted) {
1984
+ if (type.kind === "record")
1985
+ return (recordMayKeepSource(lowerer, type) &&
1986
+ (converted.has(type.shapeId) || lowerer.keyOrder.keptSourceShapes.has(type.shapeId)));
1987
+ if (type.kind === "union")
1988
+ return (lowerer.unions.get(type.unionId)?.arms ?? []).some((arm) => reachesKeptSource(lowerer, arm, converted));
1989
+ return false;
1990
+ }
1991
+ /** Add the record shapes a checked conversion's target can hold a source
1992
+ * in: the target itself when it is a plain record, or the records nested in
1993
+ * a union arm, an array element, a promise or an index signature's values
1994
+ * (the layouts the checked builder notes sources for). */
1995
+ function conversionShapes(lowerer, target, out, seen) {
1996
+ if (target.kind === "promise")
1997
+ return conversionShapes(lowerer, target.inner, out, seen);
1998
+ if (target.kind === "array")
1999
+ return conversionShapes(lowerer, target.elem, out, seen);
2000
+ if (target.kind === "record") {
2001
+ if (seen.has(target.shapeId))
2002
+ return;
2003
+ seen.add(target.shapeId);
2004
+ // A conversion builds the records of its nested fields too, each with
2005
+ // its own kept source.
2006
+ if (recordMayKeepSource(lowerer, target))
2007
+ out.add(target.shapeId);
2008
+ const shape = lowerer.shapes.get(target.shapeId);
2009
+ for (const field of shape?.fields ?? [])
2010
+ conversionShapes(lowerer, field.type, out, seen);
2011
+ if (shape?.indexValue !== undefined)
2012
+ conversionShapes(lowerer, shape.indexValue, out, seen);
2013
+ return;
2014
+ }
2015
+ if (target.kind !== "union" || seen.has(target.unionId))
2016
+ return;
2017
+ seen.add(target.unionId);
2018
+ for (const arm of lowerer.unions.get(target.unionId)?.arms ?? [])
2019
+ conversionShapes(lowerer, arm, out, seen);
2020
+ }
2021
+ /** `"k" in r` over a closed record answers statically false for a literal
2022
+ * key the shape does not declare. A kept source can hold it (a checked
2023
+ * conversion's undeclared keys, a width spread's extras), so when the
2024
+ * program keeps record sources the site answers through the record's own
2025
+ * kept view instead. The receiver evaluates exactly once, as the static
2026
+ * form evaluated it. */
2027
+ function keepSourceProbes(lowerer, notes, sites, possible) {
2028
+ if (!possible)
2029
+ return;
2030
+ let index = 0;
2031
+ const byFn = new Map();
2032
+ for (const { node, fn } of sites) {
2033
+ const probe = notes.sourceProbeOf(node);
2034
+ if (probe === undefined)
2035
+ continue;
2036
+ const recT = probe.receiver.type;
2037
+ if (recT.kind !== "record")
2038
+ continue;
2039
+ if (!recordMayKeepSource(lowerer, recT))
2040
+ continue;
2041
+ const loc = node.loc;
2042
+ const id = `%inSource.${index++}`;
2043
+ fn.locals.push({ id, name: "%inSource", type: recT, mutable: false });
2044
+ const ref = { kind: "varRef", localId: id, type: recT, loc };
2045
+ const replacement = {
2046
+ kind: "seqExpr",
2047
+ stmts: [{ kind: "varDecl", localId: id, init: probe.receiver, loc }],
2048
+ result: {
2049
+ kind: "logical",
2050
+ op: "&&",
2051
+ left: recordSourceTest(ref, loc),
2052
+ right: {
2053
+ kind: "dynHasKey",
2054
+ key: probe.key,
2055
+ value: { kind: "dynFrom", value: ref, liveRef: true, type: DYN, loc },
2056
+ type: BOOL,
2057
+ loc,
2058
+ },
2059
+ type: BOOL,
2060
+ loc,
2061
+ },
2062
+ type: BOOL,
2063
+ loc,
2064
+ };
2065
+ replacementsIn(byFn, fn).set(node, replacement);
2066
+ }
2067
+ for (const [fn, replacements] of byFn)
2068
+ replaceThroughParents(fn, replacements);
2069
+ }
2070
+ /** Same-shape `{ ...r, k: v }` clones: Node's copy holds every own key of
2071
+ * the source, and the recordClone fast path copies the declared fields
2072
+ * only. A clone over a shape that can keep a source, in a program that
2073
+ * keeps one, snapshots the source's own keys and notes them on the built
2074
+ * record; the overrides keep their source position (a placeholder for an
2075
+ * existing key keeps its place, a new one follows the source's keys). The
2076
+ * override values still evaluate after the source, as before. */
2077
+ function keepRecordClones(lowerer, sites, kept) {
2078
+ let index = 0;
2079
+ const byFn = new Map();
2080
+ for (const { node, fn } of sites) {
2081
+ if (!kept.has(node) || node.kind !== "recordClone")
2082
+ continue;
2083
+ const cloneT = node.type;
2084
+ if (cloneT.kind !== "record" || !recordMayKeepSource(lowerer, cloneT))
2085
+ continue;
2086
+ const loc = node.loc;
2087
+ const n = index++;
2088
+ const srcId = `%cloneSrc.${n}`;
2089
+ const keysId = `%cloneKeys.${n}`;
2090
+ const builtId = `%cloneKept.${n}`;
2091
+ fn.locals.push({ id: srcId, name: "%cloneSrc", type: node.source.type, mutable: false });
2092
+ fn.locals.push({ id: keysId, name: "%cloneKeys", type: DYN, mutable: false });
2093
+ fn.locals.push({ id: builtId, name: "%cloneKept", type: cloneT, mutable: false });
2094
+ const srcRef = { kind: "varRef", localId: srcId, type: node.source.type, loc };
2095
+ const assign = (target, from) => ({
2096
+ kind: "libCall",
2097
+ fn: "dyn.assign",
2098
+ args: [target, from],
2099
+ type: DYN,
2100
+ loc,
2101
+ });
2102
+ const placeholder = (name) => ({
2103
+ kind: "dynObjLit",
2104
+ fields: [{ key: strLit(name, loc), value: dynUndefinedExpr(loc) }],
2105
+ type: DYN,
2106
+ loc,
2107
+ });
2108
+ let mirror = { kind: "varRef", localId: keysId, type: DYN, loc };
2109
+ for (const override of node.overrides)
2110
+ mirror = assign(mirror, placeholder(override.name));
2111
+ const built = { kind: "varRef", localId: builtId, type: cloneT, loc };
2112
+ const overrides = node.overrides;
2113
+ const replacement = {
2114
+ kind: "seqExpr",
2115
+ stmts: [
2116
+ { kind: "varDecl", localId: srcId, init: node.source, loc },
2117
+ {
2118
+ kind: "varDecl",
2119
+ localId: keysId,
2120
+ init: assign({ kind: "dynObjLit", fields: [], type: DYN, loc }, {
2121
+ kind: "dynFrom",
2122
+ value: srcRef,
2123
+ liveRef: true,
2124
+ type: DYN,
2125
+ loc,
2126
+ }),
2127
+ loc,
2128
+ },
2129
+ {
2130
+ kind: "varDecl",
2131
+ localId: builtId,
2132
+ init: { kind: "recordClone", source: srcRef, overrides, type: cloneT, loc },
2133
+ loc,
2134
+ },
2135
+ {
2136
+ kind: "exprStmt",
2137
+ expr: {
2138
+ kind: "libCall",
2139
+ fn: "record.sourceNote",
2140
+ args: [built, mirror],
2141
+ type: VOID,
2142
+ loc,
2143
+ },
2144
+ loc,
2145
+ },
2146
+ ],
2147
+ result: built,
2148
+ type: cloneT,
2149
+ loc,
2150
+ };
2151
+ replacementsIn(byFn, fn).set(node, replacement);
2152
+ }
2153
+ for (const [fn, replacements] of byFn)
2154
+ replaceThroughParents(fn, replacements);
2155
+ }
1594
2156
  //# sourceMappingURL=key-order-witness.js.map