@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,481 @@
1
+ import { operationOfResult } from '../identity/ids.js';
2
+ import { captureCapabilityOf, representationKey } from '../representation/model.js';
3
+ import { propertyAccessKeysOf } from './certify/property-access.js';
4
+ import { runtimeHelperKeysOf } from './certify/runtime-helper.js';
5
+ import { allOperationsOf } from './model.js';
6
+ import { resultOfIrOperation } from './queries.js';
7
+ import { nativeMergeTransportMatches } from './native-merge-transport.js';
8
+ import { nativeFieldOwnerReadMatches } from './native-field-owner.js';
9
+ import { absentClassArmsHold } from './absent-class-arm.js';
10
+ import { objectValueConversionInputsOf, objectValueConversionsMatch } from './object-value-conversions.js';
11
+ /**
12
+ * Certification of the lowered IR.
13
+ *
14
+ * Preflight certified a program by predicting, from the semantic graph and
15
+ * the plan, what lowering and the printer would do with it: seven builders
16
+ * re-derived slots, receivers and key literalness so they could ask the
17
+ * manifest the question the printer would later ask. This walks the IR that
18
+ * lowering actually built. Every operation states its operands' carriers,
19
+ * every `convert` cites the census node it applies, every allocation names
20
+ * its captures -- so each capability the printer will need is a function of
21
+ * the operation alone, spelled once here in the manifest's own vocabulary
22
+ * and looked up in the manifest's own sets. The certificate is the empty
23
+ * refusal list.
24
+ *
25
+ * One namespace. A key is `${family}:${discriminator}`; the family names the
26
+ * manifest set the discriminator is a member of (`property-access` ->
27
+ * `propertyRecipes`, `runtime-helper` -> `runtimeHelpers`, ...), or the
28
+ * census that answers it (`conversion` -> the conversion census by node id).
29
+ * A refusal anywhere in the compiler that names a key outside this union is
30
+ * a type error, which is what closes the gap `scripts/refusal-keys.mjs`
31
+ * measures.
32
+ */
33
+ export const capabilityFamilies = [
34
+ 'physical-cpp-type',
35
+ 'call-abi',
36
+ 'host-invocation',
37
+ 'host-member-call',
38
+ 'property-access',
39
+ 'capture',
40
+ 'conversion',
41
+ 'native-boundary',
42
+ 'runtime-helper',
43
+ 'abrupt-edge'
44
+ ];
45
+ export const familyOf = (key) => key.slice(0, key.indexOf(':'));
46
+ export const isCapabilityKey = (key) => capabilityFamilies.includes(key.slice(0, key.indexOf(':')));
47
+ const discriminatorOf = (key) => key.slice(key.indexOf(':') + 1);
48
+ /**
49
+ * Whether the target can spell a carrier. The manifest's `physicalTypes` set
50
+ * is the plan's projection of the target's own predicate; the IR carries
51
+ * carriers the plan never selected (a slot's carrier, a `convert`'s result),
52
+ * so a manifest that publishes the predicate itself is asked directly, and
53
+ * one that does not falls back to the set -- fail-closed, as every optional
54
+ * manifest field reads when absent.
55
+ */
56
+ const spellable = (manifest, representation) => manifest.spellable ? manifest.spellable(representation) : manifest.physicalTypes.has(representationKey(representation));
57
+ const physicalTypeDemand = (manifest, representation) => {
58
+ const key = representationKey(representation);
59
+ return spellable(manifest, representation)
60
+ ? { key: `physical-cpp-type:${key}`, verdict: 'installed' }
61
+ : { key: `physical-cpp-type:${key}`, verdict: 'missing', detail: `the target cannot spell ${key}` };
62
+ };
63
+ /** `native-handle` is admissible only behind a versioned, authenticated host protocol; the key is the target's own tag name where the host stated one. */
64
+ const nativeBoundaryDemand = (representation) => representation.kind === 'native-handle'
65
+ ? { key: `native-boundary:${representation.native ?? representation.protocol}@${representation.version}` }
66
+ : null;
67
+ const abiDemands = (manifest, abi) => {
68
+ if (abi === null)
69
+ return [];
70
+ const carriers = [...abi.parameters.map((parameter) => parameter.value), abi.result];
71
+ if (abi.receiver !== null)
72
+ carriers.push(abi.receiver);
73
+ return carriers.flatMap((carrier) => {
74
+ const boundary = nativeBoundaryDemand(carrier);
75
+ return boundary ? [physicalTypeDemand(manifest, carrier), boundary] : [physicalTypeDemand(manifest, carrier)];
76
+ });
77
+ };
78
+ /**
79
+ * The demands this module derives itself: the ones whose fact is a single
80
+ * field of the operation. The property families and the runtime-helper
81
+ * families each live in their own module because their key spellings are
82
+ * refinements of a carrier (`iterator(next):get:false`,
83
+ * `protocol:spread:dictionary(string->record)`) that the manifest's tables
84
+ * spell the same way, and that vocabulary is one subject per module.
85
+ */
86
+ const ownDemandsOf = (operation, ctx) => {
87
+ switch (operation.kind) {
88
+ case 'merge-live-arm-rebuild': {
89
+ const recipe = operation.nativeTransport;
90
+ if (!recipe)
91
+ return [];
92
+ if (!nativeMergeTransportMatches(operation, ctx.conversions))
93
+ return [
94
+ {
95
+ key: 'runtime-helper:merge-live-arm-rebuild:native-transport',
96
+ verdict: 'missing',
97
+ detail: 'native merge transport disagrees with its live arms or conversion nodes'
98
+ }
99
+ ];
100
+ return [
101
+ ...recipe.arms.map((arm) => ({ key: `conversion:${arm.conversion}` })),
102
+ ...(recipe.absence ? [{ key: `conversion:${recipe.absence}` }] : [])
103
+ ];
104
+ }
105
+ case 'convert':
106
+ // The node the instruction cites decides the pair; a `never` node here
107
+ // is one lowering minted deliberately (`convertOrDrift`) so the printer's
108
+ // own path could still try, and certification refuses it by name.
109
+ return [{ key: `conversion:${operation.conversionUse}` }];
110
+ case 'call':
111
+ case 'construct': {
112
+ const demands = [{ key: 'call-abi:generic' }];
113
+ if (operation.kind === 'call' && operation.objectValueConversions) {
114
+ const semantic = ctx.semanticOperationOf(operation.lineage);
115
+ const expected = objectValueConversionInputsOf(semantic?.family === 'invocation' ? semantic.intrinsicMutation : undefined, operation.arguments, ctx.deriver);
116
+ if (operation.argumentsAreSpread || !objectValueConversionsMatch(expected, operation.objectValueConversions, ctx.conversions))
117
+ demands.push({
118
+ key: 'call-abi:object-value-conversions',
119
+ verdict: 'missing',
120
+ detail: 'Object value conversions do not match the authenticated field sources'
121
+ });
122
+ for (const value of operation.objectValueConversions)
123
+ demands.push({ key: `conversion:${value.conversion}` });
124
+ }
125
+ if (operation.kind === 'call' && operation.fixedDataDefinition) {
126
+ const recipe = operation.fixedDataDefinition;
127
+ const target = operation.arguments[0]?.representation;
128
+ const descriptor = operation.arguments[2]?.representation;
129
+ const semantic = ctx.semanticOperationOf(operation.lineage);
130
+ const key = semantic?.operands.find((operand) => operand.role === 'argument' && operand.ordinal === 1);
131
+ const node = ctx.conversions.nodeById(recipe.conversion);
132
+ const native = node?.capability.kind === 'identity' ||
133
+ ((node?.capability.kind === 'atom' || node?.capability.kind === 'static') &&
134
+ node.capability.materializer.nativeFieldProtocol === 'unused');
135
+ if (!target ||
136
+ !descriptor ||
137
+ operation.argumentsAreSpread ||
138
+ operation.arguments.length !== 3 ||
139
+ recipe.target !== representationKey(target) ||
140
+ recipe.descriptor !== representationKey(descriptor) ||
141
+ !operation.result ||
142
+ representationKey(operation.result.representation) !== recipe.target ||
143
+ semantic?.family !== 'invocation' ||
144
+ semantic.intrinsicMutation !== 'object-define-property' ||
145
+ key?.source.kind !== 'constant' ||
146
+ key.source.literal !== 'string' ||
147
+ key.source.text !== recipe.field.key ||
148
+ (recipe.nativeFieldProtocol === 'unused' && (!semantic.intrinsicDataDefinition || !native))) {
149
+ demands.push({
150
+ key: 'call-abi:fixed-data-definition',
151
+ verdict: 'missing',
152
+ detail: 'fixed data definition does not match its authenticated call'
153
+ });
154
+ }
155
+ if (node !== null &&
156
+ (representationKey(node.source) !== representationKey(recipe.value.value) ||
157
+ representationKey(node.target) !== representationKey(recipe.held))) {
158
+ demands.push({
159
+ key: `conversion:${recipe.conversion}`,
160
+ verdict: 'missing',
161
+ detail: 'fixed data definition conversion disagrees with its field'
162
+ });
163
+ }
164
+ else
165
+ demands.push({ key: `conversion:${recipe.conversion}` });
166
+ }
167
+ const callee = operation.callee.representation;
168
+ if (callee.kind === 'dynamic')
169
+ demands.push({ key: 'call-abi:dynamic' });
170
+ // A plugin host's own spelling table is consulted only for a host
171
+ // carrier; core constructors keep `native: null` and render from the
172
+ // target's own table, so asking the plugin set about them would refuse
173
+ // a complete implementation (`preflight/host-invocation.ts`).
174
+ if (callee.kind === 'native-handle' && callee.native !== null) {
175
+ demands.push({ key: `host-invocation:${operation.kind === 'call' ? `${callee.native}.call` : callee.native}` });
176
+ }
177
+ return demands;
178
+ }
179
+ case 'allocate-callable':
180
+ case 'allocate-constructor':
181
+ // Each captured slot crosses a body boundary in its own ownership; the
182
+ // capture path transports the ownerships the manifest lists and no other.
183
+ return operation.captures.map((capture) => ({ key: `capture:${captureCapabilityOf(capture.representation)}` }));
184
+ case 'binding-read':
185
+ return ctx.externalBindings.has(operation.declaration) ? [{ key: 'native-boundary:external-binding' }] : [];
186
+ case 'get': {
187
+ if (operation.absentClassArms !== undefined) {
188
+ const key = ctx.definitionOf(operation.key.value);
189
+ if (!absentClassArmsHold(operation, key?.kind === 'constant' && key.literal === 'string' ? key.text : null, ctx.classes, ctx.reflection))
190
+ return [
191
+ {
192
+ key: 'property-access:union:get:absent-class-arm',
193
+ verdict: 'missing',
194
+ detail: 'an absent class arm is declared on its family or its class holds a dynamic protocol'
195
+ }
196
+ ];
197
+ }
198
+ if (operation.nativeFieldOwnerRead) {
199
+ const key = ctx.definitionOf(operation.key.value);
200
+ if (!nativeFieldOwnerReadMatches(operation, key?.kind === 'constant' && key.literal === 'string' ? key.text : null, ctx.classes, ctx.conversions, ctx.reflection))
201
+ return [
202
+ {
203
+ key: 'runtime-helper:native-field-owner-read',
204
+ verdict: 'missing',
205
+ detail: 'native field-owner read disagrees with its layout, exposure or conversions'
206
+ }
207
+ ];
208
+ return [
209
+ ...(operation.nativeFieldOwnerRead.arms.length > 0
210
+ ? [{ key: 'runtime-helper:computation:instanceof:class-ref:constructor-family' }]
211
+ : []),
212
+ ...[operation.nativeFieldOwnerRead.missing, ...operation.nativeFieldOwnerRead.arms.map((arm) => arm.conversion)].map((id) => ({
213
+ key: `conversion:${id}`
214
+ }))
215
+ ];
216
+ }
217
+ const recipe = operation.typedComputedRead;
218
+ if (recipe === undefined)
219
+ return [];
220
+ const recipeKey = 'property-access:record:get:typed-computed-read';
221
+ const demands = [];
222
+ if (recipe.receiver !== representationKey(operation.receiver.representation) ||
223
+ recipe.result !== representationKey(operation.result.representation) ||
224
+ (recipe.receiverBounded !== undefined && recipe.receiverBounded.carrier !== representationKey(operation.key.representation)) ||
225
+ recipe.arms.length === 0) {
226
+ demands.push({
227
+ key: recipeKey,
228
+ verdict: 'missing',
229
+ detail: 'the sealed computed-read recipe does not match the get operation carriers'
230
+ });
231
+ }
232
+ if (recipe.receiverBounded !== undefined) {
233
+ const node = ctx.conversions.nodeById(recipe.receiverBounded.missing);
234
+ const key = `conversion:${recipe.receiverBounded.missing}`;
235
+ if (node !== null && (node.source.kind !== 'undefined' || representationKey(node.target) !== recipe.result))
236
+ demands.push({ key, verdict: 'missing', detail: 'the numeric computed-read absence conversion does not match its result' });
237
+ else
238
+ demands.push({ key });
239
+ }
240
+ for (const arm of recipe.arms) {
241
+ const key = `conversion:${arm.conversion}`;
242
+ const node = ctx.conversions.nodeById(arm.conversion);
243
+ if (node !== null &&
244
+ (representationKey(node.source) !== representationKey(arm.source) ||
245
+ representationKey(node.target) !== representationKey(operation.result.representation))) {
246
+ demands.push({
247
+ key,
248
+ verdict: 'missing',
249
+ detail: `the sealed conversion for field "${arm.key}" does not match the computed-read recipe`
250
+ });
251
+ }
252
+ else {
253
+ // The conversion census remains the authority for existence and
254
+ // capability. The emitter receives only this authenticated node id.
255
+ demands.push({ key });
256
+ }
257
+ }
258
+ return demands;
259
+ }
260
+ case 'set': {
261
+ // The write twin of the sealed read recipe above, and validated the same
262
+ // way: a demand is raised ONLY when the certificate has gone stale
263
+ // against the operation it rides on. A well-formed one asks for nothing
264
+ // new -- the emitter renders it as ordinary constant-key stores, whose
265
+ // storage the receiver's own `:set:` claims already cover.
266
+ const recipe = operation.typedComputedWrite;
267
+ if (recipe === undefined)
268
+ return [];
269
+ if (recipe.receiver === representationKey(operation.receiver.representation) && recipe.keys.length > 0)
270
+ return [];
271
+ return [
272
+ {
273
+ key: `property-access:${operation.receiver.representation.kind}:set:typed-computed-write`,
274
+ verdict: 'missing',
275
+ detail: 'the sealed computed-write recipe does not match the set operation receiver'
276
+ }
277
+ ];
278
+ }
279
+ case 'throw':
280
+ return [{ key: 'abrupt-edge:throw' }];
281
+ case 'await':
282
+ case 'yield':
283
+ return [{ key: 'abrupt-edge:suspend' }];
284
+ case 'return':
285
+ // A return that leaves a try region runs its finally clause on the way
286
+ // out; a body with no region completes the ordinary way and asks nothing.
287
+ return ctx.body.tryRegions.length > 0 ? [{ key: 'abrupt-edge:return' }] : [];
288
+ default:
289
+ return [];
290
+ }
291
+ };
292
+ /** Every capability one operation needs, in the manifest's namespace. */
293
+ export const capabilityKeysOf = (operation, ctx) => [
294
+ ...ownDemandsOf(operation, ctx),
295
+ ...propertyAccessKeysOf(operation, ctx),
296
+ ...runtimeHelperKeysOf(operation, ctx)
297
+ ];
298
+ const registered = (installed, family, discriminator) => installed
299
+ ? { verdict: 'installed', reason: '' }
300
+ : { verdict: 'missing', reason: `the target manifest registers no ${family} "${discriminator}"` };
301
+ /**
302
+ * The one lookup. Each family names the manifest set (or the census) that
303
+ * answers it; a family with no set is decided by the demand itself, and a
304
+ * demand in such a family that arrives undecided is refused -- fail closed,
305
+ * never silently installed.
306
+ */
307
+ const verdictOf = (demand, ctx) => {
308
+ if (demand.verdict !== undefined)
309
+ return { verdict: demand.verdict, reason: demand.detail ?? '' };
310
+ const family = familyOf(demand.key);
311
+ const discriminator = discriminatorOf(demand.key);
312
+ const manifest = ctx.manifest;
313
+ switch (family) {
314
+ case 'physical-cpp-type':
315
+ case 'host-member-call':
316
+ return { verdict: 'missing', reason: `${demand.key} was demanded without a verdict` };
317
+ case 'call-abi':
318
+ return registered(discriminator === 'generic' ? manifest.hasGenericCallPath : manifest.hasDynamicCallPath, family, discriminator);
319
+ case 'host-invocation':
320
+ return registered((manifest.hostInvocations?.has(discriminator) ||
321
+ manifest.hostConstructors?.has(discriminator) ||
322
+ manifest.hostMembers?.has(discriminator)) ??
323
+ false, family, discriminator);
324
+ case 'property-access':
325
+ return registered(manifest.propertyRecipes.has(discriminator), family, discriminator);
326
+ case 'capture':
327
+ return registered(manifest.captureOwnershipSupport.has(discriminator), family, discriminator);
328
+ case 'conversion': {
329
+ const node = ctx.conversions.nodeById(discriminator);
330
+ if (node === null)
331
+ return { verdict: 'missing', reason: `no conversion node was minted for ${discriminator}` };
332
+ return node.capability.kind === 'never'
333
+ ? { verdict: 'unsupported', reason: node.capability.reason }
334
+ : { verdict: 'installed', reason: '' };
335
+ }
336
+ case 'native-boundary':
337
+ return discriminator === 'external-binding'
338
+ ? registered(manifest.supportsExternalBindings ?? false, family, discriminator)
339
+ : registered(manifest.nativeProtocols.has(discriminator), family, discriminator);
340
+ case 'runtime-helper':
341
+ if (manifest.runtimeHelpers.has(discriminator))
342
+ return { verdict: 'installed', reason: '' };
343
+ if (manifest.unsupportedRuntimeHelpers.has(discriminator)) {
344
+ return { verdict: 'unsupported', reason: `the target declares runtime helper "${discriminator}" unsupported` };
345
+ }
346
+ return registered(false, family, discriminator);
347
+ case 'abrupt-edge':
348
+ return registered(manifest.abruptEdgeHandlers.has(discriminator), family, discriminator);
349
+ }
350
+ };
351
+ const contextFor = (input, body) => {
352
+ const definitions = new Map();
353
+ for (const blockId of body.blockOrder) {
354
+ const block = body.blocks.get(blockId);
355
+ if (!block)
356
+ continue;
357
+ for (const operation of allOperationsOf(block)) {
358
+ const result = resultOfIrOperation(operation);
359
+ if (result)
360
+ definitions.set(result.id, operation);
361
+ }
362
+ }
363
+ return {
364
+ ...input,
365
+ body,
366
+ definitionOf: (value) => definitions.get(value) ?? null,
367
+ semanticOperationOf: (lineage) => input.graph.operations.get(operationOfResult(lineage)) ?? null,
368
+ isDead: (lineage) => input.deadTypeofGuards.isDeadOperation(operationOfResult(lineage))
369
+ };
370
+ };
371
+ /**
372
+ * What one body's environment must transport, as `capture:` demands.
373
+ *
374
+ * Read off `IrBody.facts` -- `ir/captures.ts`'s whole-program answer, sealed
375
+ * onto the body after the shake -- and NOT off `allocate-callable`'s
376
+ * `captures` operand, which no producer fills. Until this existed the capture
377
+ * question was certified by nobody and decided only at print time, so a
378
+ * carrier the target could not transport certified clean and then emitted
379
+ * nothing: precisely the certify/print disagreement 2.3's gate exists to
380
+ * catch.
381
+ *
382
+ * The rules mirror `targets/cpp/captures.ts`'s admission exactly, because
383
+ * they are the same rule asked at two stages rather than two rules:
384
+ * a declaration with no placement is not a capture the environment carries; a
385
+ * BOXED one is shared by aliasing, so copying its `std::shared_ptr` handle is
386
+ * safe whatever its own carrier's ownership tier says, and only a carrier the
387
+ * plan never selected (or left `unresolved`) is refusable there; everything
388
+ * else, receiver included, must name an ownership the manifest publishes.
389
+ */
390
+ const captureDemandsOf = (body, placements, boxed) => {
391
+ const facts = body.facts;
392
+ if (!facts)
393
+ return [];
394
+ const demands = [];
395
+ for (const declaration of facts.capturedDeclarations) {
396
+ const placement = placements.get(declaration);
397
+ if (!placement)
398
+ continue;
399
+ const representation = placement.representation ?? null;
400
+ if (boxed.has(declaration)) {
401
+ if (representation === null || representation.kind === 'unresolved')
402
+ demands.push({ key: `capture:${captureCapabilityOf(representation)}` });
403
+ continue;
404
+ }
405
+ demands.push({ key: `capture:${captureCapabilityOf(representation)}` });
406
+ }
407
+ if (facts.capturedReceiver)
408
+ demands.push({ key: `capture:${captureCapabilityOf(facts.capturedReceiver)}` });
409
+ return demands;
410
+ };
411
+ /**
412
+ * Walks every body and decides every demand. One refusal per (owner, key):
413
+ * the same missing recipe demanded at forty sites of one function is one
414
+ * capability the target lacks, not forty, and the row names which.
415
+ */
416
+ export const certifyIr = (input) => {
417
+ const demanded = new Set();
418
+ const refusals = [];
419
+ const refused = new Set();
420
+ const decide = (owner, demand, ctx) => {
421
+ demanded.add(demand.key);
422
+ const decision = verdictOf(demand, ctx);
423
+ if (decision.verdict === 'installed')
424
+ return;
425
+ const dedupe = `${owner}|${demand.key}`;
426
+ if (refused.has(dedupe))
427
+ return;
428
+ refused.add(dedupe);
429
+ refusals.push({ stage: 'certify', key: demand.key, owner, reason: decision.reason || `${demand.key} is ${decision.verdict}` });
430
+ };
431
+ for (const row of input.slotDrift) {
432
+ // No body context is needed: the row already carries the pair and the
433
+ // census's own reason, and there is no lookup left to do.
434
+ demanded.add(`conversion:${row.source}->${row.slot}`);
435
+ const dedupe = `${row.operation}|conversion:${row.source}->${row.slot}`;
436
+ if (refused.has(dedupe))
437
+ continue;
438
+ refused.add(dedupe);
439
+ refusals.push({ stage: 'certify', key: `conversion:${row.source}->${row.slot}`, owner: String(row.operation), reason: row.reason });
440
+ }
441
+ // The whole-program boxed set: a declaration belongs to exactly one physical
442
+ // frame, so the union of every body's own set is the answer every frame
443
+ // touching the cell shares -- the same union `CaptureIndex.isBoxed` takes.
444
+ const boxed = new Set();
445
+ for (const body of input.bodies.values())
446
+ for (const declaration of body.facts?.boxed ?? [])
447
+ boxed.add(declaration);
448
+ for (const body of input.bodies.values()) {
449
+ const ctx = contextFor(input, body);
450
+ const owner = String(body.sourceOwner);
451
+ for (const demand of captureDemandsOf(body, input.placements, boxed))
452
+ decide(owner, demand, ctx);
453
+ for (const demand of abiDemands(input.manifest, body.abi))
454
+ decide(owner, demand, ctx);
455
+ for (const demand of abiDemands(input.manifest, body.construct))
456
+ decide(owner, demand, ctx);
457
+ // Every SSA value's carrier must be spellable, and a `native-handle` among
458
+ // them must name an authenticated protocol -- the two facts preflight read
459
+ // off each published result, read here off the body's own value index.
460
+ for (const representation of body.values.values()) {
461
+ decide(owner, physicalTypeDemand(input.manifest, representation), ctx);
462
+ const boundary = nativeBoundaryDemand(representation);
463
+ if (boundary)
464
+ decide(owner, boundary, ctx);
465
+ }
466
+ for (const blockId of body.blockOrder) {
467
+ const block = body.blocks.get(blockId);
468
+ if (!block)
469
+ continue;
470
+ for (const operation of allOperationsOf(block)) {
471
+ for (const demand of capabilityKeysOf(operation, ctx))
472
+ decide(owner, demand, ctx);
473
+ }
474
+ }
475
+ }
476
+ return Object.freeze({
477
+ certified: refusals.length === 0 && input.blocked.length === 0,
478
+ refusals: Object.freeze(refusals),
479
+ demanded: Object.freeze([...demanded].sort())
480
+ });
481
+ };
@@ -0,0 +1,26 @@
1
+ import type { DeclarationId } from '../identity/ids.js';
2
+ import type { IrBody } from './model.js';
3
+ /**
4
+ * The classes the program evaluates exactly once.
5
+ *
6
+ * A class declaration is an `allocate-constructor` operation, and every
7
+ * evaluation of it mints a fresh `gea::NativeClassMethodState` -- the
8
+ * prototype object, the method identities, the `instanceof` chain -- which is
9
+ * why every instance carries a `gea_method_state` handle to the evaluation
10
+ * that constructed it: two evaluations of one declaration are two classes,
11
+ * and their instances must not answer for each other.
12
+ *
13
+ * When the declaration is evaluated ONCE there is only one such state for the
14
+ * whole program, and a handle per instance says nothing the class itself
15
+ * could not say. `records.ts` then states it once, as a `static` member of
16
+ * the struct, and the construct function fills it in. On
17
+ * `bench/comparison/fixtures/binary_trees.ts` that is eight bytes off every
18
+ * one of a million nodes.
19
+ *
20
+ * "Once" is the operation sitting in a region body -- a module body or a
21
+ * static block, which the language runs a single time -- outside any cyclic
22
+ * block, at the declaration's only allocation site. A class declared inside a
23
+ * function, or inside a top-level loop, is evaluated per call or per
24
+ * iteration and keeps its per-instance handle.
25
+ */
26
+ export declare const singleEvaluationClassesOf: (bodies: readonly IrBody[]) => ReadonlySet<DeclarationId>;
@@ -0,0 +1,50 @@
1
+ import { isRegionId } from '../identity/ids.js';
2
+ import { cyclicBlocksOf } from './dominance.js';
3
+ /**
4
+ * The classes the program evaluates exactly once.
5
+ *
6
+ * A class declaration is an `allocate-constructor` operation, and every
7
+ * evaluation of it mints a fresh `gea::NativeClassMethodState` -- the
8
+ * prototype object, the method identities, the `instanceof` chain -- which is
9
+ * why every instance carries a `gea_method_state` handle to the evaluation
10
+ * that constructed it: two evaluations of one declaration are two classes,
11
+ * and their instances must not answer for each other.
12
+ *
13
+ * When the declaration is evaluated ONCE there is only one such state for the
14
+ * whole program, and a handle per instance says nothing the class itself
15
+ * could not say. `records.ts` then states it once, as a `static` member of
16
+ * the struct, and the construct function fills it in. On
17
+ * `bench/comparison/fixtures/binary_trees.ts` that is eight bytes off every
18
+ * one of a million nodes.
19
+ *
20
+ * "Once" is the operation sitting in a region body -- a module body or a
21
+ * static block, which the language runs a single time -- outside any cyclic
22
+ * block, at the declaration's only allocation site. A class declared inside a
23
+ * function, or inside a top-level loop, is evaluated per call or per
24
+ * iteration and keeps its per-instance handle.
25
+ */
26
+ export const singleEvaluationClassesOf = (bodies) => {
27
+ const once = new Set();
28
+ const repeated = new Set();
29
+ for (const body of bodies) {
30
+ const region = isRegionId(body.sourceOwner);
31
+ const cyclic = region ? cyclicBlocksOf(body) : null;
32
+ for (const [blockId, block] of body.blocks) {
33
+ for (const operation of block.operations) {
34
+ if (operation.kind !== 'allocate-constructor')
35
+ continue;
36
+ const { declaration } = operation;
37
+ // A second allocation site -- a physical variant of the same body, or
38
+ // a declaration lowered twice -- is a second evaluation as far as this
39
+ // census can tell, so it fails closed.
40
+ if (!region || cyclic.has(blockId) || once.has(declaration))
41
+ repeated.add(declaration);
42
+ else
43
+ once.add(declaration);
44
+ }
45
+ }
46
+ }
47
+ for (const declaration of repeated)
48
+ once.delete(declaration);
49
+ return once;
50
+ };
@@ -0,0 +1,60 @@
1
+ import type { DeclarationId } from '../identity/ids.js';
2
+ import type { ClassLayout } from '../projection/classes.js';
3
+ import { type Representation } from '../representation/model.js';
4
+ import type { IrBody } from './model.js';
5
+ /**
6
+ * Every `ClassName.KEY = value` site the whole program's lowered bodies
7
+ * contain, folded into one table keyed by (class declaration, key).
8
+ *
9
+ * Walked over the IR, not the semantic graph: whether a receiver's carrier
10
+ * really is `constructor-family`, and which class(es) it names, is a
11
+ * representation-plan answer, and a lowered `IrOperand` already carries it
12
+ * (`operation.receiver.representation`) -- re-deriving that from the semantic
13
+ * graph would risk a second opinion that could disagree with the one the plan
14
+ * actually selected.
15
+ *
16
+ * This lives in `ir/` rather than in the C++ target, which is where it was
17
+ * first written, because two unrelated consumers need the same answer and the
18
+ * fact itself is an IR fact. The target adds the mangled C++ storage name it
19
+ * renders through; the reflection census asks only whether the slot exists and
20
+ * what carrier it holds. Had the census stayed in the target, the census would
21
+ * have had to re-derive it -- exactly the two-authorities drift the original
22
+ * comment warns about.
23
+ *
24
+ * A computed key, or a key no `constant` operation in the SAME body accounts
25
+ * for, is skipped rather than guessed at: nothing downstream can declare
26
+ * storage for a name it cannot read back off the body's own operations. A
27
+ * static METHOD or ACCESSOR key is skipped because each already has a callable
28
+ * home. Declared static fields are claimed from the store their class-lifecycle
29
+ * event lowers: that store carries the initializer's selected representation
30
+ * and runs in the enclosing region's source order, so the census needs no
31
+ * second opinion about either the field's type or its initial value.
32
+ *
33
+ * Two writes to the same (declaration,key) whose VALUE representations
34
+ * disagree are refused together (`conflicts`) rather than one silently
35
+ * overwriting the storage the other implied: a consumer that later widened one
36
+ * writer's value into the other's carrier would be inventing a conversion this
37
+ * census never proved sound. `conflicts` names each such pair as
38
+ * `"<declaration>.<key>"`; the caller decides what a non-empty list means.
39
+ */
40
+ export interface ClassStaticFieldSlots {
41
+ readonly slots: ReadonlyMap<DeclarationId, ReadonlyMap<string, Representation>>;
42
+ readonly conflicts: readonly string[];
43
+ }
44
+ /**
45
+ * Which class of a `constructor-family`'s members owns `key`'s static storage.
46
+ *
47
+ * The one selection rule, so the census and every later lookup name the same
48
+ * class for the same receiver. A key no static member declares is the
49
+ * assignment-only idiom and belongs to the first member that could hold it. A
50
+ * declared static FIELD has the same storage requirement, since its
51
+ * class-lifecycle event has already become an ordinary `set` at the exact
52
+ * evaluation point. Methods and accessors remain callable members and must not
53
+ * acquire a second storage location.
54
+ */
55
+ export declare const staticFieldOwnerOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, members: readonly DeclarationId[], key: string) => DeclarationId | undefined;
56
+ /** The class one class's static storage lives in: itself, or the generic root whose layouts it is one of. */
57
+ export declare const staticStorageOwnerOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => DeclarationId;
58
+ /** The carrier `ClassName.KEY` is stored in, or null when the census proved none. */
59
+ export declare const staticFieldSlotOf: (census: ClassStaticFieldSlots, classes: ReadonlyMap<DeclarationId, ClassLayout>, members: readonly DeclarationId[], key: string) => Representation | null;
60
+ export declare const censusClassStaticFieldSlots: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>) => ClassStaticFieldSlots;