@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,944 @@
1
+ import { representationKey, walkRepresentation } from '../representation/model.js';
2
+ import { symbolPropertyKeyDeclarationOf } from '../semantics/model/structural-types.js';
3
+ import { operandOf, resultOf } from '../semantics/model/operands.js';
4
+ import { abiOfCallee } from './callee.js';
5
+ /**
6
+ * The one class that owns the static storage behind these constructor-family
7
+ * members, or `null` when they disagree -- which for a family of genuinely
8
+ * different classes (a base's slot the program stores subclasses into) they
9
+ * do, and for the layouts of ONE generic they never do.
10
+ */
11
+ export const sharedStaticOwnerOf = (classes, members) => {
12
+ const [first, ...rest] = members;
13
+ if (first === undefined)
14
+ return null;
15
+ const owner = classes.get(first)?.staticOwner ?? first;
16
+ return rest.every((member) => (classes.get(member)?.staticOwner ?? member) === owner) ? owner : null;
17
+ };
18
+ /**
19
+ * The physical class a census copy id belongs to.
20
+ *
21
+ * Exact id first (a physical id IS the copy id of its group's lowest copy,
22
+ * and a non-generic class is its own only copy); then the class that lists
23
+ * the copy among its `copies`; then the generic root, which is where a copy
24
+ * with no constructor-object carrier of its own was published.
25
+ */
26
+ export const classLayoutOfCopy = (classes, copy) => {
27
+ const exact = classes.get(copy);
28
+ if (exact)
29
+ return exact;
30
+ let index = copyIndexes.get(classes);
31
+ if (!index) {
32
+ index = new Map();
33
+ for (const layout of classes.values())
34
+ for (const one of layout.copies ?? [])
35
+ if (!index.has(one))
36
+ index.set(one, layout);
37
+ copyIndexes.set(classes, index);
38
+ }
39
+ return index.get(copy) ?? classes.get(genericRootOf(copy));
40
+ };
41
+ const copyIndexes = new WeakMap();
42
+ /** Runtime class candidates exclude definitions retained solely for type layout. */
43
+ /** The class whose construction this class's construction runs first, which a prototype-only base is not. */
44
+ export const constructedBaseOf = (layout) => layout.prototypeBase ? null : layout.base;
45
+ export const runtimeClassLayoutsOf = (classes) => [...classes.values()].filter((layout) => layout.layoutOnly !== true);
46
+ /**
47
+ * Build the sealed class-ref authority used to close physical ancestry.
48
+ * Existing runtime class layouts win because their instance carrier is the
49
+ * projection's canonical shape. For type-only declarations, every
50
+ * class-instance structural anchor is derived and grouped by declaration;
51
+ * more than one distinct carrier is ambiguous and therefore resolves to null.
52
+ */
53
+ export const physicalClassInstanceResolverOf = (classes, structuralTypes, deriver) => {
54
+ const resolved = new Map();
55
+ const ambiguous = new Set();
56
+ const candidates = new Map();
57
+ for (const [declaration, layout] of classes) {
58
+ if (layout.instance?.kind === 'class-ref')
59
+ resolved.set(declaration, layout.instance);
60
+ }
61
+ for (const [typeId, structural] of structuralTypes) {
62
+ const shape = structural.shape;
63
+ if (shape.kind !== 'class-instance' || shape.body === null || resolved.has(shape.declaration))
64
+ continue;
65
+ const ids = candidates.get(shape.declaration) ?? [];
66
+ ids.push(typeId);
67
+ candidates.set(shape.declaration, ids);
68
+ }
69
+ return (declaration) => {
70
+ if (resolved.has(declaration))
71
+ return resolved.get(declaration) ?? null;
72
+ if (ambiguous.has(declaration))
73
+ return null;
74
+ let selected = null;
75
+ for (const typeId of candidates.get(declaration) ?? []) {
76
+ const representation = deriver.derive(typeId);
77
+ if (representation.kind !== 'class-ref' || representation.declaration !== declaration)
78
+ continue;
79
+ if (selected && representationKey(selected) !== representationKey(representation)) {
80
+ ambiguous.add(declaration);
81
+ return null;
82
+ }
83
+ selected = representation;
84
+ }
85
+ if (selected)
86
+ resolved.set(declaration, selected);
87
+ else
88
+ ambiguous.add(declaration);
89
+ return selected;
90
+ };
91
+ };
92
+ /**
93
+ * The callable each allocation's own published value names, by that value's id.
94
+ *
95
+ * One pass instead of one scan per member. The lookup below asks "which
96
+ * allocation published this result", once per method, once per accessor half
97
+ * and once per field initializer -- and answering it by walking the whole
98
+ * operation table made class projection cost members x operations: 1,172 calls
99
+ * against 104,641 operations on one measured application, which is 123 million
100
+ * visits to answer 1,172 questions. The first allocation to publish a result id
101
+ * wins, exactly as the scan's own `return` on first match did, so a table built
102
+ * in `graph.operations` order gives the identical answer.
103
+ */
104
+ const allocatedCallablesByResult = (graph) => {
105
+ const callables = new Map();
106
+ for (const operation of graph.operations.values()) {
107
+ if (operation.family !== 'allocation')
108
+ continue;
109
+ const published = resultOf(operation, 'value');
110
+ if (!published || callables.has(published.id))
111
+ continue;
112
+ callables.set(published.id, operation.callable);
113
+ }
114
+ return callables;
115
+ };
116
+ /** The function a `define-field`/`define-method` event's own allocation names, or `null`. */
117
+ const allocatedCallableOf = (callables, resultId) => resultId === undefined ? null : (callables.get(resultId) ?? null);
118
+ /**
119
+ * The generic root of a declaration id, or the id itself when it names no copy.
120
+ *
121
+ * `identity/ids.ts` spells a monomorphized copy as `decl|file|ordinal@key`, so
122
+ * the root is everything up to the separator -- read here rather than
123
+ * reconstructed, because the two halves are minted in one place and a second
124
+ * spelling of the same split is exactly the drift this collapse exists to end.
125
+ */
126
+ const genericRootOf = (declaration) => {
127
+ const at = declaration.indexOf('@');
128
+ return at === -1 ? declaration : declaration.slice(0, at);
129
+ };
130
+ /**
131
+ * One class, one published id.
132
+ *
133
+ * `class-lifecycle` events are minted inside the census's own per-copy walk, so
134
+ * a GENERIC class publishes its members under a copy id (`decl|f71|904@0`).
135
+ * Nothing else in the backend uses that id: `cppTypeOf` spells a `class-ref`'s
136
+ * C++ type as `cppClassName(representation.declaration)`, and a `class-ref`
137
+ * carrier's declaration is its structural shape's anchor, which is the generic
138
+ * ROOT -- `structural.ts` deliberately keys the anchor on the root plus the
139
+ * layout-RELEVANT type arguments, so that two instantiations differing only in
140
+ * a phantom parameter share one physical layout. This same file already mixes
141
+ * the two: `constructorBodies` above keys on the carrier's declaration while
142
+ * every member bucket keys on the event's.
143
+ *
144
+ * The result was a class whose members were published under an id no consumer
145
+ * ever asks about. `classMemberOf` looked up the carrier's root, found
146
+ * nothing, and `emit-class-properties.ts` refused with "whose members no class
147
+ * evaluation published" -- for hono's `Context` and `Hono`, whose every method
148
+ * read (`c.text`, `c.json`, `c.req`, `app.fetch`) died on it.
149
+ *
150
+ * So the copy id is re-keyed onto the root, and ONLY when the root has exactly
151
+ * one published copy and no publication of its own. That condition is the
152
+ * whole proof: with one copy there is one layout, so the two ids denote one
153
+ * struct and merging them invents nothing. A root with two published copies is
154
+ * left exactly as it is -- those are two genuinely different layouts (a
155
+ * `Context<E>` whose `env: E['Bindings']` field really does differ per `E`),
156
+ * and collapsing them onto one root would give two structs one name. That case
157
+ * still refuses, which is correct until a `class-ref` carrier can say WHICH
158
+ * copy it holds; the carrier is the authority that has to grow, and this is
159
+ * not a substitute for it.
160
+ */
161
+ /**
162
+ * Members unioned by KEY, never concatenated: every copy of one class installs
163
+ * the same members from the same source declarations, so the copies' lists are
164
+ * the same list seen N times. The first copy to publish a key wins.
165
+ */
166
+ const mergedMembersByKey = (layouts, pick) => {
167
+ const seen = new Map();
168
+ for (const layout of layouts)
169
+ for (const entry of pick(layout))
170
+ if (!seen.has(entry.key))
171
+ seen.set(entry.key, entry);
172
+ return [...seen.values()];
173
+ };
174
+ /**
175
+ * Methods unioned by key AND BODY, because one key can legitimately name
176
+ * several bodies: a generic method is monomorphized per type argument and
177
+ * every copy installs under the name they share. Merging those by key alone
178
+ * kept whichever copy the first class copy happened to publish, so a method
179
+ * copy minted only under a LATER class copy -- `c.tag<number>()` on a
180
+ * `Chain<string>`, where the two `Chain` copies share one layout and merge --
181
+ * vanished before any call could resolve to it. A same-key list is not a
182
+ * duplicate to collapse: `classMemberOf` disambiguates it by the site's own
183
+ * convention, and every other consumer already walks the whole list because a
184
+ * NON-generic class's generic method has always produced one.
185
+ */
186
+ const mergedMethods = (layouts, pick) => {
187
+ const seen = new Map();
188
+ for (const layout of layouts)
189
+ for (const entry of pick(layout)) {
190
+ // Two entries that agree on the key AND on the installed convention are
191
+ // one method. A folded class -- every copy naming one layout -- installs
192
+ // the identical method once per copy, differing only in the ordinal
193
+ // inside the callable id, and emitting all of them made the C++ reject
194
+ // the redefinitions. A genuine method copy (`map<R>` at `number` and at
195
+ // `string`) has a different convention and is kept.
196
+ const identity = `${entry.key}${entry.representation === undefined ? (entry.callable ?? '') : representationKey(entry.representation)}`;
197
+ if (!seen.has(identity))
198
+ seen.set(identity, entry);
199
+ }
200
+ return [...seen.values()];
201
+ };
202
+ /**
203
+ * The static side every physical class of one generic root shares.
204
+ *
205
+ * Only the INSTANCE is split by layout. `Box<number>` and `Box<string>` are
206
+ * two structs because their fields are physically different, while `Box`
207
+ * itself is one constructor object with one `count` cell and one `create`
208
+ * function -- so each layout is given the union of every layout's static
209
+ * members, and `staticOwner` points them all at the root so the storage
210
+ * census mints one cell rather than one per struct.
211
+ */
212
+ const shareStaticSides = (merged) => {
213
+ const byGeneric = new Map();
214
+ for (const declaration of merged.keys()) {
215
+ const root = genericRootOf(declaration);
216
+ byGeneric.set(root, [...(byGeneric.get(root) ?? []), declaration]);
217
+ }
218
+ for (const [root, family] of byGeneric) {
219
+ if (family.length < 2)
220
+ continue;
221
+ const layouts = family.flatMap((declaration) => {
222
+ const layout = merged.get(declaration);
223
+ return layout ? [layout] : [];
224
+ });
225
+ const staticFields = mergedMembersByKey(layouts, (layout) => layout.staticFields);
226
+ const staticMethods = mergedMethods(layouts, (layout) => layout.staticMethods);
227
+ const staticAccessors = mergedMembersByKey(layouts, (layout) => layout.staticAccessors);
228
+ const name = layouts.find((layout) => layout.name !== null)?.name ?? null;
229
+ const length = layouts.find((layout) => layout.length !== null)?.length ?? null;
230
+ for (const declaration of family) {
231
+ const layout = merged.get(declaration);
232
+ if (!layout)
233
+ continue;
234
+ merged.set(declaration, { ...layout, staticOwner: root, staticFields, staticMethods, staticAccessors, name, length });
235
+ }
236
+ }
237
+ };
238
+ const collapseSpecializations = (layouts, physicalOf) => {
239
+ // One bucket per PHYSICAL class: the id the copy's own constructor-object
240
+ // carrier named (`structural.ts`'s `physicalClassDeclarationOf` -- the
241
+ // root, or `root@<ordinal>` when the class has more than one layout), and
242
+ // the root for a copy that published no carrier of its own.
243
+ const byRoot = new Map();
244
+ for (const [declaration, layout] of layouts) {
245
+ const root = physicalOf.get(declaration) ?? genericRootOf(declaration);
246
+ byRoot.set(root, [...(byRoot.get(root) ?? []), layout]);
247
+ }
248
+ const merged = new Map();
249
+ for (const [root, group] of byRoot) {
250
+ const [first, ...rest] = group;
251
+ if (!first)
252
+ continue;
253
+ const copies = group.map((layout) => layout.declaration).filter((one) => one !== genericRootOf(one));
254
+ if (rest.length === 0) {
255
+ merged.set(root, first.declaration === root && copies.length === 0
256
+ ? first
257
+ : { ...first, declaration: root, ...(copies.length > 0 ? { copies } : {}) });
258
+ continue;
259
+ }
260
+ const mergeByKey = (pick) => mergedMembersByKey(group, pick);
261
+ merged.set(root, {
262
+ declaration: root,
263
+ ...(group.every((layout) => layout.layoutOnly) ? { layoutOnly: true } : {}),
264
+ base: group.find((layout) => layout.base !== null)?.base ?? null,
265
+ ...(group.find((layout) => layout.base !== null)?.prototypeBase ? { prototypeBase: true } : {}),
266
+ ...(group.every((layout) => layout.uninstantiable) ? { uninstantiable: true } : {}),
267
+ nativeBase: group.find((layout) => layout.nativeBase !== null)?.nativeBase ?? null,
268
+ construct: group.find((layout) => layout.construct !== null)?.construct ?? null,
269
+ instance: group.find((layout) => layout.instance !== null)?.instance ?? null,
270
+ constructor: group.find((layout) => layout.constructor !== null)?.constructor ?? null,
271
+ fields: mergeByKey((layout) => layout.fields),
272
+ fieldOwnership: [],
273
+ methods: mergedMethods(group, (layout) => layout.methods),
274
+ accessors: mergeByKey((layout) => layout.accessors),
275
+ staticFields: mergeByKey((layout) => layout.staticFields),
276
+ staticMethods: mergedMethods(group, (layout) => layout.staticMethods),
277
+ staticAccessors: mergeByKey((layout) => layout.staticAccessors),
278
+ name: group.find((layout) => layout.name !== null)?.name ?? null,
279
+ length: group.find((layout) => layout.length !== null)?.length ?? null,
280
+ ...(copies.length > 0 ? { copies } : {})
281
+ });
282
+ }
283
+ shareStaticSides(merged);
284
+ // A base link names whichever id its heritage carrier stated -- a physical
285
+ // id, which this merge published as-is when the base has that layout, and
286
+ // otherwise a copy this merge just retired onto its root.
287
+ const relinked = new Map();
288
+ for (const [declaration, layout] of merged) {
289
+ const base = layout.base === null || merged.has(layout.base) ? layout.base : genericRootOf(layout.base);
290
+ relinked.set(declaration, base === layout.base ? layout : { ...layout, base });
291
+ }
292
+ return relinked;
293
+ };
294
+ /** Whether `candidate` reaches `ancestor` through the published base links. */
295
+ const descendsFrom = (layouts, candidate, ancestor) => {
296
+ const seen = new Set();
297
+ let current = layouts.get(candidate)?.base ?? null;
298
+ while (current !== null && !seen.has(current)) {
299
+ if (current === ancestor)
300
+ return true;
301
+ seen.add(current);
302
+ current = layouts.get(current)?.base ?? null;
303
+ }
304
+ return false;
305
+ };
306
+ /**
307
+ * Publish synthetic overlay ownership after specialization collapse.
308
+ *
309
+ * This pass records evidence and physical owners without changing `fields`.
310
+ * Keeping the existing field list intact is intentional: access recipes and
311
+ * the target layout must consume this census before any storage can be
312
+ * removed. A missing representation remains visible as an owner but cannot
313
+ * be treated as a typed storage recipe by a later consumer.
314
+ */
315
+ export const publishClassFieldOwnership = (layouts) => {
316
+ const published = new Map();
317
+ for (const [declaration, layout] of layouts) {
318
+ const ownership = layout.fields
319
+ .filter((field) => field.syntheticSubclassMemberOverlay)
320
+ .map((evidence) => {
321
+ const physicalOwners = [...layouts.entries()]
322
+ .filter(([candidate, candidateLayout]) => {
323
+ if (candidate === declaration || !descendsFrom(layouts, candidate, declaration))
324
+ return false;
325
+ return candidateLayout.fields.some((field) => field.key === evidence.key && !field.syntheticSubclassMemberOverlay);
326
+ })
327
+ .flatMap(([candidate, candidateLayout]) => {
328
+ const field = candidateLayout.fields.find((entry) => entry.key === evidence.key && !entry.syntheticSubclassMemberOverlay);
329
+ return field ? [{ declaration: candidate, field }] : [];
330
+ })
331
+ .sort((left, right) => (left.declaration < right.declaration ? -1 : left.declaration > right.declaration ? 1 : 0));
332
+ return { key: evidence.key, evidenceOwner: declaration, evidence, physicalOwners };
333
+ });
334
+ published.set(declaration, { ...layout, fieldOwnership: ownership });
335
+ }
336
+ return published;
337
+ };
338
+ /**
339
+ * Publish physical class ancestry for the final carrier set.
340
+ *
341
+ * `projectClasses` is intentionally event-driven: it describes executable
342
+ * class lifecycle, so a class used only as a retained field type may have no
343
+ * entry there. The target still needs its authenticated base link to avoid
344
+ * flattening inherited storage into the derived struct. This pass publishes
345
+ * only that physical fact from the already-sealed class-ref carriers and
346
+ * reuses full projected layouts where they exist. It must run on the final
347
+ * emission carrier set, after shaking, so a dropped type-only value cannot
348
+ * root a class merely because it appeared in the plan.
349
+ */
350
+ export const physicalClassLayoutsOf = (classes, representations, resolveClassRef = null) => {
351
+ const carriers = new Map();
352
+ for (const representation of representations)
353
+ for (const nested of walkRepresentation(representation))
354
+ if (nested.kind === 'class-ref' && !carriers.has(nested.declaration))
355
+ carriers.set(nested.declaration, nested);
356
+ const layouts = new Map();
357
+ for (const [declaration, layout] of classes) {
358
+ if (layout.instance?.kind !== 'class-ref')
359
+ continue;
360
+ layouts.set(declaration, {
361
+ declaration,
362
+ base: layout.base,
363
+ instance: layout.instance,
364
+ nativeBase: layout.nativeBase,
365
+ ...(layout.nativeStorage === undefined ? {} : { nativeStorage: layout.nativeStorage })
366
+ });
367
+ }
368
+ for (const [declaration, instance] of carriers) {
369
+ if (layouts.has(declaration))
370
+ continue;
371
+ layouts.set(declaration, {
372
+ declaration,
373
+ base: instance.ancestors[0] ?? null,
374
+ instance,
375
+ nativeBase: null
376
+ });
377
+ }
378
+ // A type-only carrier can name a direct base whose own carrier was not
379
+ // independently retained. Ask the sealed structural publisher for that
380
+ // declaration's authenticated class-ref and continue the same closure; a
381
+ // resolver that cannot prove one unique carrier leaves the publication
382
+ // incomplete rather than guessing a shape from the descendant.
383
+ const resolved = new Set();
384
+ let changed = true;
385
+ while (changed) {
386
+ changed = false;
387
+ for (const layout of [...layouts.values()]) {
388
+ if (layout.base === null || layouts.has(layout.base) || resolved.has(layout.base))
389
+ continue;
390
+ resolved.add(layout.base);
391
+ const instance = resolveClassRef?.(layout.base) ?? null;
392
+ if (!instance || instance.declaration !== layout.base)
393
+ continue;
394
+ layouts.set(instance.declaration, {
395
+ declaration: instance.declaration,
396
+ base: instance.ancestors[0] ?? null,
397
+ instance,
398
+ nativeBase: null
399
+ });
400
+ changed = true;
401
+ }
402
+ }
403
+ const missingBases = new Set();
404
+ for (const layout of layouts.values())
405
+ if (layout.base !== null && !layouts.has(layout.base))
406
+ missingBases.add(layout.base);
407
+ return Object.freeze({
408
+ layouts,
409
+ complete: missingBases.size === 0,
410
+ missingBases: Object.freeze([...missingBases])
411
+ });
412
+ };
413
+ export const projectClasses = (input) => {
414
+ const allocatedCallables = allocatedCallablesByResult(input.graph);
415
+ const fields = new Map();
416
+ const methods = new Map();
417
+ const accessors = new Map();
418
+ const staticFields = new Map();
419
+ const staticMethods = new Map();
420
+ const staticAccessors = new Map();
421
+ const constructs = new Map();
422
+ const instances = new Map();
423
+ const constructors = new Map();
424
+ const layoutOnly = new Set();
425
+ const bases = new Map();
426
+ const prototypeBases = new Set();
427
+ const nativeBases = new Map();
428
+ const names = new Map();
429
+ const lengths = new Map();
430
+ const nativeErrorConstructors = new Set([
431
+ 'ErrorConstructor',
432
+ 'EvalErrorConstructor',
433
+ 'RangeErrorConstructor',
434
+ 'ReferenceErrorConstructor',
435
+ 'SyntaxErrorConstructor',
436
+ 'TypeErrorConstructor',
437
+ 'URIErrorConstructor'
438
+ ]);
439
+ // The physical class each census copy belongs to, read off the copy's own
440
+ // carriers: its constructor object names the class it constructs
441
+ // (`constructor-family.members[0]`), a layout-only copy's instance carrier
442
+ // names the class it is an instance of. Both are `structural.ts`'s
443
+ // `physicalClassDeclarationOf` answer for that copy's own fillings.
444
+ const physicalOf = new Map();
445
+ const publishPhysical = (copy, physical) => {
446
+ if (physical !== undefined && !physicalOf.has(copy) && genericRootOf(physical) === genericRootOf(copy))
447
+ physicalOf.set(copy, physical);
448
+ };
449
+ for (const operation of input.graph.operations.values()) {
450
+ if (operation.family === 'allocation' &&
451
+ operation.allocated === 'class-constructor-object' &&
452
+ operation.classDeclaration !== undefined) {
453
+ const published = resultOf(operation, 'value');
454
+ const carrier = published ? input.plan.selected.get(published.id) : undefined;
455
+ if (carrier?.kind === 'constructor-family')
456
+ publishPhysical(operation.classDeclaration, carrier.members[0]);
457
+ continue;
458
+ }
459
+ if (operation.family !== 'class-lifecycle')
460
+ continue;
461
+ if (operation.event === 'bind-class-value' && operation.classLayoutOnly) {
462
+ layoutOnly.add(operation.classDeclaration);
463
+ const storage = operation.operands.find((operand) => operand.role === 'instance-layout');
464
+ if (storage) {
465
+ const instance = input.deriver.derive(storage.type);
466
+ instances.set(operation.classDeclaration, instance);
467
+ if (instance.kind === 'class-ref')
468
+ publishPhysical(operation.classDeclaration, instance.declaration);
469
+ }
470
+ }
471
+ }
472
+ // Constructor bodies are identified by their producer, never by an ABI
473
+ // shared with ordinary callbacks and methods (class receiver, void result).
474
+ const constructorBodies = new Map();
475
+ for (const operation of input.graph.operations.values()) {
476
+ if (operation.family !== 'allocation' ||
477
+ operation.allocated !== 'function-object' ||
478
+ !operation.callable ||
479
+ !operation.classConstructorBodyOf)
480
+ continue;
481
+ constructorBodies.set(operation.classConstructorBodyOf, operation.callable);
482
+ }
483
+ // A constructor-family carrier names its members by generic ROOT -- the
484
+ // anchor `structural.ts` keys a `class-ref` on -- while `class-lifecycle`
485
+ // minted the body's ownership above under the census's per-copy id
486
+ // (`decl|f168|1@0`): the same two spellings `collapseSpecializations`
487
+ // reconciles for every other member bucket. Looked up by the member alone,
488
+ // the body of every GENERIC class was simply never found: `new Box<T>(v)`
489
+ // allocated, ran its field initializers and returned, with `this.value = v`
490
+ // never executed -- a construction that silently skipped its constructor,
491
+ // the exact half-emission `constructionsOf` refuses by name when it can see
492
+ // it. One copy with a body is one answer. Two copies with different bodies
493
+ // is the two-layout case `collapseSpecializations` leaves refused, and it
494
+ // gets no answer here either.
495
+ const constructorBodyOfRoot = (member) => {
496
+ const root = genericRootOf(member);
497
+ const bodies = new Set();
498
+ for (const [owner, body] of constructorBodies)
499
+ if (genericRootOf(owner) === root)
500
+ bodies.add(body);
501
+ return bodies.size === 1 ? [...bodies][0] : null;
502
+ };
503
+ /**
504
+ * The body belonging to the COPY this constructor object is the constructor
505
+ * object OF.
506
+ *
507
+ * `constructorBodyOfRoot` above answers for a root with exactly one body,
508
+ * and abstains when several copies each minted their own -- there is no way
509
+ * to pick between two bodies knowing only the root. The allocation knows:
510
+ * `classDeclaration` is the per-copy id this constructor object was minted
511
+ * for, and `constructorBodies` is keyed by exactly that spelling, so the
512
+ * copy's own body is a direct lookup rather than a choice.
513
+ *
514
+ * `runtime/node/globals.ts`'s `class MessageEvent<T = any> extends Event` is
515
+ * why this exists. The census holds two copies of it -- one from the
516
+ * argument `websocket.ts` constructs with, one from the listener type it is
517
+ * handed to -- whose layouts collapse onto one struct, so the abstention
518
+ * above left the class with NO constructor and `constructionsOf` built the
519
+ * implicit `super(...args)` instead: `data` was never assigned, and the
520
+ * forwarded second argument was a `MessageEventInit` where the base's
521
+ * `EventInit` was declared, which is the store clang refused.
522
+ */
523
+ const constructorBodyOfCopy = (operation) => operation.classDeclaration === undefined ? null : (constructorBodies.get(String(operation.classDeclaration)) ?? null);
524
+ for (const operation of input.graph.operations.values()) {
525
+ if (operation.family === 'allocation' && operation.allocated === 'class-constructor-object') {
526
+ const published = resultOf(operation, 'value');
527
+ const carrier = published ? input.plan.selected.get(published.id) : undefined;
528
+ // The construction's result carrier is the instance carrier: it is the
529
+ // constructor's own published convention, not a second derivation of what
530
+ // an instance of this class looks like.
531
+ const abi = carrier && (carrier.kind === 'constructor-family' || carrier.kind === 'function') ? carrier.abi : null;
532
+ // Only the class this allocation evaluates: a family may also name the
533
+ // subclasses the program stores into this constructor's slot, and those
534
+ // have constructions of their own.
535
+ const allocated = operation.classDeclaration === undefined ? null : genericRootOf(operation.classDeclaration);
536
+ const members = carrier?.kind === 'constructor-family' ? carrier.members : [];
537
+ for (const member of members.filter((one) => allocated === null || members.length === 1 || genericRootOf(one) === allocated)) {
538
+ constructs.set(member, abi);
539
+ instances.set(member, abi?.result ?? null);
540
+ constructors.set(member, constructorBodies.get(member) ?? constructorBodyOfCopy(operation) ?? constructorBodyOfRoot(member));
541
+ }
542
+ if (operation.classDeclaration !== undefined && operation.functionName !== undefined)
543
+ names.set(operation.classDeclaration, operation.functionName);
544
+ if (operation.classDeclaration !== undefined && operation.functionLength !== undefined)
545
+ lengths.set(operation.classDeclaration, operation.functionLength);
546
+ continue;
547
+ }
548
+ if (operation.family !== 'class-lifecycle')
549
+ continue;
550
+ // A modelled prototype re-parenting links the two classes exactly as
551
+ // `extends` does for layout and dispatch; its heritage operand is read the
552
+ // same way.
553
+ if (operation.event === 'evaluate-heritage' || operation.event === 'reparent-prototype') {
554
+ if (operation.event === 'reparent-prototype')
555
+ prototypeBases.add(operation.classDeclaration);
556
+ const heritage = operation.operands.find((operand) => operand.role === 'heritage');
557
+ const carrier = heritage?.source.kind === 'result'
558
+ ? input.plan.selected.get(heritage.source.result)
559
+ : operation.classLayoutOnly && heritage
560
+ ? input.deriver.derive(heritage.type)
561
+ : null;
562
+ if (!carrier)
563
+ continue;
564
+ // The base is read off the heritage value's own carrier rather than off
565
+ // the syntax: `class D extends B` and `class D extends mixin(B)` are the
566
+ // same event, and only the carrier says which class the evaluated value
567
+ // actually constructs. A family naming several classes states no single
568
+ // base, so it is left absent instead of resolved to whichever came first.
569
+ if (carrier?.kind === 'native-handle' &&
570
+ nativeErrorConstructors.has(carrier.protocol) &&
571
+ carrier.construct?.result.kind === 'native-record-ref') {
572
+ nativeBases.set(operation.classDeclaration, { protocol: carrier.protocol, instance: carrier.construct.result });
573
+ continue;
574
+ }
575
+ if (carrier?.kind !== 'constructor-family')
576
+ continue;
577
+ const [only, ...rest] = carrier.members;
578
+ if (!only)
579
+ continue;
580
+ if (rest.length === 0) {
581
+ bases.set(operation.classDeclaration, only);
582
+ continue;
583
+ }
584
+ // A base's constructor slot that also holds subclasses: the family's
585
+ // declared class is the base, and the emitted heritage evaluation checks
586
+ // the value is exactly it (`gea::exactNativeClassHeritage`).
587
+ const declared = carrier.abi.result.kind === 'class-ref' ? carrier.abi.result.declaration : null;
588
+ if (declared !== null && carrier.members.includes(declared))
589
+ bases.set(operation.classDeclaration, declared);
590
+ continue;
591
+ }
592
+ if (operation.event === 'define-method') {
593
+ const key = operation.operands.find((operand) => operand.role === 'key');
594
+ const method = operation.operands.find((operand) => operand.role === 'method');
595
+ const storage = operandOf(operation, 'method-storage');
596
+ if (key?.source.kind !== 'constant')
597
+ continue;
598
+ const target = operation.placement === 'static' ? staticMethods : methods;
599
+ const bucket = target.get(operation.classDeclaration) ?? [];
600
+ bucket.push({
601
+ key: key.source.text,
602
+ callable: method?.source.kind === 'result' ? allocatedCallableOf(allocatedCallables, method.source.result) : null,
603
+ ...(method?.source.kind === 'result' && input.plan.selected.get(method.source.result)
604
+ ? { representation: input.plan.selected.get(method.source.result) }
605
+ : {}),
606
+ ...(storage ? { storageRepresentation: input.deriver.derive(storage.type) } : {})
607
+ });
608
+ target.set(operation.classDeclaration, bucket);
609
+ continue;
610
+ }
611
+ if (operation.event === 'define-getter' || operation.event === 'define-setter') {
612
+ const key = operation.operands.find((operand) => operand.role === 'key');
613
+ const half = operation.operands.find((operand) => operand.role === 'method');
614
+ if (key?.source.kind !== 'constant')
615
+ continue;
616
+ const name = key.source.text;
617
+ const callable = half?.source.kind === 'result' ? allocatedCallableOf(allocatedCallables, half.source.result) : null;
618
+ const target = operation.placement === 'static' ? staticAccessors : accessors;
619
+ const bucket = target.get(operation.classDeclaration) ?? [];
620
+ // A getter and its setter are two events over one member, so the second
621
+ // fills in the half the first left null rather than appending a second
622
+ // entry a lookup would then have to choose between.
623
+ const existing = bucket.find((entry) => entry.key === name);
624
+ const selected = half?.source.kind === 'result' ? (input.plan.selected.get(half.source.result) ?? null) : null;
625
+ const merged = operation.event === 'define-getter'
626
+ ? { key: name, getter: callable, setter: existing?.setter ?? null, ...(selected ? { representation: selected } : {}) }
627
+ : {
628
+ key: name,
629
+ getter: existing?.getter ?? null,
630
+ setter: callable,
631
+ ...(existing?.representation ? { representation: existing.representation } : {})
632
+ };
633
+ if (existing)
634
+ bucket[bucket.indexOf(existing)] = merged;
635
+ else
636
+ bucket.push(merged);
637
+ target.set(operation.classDeclaration, bucket);
638
+ continue;
639
+ }
640
+ if (operation.event !== 'define-field')
641
+ continue;
642
+ const initializerOperand = operation.operands.find((operand) => operand.role === 'initializer');
643
+ const keyOperand = operation.operands.find((operand) => operand.role === 'key');
644
+ // A field whose key is not a constant is skipped rather than guessed: a
645
+ // computed key names a member no fixed struct layout has, and inventing a
646
+ // name for it would produce a store into a field nothing declares.
647
+ if (keyOperand?.source.kind !== 'constant')
648
+ continue;
649
+ const target = operation.placement === 'static' ? staticFields : fields;
650
+ const bucket = target.get(operation.classDeclaration) ?? [];
651
+ bucket.push({
652
+ declaration: operation.declaration,
653
+ key: keyOperand.source.text,
654
+ initializer: initializerOperand?.source.kind === 'result' ? allocatedCallableOf(allocatedCallables, initializerOperand.source.result) : null,
655
+ representation: (() => {
656
+ const storage = operandOf(operation, 'field-storage');
657
+ return storage ? input.deriver.derive(storage.type) : null;
658
+ })(),
659
+ syntheticSubclassMemberOverlay: operation.syntheticSubclassMemberOverlay === true
660
+ });
661
+ target.set(operation.classDeclaration, bucket);
662
+ }
663
+ const layouts = new Map();
664
+ for (const declaration of new Set([
665
+ ...instances.keys(),
666
+ ...fields.keys(),
667
+ ...methods.keys(),
668
+ ...accessors.keys(),
669
+ ...staticFields.keys(),
670
+ ...staticMethods.keys(),
671
+ ...staticAccessors.keys(),
672
+ ...bases.keys(),
673
+ ...nativeBases.keys(),
674
+ ...names.keys()
675
+ ])) {
676
+ layouts.set(declaration, {
677
+ declaration,
678
+ ...(layoutOnly.has(declaration) ? { layoutOnly: true } : {}),
679
+ base: bases.get(declaration) ?? null,
680
+ ...(prototypeBases.has(declaration) && bases.has(declaration) ? { prototypeBase: true } : {}),
681
+ ...(input.uninstantiable?.has(declaration) ? { uninstantiable: true } : {}),
682
+ nativeBase: nativeBases.get(declaration) ?? null,
683
+ construct: constructs.get(declaration) ?? null,
684
+ instance: instances.get(declaration) ?? null,
685
+ constructor: constructors.get(declaration) ?? null,
686
+ fields: fields.get(declaration) ?? [],
687
+ fieldOwnership: [],
688
+ methods: methods.get(declaration) ?? [],
689
+ accessors: accessors.get(declaration) ?? [],
690
+ staticFields: staticFields.get(declaration) ?? [],
691
+ staticMethods: staticMethods.get(declaration) ?? [],
692
+ staticAccessors: staticAccessors.get(declaration) ?? [],
693
+ name: names.get(declaration) ?? null,
694
+ length: lengths.get(declaration) ?? null
695
+ });
696
+ }
697
+ return publishClassMethodOverrides(publishClassFieldOwnership(collapseSpecializations(layouts, physicalOf)), input);
698
+ };
699
+ /**
700
+ * Whether a runtime property key held in `carrier` can never be a Symbol.
701
+ *
702
+ * ToPropertyKey (ECMA-262 7.1.19) returns a Symbol only for a Symbol, or for
703
+ * an object whose ToPrimitive answers one. Every other primitive becomes its
704
+ * string. So a key carried as a string, a number, a boolean or an absence --
705
+ * or a union of only those -- spells string keys alone; an object, a symbol
706
+ * or a dynamic key may spell either and answers `false`.
707
+ */
708
+ export const keyExcludesSymbols = (carrier) => {
709
+ switch (carrier.kind) {
710
+ case 'string':
711
+ case 'scalar':
712
+ case 'null':
713
+ case 'undefined':
714
+ return true;
715
+ case 'optional':
716
+ return keyExcludesSymbols(carrier.payload);
717
+ case 'borrowed-ref':
718
+ return keyExcludesSymbols(carrier.referent);
719
+ case 'tagged-union':
720
+ return carrier.arms.length > 0 && carrier.arms.every((arm) => keyExcludesSymbols(arm.value));
721
+ default:
722
+ return false;
723
+ }
724
+ };
725
+ /** A write creates an own callable property without replacing its prototype declaration. */
726
+ export const publishClassMethodOverrides = (layouts, input) => {
727
+ const overrides = new Map();
728
+ const prototypeMutations = new Map();
729
+ const prototypes = new Map();
730
+ const prototypeBindings = new Map();
731
+ const mergeOrigins = (map, key, origins) => {
732
+ const prior = map.get(key) ?? new Set();
733
+ const size = prior.size;
734
+ for (const declaration of origins)
735
+ prior.add(declaration);
736
+ if (prior.size === size)
737
+ return false;
738
+ map.set(key, prior);
739
+ return true;
740
+ };
741
+ let changed = true;
742
+ while (changed) {
743
+ changed = false;
744
+ for (const operation of input.graph.operations.values()) {
745
+ const result = resultOf(operation, 'value');
746
+ if (operation.family === 'property' && operation.internalMethod === 'get') {
747
+ const key = operandOf(operation, 'key');
748
+ const receiver = operandOf(operation, 'receiver');
749
+ const carrier = receiver?.source.kind === 'result' ? input.plan.selected.get(receiver.source.result) : null;
750
+ if (result && key?.source.kind === 'constant' && key.source.text === 'prototype' && carrier?.kind === 'constructor-family')
751
+ changed = mergeOrigins(prototypes, result.id, carrier.members.map(genericRootOf)) || changed;
752
+ }
753
+ else if (operation.family === 'binding') {
754
+ if (operation.action === 'read' && result)
755
+ changed = mergeOrigins(prototypes, result.id, prototypeBindings.get(operation.declaration) ?? []) || changed;
756
+ else if (operation.action === 'write' || operation.action === 'initialize') {
757
+ const source = operandOf(operation, operation.action === 'initialize' ? 'initializer' : 'value');
758
+ if (source?.source.kind === 'result') {
759
+ changed = mergeOrigins(prototypeBindings, operation.declaration, prototypes.get(source.source.result) ?? []) || changed;
760
+ if (result)
761
+ changed = mergeOrigins(prototypes, result.id, prototypes.get(source.source.result) ?? []) || changed;
762
+ }
763
+ }
764
+ }
765
+ else if (operation.family === 'computation' && result && (operation.form === 'conditional' || operation.form === 'logical')) {
766
+ for (const operand of operation.operands)
767
+ if (operand.source.kind === 'result')
768
+ changed = mergeOrigins(prototypes, result.id, prototypes.get(operand.source.result) ?? []) || changed;
769
+ }
770
+ }
771
+ }
772
+ const unsupportedPrototypes = new Map();
773
+ const unsupported = (declaration, reason) => {
774
+ const reasons = unsupportedPrototypes.get(declaration) ?? new Set();
775
+ reasons.add(reason);
776
+ unsupportedPrototypes.set(declaration, reasons);
777
+ };
778
+ const prototypeMemberIsMethod = (declaration, key) => {
779
+ const seen = new Set();
780
+ for (let current = declaration; current !== null && !seen.has(current);) {
781
+ seen.add(current);
782
+ const layout = layouts.get(current);
783
+ if (!layout)
784
+ return false;
785
+ if (layout.fields.some((field) => field.key === key) || layout.accessors.some((accessor) => accessor.key === key))
786
+ return false;
787
+ if (layout.methods.some((method) => method.key === key))
788
+ return true;
789
+ current = layout.base;
790
+ }
791
+ return false;
792
+ };
793
+ for (const operation of input.graph.operations.values()) {
794
+ for (const operand of operation.operands) {
795
+ if (operand.source.kind !== 'result')
796
+ continue;
797
+ const origins = prototypes.get(operand.source.result);
798
+ if (!origins?.size)
799
+ continue;
800
+ if (operation.family === 'binding' || operation.family === 'reference')
801
+ continue;
802
+ if (operation.family === 'computation' &&
803
+ (operation.form === 'conditional' ||
804
+ operation.form === 'logical' ||
805
+ operation.form === 'typeof' ||
806
+ operation.form === 'equality' ||
807
+ operation.form === 'instanceof'))
808
+ continue;
809
+ if (operation.family === 'property' && operand.role === 'receiver') {
810
+ const key = operandOf(operation, 'key');
811
+ const name = key?.source.kind === 'constant' ? key.source.text : null;
812
+ for (const declaration of origins) {
813
+ if ((operation.internalMethod === 'get' || operation.internalMethod === 'set') &&
814
+ name !== null &&
815
+ prototypeMemberIsMethod(declaration, name))
816
+ continue;
817
+ unsupported(declaration, `prototype ${operation.internalMethod} of ${name ?? 'a runtime key'} has no typed method protocol`);
818
+ }
819
+ }
820
+ else {
821
+ for (const declaration of origins)
822
+ unsupported(declaration, `prototype escapes through ${operation.family}:${operand.role}`);
823
+ }
824
+ }
825
+ }
826
+ const mark = (receiver, key, prototype = null, symbolKeys = true) => {
827
+ if (receiver.kind === 'optional')
828
+ return mark(receiver.payload, key, prototype, symbolKeys);
829
+ if (receiver.kind === 'borrowed-ref')
830
+ return mark(receiver.referent, key, prototype, symbolKeys);
831
+ if (receiver.kind === 'tagged-union') {
832
+ for (const arm of receiver.arms)
833
+ mark(arm.value, key, prototype, symbolKeys);
834
+ return;
835
+ }
836
+ if (receiver.kind !== 'class-ref')
837
+ return;
838
+ const chain = [];
839
+ const seen = new Set();
840
+ for (let declaration = genericRootOf(receiver.declaration); declaration !== null && !seen.has(declaration);) {
841
+ seen.add(declaration);
842
+ const layout = layouts.get(declaration);
843
+ if (!layout)
844
+ break;
845
+ chain.push(layout);
846
+ declaration = layout.base;
847
+ }
848
+ // A runtime key reaches every method its key domain can spell. A key that
849
+ // can only be a string or number never names a symbol-keyed member
850
+ // (`*[Symbol.iterator]()` is `sym(<declaration>)`), so it reserves no own
851
+ // slot for one -- reserving it anyway put a symbol key in the instance
852
+ // layout, which no fixed-slot protocol can prove.
853
+ const names = key === null
854
+ ? new Set(chain.flatMap((layout) => layout.methods.map((method) => method.key).filter((name) => symbolKeys || symbolPropertyKeyDeclarationOf(name) === null)))
855
+ : new Set([key]);
856
+ for (const name of names) {
857
+ // A real own field/accessor hides the prototype method and owns its own
858
+ // storage contract. A method override in a subclass shares the root slot.
859
+ const visible = chain.find((layout) => layout.fields.some((field) => field.key === name) ||
860
+ layout.accessors.some((field) => field.key === name) ||
861
+ layout.methods.some((method) => method.key === name));
862
+ if (!visible?.methods.some((method) => method.key === name))
863
+ continue;
864
+ let owner = visible;
865
+ for (const ancestor of chain.slice(chain.indexOf(visible) + 1)) {
866
+ if (ancestor.fields.some((field) => field.key === name) || ancestor.accessors.some((field) => field.key === name))
867
+ break;
868
+ if (ancestor.methods.some((method) => method.key === name))
869
+ owner = ancestor;
870
+ }
871
+ const method = owner.methods.find((method) => method.key === name);
872
+ const representation = method?.storageRepresentation ?? method?.representation;
873
+ if (!representation)
874
+ continue;
875
+ const abi = abiOfCallee(representation);
876
+ if (!abi)
877
+ continue;
878
+ const fields = overrides.get(owner.declaration) ?? new Map();
879
+ fields.set(name, { key: name, value: { kind: 'function-value-dispatch', abi }, required: false });
880
+ overrides.set(owner.declaration, fields);
881
+ if (prototype !== null) {
882
+ const keys = prototypeMutations.get(prototype) ?? new Set();
883
+ keys.add(name);
884
+ prototypeMutations.set(prototype, keys);
885
+ }
886
+ }
887
+ };
888
+ const carrierOf = (operand) => (operand.source.kind === 'result' ? input.plan.selected.get(operand.source.result) : undefined) ?? input.deriver.derive(operand.type);
889
+ for (const operation of input.graph.operations.values()) {
890
+ let receiver;
891
+ let key = null;
892
+ // The operand a runtime key is computed from, when the write names one.
893
+ // Intrinsics without a key operand (`Object.assign`) copy whatever own
894
+ // keys their source holds, symbols included, and keep `undefined` here.
895
+ let runtimeKey;
896
+ if (operation.family === 'property' &&
897
+ (operation.internalMethod === 'set' || operation.internalMethod === 'delete' || operation.internalMethod === 'define-own-property')) {
898
+ receiver = operandOf(operation, 'receiver');
899
+ const named = operandOf(operation, 'key');
900
+ if (named?.source.kind === 'constant')
901
+ key = named.source.text;
902
+ else
903
+ runtimeKey = named;
904
+ }
905
+ else if (operation.family === 'invocation' && operation.intrinsicMutation) {
906
+ receiver = operation.operands.find((operand) => operand.role === 'argument' && operand.ordinal === 0);
907
+ if (operation.intrinsicMutation === 'reflect-set' || operation.intrinsicMutation === 'object-define-property') {
908
+ const named = operation.operands.find((operand) => operand.role === 'argument' && operand.ordinal === 1);
909
+ if (named?.source.kind === 'constant')
910
+ key = named.source.text;
911
+ else
912
+ runtimeKey = named;
913
+ }
914
+ }
915
+ if (!receiver)
916
+ continue;
917
+ const symbolKeys = runtimeKey === undefined || !keyExcludesSymbols(carrierOf(runtimeKey));
918
+ const selected = receiver.source.kind === 'result' ? input.plan.selected.get(receiver.source.result) : undefined;
919
+ const prototypeOrigins = receiver.source.kind === 'result' ? prototypes.get(receiver.source.result) : undefined;
920
+ if (prototypeOrigins?.size) {
921
+ for (const declaration of prototypeOrigins) {
922
+ const instance = layouts.get(declaration)?.instance;
923
+ if (instance)
924
+ mark(instance, key, declaration, symbolKeys);
925
+ }
926
+ }
927
+ else
928
+ mark(selected ?? input.deriver.derive(receiver.type), key, null, symbolKeys);
929
+ }
930
+ return new Map([...layouts].map(([declaration, layout]) => {
931
+ const fields = overrides.get(declaration);
932
+ const prototypeKeys = prototypeMutations.get(declaration);
933
+ const unsupportedUses = unsupportedPrototypes.get(declaration);
934
+ return [
935
+ declaration,
936
+ {
937
+ ...layout,
938
+ ...(fields ? { methodOverrides: [...fields.values()] } : {}),
939
+ ...(prototypeKeys ? { prototypeMethodMutations: [...prototypeKeys] } : {}),
940
+ ...(unsupportedUses ? { prototypeUnsupportedUses: [...unsupportedUses] } : {})
941
+ }
942
+ ];
943
+ }));
944
+ };