@geastack/compiler 1.0.15

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 (966) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +149 -0
  3. package/dist/cli-analyze.d.ts +1 -0
  4. package/dist/cli-analyze.js +61 -0
  5. package/dist/cli-coverage.d.ts +1 -0
  6. package/dist/cli-coverage.js +329 -0
  7. package/dist/cli-emit.d.ts +10 -0
  8. package/dist/cli-emit.js +398 -0
  9. package/dist/cli-module-graph.d.ts +18 -0
  10. package/dist/cli-module-graph.js +123 -0
  11. package/dist/cli-package-source.d.ts +5 -0
  12. package/dist/cli-package-source.js +116 -0
  13. package/dist/cli-project.d.ts +2 -0
  14. package/dist/cli-project.js +60 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +199 -0
  17. package/dist/compiler.d.ts +228 -0
  18. package/dist/compiler.js +1029 -0
  19. package/dist/conversion/algebra.d.ts +218 -0
  20. package/dist/conversion/algebra.js +155 -0
  21. package/dist/conversion/build.d.ts +67 -0
  22. package/dist/conversion/build.js +1378 -0
  23. package/dist/conversion/derive.d.ts +37 -0
  24. package/dist/conversion/derive.js +260 -0
  25. package/dist/conversion/graph-validation.d.ts +8 -0
  26. package/dist/conversion/graph-validation.js +97 -0
  27. package/dist/conversion/native-callable-adapter.d.ts +13 -0
  28. package/dist/conversion/native-callable-adapter.js +53 -0
  29. package/dist/conversion/native-class-reference.d.ts +12 -0
  30. package/dist/conversion/native-class-reference.js +39 -0
  31. package/dist/conversion/native-payload-transport.d.ts +25 -0
  32. package/dist/conversion/native-payload-transport.js +33 -0
  33. package/dist/conversion/native-selection.d.ts +49 -0
  34. package/dist/conversion/native-selection.js +135 -0
  35. package/dist/conversion/native-sum.d.ts +42 -0
  36. package/dist/conversion/native-sum.js +115 -0
  37. package/dist/conversion/nodes.d.ts +55 -0
  38. package/dist/conversion/nodes.js +91 -0
  39. package/dist/conversion/operand-view.d.ts +14 -0
  40. package/dist/conversion/operand-view.js +20 -0
  41. package/dist/conversion/record-view.d.ts +157 -0
  42. package/dist/conversion/record-view.js +273 -0
  43. package/dist/conversion/registry.d.ts +217 -0
  44. package/dist/conversion/registry.js +1 -0
  45. package/dist/diagnostics/model.d.ts +76 -0
  46. package/dist/diagnostics/model.js +60 -0
  47. package/dist/diagnostics/sweep.d.ts +31 -0
  48. package/dist/diagnostics/sweep.js +112 -0
  49. package/dist/identity/ids.d.ts +179 -0
  50. package/dist/identity/ids.js +212 -0
  51. package/dist/ir/absent-class-arm.d.ts +48 -0
  52. package/dist/ir/absent-class-arm.js +157 -0
  53. package/dist/ir/borrow-effects.d.ts +23 -0
  54. package/dist/ir/borrow-effects.js +151 -0
  55. package/dist/ir/borrowed-call-arguments.d.ts +40 -0
  56. package/dist/ir/borrowed-call-arguments.js +117 -0
  57. package/dist/ir/build.d.ts +168 -0
  58. package/dist/ir/build.js +459 -0
  59. package/dist/ir/call-dispatch.d.ts +38 -0
  60. package/dist/ir/call-dispatch.js +502 -0
  61. package/dist/ir/call-entry.d.ts +142 -0
  62. package/dist/ir/call-entry.js +386 -0
  63. package/dist/ir/callable-class-flow.d.ts +27 -0
  64. package/dist/ir/callable-class-flow.js +1386 -0
  65. package/dist/ir/callable-field-slots.d.ts +22 -0
  66. package/dist/ir/callable-field-slots.js +166 -0
  67. package/dist/ir/callable-identity-demand.d.ts +52 -0
  68. package/dist/ir/callable-identity-demand.js +460 -0
  69. package/dist/ir/callable-member-candidates.d.ts +9 -0
  70. package/dist/ir/callable-member-candidates.js +39 -0
  71. package/dist/ir/callable-records.d.ts +21 -0
  72. package/dist/ir/callable-records.js +411 -0
  73. package/dist/ir/captures.d.ts +26 -0
  74. package/dist/ir/captures.js +335 -0
  75. package/dist/ir/certificate.d.ts +45 -0
  76. package/dist/ir/certificate.js +47 -0
  77. package/dist/ir/certify/carrier-keys.d.ts +73 -0
  78. package/dist/ir/certify/carrier-keys.js +221 -0
  79. package/dist/ir/certify/function-source.d.ts +4 -0
  80. package/dist/ir/certify/function-source.js +28 -0
  81. package/dist/ir/certify/has-property-key.d.ts +88 -0
  82. package/dist/ir/certify/has-property-key.js +116 -0
  83. package/dist/ir/certify/instanceof-key.d.ts +24 -0
  84. package/dist/ir/certify/instanceof-key.js +35 -0
  85. package/dist/ir/certify/property-access-keys.d.ts +172 -0
  86. package/dist/ir/certify/property-access-keys.js +291 -0
  87. package/dist/ir/certify/property-access.d.ts +3 -0
  88. package/dist/ir/certify/property-access.js +597 -0
  89. package/dist/ir/certify/runtime-helper.d.ts +3 -0
  90. package/dist/ir/certify/runtime-helper.js +326 -0
  91. package/dist/ir/certify/typeof-operand.d.ts +14 -0
  92. package/dist/ir/certify/typeof-operand.js +16 -0
  93. package/dist/ir/certify.d.ts +123 -0
  94. package/dist/ir/certify.js +481 -0
  95. package/dist/ir/class-evaluation.d.ts +26 -0
  96. package/dist/ir/class-evaluation.js +50 -0
  97. package/dist/ir/class-static-fields.d.ts +60 -0
  98. package/dist/ir/class-static-fields.js +108 -0
  99. package/dist/ir/construct-entry.d.ts +26 -0
  100. package/dist/ir/construct-entry.js +117 -0
  101. package/dist/ir/dead-values.d.ts +90 -0
  102. package/dist/ir/dead-values.js +184 -0
  103. package/dist/ir/deferral.d.ts +99 -0
  104. package/dist/ir/deferral.js +409 -0
  105. package/dist/ir/dense-loops.d.ts +230 -0
  106. package/dist/ir/dense-loops.js +697 -0
  107. package/dist/ir/dominance.d.ts +82 -0
  108. package/dist/ir/dominance.js +268 -0
  109. package/dist/ir/emission-representations.d.ts +71 -0
  110. package/dist/ir/emission-representations.js +350 -0
  111. package/dist/ir/facts.d.ts +218 -0
  112. package/dist/ir/facts.js +181 -0
  113. package/dist/ir/fixed-data-definition.d.ts +19 -0
  114. package/dist/ir/fixed-data-definition.js +49 -0
  115. package/dist/ir/generator-split.d.ts +38 -0
  116. package/dist/ir/generator-split.js +329 -0
  117. package/dist/ir/hoist.d.ts +55 -0
  118. package/dist/ir/hoist.js +375 -0
  119. package/dist/ir/instantiation.d.ts +61 -0
  120. package/dist/ir/instantiation.js +137 -0
  121. package/dist/ir/integer-storage.d.ts +170 -0
  122. package/dist/ir/integer-storage.js +822 -0
  123. package/dist/ir/integers.d.ts +161 -0
  124. package/dist/ir/integers.js +539 -0
  125. package/dist/ir/integrity-restrictions.d.ts +50 -0
  126. package/dist/ir/integrity-restrictions.js +118 -0
  127. package/dist/ir/local-iterators.d.ts +4 -0
  128. package/dist/ir/local-iterators.js +27 -0
  129. package/dist/ir/lower-allocation.d.ts +4 -0
  130. package/dist/ir/lower-allocation.js +325 -0
  131. package/dist/ir/lower-completion.d.ts +15 -0
  132. package/dist/ir/lower-completion.js +25 -0
  133. package/dist/ir/lower-destructuring.d.ts +5 -0
  134. package/dist/ir/lower-destructuring.js +693 -0
  135. package/dist/ir/lower-element.d.ts +29 -0
  136. package/dist/ir/lower-element.js +111 -0
  137. package/dist/ir/lower-exceptions.d.ts +47 -0
  138. package/dist/ir/lower-exceptions.js +92 -0
  139. package/dist/ir/lower-flow.d.ts +137 -0
  140. package/dist/ir/lower-flow.js +600 -0
  141. package/dist/ir/lower-graph.d.ts +218 -0
  142. package/dist/ir/lower-graph.js +687 -0
  143. package/dist/ir/lower-invocation.d.ts +4 -0
  144. package/dist/ir/lower-invocation.js +514 -0
  145. package/dist/ir/lower-narrow.d.ts +53 -0
  146. package/dist/ir/lower-narrow.js +320 -0
  147. package/dist/ir/lower-operands.d.ts +272 -0
  148. package/dist/ir/lower-operands.js +461 -0
  149. package/dist/ir/lower-property.d.ts +21 -0
  150. package/dist/ir/lower-property.js +132 -0
  151. package/dist/ir/lower-protocol.d.ts +11 -0
  152. package/dist/ir/lower-protocol.js +118 -0
  153. package/dist/ir/lower-short-circuit.d.ts +41 -0
  154. package/dist/ir/lower-short-circuit.js +63 -0
  155. package/dist/ir/lower.d.ts +82 -0
  156. package/dist/ir/lower.js +1346 -0
  157. package/dist/ir/model.d.ts +1474 -0
  158. package/dist/ir/model.js +6 -0
  159. package/dist/ir/native-absent-property.d.ts +3 -0
  160. package/dist/ir/native-absent-property.js +13 -0
  161. package/dist/ir/native-array-transport.d.ts +7 -0
  162. package/dist/ir/native-array-transport.js +46 -0
  163. package/dist/ir/native-callable-bind.d.ts +9 -0
  164. package/dist/ir/native-callable-bind.js +30 -0
  165. package/dist/ir/native-carrier-predicate.d.ts +34 -0
  166. package/dist/ir/native-carrier-predicate.js +49 -0
  167. package/dist/ir/native-class-accessor.d.ts +18 -0
  168. package/dist/ir/native-class-accessor.js +52 -0
  169. package/dist/ir/native-class-construction.d.ts +16 -0
  170. package/dist/ir/native-class-construction.js +71 -0
  171. package/dist/ir/native-class-initialization.d.ts +15 -0
  172. package/dist/ir/native-class-initialization.js +56 -0
  173. package/dist/ir/native-class-origins.d.ts +13 -0
  174. package/dist/ir/native-class-origins.js +237 -0
  175. package/dist/ir/native-dictionary-transport.d.ts +6 -0
  176. package/dist/ir/native-dictionary-transport.js +37 -0
  177. package/dist/ir/native-enumeration.d.ts +14 -0
  178. package/dist/ir/native-enumeration.js +26 -0
  179. package/dist/ir/native-equality.d.ts +10 -0
  180. package/dist/ir/native-equality.js +18 -0
  181. package/dist/ir/native-field-owner.d.ts +37 -0
  182. package/dist/ir/native-field-owner.js +183 -0
  183. package/dist/ir/native-fixed-layout.d.ts +41 -0
  184. package/dist/ir/native-fixed-layout.js +232 -0
  185. package/dist/ir/native-host-construction.d.ts +53 -0
  186. package/dist/ir/native-host-construction.js +62 -0
  187. package/dist/ir/native-key-query.d.ts +4 -0
  188. package/dist/ir/native-key-query.js +38 -0
  189. package/dist/ir/native-merge-transport.d.ts +25 -0
  190. package/dist/ir/native-merge-transport.js +71 -0
  191. package/dist/ir/native-record-index-transport.d.ts +11 -0
  192. package/dist/ir/native-record-index-transport.js +34 -0
  193. package/dist/ir/native-record-index.d.ts +12 -0
  194. package/dist/ir/native-record-index.js +27 -0
  195. package/dist/ir/native-reflect-field.d.ts +5 -0
  196. package/dist/ir/native-reflect-field.js +33 -0
  197. package/dist/ir/native-sequence-transport.d.ts +7 -0
  198. package/dist/ir/native-sequence-transport.js +53 -0
  199. package/dist/ir/numeric-intrinsics.d.ts +13 -0
  200. package/dist/ir/numeric-intrinsics.js +57 -0
  201. package/dist/ir/object-value-conversions.d.ts +20 -0
  202. package/dist/ir/object-value-conversions.js +50 -0
  203. package/dist/ir/physical-class-reflection.d.ts +9 -0
  204. package/dist/ir/physical-class-reflection.js +57 -0
  205. package/dist/ir/presence-proof.d.ts +42 -0
  206. package/dist/ir/presence-proof.js +490 -0
  207. package/dist/ir/program-facts.d.ts +106 -0
  208. package/dist/ir/program-facts.js +319 -0
  209. package/dist/ir/proven-branches.d.ts +16 -0
  210. package/dist/ir/proven-branches.js +219 -0
  211. package/dist/ir/queries.d.ts +41 -0
  212. package/dist/ir/queries.js +213 -0
  213. package/dist/ir/reflection-demand.d.ts +64 -0
  214. package/dist/ir/reflection-demand.js +1394 -0
  215. package/dist/ir/refusal.d.ts +43 -0
  216. package/dist/ir/refusal.js +28 -0
  217. package/dist/ir/shake.d.ts +37 -0
  218. package/dist/ir/shake.js +1078 -0
  219. package/dist/ir/static-callables.d.ts +11 -0
  220. package/dist/ir/static-callables.js +163 -0
  221. package/dist/ir/string-layout-reuse.d.ts +13 -0
  222. package/dist/ir/string-layout-reuse.js +39 -0
  223. package/dist/ir/string-length-reuse.d.ts +8 -0
  224. package/dist/ir/string-length-reuse.js +47 -0
  225. package/dist/ir/transfer.d.ts +78 -0
  226. package/dist/ir/transfer.js +270 -0
  227. package/dist/ir/type-query-results.d.ts +25 -0
  228. package/dist/ir/type-query-results.js +96 -0
  229. package/dist/ir/typed-property-access.d.ts +100 -0
  230. package/dist/ir/typed-property-access.js +161 -0
  231. package/dist/ir/verify.d.ts +19 -0
  232. package/dist/ir/verify.js +355 -0
  233. package/dist/plugins/apple/constructors.d.ts +112 -0
  234. package/dist/plugins/apple/constructors.js +217 -0
  235. package/dist/plugins/apple/host.d.ts +181 -0
  236. package/dist/plugins/apple/host.js +262 -0
  237. package/dist/plugins/apple/jsx.d.ts +2 -0
  238. package/dist/plugins/apple/jsx.js +293 -0
  239. package/dist/plugins/apple/members.d.ts +16 -0
  240. package/dist/plugins/apple/members.js +190 -0
  241. package/dist/plugins/apple/plugin.d.ts +2 -0
  242. package/dist/plugins/apple/plugin.js +156 -0
  243. package/dist/plugins/gea/component-classes.d.ts +25 -0
  244. package/dist/plugins/gea/component-classes.js +162 -0
  245. package/dist/plugins/gea/component-inline.d.ts +13 -0
  246. package/dist/plugins/gea/component-inline.js +532 -0
  247. package/dist/plugins/gea/constructors.d.ts +23 -0
  248. package/dist/plugins/gea/constructors.js +100 -0
  249. package/dist/plugins/gea/contract.d.ts +150 -0
  250. package/dist/plugins/gea/contract.js +195 -0
  251. package/dist/plugins/gea/element-ref.d.ts +31 -0
  252. package/dist/plugins/gea/element-ref.js +45 -0
  253. package/dist/plugins/gea/host.d.ts +520 -0
  254. package/dist/plugins/gea/host.js +762 -0
  255. package/dist/plugins/gea/lower.d.ts +6 -0
  256. package/dist/plugins/gea/lower.js +195 -0
  257. package/dist/plugins/gea/members.d.ts +22 -0
  258. package/dist/plugins/gea/members.js +221 -0
  259. package/dist/plugins/gea/plugin.d.ts +22 -0
  260. package/dist/plugins/gea/plugin.js +307 -0
  261. package/dist/plugins/gea/prelude.d.ts +78 -0
  262. package/dist/plugins/gea/prelude.js +153 -0
  263. package/dist/plugins/gea/producer.d.ts +5 -0
  264. package/dist/plugins/gea/producer.js +52 -0
  265. package/dist/plugins/gea/reactive-slots.d.ts +49 -0
  266. package/dist/plugins/gea/reactive-slots.js +578 -0
  267. package/dist/plugins/gea/render-bridge.d.ts +6 -0
  268. package/dist/plugins/gea/render-bridge.js +281 -0
  269. package/dist/plugins/gea/slots.d.ts +15 -0
  270. package/dist/plugins/gea/slots.js +36 -0
  271. package/dist/plugins/gea/template-analysis.d.ts +151 -0
  272. package/dist/plugins/gea/template-analysis.js +346 -0
  273. package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
  274. package/dist/plugins/gea/user-agent-styles.js +94 -0
  275. package/dist/plugins/installed.d.ts +19 -0
  276. package/dist/plugins/installed.js +21 -0
  277. package/dist/plugins/load.d.ts +7 -0
  278. package/dist/plugins/load.js +207 -0
  279. package/dist/plugins/model.d.ts +735 -0
  280. package/dist/plugins/model.js +47 -0
  281. package/dist/plugins/webgl/host.d.ts +77 -0
  282. package/dist/plugins/webgl/host.js +162 -0
  283. package/dist/plugins/webgl/plugin.d.ts +40 -0
  284. package/dist/plugins/webgl/plugin.js +99 -0
  285. package/dist/preflight/obligations.d.ts +206 -0
  286. package/dist/preflight/obligations.js +36 -0
  287. package/dist/preflight/report.d.ts +20 -0
  288. package/dist/preflight/report.js +61 -0
  289. package/dist/preflight/run.d.ts +39 -0
  290. package/dist/preflight/run.js +403 -0
  291. package/dist/project-preparation.d.ts +33 -0
  292. package/dist/project-preparation.js +314 -0
  293. package/dist/projection/abi.d.ts +82 -0
  294. package/dist/projection/abi.js +349 -0
  295. package/dist/projection/apply-arguments.d.ts +12 -0
  296. package/dist/projection/apply-arguments.js +20 -0
  297. package/dist/projection/bindings.d.ts +250 -0
  298. package/dist/projection/bindings.js +340 -0
  299. package/dist/projection/callee.d.ts +196 -0
  300. package/dist/projection/callee.js +444 -0
  301. package/dist/projection/class-property-presence.d.ts +28 -0
  302. package/dist/projection/class-property-presence.js +58 -0
  303. package/dist/projection/class-prototype.d.ts +5 -0
  304. package/dist/projection/class-prototype.js +23 -0
  305. package/dist/projection/class-storage.d.ts +26 -0
  306. package/dist/projection/class-storage.js +236 -0
  307. package/dist/projection/classes.d.ts +283 -0
  308. package/dist/projection/classes.js +944 -0
  309. package/dist/projection/coercions.d.ts +20 -0
  310. package/dist/projection/coercions.js +33 -0
  311. package/dist/projection/dispatch.d.ts +167 -0
  312. package/dist/projection/dispatch.js +379 -0
  313. package/dist/projection/fields.d.ts +123 -0
  314. package/dist/projection/fields.js +383 -0
  315. package/dist/projection/instance-test.d.ts +78 -0
  316. package/dist/projection/instance-test.js +156 -0
  317. package/dist/projection/slots.d.ts +146 -0
  318. package/dist/projection/slots.js +663 -0
  319. package/dist/projection/synthesized-abi.d.ts +61 -0
  320. package/dist/projection/synthesized-abi.js +94 -0
  321. package/dist/representation/array-index.d.ts +14 -0
  322. package/dist/representation/array-index.js +17 -0
  323. package/dist/representation/callable-object.d.ts +3 -0
  324. package/dist/representation/callable-object.js +6 -0
  325. package/dist/representation/collections.d.ts +84 -0
  326. package/dist/representation/collections.js +139 -0
  327. package/dist/representation/derive.d.ts +159 -0
  328. package/dist/representation/derive.js +2546 -0
  329. package/dist/representation/difference.d.ts +30 -0
  330. package/dist/representation/difference.js +240 -0
  331. package/dist/representation/field-descriptor-policy.d.ts +19 -0
  332. package/dist/representation/field-descriptor-policy.js +39 -0
  333. package/dist/representation/function-constructor.d.ts +13 -0
  334. package/dist/representation/function-constructor.js +9 -0
  335. package/dist/representation/host-abi.d.ts +32 -0
  336. package/dist/representation/host-abi.js +97 -0
  337. package/dist/representation/host-templates.d.ts +67 -0
  338. package/dist/representation/host-templates.js +94 -0
  339. package/dist/representation/intersection.d.ts +84 -0
  340. package/dist/representation/intersection.js +149 -0
  341. package/dist/representation/literal-destination.d.ts +43 -0
  342. package/dist/representation/literal-destination.js +133 -0
  343. package/dist/representation/merge.d.ts +18 -0
  344. package/dist/representation/merge.js +83 -0
  345. package/dist/representation/model.d.ts +1160 -0
  346. package/dist/representation/model.js +1019 -0
  347. package/dist/representation/numeric-index.d.ts +13 -0
  348. package/dist/representation/numeric-index.js +29 -0
  349. package/dist/representation/object-shape.d.ts +109 -0
  350. package/dist/representation/object-shape.js +123 -0
  351. package/dist/representation/optional.d.ts +12 -0
  352. package/dist/representation/optional.js +87 -0
  353. package/dist/representation/plan.d.ts +60 -0
  354. package/dist/representation/plan.js +78 -0
  355. package/dist/representation/policies.d.ts +589 -0
  356. package/dist/representation/policies.js +107 -0
  357. package/dist/representation/primitive-domain.d.ts +1 -0
  358. package/dist/representation/primitive-domain.js +1 -0
  359. package/dist/representation/primitives.d.ts +44 -0
  360. package/dist/representation/primitives.js +78 -0
  361. package/dist/representation/publish.d.ts +49 -0
  362. package/dist/representation/publish.js +648 -0
  363. package/dist/representation/record-fields.d.ts +96 -0
  364. package/dist/representation/record-fields.js +116 -0
  365. package/dist/representation/template-object.d.ts +11 -0
  366. package/dist/representation/template-object.js +26 -0
  367. package/dist/representation/union.d.ts +30 -0
  368. package/dist/representation/union.js +324 -0
  369. package/dist/representation/value-records.d.ts +3 -0
  370. package/dist/representation/value-records.js +307 -0
  371. package/dist/representation/verify.d.ts +17 -0
  372. package/dist/representation/verify.js +221 -0
  373. package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
  374. package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
  375. package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
  376. package/dist/semantics/ambient-type-realization-transform.js +168 -0
  377. package/dist/semantics/ambient.d.ts +24 -0
  378. package/dist/semantics/ambient.js +119 -0
  379. package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
  380. package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
  381. package/dist/semantics/callable-origins.d.ts +46 -0
  382. package/dist/semantics/callable-origins.js +354 -0
  383. package/dist/semantics/class-alias.d.ts +7 -0
  384. package/dist/semantics/class-alias.js +37 -0
  385. package/dist/semantics/class-heritage.d.ts +34 -0
  386. package/dist/semantics/class-heritage.js +104 -0
  387. package/dist/semantics/commonjs-wrapper.d.ts +69 -0
  388. package/dist/semantics/commonjs-wrapper.js +231 -0
  389. package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
  390. package/dist/semantics/constructor-slot-subclasses.js +112 -0
  391. package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
  392. package/dist/semantics/declaration-overlay-transform.js +2157 -0
  393. package/dist/semantics/define-property-source-transform.d.ts +4 -0
  394. package/dist/semantics/define-property-source-transform.js +437 -0
  395. package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
  396. package/dist/semantics/diagnostic-source-preparation.js +82 -0
  397. package/dist/semantics/documentation-ranges.d.ts +22 -0
  398. package/dist/semantics/documentation-ranges.js +36 -0
  399. package/dist/semantics/dynamic-fallback.d.ts +86 -0
  400. package/dist/semantics/dynamic-fallback.js +249 -0
  401. package/dist/semantics/frontend-timing.d.ts +6 -0
  402. package/dist/semantics/frontend-timing.js +35 -0
  403. package/dist/semantics/frontend.d.ts +504 -0
  404. package/dist/semantics/frontend.js +1157 -0
  405. package/dist/semantics/host-declaration-provenance.d.ts +11 -0
  406. package/dist/semantics/host-declaration-provenance.js +18 -0
  407. package/dist/semantics/host-methods.d.ts +24 -0
  408. package/dist/semantics/host-methods.js +74 -0
  409. package/dist/semantics/host-protocols.d.ts +429 -0
  410. package/dist/semantics/host-protocols.js +1501 -0
  411. package/dist/semantics/inherited-accessor.d.ts +7 -0
  412. package/dist/semantics/inherited-accessor.js +48 -0
  413. package/dist/semantics/interface-families.d.ts +70 -0
  414. package/dist/semantics/interface-families.js +180 -0
  415. package/dist/semantics/interface-implementors.d.ts +53 -0
  416. package/dist/semantics/interface-implementors.js +87 -0
  417. package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
  418. package/dist/semantics/jsdoc-namepath-transform.js +85 -0
  419. package/dist/semantics/model/coverage.d.ts +68 -0
  420. package/dist/semantics/model/coverage.js +73 -0
  421. package/dist/semantics/model/edges.d.ts +103 -0
  422. package/dist/semantics/model/edges.js +20 -0
  423. package/dist/semantics/model/graph.d.ts +55 -0
  424. package/dist/semantics/model/graph.js +129 -0
  425. package/dist/semantics/model/operands.d.ts +159 -0
  426. package/dist/semantics/model/operands.js +26 -0
  427. package/dist/semantics/model/operations.d.ts +496 -0
  428. package/dist/semantics/model/operations.js +2 -0
  429. package/dist/semantics/model/primitive-domain.d.ts +26 -0
  430. package/dist/semantics/model/primitive-domain.js +38 -0
  431. package/dist/semantics/model/selected-signature.d.ts +261 -0
  432. package/dist/semantics/model/selected-signature.js +55 -0
  433. package/dist/semantics/model/structural-type-table.d.ts +93 -0
  434. package/dist/semantics/model/structural-type-table.js +237 -0
  435. package/dist/semantics/model/structural-types.d.ts +367 -0
  436. package/dist/semantics/model/structural-types.js +200 -0
  437. package/dist/semantics/module-resolution.d.ts +23 -0
  438. package/dist/semantics/module-resolution.js +227 -0
  439. package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
  440. package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
  441. package/dist/semantics/node-project.d.ts +13 -0
  442. package/dist/semantics/node-project.js +107 -0
  443. package/dist/semantics/node-source-hooks.d.ts +1 -0
  444. package/dist/semantics/node-source-hooks.js +63 -0
  445. package/dist/semantics/normalize/absent-globals.d.ts +143 -0
  446. package/dist/semantics/normalize/absent-globals.js +191 -0
  447. package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
  448. package/dist/semantics/normalize/arguments-objects.js +60 -0
  449. package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
  450. package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
  451. package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
  452. package/dist/semantics/normalize/assignment-patterns.js +147 -0
  453. package/dist/semantics/normalize/bag-absence.d.ts +8 -0
  454. package/dist/semantics/normalize/bag-absence.js +42 -0
  455. package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
  456. package/dist/semantics/normalize/binding-fixpoint.js +140 -0
  457. package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
  458. package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
  459. package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
  460. package/dist/semantics/normalize/cells/agreement.js +34 -0
  461. package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
  462. package/dist/semantics/normalize/cells/candidates.js +35 -0
  463. package/dist/semantics/normalize/cells/facts.d.ts +19 -0
  464. package/dist/semantics/normalize/cells/facts.js +90 -0
  465. package/dist/semantics/normalize/cells/index.d.ts +10 -0
  466. package/dist/semantics/normalize/cells/index.js +6 -0
  467. package/dist/semantics/normalize/cells/model.d.ts +98 -0
  468. package/dist/semantics/normalize/cells/model.js +2 -0
  469. package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
  470. package/dist/semantics/normalize/cells/policies/bag.js +114 -0
  471. package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
  472. package/dist/semantics/normalize/cells/policies/collection.js +218 -0
  473. package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
  474. package/dist/semantics/normalize/cells/policies/field.js +40 -0
  475. package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
  476. package/dist/semantics/normalize/cells/policies/index.js +58 -0
  477. package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
  478. package/dist/semantics/normalize/cells/policies/local.js +37 -0
  479. package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
  480. package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
  481. package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
  482. package/dist/semantics/normalize/cells/policies/return.js +45 -0
  483. package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
  484. package/dist/semantics/normalize/cells/policies/shared.js +45 -0
  485. package/dist/semantics/normalize/cells/policy.d.ts +72 -0
  486. package/dist/semantics/normalize/cells/policy.js +18 -0
  487. package/dist/semantics/normalize/cells/registry.d.ts +14 -0
  488. package/dist/semantics/normalize/cells/registry.js +17 -0
  489. package/dist/semantics/normalize/census-refusal.d.ts +62 -0
  490. package/dist/semantics/normalize/census-refusal.js +27 -0
  491. package/dist/semantics/normalize/census.d.ts +109 -0
  492. package/dist/semantics/normalize/census.js +667 -0
  493. package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
  494. package/dist/semantics/normalize/collection-bindings.js +677 -0
  495. package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
  496. package/dist/semantics/normalize/commonjs-module-record.js +289 -0
  497. package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
  498. package/dist/semantics/normalize/commonjs-require.js +1527 -0
  499. package/dist/semantics/normalize/contribution.d.ts +63 -0
  500. package/dist/semantics/normalize/contribution.js +172 -0
  501. package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
  502. package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
  503. package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
  504. package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
  505. package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
  506. package/dist/semantics/normalize/derived-expression-type.js +3463 -0
  507. package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
  508. package/dist/semantics/normalize/evaluation-order.js +37 -0
  509. package/dist/semantics/normalize/field-bindings.d.ts +167 -0
  510. package/dist/semantics/normalize/field-bindings.js +1125 -0
  511. package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
  512. package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
  513. package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
  514. package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
  515. package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
  516. package/dist/semantics/normalize/flow/callable-completions.js +82 -0
  517. package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
  518. package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
  519. package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
  520. package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
  521. package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
  522. package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
  523. package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
  524. package/dist/semantics/normalize/flow/component-solver.js +587 -0
  525. package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
  526. package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
  527. package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
  528. package/dist/semantics/normalize/flow/export-importers.js +269 -0
  529. package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
  530. package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
  531. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
  532. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
  533. package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
  534. package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
  535. package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
  536. package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
  537. package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
  538. package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
  539. package/dist/semantics/normalize/flow/model.d.ts +357 -0
  540. package/dist/semantics/normalize/flow/model.js +177 -0
  541. package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
  542. package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
  543. package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
  544. package/dist/semantics/normalize/flow/node-path-token.js +53 -0
  545. package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
  546. package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
  547. package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
  548. package/dist/semantics/normalize/flow/origin-authority.js +2 -0
  549. package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
  550. package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
  551. package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
  552. package/dist/semantics/normalize/flow/parameter-values.js +251 -0
  553. package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
  554. package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
  555. package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
  556. package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
  557. package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
  558. package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
  559. package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
  560. package/dist/semantics/normalize/flow/source-class-data.js +838 -0
  561. package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
  562. package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
  563. package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
  564. package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
  565. package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
  566. package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
  567. package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
  568. package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
  569. package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
  570. package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
  571. package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
  572. package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
  573. package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
  574. package/dist/semantics/normalize/flow/source-record-data.js +626 -0
  575. package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
  576. package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
  577. package/dist/semantics/normalize/flow/targets.d.ts +118 -0
  578. package/dist/semantics/normalize/flow/targets.js +405 -0
  579. package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
  580. package/dist/semantics/normalize/flow/value-flow.js +823 -0
  581. package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
  582. package/dist/semantics/normalize/flow/value-provenance.js +112 -0
  583. package/dist/semantics/normalize/gating.d.ts +51 -0
  584. package/dist/semantics/normalize/gating.js +560 -0
  585. package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
  586. package/dist/semantics/normalize/generic-function-choice.js +115 -0
  587. package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
  588. package/dist/semantics/normalize/global-host-mutations.js +5989 -0
  589. package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
  590. package/dist/semantics/normalize/host-effect-contracts.js +143 -0
  591. package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
  592. package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
  593. package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
  594. package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
  595. package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
  596. package/dist/semantics/normalize/host-mutation-keys.js +183 -0
  597. package/dist/semantics/normalize/identities.d.ts +172 -0
  598. package/dist/semantics/normalize/identities.js +426 -0
  599. package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
  600. package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
  601. package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
  602. package/dist/semantics/normalize/implicit-arguments.js +39 -0
  603. package/dist/semantics/normalize/instantiation.d.ts +73 -0
  604. package/dist/semantics/normalize/instantiation.js +399 -0
  605. package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
  606. package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
  607. package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
  608. package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
  609. package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
  610. package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
  611. package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
  612. package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
  613. package/dist/semantics/normalize/keyof.d.ts +32 -0
  614. package/dist/semantics/normalize/keyof.js +110 -0
  615. package/dist/semantics/normalize/local-bindings.d.ts +176 -0
  616. package/dist/semantics/normalize/local-bindings.js +1826 -0
  617. package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
  618. package/dist/semantics/normalize/logical-result-type.js +102 -0
  619. package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
  620. package/dist/semantics/normalize/namespace-paths.js +108 -0
  621. package/dist/semantics/normalize/normalize.d.ts +57 -0
  622. package/dist/semantics/normalize/normalize.js +68 -0
  623. package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
  624. package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
  625. package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
  626. package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
  627. package/dist/semantics/normalize/open-type-form.d.ts +10 -0
  628. package/dist/semantics/normalize/open-type-form.js +32 -0
  629. package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
  630. package/dist/semantics/normalize/parameter-bindings.js +3339 -0
  631. package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
  632. package/dist/semantics/normalize/parameter-slot.js +491 -0
  633. package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
  634. package/dist/semantics/normalize/physical-overload-result.js +99 -0
  635. package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
  636. package/dist/semantics/normalize/primitive-property-absence.js +60 -0
  637. package/dist/semantics/normalize/producer-context.d.ts +376 -0
  638. package/dist/semantics/normalize/producer-context.js +1 -0
  639. package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
  640. package/dist/semantics/normalize/producers/allocations.js +863 -0
  641. package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
  642. package/dist/semantics/normalize/producers/binding-kind.js +36 -0
  643. package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
  644. package/dist/semantics/normalize/producers/bindings.js +710 -0
  645. package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
  646. package/dist/semantics/normalize/producers/boundary.js +123 -0
  647. package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
  648. package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
  649. package/dist/semantics/normalize/producers/computations.d.ts +3 -0
  650. package/dist/semantics/normalize/producers/computations.js +613 -0
  651. package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
  652. package/dist/semantics/normalize/producers/control-loops.js +91 -0
  653. package/dist/semantics/normalize/producers/control.d.ts +30 -0
  654. package/dist/semantics/normalize/producers/control.js +923 -0
  655. package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
  656. package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
  657. package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
  658. package/dist/semantics/normalize/producers/destructuring.js +1180 -0
  659. package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
  660. package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
  661. package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
  662. package/dist/semantics/normalize/producers/erasure.js +90 -0
  663. package/dist/semantics/normalize/producers/installed.d.ts +3 -0
  664. package/dist/semantics/normalize/producers/installed.js +55 -0
  665. package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
  666. package/dist/semantics/normalize/producers/invocations.js +1796 -0
  667. package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
  668. package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
  669. package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
  670. package/dist/semantics/normalize/producers/jsx.js +360 -0
  671. package/dist/semantics/normalize/producers/mint.d.ts +39 -0
  672. package/dist/semantics/normalize/producers/mint.js +44 -0
  673. package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
  674. package/dist/semantics/normalize/producers/nullish.js +27 -0
  675. package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
  676. package/dist/semantics/normalize/producers/object-assignment.js +204 -0
  677. package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
  678. package/dist/semantics/normalize/producers/object-tag.js +119 -0
  679. package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
  680. package/dist/semantics/normalize/producers/optional-chain.js +75 -0
  681. package/dist/semantics/normalize/producers/properties.d.ts +21 -0
  682. package/dist/semantics/normalize/producers/properties.js +1053 -0
  683. package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
  684. package/dist/semantics/normalize/producers/protocol.js +695 -0
  685. package/dist/semantics/normalize/producers/references.d.ts +53 -0
  686. package/dist/semantics/normalize/producers/references.js +1027 -0
  687. package/dist/semantics/normalize/producers/shared.d.ts +561 -0
  688. package/dist/semantics/normalize/producers/shared.js +1683 -0
  689. package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
  690. package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
  691. package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
  692. package/dist/semantics/normalize/producers/tagged-template.js +307 -0
  693. package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
  694. package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
  695. package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
  696. package/dist/semantics/normalize/property-key-domain.js +150 -0
  697. package/dist/semantics/normalize/reachability.d.ts +189 -0
  698. package/dist/semantics/normalize/reachability.js +1057 -0
  699. package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
  700. package/dist/semantics/normalize/reassigned-bindings.js +41 -0
  701. package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
  702. package/dist/semantics/normalize/record-storage-families.js +109 -0
  703. package/dist/semantics/normalize/return-bindings.d.ts +260 -0
  704. package/dist/semantics/normalize/return-bindings.js +1311 -0
  705. package/dist/semantics/normalize/return-paths.d.ts +2 -0
  706. package/dist/semantics/normalize/return-paths.js +28 -0
  707. package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
  708. package/dist/semantics/normalize/script-global-redefinition.js +75 -0
  709. package/dist/semantics/normalize/specialization.d.ts +201 -0
  710. package/dist/semantics/normalize/specialization.js +1824 -0
  711. package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
  712. package/dist/semantics/normalize/structural-array-element.js +700 -0
  713. package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
  714. package/dist/semantics/normalize/structural-array-read.js +124 -0
  715. package/dist/semantics/normalize/structural-callable.d.ts +12 -0
  716. package/dist/semantics/normalize/structural-callable.js +82 -0
  717. package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
  718. package/dist/semantics/normalize/structural-creation-order.js +111 -0
  719. package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
  720. package/dist/semantics/normalize/structural-declarations.js +968 -0
  721. package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
  722. package/dist/semantics/normalize/structural-declared-body.js +147 -0
  723. package/dist/semantics/normalize/structural-generics.d.ts +56 -0
  724. package/dist/semantics/normalize/structural-generics.js +120 -0
  725. package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
  726. package/dist/semantics/normalize/structural-indexed-access.js +126 -0
  727. package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
  728. package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
  729. package/dist/semantics/normalize/structural-joins.d.ts +44 -0
  730. package/dist/semantics/normalize/structural-joins.js +143 -0
  731. package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
  732. package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
  733. package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
  734. package/dist/semantics/normalize/structural-layout-type.js +1468 -0
  735. package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
  736. package/dist/semantics/normalize/structural-leaves.js +125 -0
  737. package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
  738. package/dist/semantics/normalize/structural-local-union.js +133 -0
  739. package/dist/semantics/normalize/structural-members.d.ts +26 -0
  740. package/dist/semantics/normalize/structural-members.js +84 -0
  741. package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
  742. package/dist/semantics/normalize/structural-mutable-method.js +109 -0
  743. package/dist/semantics/normalize/structural-parts.d.ts +131 -0
  744. package/dist/semantics/normalize/structural-parts.js +737 -0
  745. package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
  746. package/dist/semantics/normalize/structural-receiver.js +551 -0
  747. package/dist/semantics/normalize/structural-rules.d.ts +112 -0
  748. package/dist/semantics/normalize/structural-rules.js +93 -0
  749. package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
  750. package/dist/semantics/normalize/structural-self-reference.js +494 -0
  751. package/dist/semantics/normalize/structural.d.ts +202 -0
  752. package/dist/semantics/normalize/structural.js +4218 -0
  753. package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
  754. package/dist/semantics/normalize/unreduced-type-form.js +53 -0
  755. package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
  756. package/dist/semantics/normalize/unresolvable-names.js +140 -0
  757. package/dist/semantics/package-sources.d.ts +16 -0
  758. package/dist/semantics/package-sources.js +365 -0
  759. package/dist/semantics/program.d.ts +151 -0
  760. package/dist/semantics/program.js +667 -0
  761. package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
  762. package/dist/semantics/prototype-install-source-transform.js +341 -0
  763. package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
  764. package/dist/semantics/prototype-object-class-source-transform.js +525 -0
  765. package/dist/semantics/prototype-reparenting.d.ts +50 -0
  766. package/dist/semantics/prototype-reparenting.js +317 -0
  767. package/dist/semantics/stable-checker.d.ts +10 -0
  768. package/dist/semantics/stable-checker.js +148 -0
  769. package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
  770. package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
  771. package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
  772. package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
  773. package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
  774. package/dist/semantics/this-constructor-source-transform.js +122 -0
  775. package/dist/semantics/uninstantiable-classes.d.ts +22 -0
  776. package/dist/semantics/uninstantiable-classes.js +75 -0
  777. package/dist/targets/cpp/balanced-units.d.ts +3 -0
  778. package/dist/targets/cpp/balanced-units.js +58 -0
  779. package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
  780. package/dist/targets/cpp/borrowed-call-entry.js +68 -0
  781. package/dist/targets/cpp/captures.d.ts +68 -0
  782. package/dist/targets/cpp/captures.js +269 -0
  783. package/dist/targets/cpp/class-layout.d.ts +313 -0
  784. package/dist/targets/cpp/class-layout.js +483 -0
  785. package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
  786. package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
  787. package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
  788. package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
  789. package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
  790. package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
  791. package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
  792. package/dist/targets/cpp/class-ref-transport.js +32 -0
  793. package/dist/targets/cpp/conversions.d.ts +3 -0
  794. package/dist/targets/cpp/conversions.js +2027 -0
  795. package/dist/targets/cpp/deferral-safety.d.ts +82 -0
  796. package/dist/targets/cpp/deferral-safety.js +86 -0
  797. package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
  798. package/dist/targets/cpp/direct-call-receivers.js +79 -0
  799. package/dist/targets/cpp/document.d.ts +74 -0
  800. package/dist/targets/cpp/document.js +106 -0
  801. package/dist/targets/cpp/emit-allocation.d.ts +60 -0
  802. package/dist/targets/cpp/emit-allocation.js +573 -0
  803. package/dist/targets/cpp/emit-arrays.d.ts +119 -0
  804. package/dist/targets/cpp/emit-arrays.js +1047 -0
  805. package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
  806. package/dist/targets/cpp/emit-binding-reference.js +120 -0
  807. package/dist/targets/cpp/emit-bindings.d.ts +158 -0
  808. package/dist/targets/cpp/emit-bindings.js +769 -0
  809. package/dist/targets/cpp/emit-buffers.d.ts +156 -0
  810. package/dist/targets/cpp/emit-buffers.js +573 -0
  811. package/dist/targets/cpp/emit-callable.d.ts +230 -0
  812. package/dist/targets/cpp/emit-callable.js +2154 -0
  813. package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
  814. package/dist/targets/cpp/emit-carrier-members.js +1224 -0
  815. package/dist/targets/cpp/emit-coercion.d.ts +26 -0
  816. package/dist/targets/cpp/emit-coercion.js +39 -0
  817. package/dist/targets/cpp/emit-context.d.ts +1882 -0
  818. package/dist/targets/cpp/emit-context.js +904 -0
  819. package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
  820. package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
  821. package/dist/targets/cpp/emit-equality.d.ts +39 -0
  822. package/dist/targets/cpp/emit-equality.js +472 -0
  823. package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
  824. package/dist/targets/cpp/emit-exceptions.js +513 -0
  825. package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
  826. package/dist/targets/cpp/emit-field-owner.js +27 -0
  827. package/dist/targets/cpp/emit-in.d.ts +31 -0
  828. package/dist/targets/cpp/emit-in.js +426 -0
  829. package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
  830. package/dist/targets/cpp/emit-instanceof.js +601 -0
  831. package/dist/targets/cpp/emit-integers.d.ts +68 -0
  832. package/dist/targets/cpp/emit-integers.js +184 -0
  833. package/dist/targets/cpp/emit-iterator.d.ts +100 -0
  834. package/dist/targets/cpp/emit-iterator.js +1137 -0
  835. package/dist/targets/cpp/emit-json.d.ts +73 -0
  836. package/dist/targets/cpp/emit-json.js +823 -0
  837. package/dist/targets/cpp/emit-jsx.d.ts +74 -0
  838. package/dist/targets/cpp/emit-jsx.js +806 -0
  839. package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
  840. package/dist/targets/cpp/emit-mixed-binary.js +60 -0
  841. package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
  842. package/dist/targets/cpp/emit-namespaces.js +133 -0
  843. package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
  844. package/dist/targets/cpp/emit-narrowing.js +3967 -0
  845. package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
  846. package/dist/targets/cpp/emit-native-equality.js +14 -0
  847. package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
  848. package/dist/targets/cpp/emit-native-selection.js +37 -0
  849. package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
  850. package/dist/targets/cpp/emit-object-tag.js +108 -0
  851. package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
  852. package/dist/targets/cpp/emit-owned-record.js +15 -0
  853. package/dist/targets/cpp/emit-presence.d.ts +78 -0
  854. package/dist/targets/cpp/emit-presence.js +376 -0
  855. package/dist/targets/cpp/emit-properties.d.ts +105 -0
  856. package/dist/targets/cpp/emit-properties.js +1640 -0
  857. package/dist/targets/cpp/emit-record-view.d.ts +20 -0
  858. package/dist/targets/cpp/emit-record-view.js +354 -0
  859. package/dist/targets/cpp/emit-return.d.ts +5 -0
  860. package/dist/targets/cpp/emit-return.js +237 -0
  861. package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
  862. package/dist/targets/cpp/emit-sum-widening.js +69 -0
  863. package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
  864. package/dist/targets/cpp/emit-tonumber.js +177 -0
  865. package/dist/targets/cpp/emit-tostring.d.ts +92 -0
  866. package/dist/targets/cpp/emit-tostring.js +556 -0
  867. package/dist/targets/cpp/emit-typeof.d.ts +49 -0
  868. package/dist/targets/cpp/emit-typeof.js +317 -0
  869. package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
  870. package/dist/targets/cpp/emit-union-properties.js +1281 -0
  871. package/dist/targets/cpp/emit.d.ts +45 -0
  872. package/dist/targets/cpp/emit.js +2225 -0
  873. package/dist/targets/cpp/error-types.d.ts +4 -0
  874. package/dist/targets/cpp/error-types.js +11 -0
  875. package/dist/targets/cpp/function-source-reads.d.ts +72 -0
  876. package/dist/targets/cpp/function-source-reads.js +148 -0
  877. package/dist/targets/cpp/host/atomics.d.ts +25 -0
  878. package/dist/targets/cpp/host/atomics.js +63 -0
  879. package/dist/targets/cpp/host/core-globals.d.ts +108 -0
  880. package/dist/targets/cpp/host/core-globals.js +158 -0
  881. package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
  882. package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
  883. package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
  884. package/dist/targets/cpp/host/emit-host-arity.js +232 -0
  885. package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
  886. package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
  887. package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
  888. package/dist/targets/cpp/host/emit-host-object.js +2206 -0
  889. package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
  890. package/dist/targets/cpp/host/emit-host-properties.js +533 -0
  891. package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
  892. package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
  893. package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
  894. package/dist/targets/cpp/host/emit-host-value.js +392 -0
  895. package/dist/targets/cpp/host/host-members.d.ts +505 -0
  896. package/dist/targets/cpp/host/host-members.js +819 -0
  897. package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
  898. package/dist/targets/cpp/host/host-method-aliases.js +76 -0
  899. package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
  900. package/dist/targets/cpp/host/native-protocols.js +183 -0
  901. package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
  902. package/dist/targets/cpp/host/object-protocol.js +671 -0
  903. package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
  904. package/dist/targets/cpp/host-namespace-reads.js +113 -0
  905. package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
  906. package/dist/targets/cpp/manifest/capabilities.js +1484 -0
  907. package/dist/targets/cpp/manifest.d.ts +23 -0
  908. package/dist/targets/cpp/manifest.js +113 -0
  909. package/dist/targets/cpp/native-error-base.d.ts +38 -0
  910. package/dist/targets/cpp/native-error-base.js +74 -0
  911. package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
  912. package/dist/targets/cpp/native-narrowing-transport.js +151 -0
  913. package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
  914. package/dist/targets/cpp/native-selection-helpers.js +46 -0
  915. package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
  916. package/dist/targets/cpp/native-symbol-keys.js +34 -0
  917. package/dist/targets/cpp/ownership.d.ts +43 -0
  918. package/dist/targets/cpp/ownership.js +38 -0
  919. package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
  920. package/dist/targets/cpp/owning-conversion-input.js +12 -0
  921. package/dist/targets/cpp/property-read-claims.d.ts +62 -0
  922. package/dist/targets/cpp/property-read-claims.js +23 -0
  923. package/dist/targets/cpp/property-store-claims.d.ts +62 -0
  924. package/dist/targets/cpp/property-store-claims.js +26 -0
  925. package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
  926. package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
  927. package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
  928. package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
  929. package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
  930. package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
  931. package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
  932. package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
  933. package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
  934. package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
  935. package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
  936. package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
  937. package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
  938. package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
  939. package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
  940. package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
  941. package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
  942. package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
  943. package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
  944. package/dist/targets/cpp/reactive-dependencies.js +432 -0
  945. package/dist/targets/cpp/reactive-origins.d.ts +44 -0
  946. package/dist/targets/cpp/reactive-origins.js +82 -0
  947. package/dist/targets/cpp/records.d.ts +277 -0
  948. package/dist/targets/cpp/records.js +2427 -0
  949. package/dist/targets/cpp/recursive-containers.d.ts +43 -0
  950. package/dist/targets/cpp/recursive-containers.js +144 -0
  951. package/dist/targets/cpp/regexp-types.d.ts +56 -0
  952. package/dist/targets/cpp/regexp-types.js +59 -0
  953. package/dist/targets/cpp/substrate.d.ts +125 -0
  954. package/dist/targets/cpp/substrate.js +12 -0
  955. package/dist/targets/cpp/translation-unit.d.ts +219 -0
  956. package/dist/targets/cpp/translation-unit.js +2063 -0
  957. package/dist/targets/cpp/types.d.ts +280 -0
  958. package/dist/targets/cpp/types.js +1135 -0
  959. package/dist/targets/cpp/virtual-methods.d.ts +95 -0
  960. package/dist/targets/cpp/virtual-methods.js +264 -0
  961. package/package.json +95 -0
  962. package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
  963. package/src/targets/cpp/runtime/gea_eval.h +1376 -0
  964. package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
  965. package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
  966. package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
