@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,20 @@
1
+ import type { RepresentationDeriver } from '../representation/derive.js';
2
+ import type { Representation } from '../representation/model.js';
3
+ /**
4
+ * ECMA-262 ToPrimitive, decided from a carrier alone.
5
+ *
6
+ * ApplyStringOrNumericBinaryOperator (13.15.3) and IsLessThan (7.2.13) both
7
+ * run ToPrimitive on each operand BEFORE choosing between the string and the
8
+ * numeric rule, and for every object this compiler carries that step has a
9
+ * compile-time answer: an ordinary object with no own `valueOf` falls through
10
+ * OrdinaryToPrimitive's `valueOf` attempt to `toString` whatever the hint,
11
+ * so its primitive IS a string. A Date is the one exception -- its own
12
+ * `@@toPrimitive` prefers `valueOf` for hint "number" -- and a primitive
13
+ * carrier is already its own answer. The slot census reads this to decide
14
+ * which coercion (`ToNumber` or `ToString`) a mixed-carrier operator's
15
+ * operands take; the printer's ToNumber renderer reads the same set to know
16
+ * which carriers reach a number only through their string.
17
+ */
18
+ export declare const toStringOnlyObjectKinds: ReadonlySet<Representation['kind']>;
19
+ /** Whether an operand's ToPrimitive is a String for every value the carrier can hold. */
20
+ export declare const provablyStringPrimitive: (representation: Representation, deriver: Pick<RepresentationDeriver, "isDateCarrier">) => boolean;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * ECMA-262 ToPrimitive, decided from a carrier alone.
3
+ *
4
+ * ApplyStringOrNumericBinaryOperator (13.15.3) and IsLessThan (7.2.13) both
5
+ * run ToPrimitive on each operand BEFORE choosing between the string and the
6
+ * numeric rule, and for every object this compiler carries that step has a
7
+ * compile-time answer: an ordinary object with no own `valueOf` falls through
8
+ * OrdinaryToPrimitive's `valueOf` attempt to `toString` whatever the hint,
9
+ * so its primitive IS a string. A Date is the one exception -- its own
10
+ * `@@toPrimitive` prefers `valueOf` for hint "number" -- and a primitive
11
+ * carrier is already its own answer. The slot census reads this to decide
12
+ * which coercion (`ToNumber` or `ToString`) a mixed-carrier operator's
13
+ * operands take; the printer's ToNumber renderer reads the same set to know
14
+ * which carriers reach a number only through their string.
15
+ */
16
+ export const toStringOnlyObjectKinds = new Set([
17
+ 'record',
18
+ 'record-with-index',
19
+ 'native-record-ref',
20
+ 'class-ref',
21
+ 'array-object',
22
+ 'dictionary',
23
+ 'keyed-collection',
24
+ 'promise',
25
+ 'typed-array',
26
+ 'array-buffer',
27
+ 'shared-array-buffer',
28
+ 'data-view',
29
+ 'proxy-object'
30
+ ]);
31
+ /** Whether an operand's ToPrimitive is a String for every value the carrier can hold. */
32
+ export const provablyStringPrimitive = (representation, deriver) => representation.kind === 'string' ||
33
+ (toStringOnlyObjectKinds.has(representation.kind) && !(deriver.isDateCarrier?.(representation) ?? false));
@@ -0,0 +1,167 @@
1
+ import type { DeclarationId, FunctionId } from '../identity/ids.js';
2
+ import type { ClassLayout, ClassMethod } from './classes.js';
3
+ import type { ConversionCensus } from '../conversion/nodes.js';
4
+ import type { CallableAbi } from '../representation/model.js';
5
+ /** Exact allocation identities and the method each prototype lookup selects.
6
+ * Selection happens when the property is read, before a later call supplies
7
+ * its receiver. A virtual call adapter would select at the wrong time.
8
+ */
9
+ export declare const classPrototypeMethodValueArmsOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, receiver: DeclarationId, key: string) => readonly {
10
+ readonly allocation: DeclarationId;
11
+ readonly method: (ClassMethod & {
12
+ readonly callable: FunctionId;
13
+ }) | null;
14
+ }[] | null;
15
+ /** All prototype keys reachable through this native family, including keys
16
+ * introduced below the static receiver and inherited above it.
17
+ */
18
+ export declare const classPrototypeMethodKeysOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, receiver: DeclarationId) => readonly string[];
19
+ /** A statically callable family still requires a method on every allocation. */
20
+ export declare const classMethodValueArmsOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, receiver: DeclarationId, key: string) => readonly {
21
+ readonly allocation: DeclarationId;
22
+ readonly method: ClassMethod & {
23
+ readonly callable: FunctionId;
24
+ };
25
+ }[] | null;
26
+ /**
27
+ * The class-hierarchy topology behind method dispatch: which key belongs to
28
+ * which override family, and who redeclares what.
29
+ *
30
+ * Both questions are pure functions of `ClassLayout` -- no lowered IR, no
31
+ * capture analysis, no render-time ABI comparison enters them -- so they
32
+ * belong here rather than in the C++ target, and `targets/cpp/virtual-methods.
33
+ * ts`/`targets/cpp/class-layout.ts` re-export them rather than defining their
34
+ * own copies. `virtual-methods.ts` previously carried its own `extendsClass`,
35
+ * byte-identical to `class-layout.ts`'s: two definitions of one graph walk is
36
+ * the exact two-authorities shape a single import now forecloses.
37
+ *
38
+ * The DISPATCHABILITY verdict -- whether a family is actually dispatchable
39
+ * (every override's ABI is compatible, and none of them captures an
40
+ * environment a C++ member function has no formal to carry) -- lives here
41
+ * too now, as `virtualDispatchVerdictOf` below. It used to live in
42
+ * `targets/cpp/virtual-methods.ts`, decided from the LOWERED bodies' ABIs and
43
+ * `targets/cpp/captures.ts`'s whole-unit capture index, both of which existed
44
+ * only after every body in the unit had lowered (`translation-unit.ts`'s
45
+ * `renderTranslationUnit`) -- a fact this module, which runs before any body
46
+ * lowers, could not see. What moved it here is `ir/captures.ts`'s
47
+ * `publishCaptureFacts`, sealed onto every body as `IrBody.facts` right after
48
+ * `shakeProgram`, which is where `ir/captures.ts` fills the allocation op:
49
+ * `IrBodyFacts.capturedDeclarations`/
50
+ * `.capturedReceiver` name capture-freedom with no C++ in the answer, so a
51
+ * caller can hand `virtualDispatchVerdictOf` a plain predicate over those
52
+ * published facts instead of a render-time capture index. The one thing that
53
+ * still cannot move is ABI-compatibility TEXT (the exact conversion an
54
+ * implementor's parameter or receiver needs) -- that stays a C++ spelling in
55
+ * `virtual-methods.ts`, which renders it having already been TOLD by this
56
+ * verdict that every implementor converts; see that file's `virtualMethodAdapterOf`.
57
+ */
58
+ /** Whether `candidate`'s base chain reaches `ancestor`. A class reached twice would be a class extending itself, which no well-formed program has, so the walk stops there rather than looping. */
59
+ export declare const extendsClass: (classes: ReadonlyMap<DeclarationId, ClassLayout>, candidate: DeclarationId, ancestor: DeclarationId) => boolean;
60
+ /**
61
+ * Every class BELOW `declaration` that redeclares `key`, nearest first.
62
+ *
63
+ * `classMemberOf` (`projection/fields.ts`) walks UP, which is the language's
64
+ * lookup for a receiver whose class is known exactly. It is not the whole
65
+ * answer for a CALL. A receiver annotated as a base can hold an instance of
66
+ * anything derived from it, and the language dispatches on the object; so a
67
+ * member found up the chain is only safe to bind directly when nothing below
68
+ * redeclares it. An empty result is the proof that the family is closed at
69
+ * this key -- the assumption every direct bind of a method or accessor body
70
+ * already makes, now asked rather than assumed.
71
+ *
72
+ * The search is over the whole class map because inheritance is stated
73
+ * upward: a layout names its base and never its derivations, so the derived
74
+ * side exists only as the set of classes whose own chain leads here.
75
+ */
76
+ export declare const classFamilyOverridesOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => readonly DeclarationId[];
77
+ /**
78
+ * Which of a member's three dispatchable halves a family is.
79
+ *
80
+ * A key is a method OR an accessor, never both, so `call` never coexists with
81
+ * the other two on one key -- but a getter and a setter are two bodies with
82
+ * two conventions, and each needs its own slot.
83
+ */
84
+ export type VirtualMemberRole = 'call' | 'get' | 'set';
85
+ /** One key, and every class in its family that implements it. */
86
+ export interface VirtualMethodFamily {
87
+ readonly key: string;
88
+ /** Which half of the member this family dispatches. */
89
+ readonly role: VirtualMemberRole;
90
+ /** The topmost class declaring the key: the struct that gets the `virtual` member. */
91
+ readonly root: DeclarationId;
92
+ readonly implementors: readonly VirtualMethodImplementor[];
93
+ /**
94
+ * Whether the root's own declaration is BODYLESS -- `abstract check(value:
95
+ * number): boolean`, or an overload signature with no implementation.
96
+ *
97
+ * The root is what gives the family its dispatch slot, and a slot is a
98
+ * declaration, not a body: an abstract root states the convention every
99
+ * override is checked against and supplies nothing to run. Dropping the
100
+ * family for want of a root body is what sent `rules.map(r => r.describe())`
101
+ * over `Rule[]` through a boxed dynamic property read, which then aborted at
102
+ * runtime -- the program was statically dispatchable the whole time.
103
+ */
104
+ readonly abstractRoot: boolean;
105
+ }
106
+ export interface VirtualMethodImplementor {
107
+ readonly declaration: DeclarationId;
108
+ readonly callable: FunctionId;
109
+ }
110
+ /**
111
+ * Every method key the program actually overrides, grouped by the class that
112
+ * roots the family.
113
+ *
114
+ * A key declared only by unrelated classes is not a family: no receiver can be
115
+ * typed as a common base that has it, so nothing dispatches. Only a key whose
116
+ * ROOT declares it, and which something derived from that root redeclares,
117
+ * needs a vtable slot.
118
+ */
119
+ export declare const virtualMethodFamiliesOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>) => readonly VirtualMethodFamily[];
120
+ /** The key a call site looks up: the class it resolved the member ON, plus the member. Moved here from `targets/cpp/virtual-methods.ts` (which still re-exports it) so `ir/call-dispatch.ts` can ask the identical question without importing a target module. */
121
+ export declare const virtualDispatchKey: (owner: DeclarationId, key: string, role?: VirtualMemberRole) => string;
122
+ /** One family `virtualDispatchVerdictOf` proved dispatchable: the topology (`virtualMethodFamiliesOf`'s answer) plus the ABI every implementor was proven to convert to. */
123
+ export interface VirtualFamilyVerdict {
124
+ readonly family: VirtualMethodFamily;
125
+ readonly rootAbi: CallableAbi;
126
+ /** Every selected receiver, parameter and result adapter avoids native field protocols. */
127
+ readonly nativeFieldProtocol?: 'unused';
128
+ }
129
+ /** One family `virtualDispatchVerdictOf` refused, and why. */
130
+ export interface VirtualFamilyRefusal {
131
+ readonly key: string;
132
+ readonly role: VirtualMemberRole;
133
+ readonly owner: DeclarationId;
134
+ readonly reason: string;
135
+ }
136
+ export interface VirtualDispatchVerdict {
137
+ readonly families: readonly VirtualFamilyVerdict[];
138
+ readonly refused: readonly VirtualFamilyRefusal[];
139
+ /**
140
+ * Every class-key-role a receiver ANYWHERE in a dispatchable family's
141
+ * subtree resolves to, expanded from `families` the way a call site looks
142
+ * a member up: a class between the root and an implementor inherits the
143
+ * member, so the whole subtree -- not only the implementors -- is
144
+ * dispatchable through it. Keyed by `virtualDispatchKey`.
145
+ */
146
+ readonly dispatched: ReadonlyMap<string, VirtualFamilyVerdict>;
147
+ }
148
+ /**
149
+ * The dispatchability verdict for every override family: whether it can be
150
+ * dispatched through a C++ virtual member at all, and the exact convention
151
+ * (`rootAbi`) every call site converts to when it can.
152
+ *
153
+ * `abiOf` answers with the convention a body was compiled under, which is the
154
+ * one authority on its formals -- deriving them here a second way is the
155
+ * two-authorities shape that produces a member the definition cannot match. A
156
+ * family whose implementors disagree on that convention, or one whose body
157
+ * captures an environment (a capturing body carries a formal no member can
158
+ * supply), is REFUSED rather than approximated: a call site then declines the
159
+ * direct bind too, so the program never silently runs the base's body.
160
+ *
161
+ * `capturesNothing` is asked directly of `IrBody.facts` by the caller (see
162
+ * `ir/captures.ts`'s `IrBodyFacts.capturedDeclarations`/`.capturedReceiver`)
163
+ * -- not of a render-time `CaptureIndex` admission, which only ever answers
164
+ * for a body some `allocate-callable` operation names, and a plain instance
165
+ * method almost never is one.
166
+ */
167
+ export declare const virtualDispatchVerdictOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, abiOf: (callable: FunctionId) => CallableAbi | null, capturesNothing: (callable: FunctionId) => boolean, conversions: ConversionCensus) => VirtualDispatchVerdict;
@@ -0,0 +1,379 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ import { classMemberOf } from './fields.js';
3
+ /** Exact allocation identities and the method each prototype lookup selects.
4
+ * Selection happens when the property is read, before a later call supplies
5
+ * its receiver. A virtual call adapter would select at the wrong time.
6
+ */
7
+ export const classPrototypeMethodValueArmsOf = (classes, receiver, key) => {
8
+ const arms = [];
9
+ for (const [allocation, layout] of classes) {
10
+ if (allocation !== receiver && !extendsClass(classes, allocation, receiver))
11
+ continue;
12
+ if (layout.nativeBase !== null)
13
+ return null;
14
+ const site = classMemberOf(classes, allocation, key);
15
+ // Absence belongs to the language's undefined result. An accessor is an
16
+ // invocation, not a method value, and must keep its separate proof path.
17
+ if (site === null)
18
+ arms.push({ allocation, method: null });
19
+ else if (site.kind === 'method' && site.method.callable !== null)
20
+ arms.push({ allocation, method: { ...site.method, callable: site.method.callable } });
21
+ else
22
+ return null;
23
+ }
24
+ return arms.length === 0 ? null : arms;
25
+ };
26
+ /** All prototype keys reachable through this native family, including keys
27
+ * introduced below the static receiver and inherited above it.
28
+ */
29
+ export const classPrototypeMethodKeysOf = (classes, receiver) => {
30
+ const keys = new Set();
31
+ const visited = new Set();
32
+ for (const allocation of classes.keys()) {
33
+ if (allocation !== receiver && !extendsClass(classes, allocation, receiver))
34
+ continue;
35
+ for (let current = allocation; current !== null && !visited.has(current);) {
36
+ visited.add(current);
37
+ const layout = classes.get(current);
38
+ if (!layout)
39
+ break;
40
+ for (const method of layout.methods)
41
+ keys.add(method.key);
42
+ current = layout.base;
43
+ }
44
+ }
45
+ return [...keys];
46
+ };
47
+ /** A statically callable family still requires a method on every allocation. */
48
+ export const classMethodValueArmsOf = (classes, receiver, key) => {
49
+ const arms = classPrototypeMethodValueArmsOf(classes, receiver, key);
50
+ if (arms === null || arms.some((arm) => arm.method === null))
51
+ return null;
52
+ return arms.map((arm) => ({ allocation: arm.allocation, method: arm.method }));
53
+ };
54
+ /**
55
+ * The class-hierarchy topology behind method dispatch: which key belongs to
56
+ * which override family, and who redeclares what.
57
+ *
58
+ * Both questions are pure functions of `ClassLayout` -- no lowered IR, no
59
+ * capture analysis, no render-time ABI comparison enters them -- so they
60
+ * belong here rather than in the C++ target, and `targets/cpp/virtual-methods.
61
+ * ts`/`targets/cpp/class-layout.ts` re-export them rather than defining their
62
+ * own copies. `virtual-methods.ts` previously carried its own `extendsClass`,
63
+ * byte-identical to `class-layout.ts`'s: two definitions of one graph walk is
64
+ * the exact two-authorities shape a single import now forecloses.
65
+ *
66
+ * The DISPATCHABILITY verdict -- whether a family is actually dispatchable
67
+ * (every override's ABI is compatible, and none of them captures an
68
+ * environment a C++ member function has no formal to carry) -- lives here
69
+ * too now, as `virtualDispatchVerdictOf` below. It used to live in
70
+ * `targets/cpp/virtual-methods.ts`, decided from the LOWERED bodies' ABIs and
71
+ * `targets/cpp/captures.ts`'s whole-unit capture index, both of which existed
72
+ * only after every body in the unit had lowered (`translation-unit.ts`'s
73
+ * `renderTranslationUnit`) -- a fact this module, which runs before any body
74
+ * lowers, could not see. What moved it here is `ir/captures.ts`'s
75
+ * `publishCaptureFacts`, sealed onto every body as `IrBody.facts` right after
76
+ * `shakeProgram`, which is where `ir/captures.ts` fills the allocation op:
77
+ * `IrBodyFacts.capturedDeclarations`/
78
+ * `.capturedReceiver` name capture-freedom with no C++ in the answer, so a
79
+ * caller can hand `virtualDispatchVerdictOf` a plain predicate over those
80
+ * published facts instead of a render-time capture index. The one thing that
81
+ * still cannot move is ABI-compatibility TEXT (the exact conversion an
82
+ * implementor's parameter or receiver needs) -- that stays a C++ spelling in
83
+ * `virtual-methods.ts`, which renders it having already been TOLD by this
84
+ * verdict that every implementor converts; see that file's `virtualMethodAdapterOf`.
85
+ */
86
+ /** Whether `candidate`'s base chain reaches `ancestor`. A class reached twice would be a class extending itself, which no well-formed program has, so the walk stops there rather than looping. */
87
+ export const extendsClass = (classes, candidate, ancestor) => {
88
+ const walked = new Set();
89
+ let current = classes.get(candidate)?.base ?? null;
90
+ while (current !== null && !walked.has(current)) {
91
+ if (current === ancestor)
92
+ return true;
93
+ walked.add(current);
94
+ current = classes.get(current)?.base ?? null;
95
+ }
96
+ return false;
97
+ };
98
+ /**
99
+ * Every class BELOW `declaration` that redeclares `key`, nearest first.
100
+ *
101
+ * `classMemberOf` (`projection/fields.ts`) walks UP, which is the language's
102
+ * lookup for a receiver whose class is known exactly. It is not the whole
103
+ * answer for a CALL. A receiver annotated as a base can hold an instance of
104
+ * anything derived from it, and the language dispatches on the object; so a
105
+ * member found up the chain is only safe to bind directly when nothing below
106
+ * redeclares it. An empty result is the proof that the family is closed at
107
+ * this key -- the assumption every direct bind of a method or accessor body
108
+ * already makes, now asked rather than assumed.
109
+ *
110
+ * The search is over the whole class map because inheritance is stated
111
+ * upward: a layout names its base and never its derivations, so the derived
112
+ * side exists only as the set of classes whose own chain leads here.
113
+ */
114
+ export const classFamilyOverridesOf = (classes, declaration, key) => {
115
+ const overriding = [];
116
+ for (const [candidate, layout] of classes) {
117
+ if (candidate === declaration)
118
+ continue;
119
+ if (!layout.accessors.some((entry) => entry.key === key) && !layout.methods.some((entry) => entry.key === key))
120
+ continue;
121
+ if (extendsClass(classes, candidate, declaration))
122
+ overriding.push(candidate);
123
+ }
124
+ return overriding;
125
+ };
126
+ /** The topmost class along `declaration`'s chain that declares `key` as a method. */
127
+ const rootDeclaring = (classes, declaration, key) => {
128
+ const walked = new Set();
129
+ let root = declaration;
130
+ let current = declaration;
131
+ while (current !== null && !walked.has(current)) {
132
+ walked.add(current);
133
+ const layout = classes.get(current);
134
+ if (!layout)
135
+ return root;
136
+ // Accessors alongside methods: `get label()` overridden by `get label()`
137
+ // is the identical family question, and asking only about methods rooted
138
+ // every override at its own class, which is no family at all.
139
+ if (layout.methods.some((method) => method.key === key) || layout.accessors.some((entry) => entry.key === key))
140
+ root = current;
141
+ current = layout.base;
142
+ }
143
+ return root;
144
+ };
145
+ /**
146
+ * Every method key the program actually overrides, grouped by the class that
147
+ * roots the family.
148
+ *
149
+ * A key declared only by unrelated classes is not a family: no receiver can be
150
+ * typed as a common base that has it, so nothing dispatches. Only a key whose
151
+ * ROOT declares it, and which something derived from that root redeclares,
152
+ * needs a vtable slot.
153
+ */
154
+ export const virtualMethodFamiliesOf = (classes) => {
155
+ const byRoot = new Map();
156
+ const record = (declaration, key, role, callable) => {
157
+ const root = rootDeclaring(classes, declaration, key);
158
+ const id = `${root} ${key} ${role}`;
159
+ const entry = byRoot.get(id) ?? { key, role, root, rootDeclares: false, implementors: [] };
160
+ if (declaration === root)
161
+ entry.rootDeclares = true;
162
+ if (callable !== null)
163
+ entry.implementors.push({ declaration, callable });
164
+ byRoot.set(id, entry);
165
+ };
166
+ for (const [declaration, layout] of classes) {
167
+ for (const method of layout.methods)
168
+ record(declaration, method.key, 'call', method.callable);
169
+ for (const accessor of layout.accessors) {
170
+ record(declaration, accessor.key, 'get', accessor.getter);
171
+ record(declaration, accessor.key, 'set', accessor.setter);
172
+ }
173
+ }
174
+ return [...byRoot.values()]
175
+ .filter((entry) => entry.implementors.some((implementor) => implementor.declaration !== entry.root))
176
+ .filter((entry) => entry.rootDeclares)
177
+ .map((entry) => ({
178
+ key: entry.key,
179
+ role: entry.role,
180
+ root: entry.root,
181
+ abstractRoot: !entry.implementors.some((implementor) => implementor.declaration === entry.root),
182
+ implementors: [...entry.implementors].sort((left, right) => (left.declaration < right.declaration ? -1 : 1))
183
+ }))
184
+ .sort((left, right) => (`${left.root} ${left.key} ${left.role}` < `${right.root} ${right.key} ${right.role}` ? -1 : 1));
185
+ };
186
+ /** The key a call site looks up: the class it resolved the member ON, plus the member. Moved here from `targets/cpp/virtual-methods.ts` (which still re-exports it) so `ir/call-dispatch.ts` can ask the identical question without importing a target module. */
187
+ export const virtualDispatchKey = (owner, key, role = 'call') => `${owner} ${key} ${role}`;
188
+ /**
189
+ * Whether `source`'s class-ref carrier can reach `target`'s -- an upcast to
190
+ * an ancestor (or itself), or a runtime-checked downcast to a descendant
191
+ * with at least one other concrete class in the program to distinguish it
192
+ * from. Mirrors `targets/cpp/virtual-methods.ts`'s old `classRefConversionText`'s
193
+ * null-vs-text branching, minus the text: virtual dispatch's receiver/
194
+ * argument adaptation is a C++ mechanism with no ECMAScript-level conversion
195
+ * behind it, so this stays a standalone structural test rather than a
196
+ * `ConversionCensus` entry.
197
+ */
198
+ const classRefConvertible = (classes, source, target) => {
199
+ if (source.ownership !== 'shared-refcount' || target.ownership !== 'shared-refcount')
200
+ return false;
201
+ if (source.declaration === target.declaration || extendsClass(classes, source.declaration, target.declaration))
202
+ return true;
203
+ if (!extendsClass(classes, target.declaration, source.declaration))
204
+ return false;
205
+ return [...classes.keys()].some((declaration) => declaration === target.declaration || extendsClass(classes, declaration, target.declaration));
206
+ };
207
+ /**
208
+ * Whether an OMITTED argument -- an implementor with more formals than the
209
+ * family's root convention supplies -- can be represented at all.
210
+ *
211
+ * Mirrors `targets/cpp/types.ts`'s `cppUndefinedIn` EXISTENCE check (which
212
+ * kinds admit an `undefined` value) without any of its C++ text: the verdict
213
+ * only needs to know an omitted value CAN be carried, never what its spelling
214
+ * is, so duplicating the shape test here -- rather than threading a text
215
+ * builder into a projection-level module -- is the one part of that function
216
+ * safe to restate.
217
+ */
218
+ const admitsUndefined = (representation) => {
219
+ if (representation.kind === 'undefined' || representation.kind === 'dynamic')
220
+ return true;
221
+ if (representation.kind === 'optional' && representation.absence === 'undefined')
222
+ return true;
223
+ if (representation.kind === 'tagged-union')
224
+ return representation.arms.some((arm) => arm.value.kind === 'undefined');
225
+ return false;
226
+ };
227
+ /**
228
+ * One parameter/receiver/result conversion a virtual member adapter needs,
229
+ * decided generically: class-ref pairs by the structural rule above,
230
+ * everything else by asking the SAME conversion census the printer's own
231
+ * `alignedValueText` consults (`emit-narrowing.ts`), so this can never
232
+ * approve a pair the printer would refuse.
233
+ */
234
+ const virtualValueConvertible = (classes, conversions, source, target) => {
235
+ if (source.kind === 'class-ref' && target.kind === 'class-ref')
236
+ return classRefConvertible(classes, source, target);
237
+ return conversions.nodeFor(source, target).capability.kind !== 'never';
238
+ };
239
+ const virtualValueUsesNoFields = (classes, conversions, source, target) => {
240
+ if (source.kind === 'class-ref' && target.kind === 'class-ref')
241
+ return classRefConvertible(classes, source, target);
242
+ const capability = conversions.nodeFor(source, target).capability;
243
+ return (capability.kind === 'identity' ||
244
+ ((capability.kind === 'atom' || capability.kind === 'static' || capability.kind === 'class-family') &&
245
+ capability.materializer.nativeFieldProtocol === 'unused'));
246
+ };
247
+ /**
248
+ * The dispatchability verdict for every override family: whether it can be
249
+ * dispatched through a C++ virtual member at all, and the exact convention
250
+ * (`rootAbi`) every call site converts to when it can.
251
+ *
252
+ * `abiOf` answers with the convention a body was compiled under, which is the
253
+ * one authority on its formals -- deriving them here a second way is the
254
+ * two-authorities shape that produces a member the definition cannot match. A
255
+ * family whose implementors disagree on that convention, or one whose body
256
+ * captures an environment (a capturing body carries a formal no member can
257
+ * supply), is REFUSED rather than approximated: a call site then declines the
258
+ * direct bind too, so the program never silently runs the base's body.
259
+ *
260
+ * `capturesNothing` is asked directly of `IrBody.facts` by the caller (see
261
+ * `ir/captures.ts`'s `IrBodyFacts.capturedDeclarations`/`.capturedReceiver`)
262
+ * -- not of a render-time `CaptureIndex` admission, which only ever answers
263
+ * for a body some `allocate-callable` operation names, and a plain instance
264
+ * method almost never is one.
265
+ */
266
+ export const virtualDispatchVerdictOf = (classes, abiOf, capturesNothing, conversions) => {
267
+ const families = [];
268
+ const refused = [];
269
+ for (const family of virtualMethodFamiliesOf(classes)) {
270
+ const rootImplementor = family.implementors.find((implementor) => implementor.declaration === family.root);
271
+ // An ABSTRACT root has no body, and therefore no ABI of its own to state
272
+ // the slot's convention with. Every override is checked against the same
273
+ // declared signature, so any implementor's convention IS that slot's --
274
+ // taking the first in the family's own deterministic order keeps the
275
+ // choice reproducible; the per-implementor loop below still proves every
276
+ // other implementor converts to it rather than assuming they agree.
277
+ const borrowed = family.implementors.map((implementor) => abiOf(implementor.callable)).find((abi) => abi !== null) ?? null;
278
+ // The borrowed convention states the PARAMETERS and RESULT of the slot,
279
+ // never its receiver: an implementor's receiver is its own concrete class,
280
+ // and a call site converting `Ref<Rule>` to it downcast every element of
281
+ // `Rule[]` to whichever subclass happened to be borrowed. The slot's
282
+ // receiver is the root's.
283
+ const rootInstance = classes.get(family.root)?.instance ?? null;
284
+ const inheritedAbi = borrowed === null || rootInstance === null ? null : { ...borrowed, receiver: rootInstance };
285
+ const rootAbi = (rootImplementor ? abiOf(rootImplementor.callable) : null) ?? (family.abstractRoot ? inheritedAbi : null);
286
+ const capturing = family.implementors.filter((implementor) => !capturesNothing(implementor.callable));
287
+ if (rootAbi === null || capturing.length > 0) {
288
+ refused.push({
289
+ key: family.key,
290
+ role: family.role,
291
+ owner: family.root,
292
+ reason: rootAbi === null
293
+ ? 'the class that roots the family names no body to dispatch to'
294
+ : `these implementations capture an environment, which a member function has no formal to carry: ${capturing.map((implementor) => implementor.declaration).join(', ')}`
295
+ });
296
+ continue;
297
+ }
298
+ let incompatible = null;
299
+ let nativeFieldProtocolUnused = true;
300
+ for (const implementor of family.implementors) {
301
+ const actualAbi = abiOf(implementor.callable);
302
+ if (actualAbi === null) {
303
+ incompatible = `implementation ${implementor.declaration} names no callable convention`;
304
+ break;
305
+ }
306
+ if (actualAbi.receiver === null) {
307
+ incompatible = `implementation ${implementor.declaration} declares no receiver`;
308
+ break;
309
+ }
310
+ if (rootAbi.restFrom !== actualAbi.restFrom) {
311
+ incompatible =
312
+ `implementation ${implementor.declaration} uses rest slot ${String(actualAbi.restFrom)}, while the family root uses ` +
313
+ `${String(rootAbi.restFrom)}; repartitioning an already-packed rest array is not installed`;
314
+ break;
315
+ }
316
+ const instance = classes.get(implementor.declaration)?.instance;
317
+ if (instance === null || instance === undefined || instance.kind !== 'class-ref') {
318
+ incompatible = `implementation ${implementor.declaration}'s class publishes no class-ref instance carrier`;
319
+ break;
320
+ }
321
+ if (!virtualValueConvertible(classes, conversions, instance, actualAbi.receiver)) {
322
+ incompatible = `implementation ${implementor.declaration}'s receiver cannot be converted to "${representationKey(actualAbi.receiver)}"`;
323
+ break;
324
+ }
325
+ nativeFieldProtocolUnused &&= virtualValueUsesNoFields(classes, conversions, instance, actualAbi.receiver);
326
+ let parameterIncompatible = null;
327
+ for (const [position, parameter] of actualAbi.parameters.entries()) {
328
+ const source = rootAbi.parameters[position];
329
+ if (source !== undefined) {
330
+ nativeFieldProtocolUnused &&= virtualValueUsesNoFields(classes, conversions, source.value, parameter.value);
331
+ if (!virtualValueConvertible(classes, conversions, source.value, parameter.value)) {
332
+ parameterIncompatible =
333
+ `implementation ${implementor.declaration}'s parameter ${position} expects "${representationKey(parameter.value)}", while the ` +
334
+ `family member carries "${representationKey(source.value)}"`;
335
+ }
336
+ continue;
337
+ }
338
+ if (actualAbi.restFrom === position && parameter.value.kind === 'array-object')
339
+ continue;
340
+ if (!admitsUndefined(parameter.value)) {
341
+ parameterIncompatible =
342
+ `implementation ${implementor.declaration}'s extra parameter ${position} is carried as "${representationKey(parameter.value)}", ` +
343
+ 'which cannot hold the undefined supplied by an omitted argument';
344
+ }
345
+ }
346
+ if (parameterIncompatible !== null) {
347
+ incompatible = parameterIncompatible;
348
+ break;
349
+ }
350
+ if (!virtualValueConvertible(classes, conversions, actualAbi.result, rootAbi.result)) {
351
+ incompatible =
352
+ `implementation ${implementor.declaration} returns "${representationKey(actualAbi.result)}", while family ${family.root}.${family.key} ` +
353
+ `returns "${representationKey(rootAbi.result)}"`;
354
+ break;
355
+ }
356
+ nativeFieldProtocolUnused &&= virtualValueUsesNoFields(classes, conversions, actualAbi.result, rootAbi.result);
357
+ }
358
+ if (incompatible !== null) {
359
+ refused.push({
360
+ key: family.key,
361
+ role: family.role,
362
+ owner: family.root,
363
+ reason: `the implementations need incompatible virtual member conventions: ${incompatible}`
364
+ });
365
+ continue;
366
+ }
367
+ families.push({ family, rootAbi, ...(nativeFieldProtocolUnused ? { nativeFieldProtocol: 'unused' } : {}) });
368
+ }
369
+ const dispatched = new Map();
370
+ for (const verdict of families) {
371
+ dispatched.set(virtualDispatchKey(verdict.family.root, verdict.family.key, verdict.family.role), verdict);
372
+ for (const [declaration] of classes) {
373
+ if (extendsClass(classes, declaration, verdict.family.root)) {
374
+ dispatched.set(virtualDispatchKey(declaration, verdict.family.key, verdict.family.role), verdict);
375
+ }
376
+ }
377
+ }
378
+ return { families, refused, dispatched };
379
+ };