@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,269 @@
1
+ import { ownershipOf } from '../../representation/model.js';
2
+ import { currentCppRuntimeCapabilities } from './manifest.js';
3
+ import { cppTypeOf } from './types.js';
4
+ /**
5
+ * Which functions capture, and whether each capture is safe to transport.
6
+ *
7
+ * The walk itself -- which declaration each body reads or writes whose cell
8
+ * some OTHER frame owns, the transitive closure over allocation edges, and
9
+ * which of those cells must be boxed -- is `ir/captures.ts`'s
10
+ * `computeCaptureFacts`/`publishCaptureFacts`, run once over the whole
11
+ * program and published onto each body as `IrBody.facts`
12
+ * (a program fact; the target is a printer and computes none of its own). This module used to
13
+ * recompute all of that itself from the same bodies and placements at render
14
+ * time; what is left here is the part that is genuinely target-specific: the
15
+ * carrier-ownership ADMISSION decision against `currentCppRuntimeCapabilities`
16
+ * (`isAdmittedOwnership`), and turning an admitted set of declarations into
17
+ * the `CaptureLayout`/`CaptureSlot` shape the emitter reads
18
+ * (`admissionForBody`).
19
+ */
20
+ /**
21
+ * Whether this backend's runtime manifest actually supports the ownership
22
+ * class `representation/model.ts`'s `ownershipOf` names for a carrier -- a target-
23
+ * specific admission decision against `currentCppRuntimeCapabilities`, kept
24
+ * apart from the (representation-only) classification itself.
25
+ */
26
+ const isAdmittedOwnership = (representation) => {
27
+ const ownership = ownershipOf(representation);
28
+ return ownership !== null && currentCppRuntimeCapabilities.captureOwnershipSupport.has(ownership);
29
+ };
30
+ /**
31
+ * One capturing function's environment, or the precise reason it cannot have
32
+ * one -- built from `IrBodyFacts.capturedDeclarations`/`.capturedReceiver`
33
+ * (`ir/captures.ts`'s transitive closure over allocation edges, published
34
+ * once onto the body) plus the whole-program `boxed` fact.
35
+ *
36
+ * `boxed` alone decides the aliasing question: it is exactly the union of
37
+ * "reassigned somewhere in the program", "holds the very closure capturing
38
+ * it" and "captured before any owning-frame write dominates the allocation"
39
+ * (`ir/captures.ts`'s `computeCaptureFacts`), so a declaration this loop
40
+ * finds NOT boxed can be none of those three -- there is no separate
41
+ * reassigned/self-reference branch to fall through to below the boxed one.
42
+ */
43
+ const admissionForBody = (captured, receiverUse, placements, boxed) => {
44
+ const slots = [];
45
+ let receiver = null;
46
+ let refusal = null;
47
+ for (const declaration of captured) {
48
+ const placement = placements.get(declaration);
49
+ if (!placement)
50
+ continue;
51
+ if (refusal)
52
+ continue; // Already refused; the first reason found is the one reported.
53
+ if (boxed.has(declaration)) {
54
+ // Shared by aliasing, not by copying: `ir/captures.ts` has already
55
+ // decided (whole-program) that this exact declaration is reassigned
56
+ // after some closure captures it, or holds the very closure capturing
57
+ // it, or is captured before an owning write dominates the allocation,
58
+ // and that a plain value copy would therefore be wrong -- see
59
+ // `IrBodyFacts.boxed`. What this slot carries is a `std::shared_ptr`
60
+ // handle to the one heap cell every frame touching the declaration
61
+ // aliases, and copying a handle is always safe regardless of what the
62
+ // declaration's own representation's ownership tier says.
63
+ if (!placement.representation || placement.representation.kind === 'unresolved') {
64
+ refusal = `${declaration} is captured but the representation plan selected no carrier for it`;
65
+ continue;
66
+ }
67
+ slots.push({ declaration, representation: placement.representation, boxed: true });
68
+ continue;
69
+ }
70
+ if (!placement.representation) {
71
+ refusal = `${declaration} is captured but the representation plan selected no carrier for it`;
72
+ continue;
73
+ }
74
+ if (!isAdmittedOwnership(placement.representation)) {
75
+ const ownership = ownershipOf(placement.representation);
76
+ refusal = ownership
77
+ ? `${declaration} is captured but carries "${placement.representation.kind}" with ${ownership} ownership, which this backend's capture support does not admit`
78
+ : `${declaration} is captured but carries "${placement.representation.kind}", which has no ownership this backend can prove a copy stays safe under`;
79
+ continue;
80
+ }
81
+ slots.push({ declaration, representation: placement.representation, boxed: false });
82
+ }
83
+ // A body with no receiver of its own that nonetheless needs one either
84
+ // reads `this` directly (the `lower-operands.ts` capture fallback: an
85
+ // ordinary method's `this` read inside a nested arrow, lowered as a
86
+ // capture of the enclosing frame's receiver) or merely relays it -- it
87
+ // allocates some nested closure that reads `this` several frames deeper,
88
+ // without ever naming `this` itself. `receiverUse` already carries
89
+ // whichever of those is true, propagated by `ir/captures.ts`'s `transitiveCaptures` exactly
90
+ // the way `captured` above propagates an ordinary declaration outward
91
+ // through every relay frame; a body that owns its receiver contributes
92
+ // `null` to that propagation regardless of what its own operations name,
93
+ // which is why this check does not need to repeat `declaresOwnReceiver`.
94
+ if (!refusal && receiverUse !== null) {
95
+ if (!isAdmittedOwnership(receiverUse)) {
96
+ const ownership = ownershipOf(receiverUse);
97
+ refusal = ownership
98
+ ? `the enclosing method's receiver is captured but carries ${ownership} ownership, which this backend's capture support does not admit`
99
+ : `the enclosing method's receiver is captured but carries "${receiverUse.kind}", which has no ownership this backend can prove a copy stays safe under`;
100
+ }
101
+ else {
102
+ receiver = receiverUse;
103
+ }
104
+ }
105
+ if (refusal)
106
+ return { kind: 'refused', reason: refusal };
107
+ if (slots.length === 0 && receiver === null)
108
+ return { kind: 'none' };
109
+ const layout = { slots, receiver };
110
+ return { kind: 'ok', layout };
111
+ };
112
+ /**
113
+ * Every capturing function's environment, computed once for the whole
114
+ * translation unit.
115
+ *
116
+ * The walk that used to live here -- which declaration each body reads or
117
+ * writes whose cell some other frame owns, the transitive closure over
118
+ * allocation edges, which cells are reassigned/self-referential/captured
119
+ * before their owning write, and which of those must therefore be boxed --
120
+ * is now `ir/captures.ts`'s `computeCaptureFacts`, run once over the whole
121
+ * program and published onto each body as `IrBody.facts`
122
+ * (a program fact; the target is a printer and computes none of its own). This function reads those
123
+ * facts back off the bodies it is handed instead of recomputing them: it
124
+ * only reunites the whole-program `boxed`/`requiresEarlyBox` sets (published
125
+ * per OWNING body, per `IrBodyFacts.boxed`'s doc comment) and turns each
126
+ * capturing body's own `capturedDeclarations`/`capturedReceiver` into the
127
+ * `CaptureAdmission` the emitter reads.
128
+ *
129
+ * Only a function that is actually allocated as a value (`allocate-callable`
130
+ * somewhere in the program names it -- `IrBodyFacts.allocatedAsValue`) gets
131
+ * an entry: a method's own body can read a cell owned by an enclosing frame
132
+ * in principle, but a method is never itself wrapped in a `CallableObject`
133
+ * with an environment slot to populate -- it is called directly, by name --
134
+ * so there is nowhere for such a capture to be transported *from*. That case
135
+ * has no admission here and falls through to `bindingReference`'s
136
+ * pre-existing "capture path... not installed" refusal, which is the
137
+ * correct, honest answer for it today.
138
+ *
139
+ * ...with one exception, and it is an exception because the transport EXISTS
140
+ * for it: a record's ACCESSOR body. `get current() { return n + 1 }` written
141
+ * inside a function reads that function's local, and the object the accessor
142
+ * is reached through is allocated in that very frame -- so the object can
143
+ * carry the environment, one `gea::PackedEnvironment` member per capturing
144
+ * half (`cppRecordAccessorEnvironmentName`), populated at the allocation and
145
+ * handed back at every call. `capturingAccessors` names those bodies;
146
+ * admitting one that captures NOTHING would add an environment formal no
147
+ * caller supplies, so the capture set is what qualifies it, not the fact that
148
+ * it is an accessor.
149
+ */
150
+ export const buildCaptureIndex = (bodies, placements, capturingAccessors = new Set()) => {
151
+ const boxedDeclarations = new Set();
152
+ const requiresEarlyBoxDeclarations = new Set();
153
+ const capturedDeclarations = new Set();
154
+ const bodyBySourceOwner = new Map();
155
+ for (const body of bodies) {
156
+ bodyBySourceOwner.set(body.sourceOwner, body);
157
+ for (const declaration of body.facts?.boxed ?? [])
158
+ boxedDeclarations.add(declaration);
159
+ for (const declaration of body.facts?.requiresEarlyBox ?? [])
160
+ requiresEarlyBoxDeclarations.add(declaration);
161
+ for (const declaration of body.facts?.capturedDeclarations ?? [])
162
+ capturedDeclarations.add(declaration);
163
+ }
164
+ const admissions = new Map();
165
+ for (const body of bodies) {
166
+ const facts = body.facts;
167
+ if (!facts)
168
+ continue;
169
+ const accessorCarriesEnvironment = !facts.allocatedAsValue && capturingAccessors.has(body.sourceOwner) && facts.capturedDeclarations.length > 0;
170
+ if (!facts.allocatedAsValue && !accessorCarriesEnvironment)
171
+ continue;
172
+ admissions.set(body.sourceOwner, admissionForBody(facts.capturedDeclarations, facts.capturedReceiver, placements, boxedDeclarations));
173
+ }
174
+ return {
175
+ of: (owner) => admissions.get(owner) ?? { kind: 'none' },
176
+ isBoxed: (declaration) => boxedDeclarations.has(declaration),
177
+ isCaptured: (declaration) => capturedDeclarations.has(declaration),
178
+ requiresEarlyBox: (declaration) => requiresEarlyBoxDeclarations.has(declaration),
179
+ readsReceiver: (owner) => bodyBySourceOwner.get(owner)?.facts?.readsReceiver ?? false
180
+ };
181
+ };
182
+ /**
183
+ * Module-level function cells whose call can be spelled by NAME.
184
+ *
185
+ * `function makeAdder(base) {...}` becomes a cell holding a `CallableObject`,
186
+ * and every call to it -- from any body in the unit -- goes through that
187
+ * carrier's function pointer. For a callable whose identity is a runtime fact
188
+ * that indirection is the whole point; for a `function` declaration nothing
189
+ * ever reassigns it is pure loss, and it is the expensive kind: an indirect
190
+ * call is not inlinable, so the body stays opaque and every optimization that
191
+ * would have followed it -- constant propagation into it, and the
192
+ * devirtualization of a closure it RETURNS -- is lost with it. `closure`'s
193
+ * hot loop is two such calls and nothing else.
194
+ *
195
+ * Written exactly once is the whole condition, and it is the same arithmetic
196
+ * `buildCaptureIndex` uses for a reassignment: a declaration the program ever
197
+ * writes again has more than one `binding-write`, because the initializer and
198
+ * every later assignment lower to the same operation. A cell written once with
199
+ * a callable that captures nothing therefore holds that one body forever, and
200
+ * naming it is not an optimization the program could observe -- the carrier is
201
+ * still built wherever anything stores one.
202
+ *
203
+ * Deliberately NOT extended to a captured closure: its body reads state out of
204
+ * the environment pointer, which only the carrier has.
205
+ */
206
+ export const buildDirectCallableIndex = (bodies, captures, placements) => {
207
+ const allocated = new Map();
208
+ const writeCounts = new Map();
209
+ const writtenCallable = new Map();
210
+ const writtenCarriers = new Map();
211
+ for (const body of bodies) {
212
+ for (const block of body.blocks.values()) {
213
+ for (const operation of block.operations) {
214
+ if (operation.kind !== 'allocate-callable')
215
+ continue;
216
+ if (captures.of(operation.functionId).kind !== 'none')
217
+ continue;
218
+ allocated.set(operation.result.id, operation.functionId);
219
+ }
220
+ }
221
+ }
222
+ for (const body of bodies) {
223
+ for (const block of body.blocks.values()) {
224
+ for (const operation of block.operations) {
225
+ if (operation.kind !== 'binding-write')
226
+ continue;
227
+ writeCounts.set(operation.declaration, (writeCounts.get(operation.declaration) ?? 0) + 1);
228
+ const functionId = allocated.get(operation.value.value);
229
+ if (functionId !== undefined) {
230
+ writtenCallable.set(operation.declaration, functionId);
231
+ writtenCarriers.set(operation.declaration, operation.value.representation);
232
+ }
233
+ }
234
+ }
235
+ }
236
+ const direct = new Map();
237
+ for (const [declaration, functionId] of writtenCallable) {
238
+ if (writeCounts.get(declaration) !== 1)
239
+ continue;
240
+ // The cell and the function it holds can disagree about the CONVENTION
241
+ // even when the language calls them the same function: `const mergePath:
242
+ // (...paths: string[]) => string = (base?, sub?, ...rest) => ...` (hono's
243
+ // `utils/url.ts`) declares one rest parameter at position 0 and holds a
244
+ // body taking two optionals and its own rest at position 2. A call site
245
+ // packs its arguments the way the CELL says, so naming the body directly
246
+ // would hand a one-argument call to a three-parameter definition.
247
+ //
248
+ // The carrier is where the two conventions are reconciled -- storing the
249
+ // body in the cell adapts it (`gea_runtime.h`'s `spreadRestOverLeading`)
250
+ // -- so a disagreeing pair keeps the indirection it needs rather than
251
+ // being refused or, worse, called through the wrong signature.
252
+ const cell = placements.get(declaration)?.representation;
253
+ const held = writtenCarriers.get(declaration);
254
+ if (cell && held && cppTypeOf(cell) !== cppTypeOf(held))
255
+ continue;
256
+ direct.set(declaration, functionId);
257
+ }
258
+ return direct;
259
+ };
260
+ // The move pipeline that used to live here -- `buildDyingArgumentIndex`,
261
+ // `ownedDyingValuesOf`, `ownedFormalInputsOf` -- is `ir/transfer.ts` now. It
262
+ // reasons only about the lowered IR, never about how this target renders
263
+ // anything, so the `IrOperand.transfer` fact
264
+ // step moved it out from beside the printer.
265
+ //
266
+ // `buildRepeatedConstructorIndex` moved the same way, to `ir/program-facts.ts`:
267
+ // whether a construction runs repeatedly is a question about the lowered IR's
268
+ // own control flow and call graph, not about C++ text, so it belongs beside
269
+ // the rest of that module's whole-program indices rather than here.
@@ -0,0 +1,313 @@
1
+ import type { DeclarationId, FunctionId, IrValueId } from '../../identity/ids.js';
2
+ import type { GetOperation, IrBody, IrOperand } from '../../ir/model.js';
3
+ import type { CaptureIndex, EmitContext } from './emit-context.js';
4
+ import type { ClassField, ClassLayout, ClassMethod } from '../../projection/classes.js';
5
+ import { classFamilyOverridesOf } from '../../projection/dispatch.js';
6
+ export { classFamilyOverridesOf };
7
+ import { classMemberOf, classStaticMemberOf, type ClassMemberSite } from '../../projection/fields.js';
8
+ export { classMemberOf, classStaticMemberOf, type ClassMemberSite };
9
+ import { type RecordField, type Representation } from '../../representation/model.js';
10
+ import { type ConversionSite } from './emit-narrowing.js';
11
+ /**
12
+ * Reading a `ClassLayout` the way the language reads a class: down the
13
+ * inheritance chain, and with a base's own initialization kept the base's.
14
+ *
15
+ * Both functions here exist because a derived class is not a self-contained
16
+ * description of its instances. `ClassLayout` states only what a class declares
17
+ * itself (`projection/classes.ts`), which is the honest thing for it to state,
18
+ * and it names its base -- so anything that needs the *whole* object has to
19
+ * walk. Doing that walk in one place is what keeps a member lookup and a
20
+ * construction from disagreeing about which class owns what.
21
+ */
22
+ /**
23
+ * The statements one class's own field initializers perform.
24
+ *
25
+ * Shared between the two places a class's fields are initialized, which are the
26
+ * same event seen from two sides: a base construction runs them itself, and a
27
+ * derived constructor runs them at its `super(...)` -- the language's order,
28
+ * after the base chain has returned and before the next statement of the
29
+ * derived constructor. Writing the sequence once means those two sites cannot
30
+ * drift into initializing a class differently depending on how it was reached.
31
+ *
32
+ * `fields` is the class's *own* declared fields, never a base's: a base
33
+ * initializes its own, and running them again from a derived construction would
34
+ * overwrite whatever the base's constructor body had already stored there.
35
+ */
36
+ export declare const cppFieldInitializerStatements: (site: ConversionSite,
37
+ /**
38
+ * The class whose OWN fields these are -- not `ClassField.declaration`,
39
+ * which names the property declaration's own identity, not the class that
40
+ * declares it. `layout.declaration` at every call site.
41
+ */
42
+ classDeclaration: DeclarationId, fields: readonly ClassField[], receiver: string, storedFieldOf: (field: ClassField) => Pick<RecordField, "value" | "required"> | null) => readonly string[] | string;
43
+ /**
44
+ * A class field whose initializer is an arrow/function-expression literal
45
+ * capturing nothing but (optionally) its own receiver -- the "lazily
46
+ * materialized arrow-function class field" design: almost every real use of
47
+ * such a field is a direct call (`c.json(...)`), never a value read, so
48
+ * building its `CallableObject` -- one heap environment plus one identity --
49
+ * in every construction is waste this field's storage can defer instead.
50
+ *
51
+ * `initializer` is `ClassField.initializer`, the ECMA-262 `[[Initializer]]`
52
+ * thunk (`ClassFieldDefinitionRecord`'s own function, distinct from the arrow
53
+ * literal's body: see `censusLazyArrowFields`'s comment) -- the same FunctionId
54
+ * `cppFieldInitializerStatements` already calls with the receiver today. A
55
+ * qualifying field's storage starts empty (`invoke == nullptr`, the same
56
+ * zero-initialized default a field with NO initializer already gets) and
57
+ * every read -- `emit-properties.ts`'s `lazyMaterializedFieldReadText` -- calls
58
+ * this SAME thunk once, on demand, instead.
59
+ */
60
+ export interface LazyArrowFieldPlan {
61
+ readonly initializer: FunctionId;
62
+ /**
63
+ * The arrow/function-expression literal's OWN body -- the `allocate-callable`
64
+ * target this census finds inside `initializer`'s thunk, and the only
65
+ * FunctionId a materialized instance of this field's `CallableObject` ever
66
+ * runs. A DIRECT call on an unmaterialized field (`emit-callable.ts`'s
67
+ * lazy-field call fusion) invokes this body itself, bypassing `initializer`
68
+ * -- and the `CallableObject`/environment it would otherwise have built --
69
+ * entirely.
70
+ */
71
+ readonly body: FunctionId;
72
+ /**
73
+ * Whether `body`'s own C++ signature takes a leading environment pointer,
74
+ * exactly `translation-unit.ts`'s `thunkOf`'s own `hasEnvironment =
75
+ * admission.kind === 'ok'` -- true even here, where the environment carries
76
+ * nothing but the captured receiver. A direct call supplies `nullptr` for
77
+ * it: `censusLazyArrowFields` admits only a body whose one capture is the
78
+ * receiver, which travels as its own leading argument instead (see
79
+ * `bodyReceiverRepresentation`), so the body never reads the pointer.
80
+ */
81
+ readonly bodyHasEnvironment: boolean;
82
+ /**
83
+ * The receiver `body` expects as a physical argument, or `null` for a body
84
+ * that takes none.
85
+ *
86
+ * An arrow closes over its enclosing `this` LEXICALLY -- it is never the
87
+ * body's own declared receiver, so `body`'s own `CallableAbi.receiver` is
88
+ * always `null` here, the same as any other arrow's. This is instead
89
+ * `captures.of(body).layout.receiver`, the exact representation
90
+ * `translation-unit.ts`'s `thunkOf` reads to populate the captured-receiver
91
+ * environment field it forwards as the thunk's own `gea_this` argument.
92
+ * Kept apart from `body`'s own ABI so a direct call can tell "no receiver
93
+ * travels" from "the receiver travels, just not as part of the semantic
94
+ * ABI" -- the same distinction `EmitContext.directCallReceivers` exists to
95
+ * answer for an interface-typed method value.
96
+ */
97
+ readonly bodyReceiverRepresentation: Representation | null;
98
+ }
99
+ export declare const publishBoxableClasses: (classes: ReadonlyMap<DeclarationId, ClassLayout>, held: ReadonlySet<DeclarationId> | null) => void;
100
+ /** Whether a box may hold an instance of `declaration`; `true` for a compile that published nothing (no census to consult). */
101
+ export declare const classBoxable: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => boolean;
102
+ /** Publishes one compile's whole lazy-arrow-field census. Called once, before any body renders -- mirrors `publishClassStaticFieldStorage`. */
103
+ export declare const publishLazyArrowFieldPlans: (classes: ReadonlyMap<DeclarationId, ClassLayout>, plans: ReadonlyMap<DeclarationId, ReadonlyMap<string, LazyArrowFieldPlan>>) => void;
104
+ /** The lazy-materialization plan for one class field, or `null` when the field keeps today's eager construction. */
105
+ export declare const lazyArrowFieldPlanOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => LazyArrowFieldPlan | null;
106
+ /**
107
+ * Every qualifying field of one class, by key -- what `records.ts`'s dynamic
108
+ * read arm needs (which of THIS struct's fields to materialize before boxing),
109
+ * as opposed to `lazyArrowFieldPlanOf`'s one-field question the constructor
110
+ * and the static read site each ask.
111
+ */
112
+ export declare const lazyArrowFieldPlansForClass: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => ReadonlyMap<string, LazyArrowFieldPlan> | undefined;
113
+ /**
114
+ * The materialize-on-read guard for one lazy arrow field's storage, shared by
115
+ * every reader that observes a qualifying field's CURRENT value rather than
116
+ * only its presence or attributes -- `emit-properties.ts`'s ordinary property
117
+ * `get` (the one choke point every consumer of a field's value, a call's own
118
+ * callee included, already goes through) and `object-protocol.ts`'s
119
+ * `getOwnValue` (the "PRIMITIVE 2" read `Object.values`/`entries`/`assign`/
120
+ * spread/`getOwnPropertyDescriptor` all build on, per that file's own header
121
+ * comment) both read the SAME storage through two different doors. One
122
+ * authority, not two matching implementations that could drift.
123
+ *
124
+ * The receiver is bound once, not repeated: an SSA operand -- or a "known"
125
+ * object view's own receiver text -- may render as a deferred conversion
126
+ * expression, and this reads it twice over (the guard and the materializing
127
+ * store) if it did not bind a local first.
128
+ */
129
+ export declare const lazyMaterializedFieldText: (receiverText: string, accessor: string, key: string, plan: LazyArrowFieldPlan) => string;
130
+ /**
131
+ * Whether a `get` renders through the lazy-arrow-field materializing text --
132
+ * the ONE authority both `emit-properties.ts`'s `emitGet` and the
133
+ * callee-snapshot census below ask, so a field the census calls "lazily
134
+ * materialized" is exactly the field `emitGet` would render as one.
135
+ *
136
+ * `null` for a receiver that is not statically a class instance, a key this
137
+ * compile never gave a static text, or a key naming anything but a
138
+ * lazily-materialized field -- the same three escapes `emitGet`'s own inline
139
+ * check had before it was factored out to here.
140
+ */
141
+ export declare const lazyArrowFieldGetPlanOf: (ctx: Pick<EmitContext, "classes" | "staticKeyTexts">, operation: GetOperation) => {
142
+ readonly fieldName: string;
143
+ readonly plan: LazyArrowFieldPlan;
144
+ } | null;
145
+ /**
146
+ * Lazy-arrow-field GET results with exactly one reader in this body, that
147
+ * reader being the very CALL that reads the result as its OWN callee -- the
148
+ * shape `emit-callable.ts`'s `emitLazyArrowFieldCall` fuses into a direct call
149
+ * on the census arrow, with no materialized `CallableObject` built at all.
150
+ *
151
+ * A GET outside this set keeps `lazyMaterializedFieldText`'s ordinary
152
+ * materialize-on-read rendering: a value that is read, passed on, or read by
153
+ * more than one operation has no single call fusion to feed, so its
154
+ * `CallableObject` has to actually exist for whatever else reads it.
155
+ *
156
+ * The three checks mirrored here from `emitLazyArrowFieldCall`'s own early,
157
+ * purely structural bail-outs (a non-function callee kind; a `function`-kind
158
+ * read naming a DIFFERENT function than the census arrow; no published ABI for
159
+ * the arrow's body) are proven once, here, so a GET this set admits is
160
+ * guaranteed to reach that fusion's `try` block. The one refusal left
161
+ * uncensused on purpose is the try block's own CONVERSION refusal -- a generic
162
+ * field's per-call-site result, the one shape a structural check here cannot
163
+ * predict -- which the fusion answers itself by materializing the snapshot
164
+ * rather than declining outright. A GET this census admits must therefore
165
+ * NEVER be read by `emitGet` as anything but the raw, unmaterialized snapshot:
166
+ * the fusion is the only consumer, and it never re-reads the field once it has
167
+ * the snapshot in hand.
168
+ */
169
+ export declare const lazyCalleeReadsOf: (ctx: EmitContext, body: IrBody) => ReadonlySet<IrValueId>;
170
+ /**
171
+ * Which class fields qualify for lazy materialization, computed once for the
172
+ * whole translation unit.
173
+ *
174
+ * A field's initializer thunk (`ClassField.initializer`) is not itself
175
+ * allocated as a value -- nothing ever wraps THE THUNK in a `CallableObject`,
176
+ * it is simply called once per construction -- so its own capture admission is
177
+ * always `{kind: 'none'}` and asking `captures` about it answers nothing.
178
+ * What must qualify is the closure the thunk's body ALLOCATES: for an arrow
179
+ * field, that thunk's IR is exactly one `allocate-callable` (naming the
180
+ * arrow's own FunctionId) followed by an implicit return of that value (the
181
+ * `[[Initializer]]` "return the evaluation of the initializer expression"
182
+ * shape, `census.ts`'s `isFieldInitializerBody`) -- so this walks each
183
+ * qualifying thunk's body once to find that operation and asks `captures` of
184
+ * ITS `functionId`, the same "walk to the allocate-callable" step
185
+ * `buildDirectCallableIndex` already performs for module-level cells.
186
+ *
187
+ * A field qualifies when that admission is `{kind: 'none'}` (the closure
188
+ * captures nothing, not even `this`) or `{kind: 'ok'}` with an empty slot list
189
+ * (captures only the receiver) -- "nothing else", per the design. A refused
190
+ * admission, or one with any other captured declaration, keeps the field
191
+ * eager: fail closed.
192
+ *
193
+ * A class the whole-program reflection census marks `'full'`
194
+ * (`ir/reflection-demand.ts`) may still read a field's VALUE dynamically,
195
+ * through `records.ts`'s `gea_readOwnField`. That used to disqualify the
196
+ * whole class here, fail closed, because the dispatch method is `const` and
197
+ * has no `Ref` back to its own instance to call the initializer with. It
198
+ * turns out one already exists: `records.ts`'s own accessor dispatch recovers
199
+ * exactly that handle from `this` (`gea::Ref<T>::adopt(const_cast<T*>(this),
200
+ * true)`, `renderFieldDispatcher`'s `selfText`) to call a getter/setter body
201
+ * from the identical `const` method. `records.ts`'s dynamic read arm for a
202
+ * qualifying field now does the same before boxing, so this census no longer
203
+ * needs to ask reflection at all -- correctness for the dynamic path is that
204
+ * function's job now, not a reason to keep a field eager here.
205
+ */
206
+ export declare const censusLazyArrowFields: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>, captures: CaptureIndex) => ReadonlyMap<DeclarationId, ReadonlyMap<string, LazyArrowFieldPlan>>;
207
+ /**
208
+ * The C++ struct a receiver's carrier IS, or `null` for one that is not a
209
+ * struct at all.
210
+ *
211
+ * Reactive storage is a property of the STRUCT, not of the declaration that
212
+ * happens to name it: a store class and the element record of one of its
213
+ * arrays are both reactive structs, and only the first has a `DeclarationId`.
214
+ * Asking this one question in one place is what lets the read site, the
215
+ * dependency census and the JSX binding all name the same member.
216
+ */
217
+ export declare const structNameOfReceiver: (representation: Representation) => string | null;
218
+ /**
219
+ * The struct that DECLARES field `key` on a receiver of this carrier.
220
+ *
221
+ * Not the same question as "what struct IS this receiver", and the difference
222
+ * is load-bearing for every reactive question: `celled` and `revisions` are
223
+ * keyed by the DECLARING struct (`records.ts` builds them per struct from that
224
+ * struct's OWN fields), because an inherited field's storage lives on the base
225
+ * that declares it. `structNameOfReceiver` alone names the receiver's own
226
+ * class, so asking it for an inherited field silently finds nothing -- which
227
+ * reads as "not reactive" rather than as an error.
228
+ *
229
+ * `null` for a class-ref key naming no FIELD: an accessor and a method share
230
+ * no reactive table, so there is nothing for a caller to look up.
231
+ */
232
+ export declare const fieldDeclaringStructOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, representation: Representation, key: string) => string | null;
233
+ /**
234
+ * Whether this receiver names `super` -- the one member access the language
235
+ * binds statically (13.3.7), so dispatching it through the object would
236
+ * re-enter the override that wrote it.
237
+ *
238
+ * `ir/lower.ts` mints the `receiver` operation at the BASE's class for a
239
+ * `super` access, so a receiver-defined value carrying any class other than
240
+ * this frame's own receiver's class is a super access and nothing else.
241
+ *
242
+ * One authority for what was four independent spellings of the same
243
+ * predicate: the virtual-setter dispatch in `emit-properties.ts`,
244
+ * `directClassMethodBody`, `classMemberText`'s own `isSuperAccess`, and
245
+ * `virtualCalleeClaim`'s exclusion of `super.m()` from virtual dispatch.
246
+ * Three of the four relied on an enclosing guard having already established
247
+ * the receiver's kind; this one is total, so a fifth caller cannot get it
248
+ * subtly wrong by being reached from somewhere the others never were.
249
+ */
250
+ export declare const dispatchesStatically: (ctx: EmitContext, receiver: IrOperand) => boolean;
251
+ /**
252
+ * Every method key a class family reaches, own or inherited, deduplicated
253
+ * along the inheritance chain: `method` is the body when the key binds without
254
+ * dispatch, and `null` when a subclass overrides the key, so the answer is a
255
+ * virtual call this walk has no body to name.
256
+ *
257
+ * The overridden keys are YIELDED rather than skipped because "which keys does
258
+ * this family reach" and "which of them bind to a body" are one walk, and a
259
+ * consumer that must know a key was reached-but-excluded would otherwise have
260
+ * to repeat it. That consumer is real: a computed read over an OPEN key domain
261
+ * builds one arm per bound key and cannot tell an unreachable key from one it
262
+ * dropped here -- and answering the second as though it were the first
263
+ * compiled a correct `dog[k]()` into a guaranteed abort.
264
+ *
265
+ * `classMethodValueReceiverClaim` and `computedClassPrototypeMethodText` ask
266
+ * two different questions of this one family -- "does ANY member convert to
267
+ * this callable type" and "which members DO" -- over an identical walk that
268
+ * each spelled out for itself.
269
+ */
270
+ export declare function reachableClassMethodsOf(classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId): Generator<{
271
+ readonly key: string;
272
+ readonly method: (ClassMethod & {
273
+ readonly callable: FunctionId;
274
+ }) | null;
275
+ }>;
276
+ /**
277
+ * Real C++ storage for one "constructor expando" static field: `ClassName.
278
+ * FIELD = value;` written at module scope, after the class declaration --
279
+ * the idiom three.js's own JS source spells throughout (`Object3D.
280
+ * DEFAULT_UP = new Vector3(0, 1, 0);` right after `class Object3D {...}`,
281
+ * never a `static` member inside the body). No `class-lifecycle` event and no
282
+ * entry in `ClassLayout.staticFields` ever names one of these: the assignment
283
+ * IS the only declaration a JS-checked program has, so `classStaticMemberOf`
284
+ * genuinely has nothing to walk to for it. `name` is this compilation's own
285
+ * mangled global for the storage; `representation` is the carrier every
286
+ * observed write to it agreed on (see `censusClassStaticFields`,
287
+ * `translation-unit.ts`).
288
+ */
289
+ export interface ClassStaticFieldStorage {
290
+ readonly name: string;
291
+ readonly representation: Representation;
292
+ }
293
+ /** Publishes one compile's whole static-field census. Called once, before any body renders. */
294
+ export declare const publishClassStaticFieldStorage: (classes: ReadonlyMap<DeclarationId, ClassLayout>, storage: ReadonlyMap<DeclarationId, ReadonlyMap<string, ClassStaticFieldStorage>>) => void;
295
+ /** The storage a `constructor-family` receiver's static key resolves to, or `null` when nothing published one for it. */
296
+ export declare const classStaticFieldStorageOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => ClassStaticFieldStorage | null;
297
+ /** Every key the census gave one class storage for -- the finite set a computed read of the constructor dispatches over. */
298
+ export declare const classStaticFieldStorageKeysOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => readonly string[];
299
+ /**
300
+ * The C++ storage table, which is `ir/class-static-fields.ts`'s census with
301
+ * this compilation's mangled global attached to each slot.
302
+ *
303
+ * The walk itself moved to `ir/` when the reflection census turned out to need
304
+ * the same answer: its own comment already warned that re-deriving where a
305
+ * `ClassName.KEY` write lands would risk "a second opinion that could disagree
306
+ * with the one the plan actually selected", and a second consumer asking the
307
+ * question a second way is that risk arriving. What is left here is the only
308
+ * part that was ever a C++ concern -- the NAME the printer renders.
309
+ */
310
+ export declare const censusClassStaticFieldStorage: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>) => {
311
+ readonly storage: ReadonlyMap<DeclarationId, ReadonlyMap<string, ClassStaticFieldStorage>>;
312
+ readonly conflicts: readonly string[];
313
+ };