@@ -0,0 +1,273 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ /**
3
+ * An OWNED record (a value, not a handle) materialized as a refcounted or
4
+ * owned record of another shape, or as the one arm of a sum that shape fits:
5
+ * every field required on both sides and itself materializable.
6
+ */
7
+ export const ownedRecordMaterializationPlan = (source, target, layouts) => {
8
+ if (representationKey(source) === representationKey(target))
9
+ return { kind: 'identity', target };
10
+ if (source.kind === 'record' &&
11
+ target.kind === 'native-record-ref' &&
12
+ target.native === null &&
13
+ source.shapeId === target.shapeId &&
14
+ source.ownership === target.ownership)
15
+ return { kind: 'identity', target };
16
+ if (source.kind !== 'record')
17
+ return null;
18
+ if (target.kind === 'tagged-union') {
19
+ const arms = target.arms.flatMap((arm, index) => {
20
+ const payload = ownedRecordMaterializationPlan(source, arm.value, layouts);
21
+ return payload === null ? [] : [{ kind: 'arm', target, index, payload }];
22
+ });
23
+ return arms.length === 1 ? (arms[0] ?? null) : null;
24
+ }
25
+ if (source.ownership !== 'owned' || source.accessors.length !== 0)
26
+ return null;
27
+ if (target.kind !== 'record' && target.kind !== 'native-record-ref')
28
+ return null;
29
+ if (target.ownership === 'borrowed')
30
+ return null;
31
+ if (target.kind === 'native-record-ref' && target.native !== null)
32
+ return null;
33
+ if (target.kind === 'record' && target.accessors.length !== 0)
34
+ return null;
35
+ const fields = target.kind === 'record' ? target.fields : (layouts.plainFieldsForShape?.(target.shapeId) ?? null);
36
+ if (fields === null || fields.length !== source.fields.length)
37
+ return null;
38
+ const planned = [];
39
+ for (const field of fields) {
40
+ const held = source.fields.find((candidate) => candidate.key === field.key);
41
+ if (!held || !held.required || !field.required)
42
+ return null;
43
+ const value = ownedRecordMaterializationPlan(held.value, field.value, layouts);
44
+ if (value === null)
45
+ return null;
46
+ planned.push({ key: field.key, value });
47
+ }
48
+ return { kind: 'record', source, target, fields: planned };
49
+ };
50
+ /**
51
+ * Effects of an already-admitted view, not another conversion predicate.
52
+ * Copying a held carrier (including an already-dynamic cell) reads native
53
+ * storage directly. A converted field, bound method or expando needs its own
54
+ * transport contract before this view can dispense with dynamic field hooks.
55
+ */
56
+ export const recordViewUsesOnlyDirectFields = (plan) => {
57
+ switch (plan.kind) {
58
+ case 'owned':
59
+ return true;
60
+ case 'optional':
61
+ case 'assert':
62
+ return recordViewUsesOnlyDirectFields(plan.payload);
63
+ case 'arm': {
64
+ const arm = plan.target.arms[plan.index];
65
+ return plan.payload !== null
66
+ ? recordViewUsesOnlyDirectFields(plan.payload)
67
+ : arm !== undefined && representationKey(plan.source) === representationKey(arm.value);
68
+ }
69
+ case 'recast-union':
70
+ return plan.arms.every((arm) => arm.via === 'exact' || (arm.via !== 'convert' && recordViewUsesOnlyDirectFields(arm.via)));
71
+ case 'fields':
72
+ return (!plan.expando &&
73
+ plan.indexes.length === 0 &&
74
+ plan.fields.every(({ field, read }) => read.kind === 'absent' || (read.kind === 'held' && representationKey(read.held.value) === representationKey(field.value))));
75
+ }
76
+ };
77
+ const abiOf = (member) => 'abi' in member && member.abi !== null && typeof member.abi === 'object' ? member.abi : null;
78
+ /** Whether viewing `source` as `arm` puts a non-dynamic source field into a `dynamic` (or `dynamic | undefined`) target field. */
79
+ const widensFieldIntoDynamic = (layouts, source, arm) => {
80
+ const sourceFields = source.kind === 'record' || source.kind === 'record-with-index'
81
+ ? source.fields
82
+ : source.kind === 'native-record-ref'
83
+ ? layouts.forShape(source.shapeId)
84
+ : null;
85
+ const armFields = arm.kind === 'record' ? arm.fields : arm.kind === 'native-record-ref' ? layouts.forShape(arm.shapeId) : null;
86
+ if (sourceFields === null || armFields === null)
87
+ return false;
88
+ const isDynamic = (value) => value.kind === 'dynamic' || (value.kind === 'optional' && value.payload.kind === 'dynamic');
89
+ return sourceFields.some((held) => {
90
+ const field = armFields.find((candidate) => candidate.key === held.key);
91
+ return field !== undefined && isDynamic(field.value) && !isDynamic(held.value);
92
+ });
93
+ };
94
+ export const structuralRecordViewPlan = (layouts, source, target, convertible) => {
95
+ if (source.kind === 'record' && target.kind === 'tagged-union') {
96
+ const plan = ownedRecordMaterializationPlan(source, target, layouts);
97
+ if (plan !== null)
98
+ return { kind: 'owned', plan };
99
+ }
100
+ const sourceCanViewRecord = source.kind === 'record' ||
101
+ source.kind === 'record-with-index' ||
102
+ source.kind === 'native-record-ref' ||
103
+ (source.kind === 'class-ref' && source.ownership === 'shared-refcount');
104
+ // A shared record can be narrower than the record arm selected for a
105
+ // field's physical union; the ordinary sum widener preserves identity and
106
+ // cannot re-layout it. Exactly one arm the source can become is the answer.
107
+ if (sourceCanViewRecord && target.kind === 'tagged-union') {
108
+ const homes = [];
109
+ for (const [index, arm] of target.arms.entries()) {
110
+ if (convertible(source, arm.value)) {
111
+ homes.push({ index, payload: null });
112
+ continue;
113
+ }
114
+ const payload = structuralRecordViewPlan(layouts, source, arm.value, convertible);
115
+ if (payload !== null)
116
+ homes.push({ index, payload });
117
+ }
118
+ // Two arms can both accept the record and still not be equal answers:
119
+ // `IteratorResult<number>` is `IteratorYieldResult<number> |
120
+ // IteratorReturnResult<any>`, and `{ value: i++, done: false }` fits the
121
+ // yield arm as written and the return arm only by BOXING `value` into its
122
+ // `any`. Boxing is a widening the program never asked for -- the record
123
+ // is already a value of the arm that holds its fields as they are -- so
124
+ // when exactly one home takes the record without widening a field into
125
+ // `dynamic`, that home is the answer, and the ambiguity guard below is
126
+ // reserved for arms that genuinely tie.
127
+ const exact = homes.length > 1 ? homes.filter((candidate) => !widensFieldIntoDynamic(layouts, source, target.arms[candidate.index].value)) : homes;
128
+ const home = exact.length === 1 ? exact[0] : undefined;
129
+ return home === undefined ? null : { kind: 'arm', source, target, index: home.index, payload: home.payload };
130
+ }
131
+ // The optional wrapper is peeled on both sides first: the question is about
132
+ // the two RECORD carriers, and an absence is answered by the optional's own
133
+ // presence flag either way.
134
+ if (target.kind === 'optional') {
135
+ const inner = source.kind === 'optional' ? source.payload : source;
136
+ const payload = structuralRecordViewPlan(layouts, inner, target.payload, convertible);
137
+ return payload === null ? null : { kind: 'optional', target, sourceOptional: source.kind === 'optional', payload };
138
+ }
139
+ // The mirror case: the TARGET has already had its optional erased by a `!`
140
+ // assertion (a declared return like `PropertyDescriptor | undefined`, read
141
+ // past a non-null assertion into a bare-record slot), but the source is
142
+ // still `optional(...)`. `narrowing`'s present-optional unwrap
143
+ // (`targets/cpp/conversions.ts`) only installs when the payload's own
144
+ // shape already equals the target's -- exactly the case that does NOT need
145
+ // a view. When the payload is a differently-interned shape (a per-overload
146
+ // host record vs. the canonical layout the binding declares) the unwrap has
147
+ // nothing to chain to, so the view has to reach past the optional itself.
148
+ if (source.kind === 'optional' && (target.kind === 'record' || target.kind === 'native-record-ref')) {
149
+ const payload = structuralRecordViewPlan(layouts, source.payload, target, convertible);
150
+ return payload === null ? null : { kind: 'assert', target, payload };
151
+ }
152
+ if (source.kind === 'tagged-union' && target.kind === 'tagged-union')
153
+ return recastUnionPlan(layouts, source, target, convertible);
154
+ const sourceIsRecord = source.kind === 'record' || source.kind === 'record-with-index' || source.kind === 'native-record-ref';
155
+ if (!sourceIsRecord && (source.kind !== 'class-ref' || source.ownership !== 'shared-refcount'))
156
+ return null;
157
+ if (source.kind === 'native-record-ref' && source.native !== null)
158
+ return null;
159
+ if (target.kind !== 'native-record-ref' && target.kind !== 'record')
160
+ return null;
161
+ if (target.kind === 'native-record-ref' && target.native !== null)
162
+ return null;
163
+ const targetIndexes = target.kind === 'record' ? [] : (layouts.indexesForShape?.(target.shapeId) ?? []);
164
+ if (targetIndexes.length > 0) {
165
+ if (source.kind !== 'record-with-index' ||
166
+ source.indexes.length !== targetIndexes.length ||
167
+ !targetIndexes.every((targetIndex, index) => {
168
+ const sourceIndex = source.indexes[index];
169
+ return (sourceIndex !== undefined &&
170
+ sourceIndex.key === targetIndex.key &&
171
+ representationKey(sourceIndex.value) === representationKey(targetIndex.value));
172
+ }))
173
+ return null;
174
+ }
175
+ else if (source.kind === 'record-with-index')
176
+ return null;
177
+ if (target.kind === 'native-record-ref' && (layouts.accessorsForShape?.(target.shapeId) ?? []).length > 0)
178
+ return null;
179
+ const targetFields = target.kind === 'record' ? target.fields : layouts.forShape(target.shapeId);
180
+ const sourceFields = source.kind === 'record' || source.kind === 'record-with-index' ? source.fields : layouts.forShape(source.shapeId);
181
+ if (targetFields === null || sourceFields === null)
182
+ return null;
183
+ // A record asserted to a wider shape that only adds members (`m[method] as
184
+ // HandlerSet<T> & { params }`, whose program writes `params` next) holds
185
+ // nothing a required added member could be read from: the language leaves
186
+ // it undefined until the write, and the view starts it value-initialized.
187
+ const onlyAdds = (source.kind === 'record' || source.kind === 'native-record-ref') &&
188
+ sourceFields.length < targetFields.length &&
189
+ sourceFields.every((held) => targetFields.some((field) => field.key === held.key));
190
+ const fields = [];
191
+ for (const field of targetFields) {
192
+ // A class method appears in the checker's structural field list, but it
193
+ // is not physical storage in the emitted class: the projected class
194
+ // member is the authority, and its receiver is bound into the callable
195
+ // member the interface record stores.
196
+ const abi = abiOf(field.value);
197
+ if (source.kind === 'class-ref' &&
198
+ abi !== null &&
199
+ abi.receiver === null &&
200
+ abi.restFrom === null &&
201
+ layouts.classMethodFor?.(source.declaration, field.key) === true) {
202
+ fields.push({ field, read: { kind: 'bound-method' } });
203
+ continue;
204
+ }
205
+ // Same fact one member kind over: `layouts.forShape` names a class's
206
+ // PHYSICAL storage, so a member backed by a getter is absent from it
207
+ // although every read of the class answers. Calling the getter is the
208
+ // read -- and asking before the field lookup is safe because a class
209
+ // never declares a key as both storage and an accessor.
210
+ if (source.kind === 'class-ref') {
211
+ const accessor = layouts.classAccessorFor?.(source.declaration, field.key) ?? null;
212
+ if (accessor !== null) {
213
+ if (!convertible(accessor, field.value))
214
+ return null;
215
+ fields.push({ field, read: { kind: 'class-accessor', value: accessor } });
216
+ continue;
217
+ }
218
+ }
219
+ const held = sourceFields.find((candidate) => candidate.key === field.key);
220
+ if (!held) {
221
+ if (field.required && !onlyAdds)
222
+ return null;
223
+ fields.push({ field, read: { kind: 'absent' } });
224
+ continue;
225
+ }
226
+ if (!convertible(held.value, field.value))
227
+ return null;
228
+ fields.push({ field, read: { kind: 'held', held } });
229
+ }
230
+ const indexes = [];
231
+ if (targetIndexes.length > 0 && source.kind === 'record-with-index') {
232
+ for (const targetIndex of targetIndexes) {
233
+ const sourceIndex = source.indexes.find((index) => index.key === targetIndex.key);
234
+ if (!sourceIndex)
235
+ return null;
236
+ indexes.push({ target: targetIndex, source: sourceIndex });
237
+ }
238
+ }
239
+ const expando = targetIndexes.length === 0 &&
240
+ target.kind === 'native-record-ref' &&
241
+ source.kind === 'record-with-index' &&
242
+ source.indexes.length === 1 &&
243
+ source.indexes[0]?.key === 'string' &&
244
+ source.indexes[0]?.value.kind === 'dynamic';
245
+ return { kind: 'fields', source, target, fields, indexes, expando };
246
+ };
247
+ const recastUnionPlan = (layouts, source, target, convertible) => {
248
+ const arms = [];
249
+ for (const arm of source.arms) {
250
+ const key = representationKey(arm.value);
251
+ const exact = target.arms.findIndex((candidate) => representationKey(candidate.value) === key);
252
+ if (exact >= 0) {
253
+ arms.push({ index: exact, via: 'exact' });
254
+ continue;
255
+ }
256
+ let home = null;
257
+ for (const [index, candidate] of target.arms.entries()) {
258
+ if (convertible(arm.value, candidate.value)) {
259
+ home = { index, via: 'convert' };
260
+ break;
261
+ }
262
+ const viewed = structuralRecordViewPlan(layouts, arm.value, candidate.value, convertible);
263
+ if (viewed !== null) {
264
+ home = { index, via: viewed };
265
+ break;
266
+ }
267
+ }
268
+ if (home === null)
269
+ return null;
270
+ arms.push(home);
271
+ }
272
+ return { kind: 'recast-union', source, target, arms };
273
+ };
@@ -0,0 +1,217 @@
1
+ import type { DeclarationId, FunctionId } from '../identity/ids.js';
2
+ import type { CallableAbi, Ownership, Representation, ScalarDomain, TaggedUnionArm } from '../representation/model.js';
3
+ import type { ClassifierContract, CoercionOperation, CollectionDomain, MaterializerContract } from './algebra.js';
4
+ export type { CoercionOperation } from './algebra.js';
5
+ /**
6
+ * The runtime's installed conversion primitives.
7
+ *
8
+ * Derivation never invents a classifier or a materializer. It only asks this
9
+ * registry whether one is installed for the exact identity a `Representation`
10
+ * carries -- a scalar domain, a class declaration, a function/ABI pair -- and
11
+ * reports `never` with a stated reason when the answer is no. Without this
12
+ * boundary, "the runtime does not have this yet" would silently become a
13
+ * fabricated `Atom` instead of an honest gap.
14
+ *
15
+ * Every lookup answers only "is one installed", never "would one be correct".
16
+ * Domain-equality and disjointness are proved by the caller from what comes
17
+ * back, not asserted by the registry.
18
+ */
19
+ /** A classifier paired with the materializer whose acceptance domain it must equal. */
20
+ export interface ClassifierMaterializerPair {
21
+ readonly classifier: ClassifierContract;
22
+ readonly materializer: MaterializerContract;
23
+ }
24
+ export interface ConversionRuntimeRegistry {
25
+ /**
26
+ * The exact JS tag/range materializer for one scalar domain, or `null` if
27
+ * none is installed. `boolean` and `number` must be backed only by an exact
28
+ * `typeof` tag check, never a coercive cast; the registry, not this module,
29
+ * owns that discipline -- derivation only ever forwards what comes back.
30
+ */
31
+ readonly scalarMaterializer: (domain: ScalarDomain) => ClassifierMaterializerPair | null;
32
+ /** The exact string-tag materializer. Never a `ToString` coercion. */
33
+ readonly stringMaterializer: () => ClassifierMaterializerPair | null;
34
+ /**
35
+ * The exact symbol-tag materializer.
36
+ *
37
+ * `typeof x === 'symbol'` is the only test there is: a symbol carries no
38
+ * structure to inspect, so classifying one out of a box is a tag check and
39
+ * nothing else. Installed only by a runtime whose box can report that tag.
40
+ */
41
+ readonly symbolMaterializer: () => ClassifierMaterializerPair | null;
42
+ /** The exact null-tag materializer, installed only when the runtime distinguishes `null` from `undefined`. */
43
+ readonly nullMaterializer: () => ClassifierMaterializerPair | null;
44
+ /** The exact undefined-tag materializer, installed only when the runtime distinguishes `undefined` from `null`. */
45
+ readonly undefinedMaterializer: () => ClassifierMaterializerPair | null;
46
+ /** The nominal-token materializer for one exact class and ownership. There is no structural fallback. */
47
+ readonly classRefMaterializer: (declaration: DeclarationId, ownership: Ownership) => ClassifierMaterializerPair | null;
48
+ /**
49
+ * A versioned host-protocol materializer -- the only admissible route for a
50
+ * native handle. `native === null` means the compiler's opaque
51
+ * `NativeHandle<protocol>` carrier; a native spelling is host-owned and
52
+ * needs an explicit host identity contract rather than inference from text.
53
+ */
54
+ readonly nativeHandleMaterializer: (protocol: string, version: number, native: string | null) => ClassifierMaterializerPair | null;
55
+ /**
56
+ * The materializer that allocates one exact frozen record shape. Required-
57
+ * presence checking and per-field recursion are the materializer's recipe;
58
+ * this registry only answers whether the shape and ownership are installed.
59
+ */
60
+ readonly recordMaterializer: (shapeId: string, ownership: Ownership) => MaterializerContract | null;
61
+ /**
62
+ * The IDENTITY-token materializer for one exact record shape and ownership
63
+ * -- reading back the very object a box already holds, rather than
64
+ * reconstructing one field by field the way `recordMaterializer` above does.
65
+ *
66
+ * A distinct entry because it is a distinct claim. `recordMaterializer`
67
+ * says "this runtime can BUILD a value of this shape from an arbitrary
68
+ * dynamic object, checking every required field"; this one says "a value of
69
+ * this shape that THIS program boxed can be recognized and handed back
70
+ * unchanged". The second is what a program that boxes its own typed record
71
+ * and reads it out again needs, it preserves identity where a rebuild would
72
+ * not, and it is available for shapes the first will never be available for
73
+ * -- so collapsing them into one entry would either over-claim the rebuild
74
+ * or lose the round trip.
75
+ *
76
+ * Serves `native-record-ref`. Compiler-owned `record` values use the
77
+ * distinct product materializer above: an exact boxed payload is only that
78
+ * product's identity-preserving fast path, not its capability claim.
79
+ */
80
+ readonly recordRefMaterializer: (shapeId: string, ownership: Ownership) => ClassifierMaterializerPair | null;
81
+ /**
82
+ * The installed materializable-ordinary-Array domain, narrower than a bare
83
+ * `IsArray` test. `null` when no such domain is installed for this ownership,
84
+ * for instance because materializing a fresh value as `borrowed` is
85
+ * incoherent -- a materialized value cannot borrow lifetime it never had.
86
+ */
87
+ readonly arrayObjectDomain: (ownership: Ownership) => CollectionDomain | null;
88
+ /** The authenticated callable-identity materializer for one exact function and ABI. Category-only checks do not qualify. */
89
+ readonly functionMaterializer: (functionId: FunctionId, abi: CallableAbi) => ClassifierMaterializerPair | null;
90
+ /**
91
+ * A checked adapter from a dynamic Function value to one evaluated callable
92
+ * ABI. Unlike `functionMaterializer`, this does not claim a declaration's
93
+ * identity: the Function tag authenticates only callability, and the
94
+ * materializer must perform the target ABI's argument/result conversions at
95
+ * each call.
96
+ */
97
+ readonly functionValueDispatchMaterializer: (abi: CallableAbi) => ClassifierMaterializerPair | null;
98
+ /**
99
+ * The exact runtime tag that marks an `Optional`'s absent case as `absence`,
100
+ * or `null` if none is installed.
101
+ *
102
+ * Takes the absence spelling rather than answering one fixed tag for both:
103
+ * `gea::Optional<T>` records ONLY presence/absence, not which of JavaScript's
104
+ * two absent values a caller meant, so a single program-wide tag would have
105
+ * to pick one spelling and would silently take the wrong branch reading the
106
+ * other -- `string | null` and `string | undefined` would become
107
+ * indistinguishable the moment either one round-trips through a dynamic
108
+ * value.
109
+ */
110
+ readonly optionalAbsenceTag: (absence: 'null' | 'undefined') => string | null;
111
+ /**
112
+ * Reading a carrier THIS PROGRAM BOXED back out of the box by identity, for
113
+ * a carrier whose whole value is one C++ object.
114
+ *
115
+ * A different claim from `recordMaterializer`'s: that one RECONSTRUCTS a
116
+ * value field by field from an arbitrary dynamic value, which for an open
117
+ * shape (a `dictionary`'s string keys, a `record-with-index`'s sidecar) has
118
+ * no semantics-preserving answer and is correctly refused. This one performs
119
+ * no walk at all -- `Value::box` recorded the payload's exact C++ type, so
120
+ * the round trip is a tag check plus an address check plus a handle copy,
121
+ * the identical primitive `recordRefMaterializer` already installs for a
122
+ * named record shape.
123
+ *
124
+ * Keyed on the whole `Representation` because these carriers have no shape
125
+ * id to key on: `gea::Dictionary<V>` and `gea::TypedArray<T>` are named by
126
+ * their element/value carrier, not by a layout in the sealed table.
127
+ */
128
+ readonly boxedIdentityMaterializer: (target: Representation) => ClassifierMaterializerPair | null;
129
+ /**
130
+ * The executable discriminator that selects one dynamic tagged-union arm.
131
+ * Its domain must name the same tag, payload type, or class-family test the
132
+ * emitter will execute; checker-only identities are not runtime evidence.
133
+ */
134
+ readonly taggedUnionArmClassifier: (arm: TaggedUnionArm) => ClassifierContract | null;
135
+ /**
136
+ * The test and load a *narrowing* read needs, for one exact source and target
137
+ * carrier -- or `null` when the runtime installs none.
138
+ *
139
+ * This is the one entry that does not start from the dynamic carrier, and it
140
+ * is here because the same discipline applies. `if (tag)` narrows a cell
141
+ * holding `Optional<string>` to a read typed `string`; `if (typeof x ===
142
+ * 'string')` narrows one holding a tagged union to a single arm. Both are
143
+ * real loads with real recipes -- a presence flag and a payload, a
144
+ * discriminant and an arm -- and neither is a cast. Without an installed pair
145
+ * the load has no meaning and preflight says so, which is why this asks the
146
+ * runtime instead of assuming every backend can do it.
147
+ *
148
+ * Both carriers are the key because a runtime may manage some pairs and not
149
+ * others: a `borrowed` payload has no lifetime an unwrap could hand back, and
150
+ * a target that matches no arm of the source union is not a narrowing at all.
151
+ * Answering `null` is the honest refusal in each case.
152
+ */
153
+ readonly narrowing: (source: Representation, target: Representation) => ClassifierMaterializerPair | null;
154
+ /**
155
+ * The construction a *widening* store needs, for one exact source and target
156
+ * carrier -- or `null` when the runtime installs none.
157
+ *
158
+ * This is `narrowing`'s mirror image, and it exists for the identical reason:
159
+ * `const x: boolean | number = someBoolean` puts a plain value where a
160
+ * `TaggedUnion` is declared, and the language really does widen there. A
161
+ * control-flow merge does the same thing when its branches carry different
162
+ * concrete carriers and the plan gives the merge itself a union -- neither
163
+ * branch's value ever passed through the dynamic carrier, so `narrowing`'s
164
+ * sibling in the dynamic-conversion algebra (`derive.ts`) has nothing to say
165
+ * about it; this is the entry that does.
166
+ *
167
+ * There is no membership test to make -- which arm is being constructed is
168
+ * already known statically, from the source's own carrier -- but the pair
169
+ * shape is kept the same as `narrowing`'s so both live in one conversion
170
+ * graph under one capability shape, and a `null` here refuses the same way
171
+ * `narrowing`'s does: cleanly, with the gap enumerated rather than papered
172
+ * over with an invented recipe.
173
+ */
174
+ readonly widening: (source: Representation, target: Representation) => ClassifierMaterializerPair | null;
175
+ /**
176
+ * Rebuilding one tagged union as another, for one exact source and target
177
+ * union -- or `null` when the runtime installs none.
178
+ *
179
+ * Two declared unions with the same member set do not have to agree on tag
180
+ * order -- `boolean | number` and `number | boolean` are two unrelated C++
181
+ * template instantiations -- which is exactly what a merge produces when its
182
+ * two branches arrive through independently-declared unions. Neither
183
+ * `narrowing` nor `widening` covers it: the target is not one arm of the
184
+ * source, and the source is not one arm of the target. Every value the
185
+ * source can hold must have a same-typed home among the target's arms, or
186
+ * the target is missing a member the source can actually carry -- a real
187
+ * hole, refused rather than dropped.
188
+ */
189
+ readonly recasting: (source: Representation, target: Representation) => ClassifierMaterializerPair | null;
190
+ /**
191
+ * The recipe for a pair none of the three above admit, decided from the
192
+ * two carriers alone: an upcast, a callable prefix drop, a record or union
193
+ * recast, a promise whose payload converts, an optional wrapped around a
194
+ * converting payload. No classifier, because no value can fail it. This is
195
+ * the whole of what the printer's ordered conversion chain answers beyond
196
+ * the three registered pairs, exposed so the conversion census
197
+ * (`conversion/nodes.ts`) can mint one node per pair from the same table
198
+ * the printer renders from, instead of a second predicate list that has to
199
+ * be kept in step with it by hand.
200
+ */
201
+ readonly staticRecipe: (source: Representation, target: Representation) => MaterializerContract | null;
202
+ /**
203
+ * An ECMAScript abstract operation over one exact source carrier --
204
+ * `ToNumber` for ApplyStringOrNumericBinaryOperator's ToNumeric and
205
+ * IsLessThan's numeric branch, `ToString` for concatenation and the
206
+ * string branch -- or `null` when the runtime installs none (a BigInt into
207
+ * a Number, a Date's `valueOf`-first ToPrimitive, an object whose own
208
+ * `toString` would have to be called). Distinct from the three pair tables
209
+ * above and from `staticRecipe`: those answer "how does a value of X get
210
+ * STORED as Y", which for a `string` into a `number` is an exact tag read
211
+ * that refuses `"3"`; a coercion answers "what is ToNumber of this value",
212
+ * which accepts it and yields `3`. One (source, target) pair, two different
213
+ * conversions -- so the slot census names the operation, never just the
214
+ * target, and the census node carries it in its id.
215
+ */
216
+ readonly coercion: (source: Representation, operation: CoercionOperation) => MaterializerContract | null;
217
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,76 @@
1
+ import type { ComponentId, OperationId } from '../identity/ids.js';
2
+ import type { PrimitiveFamily } from '../semantics/model/coverage.js';
3
+ /**
4
+ * Diagnostics.
5
+ *
6
+ * A diagnostic is keyed by semantic identity. A source location may accompany
7
+ * it for a human to read, but it never flows back into admission: the moment a
8
+ * location decides whether something compiles, the compiler has started
9
+ * recognizing programs instead of implementing a language.
10
+ *
11
+ * The sweep collects every independently provable failure in an authority
12
+ * component rather than throwing at the first one, and it marks derived
13
+ * failures as derived so one missing carrier does not read as fifty unrelated
14
+ * language defects.
15
+ */
16
+ export type DiagnosticSeverity = 'root' | 'derived' | 'unsupported';
17
+ export interface DiagnosticLocation {
18
+ /** Display only. Never an admission input. */
19
+ readonly file: string;
20
+ readonly line: number;
21
+ readonly column: number;
22
+ }
23
+ export interface Diagnostic {
24
+ /** Stable identity, so repeated sweeps can be compared row by row. */
25
+ readonly id: string;
26
+ readonly severity: DiagnosticSeverity;
27
+ readonly component: ComponentId;
28
+ readonly operation: OperationId | null;
29
+ /** The primitive family whose absence explains this row, when known. */
30
+ readonly missingPrimitive: PrimitiveFamily | null;
31
+ readonly message: string;
32
+ readonly location: DiagnosticLocation | null;
33
+ /** For a derived row, the root rows it follows from. */
34
+ readonly causedBy: readonly string[];
35
+ }
36
+ /** Failure evidence produced before the sweep assigns root/derived severity. */
37
+ export type DiagnosticEvidence = Omit<Diagnostic, 'severity' | 'causedBy'>;
38
+ /** A complete sweep result. Bounded views may be derived; this is the whole set. */
39
+ export interface DiagnosticReport {
40
+ readonly diagnostics: readonly Diagnostic[];
41
+ readonly components: readonly ComponentId[];
42
+ /** True only when the transaction proved every obligation it censused. */
43
+ readonly clean: boolean;
44
+ /**
45
+ * True when the frontend, the census and the plan raised nothing, before
46
+ * preflight's obligations were consulted. This is the gate lowering runs
47
+ * on: a program whose plan verifies lowers whether or not it certifies, and
48
+ * what it cannot lower is a refusal row, because certification covers the
49
+ * lowered IR. `clean` implies `planClean`; the converse is the uncertified,
50
+ * lowerable program.
51
+ */
52
+ readonly planClean: boolean;
53
+ }
54
+ /**
55
+ * Deterministic ordering: roots first, then by component, then by identity.
56
+ *
57
+ * Determinism is what makes two sweeps comparable. Ordering by discovery time
58
+ * or by source position would make an unchanged compiler produce different
59
+ * reports on different machines.
60
+ */
61
+ export declare const orderDiagnostics: (diagnostics: readonly Diagnostic[]) => readonly Diagnostic[];
62
+ /**
63
+ * Merge exact duplicates by identity while keeping every component they arose
64
+ * from, so a shared root reported from two components stays one row.
65
+ */
66
+ export declare const mergeDiagnostics: (diagnostics: readonly Diagnostic[]) => readonly Diagnostic[];
67
+ /** Group a report by authority component for planning. */
68
+ export declare const groupByComponent: (report: DiagnosticReport) => ReadonlyMap<ComponentId, readonly Diagnostic[]>;
69
+ /** A collector that gathers a whole component's failures before aborting. */
70
+ export interface DiagnosticSink {
71
+ readonly report: (diagnostic: Diagnostic) => void;
72
+ /** Whether nothing reported so far survives merging -- asked once, between the plan's rows and preflight's, for `DiagnosticReport.planClean`. */
73
+ readonly cleanSoFar: () => boolean;
74
+ readonly finish: (components: readonly ComponentId[], planClean?: boolean) => DiagnosticReport;
75
+ }
76
+ export declare const createDiagnosticSink: () => DiagnosticSink;
@@ -0,0 +1,60 @@
1
+ const severityOrder = Object.freeze({ root: 0, unsupported: 1, derived: 2 });
2
+ /**
3
+ * Deterministic ordering: roots first, then by component, then by identity.
4
+ *
5
+ * Determinism is what makes two sweeps comparable. Ordering by discovery time
6
+ * or by source position would make an unchanged compiler produce different
7
+ * reports on different machines.
8
+ */
9
+ export const orderDiagnostics = (diagnostics) => [...diagnostics].sort((left, right) => {
10
+ const bySeverity = severityOrder[left.severity] - severityOrder[right.severity];
11
+ if (bySeverity !== 0)
12
+ return bySeverity;
13
+ if (left.component !== right.component)
14
+ return left.component < right.component ? -1 : 1;
15
+ return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
16
+ });
17
+ /**
18
+ * Merge exact duplicates by identity while keeping every component they arose
19
+ * from, so a shared root reported from two components stays one row.
20
+ */
21
+ export const mergeDiagnostics = (diagnostics) => {
22
+ const byId = new Map();
23
+ for (const diagnostic of diagnostics) {
24
+ const existing = byId.get(diagnostic.id);
25
+ if (!existing) {
26
+ byId.set(diagnostic.id, diagnostic);
27
+ continue;
28
+ }
29
+ byId.set(diagnostic.id, {
30
+ ...existing,
31
+ causedBy: [...new Set([...existing.causedBy, ...diagnostic.causedBy])].sort()
32
+ });
33
+ }
34
+ return orderDiagnostics([...byId.values()]);
35
+ };
36
+ /** Group a report by authority component for planning. */
37
+ export const groupByComponent = (report) => {
38
+ const grouped = new Map();
39
+ for (const diagnostic of orderDiagnostics(report.diagnostics)) {
40
+ const bucket = grouped.get(diagnostic.component) ?? [];
41
+ bucket.push(diagnostic);
42
+ grouped.set(diagnostic.component, bucket);
43
+ }
44
+ return grouped;
45
+ };
46
+ export const createDiagnosticSink = () => {
47
+ const collected = [];
48
+ const cleanSoFar = () => mergeDiagnostics(collected).length === 0;
49
+ return {
50
+ report: (diagnostic) => {
51
+ collected.push(diagnostic);
52
+ },
53
+ cleanSoFar,
54
+ finish: (components, planClean) => {
55
+ const diagnostics = mergeDiagnostics(collected);
56
+ const clean = diagnostics.length === 0;
57
+ return { diagnostics, components: [...components].sort(), clean, planClean: planClean ?? clean };
58
+ }
59
+ };
60
+ };
@@ -0,0 +1,31 @@
1
+ import type { NodeId } from '../identity/ids.js';
2
+ import type { PreflightReport } from '../preflight/run.js';
3
+ import type { RepresentationPublication } from '../representation/publish.js';
4
+ import type { SemanticGraph } from '../semantics/model/graph.js';
5
+ import type { DiagnosticEvidence, DiagnosticLocation, DiagnosticReport } from './model.js';
6
+ export interface SweepInput {
7
+ readonly graph: SemanticGraph;
8
+ readonly representations: RepresentationPublication;
9
+ /** Absent when preflight did not run, which is itself not a failure to report. */
10
+ readonly preflight: PreflightReport | null;
11
+ /** Diagnostics the frontend already produced, merged in rather than re-derived. */
12
+ readonly frontend: readonly DiagnosticEvidence[];
13
+ /**
14
+ * Where a node identity is, for display -- `FrontendResult.locationOfNode`.
15
+ *
16
+ * Every row below carried `location: null` before this existed, so a build
17
+ * that failed 334 mandatory obligations printed 334 component ids and named
18
+ * no file. The component is a semantic identity and cannot be turned into a
19
+ * place in the program; only the frontend's own identity walk can, which is
20
+ * why this arrives as a function rather than being derived here.
21
+ */
22
+ readonly locationOfNode?: (node: NodeId) => DiagnosticLocation | null;
23
+ }
24
+ /**
25
+ * Collect every layer's failures into one deterministically ordered report.
26
+ *
27
+ * Optional preflight obligations are deliberately absent: an unavailable fast
28
+ * path is not a defect, and reporting one as a failure would train a reader to
29
+ * ignore the report.
30
+ */
31
+ export declare const sweepDiagnostics: (input: SweepInput) => DiagnosticReport;