@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,663 @@
1
+ import { withoutSpecialization } from '../identity/ids.js';
2
+ import { narrowedOperandView } from '../conversion/operand-view.js';
3
+ import { recordIndexForKeyCarrier, representationKey, thrownValueCarrier } from '../representation/model.js';
4
+ import { coercionTargetOf } from '../conversion/nodes.js';
5
+ import { provablyStringPrimitive } from './coercions.js';
6
+ import { operandOf, resultOf } from '../semantics/model/operands.js';
7
+ import { abiOfCallee, calleeRenderingOf, constructAbiOfCallee, deferredCalleeOf, isClosedContiguousTupleRecord, returnPayloadOf } from './callee.js';
8
+ import { classLayoutOfCopy, sharedStaticOwnerOf } from './classes.js';
9
+ import { classMemberOf, classStaticMemberOf, declaredRecordFieldOf, recordAccessorsOfShape, recordLayoutOfShapeId } from './fields.js';
10
+ const slot = (representation, source) => ({ kind: 'slot', representation, source });
11
+ /** ECMA-262 6.1.7's array index: a canonical numeric string below 2^32 - 1. */
12
+ const isArrayIndexKey = (key) => /^(0|[1-9][0-9]*)$/.test(key) && Number(key) < 4294967295;
13
+ const raw = (role) => ({ kind: 'raw', role });
14
+ const coerce = (operation) => ({ kind: 'coerce', operation, representation: coercionTargetOf(operation) });
15
+ /** IsLessThan's four spellings; `==`/`===` are the `equality` form, a different rule (`emit-equality.ts`). */
16
+ const relationalOperators = new Set(['<', '>', '<=', '>=']);
17
+ const unclassified = (reason) => ({ kind: 'unclassified', reason });
18
+ /** The formal a physical argument position fills, with the rest tail unpacked to its element or tuple field. */
19
+ export const callArgumentSlotOf = (abi, callee, position) => {
20
+ if (!abi) {
21
+ if (callee?.kind === 'dynamic')
22
+ return slot(callee, 'dynamic');
23
+ return unclassified(`callee carried as "${callee?.kind ?? 'nothing'}" declares no convention for argument ${position}`);
24
+ }
25
+ if (abi.restFrom !== null && position >= abi.restFrom) {
26
+ const rest = abi.parameters[abi.restFrom]?.value;
27
+ if (!rest)
28
+ return unclassified('a variadic convention declares no parameter at its own rest position');
29
+ if (isClosedContiguousTupleRecord(rest)) {
30
+ const field = rest.fields[position - abi.restFrom];
31
+ return field ? slot(field.value, 'element') : unclassified(`argument ${position} is past the arity of a tuple-shaped rest slot`);
32
+ }
33
+ if (rest.kind === 'array-object')
34
+ return slot(rest.element, 'element');
35
+ return unclassified(`a variadic convention declares a "${rest.kind}" rest slot, which is not an array`);
36
+ }
37
+ const formal = abi.parameters[position];
38
+ // ECMA-262 evaluates every argument and binds only the declared formals;
39
+ // the printer's `receivableArguments` drops the rest the same way.
40
+ return formal ? slot(formal.value, 'formal') : raw('discarded');
41
+ };
42
+ const unwrapBorrowed = (representation) => representation.kind === 'borrowed-ref' ? representation.referent : representation;
43
+ /** The callable a call dispatches through: an optional chain's payload, a borrowed reference's referent. */
44
+ const calleeCarrierOf = (representation) => {
45
+ const held = unwrapBorrowed(representation);
46
+ return held.kind === 'optional' ? unwrapBorrowed(held.payload) : held;
47
+ };
48
+ const numberScalar = { kind: 'scalar', domain: 'number' };
49
+ /**
50
+ * Whether a returned value is a promise the language ADOPTS, rather than a
51
+ * payload the body's own promise settles with.
52
+ *
53
+ * One promise is the obvious case. A tagged union every arm of which is a
54
+ * promise is the same fact expressed over a value whose exact promise is not
55
+ * known statically: whichever arm is live, `return v` still hands a promise
56
+ * back whole. `@hono/node-server`'s `readBodyWithFastPath` produces exactly
57
+ * that -- `request[getRequestCache]()[method]()` indexes a `Request` by a
58
+ * union of `'text' | 'arrayBuffer' | 'blob'`, so the call's carrier is
59
+ * `Promise<string> | Promise<ArrayBuffer> | Promise<Blob>` -- and reading the
60
+ * payload slot for it asked the census to convert a union of promises into a
61
+ * bare `string`, which is promise adoption written backwards and has no
62
+ * recipe because it is not a conversion at all.
63
+ *
64
+ * An empty union is excluded: `every` is vacuously true over no arms, and a
65
+ * union with nothing in it carries no promise to adopt.
66
+ */
67
+ const carriesAPromise = (carrier) => {
68
+ if (!carrier)
69
+ return false;
70
+ if (carrier.kind === 'promise')
71
+ return true;
72
+ return carrier.kind === 'tagged-union' && carrier.arms.length > 0 && carrier.arms.every((arm) => arm.value.kind === 'promise');
73
+ };
74
+ export const createSlotCensus = (input) => {
75
+ const abiOfCaller = (operation) => operation.caller.kind === 'function' ? (input.abis.get(operation.caller.functionId) ?? null) : null;
76
+ // Which bodies are `function*`: a fact of the DECLARATION, carried on the
77
+ // callable's allocation (`generatorFunction`) because the result carrier
78
+ // cannot tell -- `function makeGen() { return g() }` returns the very same
79
+ // `iterator` cursor a `function*` does. `ir/lower.ts` reads the same flag
80
+ // for the same reason.
81
+ const generatorBodies = new Set();
82
+ for (const operation of input.graph.operations.values()) {
83
+ if (operation.family === 'allocation' && operation.callable && operation.generatorFunction === true)
84
+ generatorBodies.add(operation.callable);
85
+ }
86
+ const resultCarrier = (operation, role) => {
87
+ const published = resultOf(operation, role);
88
+ return published ? (input.plan.selected.get(published.id) ?? null) : null;
89
+ };
90
+ const carrierOf = (operation, operand) => {
91
+ const source = operand.source;
92
+ switch (source.kind) {
93
+ case 'result':
94
+ return input.plan.selected.get(source.result) ?? null;
95
+ case 'parameter':
96
+ return abiOfCaller(operation)?.parameters[source.ordinal]?.value ?? null;
97
+ case 'constant':
98
+ return input.deriver.derive(operand.type);
99
+ case 'receiver': {
100
+ const declared = abiOfCaller(operation)?.receiver;
101
+ if (declared)
102
+ return declared;
103
+ return operand.role === 'captured-receiver' || operand.role === 'static-class-receiver' ? input.deriver.derive(operand.type) : null;
104
+ }
105
+ case 'absent':
106
+ return null;
107
+ }
108
+ };
109
+ const setterFormal = (setter, key) => {
110
+ if (setter === null)
111
+ return unclassified(`accessor "${key}" declares only a getter, so writing it has no body to call`);
112
+ const formal = input.abis.get(setter)?.parameters[0]?.value;
113
+ return formal ? slot(formal, 'formal') : unclassified(`the setter of "${key}" has no projected convention to take the value in`);
114
+ };
115
+ /**
116
+ * The index sidecar a store addresses, when the KEY's own domain addresses
117
+ * one.
118
+ *
119
+ * The domain question is not this module's to answer twice:
120
+ * `recordIndexForKeyCarrier` (`representation/model.ts`) is the one authority
121
+ * over which of a layout's disjoint index domains a given key carrier reaches,
122
+ * including the ECMA-262 Number::toString canonicalization that decides
123
+ * whether a constant STRING key ("0", "NaN") addresses a NUMBER index.
124
+ * Asking only "is there exactly one sidecar" let a named key take a sidecar
125
+ * keyed by a domain it cannot address: `lib.es5.d.ts`'s `interface String`
126
+ * has `readonly [index: number]: string`, so hono's `escapedString.isEscaped
127
+ * = true` (`utils/html.ts`'s `raw`, over the `new String(...)` wrapper-object
128
+ * carrier) was given a `string` slot and the census then wanted a
129
+ * `scalar(boolean) -> string` conversion that does not and should not exist.
130
+ * Such a key is an own DYNAMIC property, which the printer's String-object
131
+ * interceptor owns (`emitStringObjectSet`), and it reaches it by this census
132
+ * having no slot for the position rather than by inventing a wrong one.
133
+ *
134
+ * Still held to a single sidecar, so this is strictly a narrowing of the rule
135
+ * it replaces: a layout with several index domains answered `null` before and
136
+ * answers `null` now.
137
+ */
138
+ const indexSlot = (carrier, key, constantKey) => {
139
+ const indexes = carrier.kind === 'record-with-index'
140
+ ? carrier.indexes
141
+ : carrier.kind === 'native-record-ref'
142
+ ? (recordLayoutOfShapeId(input.deriver, carrier.shapeId)?.indexes ?? [])
143
+ : [];
144
+ if (indexes.length !== 1)
145
+ return null;
146
+ return recordIndexForKeyCarrier(indexes, key, constantKey) === null ? null : slot(indexes[0].value, 'element');
147
+ };
148
+ const fieldSlot = (receiver, key) => {
149
+ const carrier = unwrapBorrowed(receiver);
150
+ const field = declaredRecordFieldOf(input.deriver, carrier, key, input.classes);
151
+ if (field)
152
+ return slot(field.value, 'field');
153
+ if (carrier.kind === 'class-ref') {
154
+ const site = classMemberOf(input.classes, carrier.declaration, key);
155
+ if (site?.kind === 'accessor')
156
+ return setterFormal(site.accessor.setter, key);
157
+ return unclassified(`"${key}" is not a field of class ${carrier.declaration} or its bases`);
158
+ }
159
+ if (carrier.kind === 'record' || carrier.kind === 'native-record-ref') {
160
+ const accessor = recordAccessorsOfShape(input.deriver, carrier.shapeId)?.find((entry) => entry.key === key);
161
+ if (accessor)
162
+ return setterFormal(accessor.setter, key);
163
+ }
164
+ // A constant member name is a STRING property key (ECMA-262 6.1.7): it
165
+ // addresses a number-keyed sidecar only through the canonical numeric
166
+ // spelling `recordIndexForKeyCarrier` checks for.
167
+ return (indexSlot(carrier, { kind: 'string' }, key) ??
168
+ unclassified(`"${key}" is not a field of the "${carrier.kind}" layout it is stored into`));
169
+ };
170
+ /** The carrier a `[[Set]]`/`[[DefineOwnProperty]]` store writes, given the receiver's carrier and the key. */
171
+ const storeSlot = (operation, receiver, key) => {
172
+ const carrier = unwrapBorrowed(receiver);
173
+ const constantKey = key?.source.kind === 'constant' ? key.source.text : null;
174
+ switch (carrier.kind) {
175
+ case 'dynamic':
176
+ return slot(carrier, 'dynamic');
177
+ case 'dictionary':
178
+ return slot(carrier.value, 'element');
179
+ case 'array-object': {
180
+ if (constantKey === 'length')
181
+ return raw('compute-operand');
182
+ // A named member on an array is an EXTENSION field (`array.pos = n` on
183
+ // a `NodeArray<T>`), stored in the array's sidecar in the carrier the
184
+ // extension declares -- never an element write, which is what a
185
+ // numeric key is. The printer's `emit-properties.ts` stores through
186
+ // the same `extension` list.
187
+ const extension = constantKey === null ? undefined : carrier.extension?.find((field) => field.key === constantKey);
188
+ if (extension !== undefined)
189
+ return slot(extension.value, 'field');
190
+ if (constantKey !== null && !isArrayIndexKey(constantKey))
191
+ return unclassified(`"${constantKey}" is neither an element index nor an extension field of this array`);
192
+ return slot(carrier.element, 'element');
193
+ }
194
+ case 'typed-array':
195
+ return slot(numberScalar, 'element');
196
+ case 'record':
197
+ case 'record-with-index':
198
+ case 'native-record-ref':
199
+ case 'class-ref':
200
+ if (constantKey !== null)
201
+ return fieldSlot(carrier, constantKey);
202
+ return (indexSlot(carrier, (key ? carrierOf(operation, key) : null) ?? { kind: 'string' }) ??
203
+ unclassified(`a computed key stores into "${carrier.kind}", whose layout is keyed by name`));
204
+ case 'constructor-family': {
205
+ if (constantKey === null)
206
+ return unclassified('a computed key stores into a class constructor');
207
+ // Several members that share ONE static owner are the physical
208
+ // layouts of one generic class (`projection/classes.ts`), which is
209
+ // one constructor object with one set of static cells -- not the
210
+ // several genuinely different classes this refusal is about.
211
+ if (carrier.members.length !== 1 && sharedStaticOwnerOf(input.classes, carrier.members) === null)
212
+ return unclassified('a static store through a constructor family of more than one class');
213
+ const site = classStaticMemberOf(input.classes, carrier.members[0], constantKey);
214
+ if (site?.kind === 'accessor')
215
+ return setterFormal(site.accessor.setter, constantKey);
216
+ if (site?.kind !== 'field')
217
+ return unclassified(`"${constantKey}" is not a static field of class ${carrier.members[0]}`);
218
+ const field = input.classes.get(site.owner)?.staticFields.find((entry) => entry.key === constantKey);
219
+ return field?.representation
220
+ ? slot(field.representation, 'static-field')
221
+ : unclassified(`static field "${constantKey}" has no carrier in its layout`);
222
+ }
223
+ default:
224
+ return unclassified(`no store slot is known for a "${carrier.kind}" receiver`);
225
+ }
226
+ };
227
+ /**
228
+ * A `binary` operator's operand. Same-carrier operands are the operator's
229
+ * own business (the printer spells `+`/`<`/`-` per carrier). Two DIFFERENT
230
+ * carriers are ECMA-262's conversions before the operator, stated here once:
231
+ *
232
+ * - IsLessThan (7.2.13): both operands ToPrimitive; if both are then
233
+ * Strings, compare as strings, else ToNumeric both. "Provably a String"
234
+ * is decided from the carrier (`projection/coercions.ts`): a `string`,
235
+ * or an object whose ToPrimitive can only be its `toString` -- every
236
+ * object this compiler carries except a Date. A union's live arm is a
237
+ * runtime fact, so a union is never provably a String and takes the
238
+ * numeric branch, which is the language's own answer for a value not
239
+ * known to be a String.
240
+ * - `+` (13.15.3): if either ToPrimitive is a String, concatenate (both
241
+ * ToString), else ToNumeric both. A `+` the checker already typed as
242
+ * `string` is the printer's own concatenation fold (`templateText`),
243
+ * and a `+` with a `dynamic` side needs the runtime's ToPrimitive on
244
+ * that side (`mixedDynamicPlusText`, `gea::dynamicAdd`) -- both raw.
245
+ * - every other arithmetic, bitwise and shift operator: ToNumeric both,
246
+ * unconditionally (`10 - "3"` is `7`; the language never asks whether a
247
+ * side is a String). A BigInt beside a Number is a `never` coercion, the
248
+ * TypeError the language throws, refused by name at certification.
249
+ */
250
+ const binarySlot = (operation, operand) => {
251
+ const left = operandOf(operation, 'left');
252
+ const right = operandOf(operation, 'right');
253
+ const leftCarrier = left ? carrierOf(operation, left) : null;
254
+ const rightCarrier = right ? carrierOf(operation, right) : null;
255
+ if (!leftCarrier || !rightCarrier || representationKey(leftCarrier) === representationKey(rightCarrier))
256
+ return raw('compute-operand');
257
+ if (operand.role !== 'left' && operand.role !== 'right')
258
+ return raw('compute-operand');
259
+ const leftString = provablyStringPrimitive(leftCarrier, input.deriver);
260
+ const rightString = provablyStringPrimitive(rightCarrier, input.deriver);
261
+ if (relationalOperators.has(operation.operator))
262
+ return leftString && rightString ? coerce('ToString') : coerce('ToNumber');
263
+ if (operation.operator === '+') {
264
+ if (resultCarrier(operation, 'value')?.kind === 'string')
265
+ return raw('compute-operand');
266
+ // A tagged union's live arm is as unknown here as a dynamic operand's
267
+ // tag: `a + b` with `a: string | number` is concatenation or addition
268
+ // by a fact only the runtime has (13.15.3), which `emit.ts`'s
269
+ // `gea::dynamicAdd` path decides -- coercing the union to a number
270
+ // first turned `'a' + 3` into `NaN`.
271
+ if (leftCarrier.kind === 'dynamic' ||
272
+ rightCarrier.kind === 'dynamic' ||
273
+ leftCarrier.kind === 'tagged-union' ||
274
+ rightCarrier.kind === 'tagged-union')
275
+ return raw('compute-operand');
276
+ return leftString || rightString ? coerce('ToString') : coerce('ToNumber');
277
+ }
278
+ return coerce('ToNumber');
279
+ };
280
+ const invocationSlot = (operation, operand) => {
281
+ const role = operand.role;
282
+ if (role === 'callee')
283
+ return raw('callee');
284
+ if (role === 'short-circuit-guard')
285
+ return raw('condition');
286
+ if (role === 'new-target')
287
+ return raw('provenance');
288
+ if (role === 'specifier')
289
+ return raw('constant-text');
290
+ if (operation.commonJsRequire)
291
+ return raw('provenance');
292
+ const calleeOperand = operandOf(operation, 'callee');
293
+ const held = calleeOperand ? carrierOf(operation, calleeOperand) : null;
294
+ const callee = held ? calleeCarrierOf(held) : null;
295
+ const deferred = deferredCalleeOf(input, operation);
296
+ if (deferred) {
297
+ if (role === 'receiver')
298
+ return raw('provenance');
299
+ if (role === 'spread-argument')
300
+ return raw('spread-range');
301
+ if (role !== 'argument')
302
+ return unclassified(`role "${role}" on a Function.prototype.${deferred.member} call`);
303
+ // A BOXED frame has no formals to convert against: the emitter renders
304
+ // `Value::callWithReceiver` with a flat `std::vector<Value>` and the
305
+ // callee's own thunk recovers its declared parameters, rest slot
306
+ // included. Converting an argument into `deferred.abi`'s formal here is
307
+ // the second authority `DeferredCallee.frame` exists to remove -- it
308
+ // packed `.call`'s spread trailing arguments into the rest array the
309
+ // thunk then packed AGAIN, and it re-materialized the this-argument in
310
+ // the callee's own receiver carrier, which for a record is a COPY and
311
+ // loses the object the mutation was supposed to reach.
312
+ if (deferred.frame === 'boxed' && deferred.member !== 'bind') {
313
+ if (operand.ordinal === 0)
314
+ return deferred.abi.receiver ? slot(deferred.receiverCarrier, 'dynamic') : raw('discarded');
315
+ if (deferred.member === 'apply')
316
+ return operand.ordinal === 1 ? raw('spread-range') : unclassified('apply takes exactly two arguments');
317
+ return slot(deferred.receiverCarrier, 'dynamic');
318
+ }
319
+ if (operand.ordinal === 0)
320
+ return deferred.abi.receiver ? slot(deferred.abi.receiver, 'receiver') : raw('discarded');
321
+ if (deferred.member === 'apply')
322
+ return operand.ordinal === 1 ? raw('spread-range') : unclassified('apply takes exactly two arguments');
323
+ return callArgumentSlotOf(deferred.abi, null, operand.ordinal - 1);
324
+ }
325
+ if (callee?.kind === 'generic-function-set')
326
+ return role === 'receiver' ? raw('discarded') : raw('dispatch-argument');
327
+ // A host handle invoked or constructed directly (`String(x)`, `new
328
+ // Error(m)`, `new Uint8Array(n)`) is rendered from the host table by the
329
+ // argument's own carrier (`targets/cpp/host/emit-host-invoke.ts`).
330
+ if (callee?.kind === 'native-handle')
331
+ return role === 'receiver' ? raw('discarded') : raw('host-overload');
332
+ // A call the backend spells from a template rather than through a
333
+ // convention (`calleeRenderingOf`): its receiver is the template's own
334
+ // subject and its arguments enter C++ overloads in their own carriers.
335
+ if (operation.internalMethod === 'call' && calleeRenderingOf(input, operation) === 'template') {
336
+ return role === 'receiver' ? raw('receiver') : role === 'spread-argument' ? raw('spread-range') : raw('host-overload');
337
+ }
338
+ const constructs = operation.internalMethod === 'construct' || operation.resultDivergence.kind === 'super-constructor-initialization';
339
+ const abi = callee ? (constructs ? constructAbiOfCallee(callee) : abiOfCallee(callee)) : null;
340
+ if (role === 'receiver') {
341
+ if (abi?.receiver)
342
+ return slot(abi.receiver, 'receiver');
343
+ if (callee?.kind === 'dynamic')
344
+ return slot(callee, 'dynamic');
345
+ return raw('discarded');
346
+ }
347
+ if (role === 'spread-argument')
348
+ return raw('spread-range');
349
+ if (role === 'argument')
350
+ return callArgumentSlotOf(abi, callee, operand.ordinal);
351
+ return unclassified(`role "${role}" on an invocation`);
352
+ };
353
+ const elementSlot = (operation, operand) => {
354
+ const role = operand.role;
355
+ if (role === 'tag')
356
+ return operand.source.kind === 'constant' ? raw('constant-text') : raw('callee');
357
+ if (role === 'prop-key')
358
+ return raw('key');
359
+ if (operation.form !== 'value') {
360
+ return role === 'prop-value' || role === 'child'
361
+ ? raw('host-overload')
362
+ : unclassified(`role "${role}" on a ${operation.form} element`);
363
+ }
364
+ const tagOperand = operandOf(operation, 'tag');
365
+ const tag = tagOperand ? carrierOf(operation, tagOperand) : null;
366
+ const props = tag ? abiOfCallee(tag)?.parameters[0]?.value : undefined;
367
+ if (!props)
368
+ return unclassified('a component element whose tag declares no props parameter');
369
+ if (role === 'child') {
370
+ return operation.childrenKey === null
371
+ ? unclassified('a component element child with no children field in its props layout')
372
+ : fieldSlot(props, operation.childrenKey);
373
+ }
374
+ if (role === 'prop-value') {
375
+ const key = operandOf(operation, 'prop-key', operand.ordinal);
376
+ const name = key?.source.kind === 'constant' ? key.source.text : null;
377
+ return name === null ? unclassified('a component element attribute whose name is not a constant') : fieldSlot(props, name);
378
+ }
379
+ return unclassified(`role "${role}" on a component element`);
380
+ };
381
+ const enteringCarrierOf = (operation, operand) => {
382
+ const carrier = carrierOf(operation, operand);
383
+ if (carrier === null)
384
+ return null;
385
+ if (operation.family === 'class-lifecycle' && operation.event === 'define-field' && operand.role === 'initializer') {
386
+ return abiOfCallee(carrier)?.result ?? null;
387
+ }
388
+ return carrier;
389
+ };
390
+ const census = {
391
+ input,
392
+ carrierOf,
393
+ enteringCarrierOf,
394
+ fieldSlot,
395
+ slotOf: (operation, operand) => {
396
+ for (const hook of input.slotHooks ?? []) {
397
+ const answer = hook(census, operation, operand);
398
+ if (answer)
399
+ return answer;
400
+ }
401
+ return slotOfCore(operation, operand);
402
+ }
403
+ };
404
+ const slotOfCore = (operation, operand) => {
405
+ const role = operand.role;
406
+ const family = operation.family;
407
+ if (operand.source.kind === 'absent')
408
+ return raw('absent');
409
+ switch (operation.family) {
410
+ case 'binding': {
411
+ if (operation.action === 'read')
412
+ return raw('provenance');
413
+ if (role !== 'initializer' && role !== 'value')
414
+ return unclassified(`role "${role}" on a binding ${operation.action}`);
415
+ // A write into a wrapper cell crosses the module boundary its reads are
416
+ // published across (`publish.ts`'s `commonJsBoundaryOf`). The cell's
417
+ // placed carrier is the host declaration's shape -- `(specifier: string)
418
+ // => any` for `require` -- but the store is `gea::commonjs::setBinding`,
419
+ // which takes the boundary's `gea::Value`: `require = (specifier) =>
420
+ // ({ ... })` handed over a typed callable and clang refused the call.
421
+ if (operation.commonJs && (operation.commonJs.global !== 'module' || operation.commonJs.nativeRecord !== true))
422
+ return slot({ kind: 'dynamic', reason: 'commonjs-module-boundary' }, 'cell');
423
+ const cell = input.placements.get(operation.declaration)?.representation ?? null;
424
+ return cell ? slot(cell, 'cell') : unclassified(`binding ${operation.declaration} has no placed cell carrier`);
425
+ }
426
+ case 'computation': {
427
+ const form = operation.form;
428
+ switch (operation.form) {
429
+ case 'assignment': {
430
+ const result = resultCarrier(operation, 'value');
431
+ return result ? slot(result, 'result') : unclassified('an assignment with no result carrier');
432
+ }
433
+ case 'comma': {
434
+ const runtime = operation.operands.filter((entry) => entry.evaluation.kind !== 'provenance');
435
+ if (runtime[runtime.length - 1] !== operand)
436
+ return raw('discarded');
437
+ const result = resultCarrier(operation, 'value');
438
+ return result ? slot(result, 'result') : unclassified('a comma with no result carrier');
439
+ }
440
+ case 'logical':
441
+ case 'conditional': {
442
+ if (role === 'condition')
443
+ return raw('condition');
444
+ const result = resultCarrier(operation, 'value');
445
+ if (!result)
446
+ return unclassified(`a ${operation.form} with no result carrier`);
447
+ return result.kind === 'void' ? raw('discarded') : slot(result, 'phi');
448
+ }
449
+ case 'in':
450
+ return role === 'left' ? raw('key') : role === 'right' ? raw('receiver') : unclassified(`role "${role}" on "in"`);
451
+ case 'unary':
452
+ return operation.operator === 'void' ? raw('discarded') : raw('compute-operand');
453
+ case 'binary':
454
+ return binarySlot(operation, operand);
455
+ case 'update':
456
+ case 'equality':
457
+ case 'typeof':
458
+ case 'instanceof':
459
+ case 'coercion':
460
+ return raw('compute-operand');
461
+ case 'template':
462
+ return role === 'chunk' ? raw('constant-text') : raw('compute-operand');
463
+ default:
464
+ return unclassified(`role "${role}" on a "${form}" computation`);
465
+ }
466
+ }
467
+ case 'control': {
468
+ switch (operation.form) {
469
+ case 'branch':
470
+ case 'loop':
471
+ case 'switch':
472
+ return raw('condition');
473
+ case 'return': {
474
+ const abi = abiOfCaller(operation);
475
+ if (!abi)
476
+ return operation.caller.kind === 'region' ? raw('discarded') : unclassified('a return in a body with no convention');
477
+ // An async body's `return v` SETTLES its promise with `v`, so the
478
+ // slot is the payload -- except when `v` is itself a promise: the
479
+ // language adopts it, and the body hands the promise back whole
480
+ // (a promise of another payload converts promise to promise). The
481
+ // printer's return emitter reconciles on the same two cases.
482
+ if (abi.result.kind === 'promise' && carriesAPromise(carrierOf(operation, operand)))
483
+ return slot(abi.result, 'result');
484
+ // A generator BODY's `return v` fills its cursor's completion
485
+ // channel; an ordinary body whose result happens to be an
486
+ // iterator hands the cursor itself back. Keyed on the body, never
487
+ // on the carrier: the completion slot for a plain `return g()`
488
+ // converted the live cursor into `undefined` -- a static "dead
489
+ // value" recipe the census admits -- and the printer then had no
490
+ // value to return.
491
+ const generatorBody = operation.caller.kind === 'function' && generatorBodies.has(operation.caller.functionId);
492
+ const payload = generatorBody || abi.result.kind === 'promise' ? returnPayloadOf(abi.result) : abi.result;
493
+ return payload.kind === 'void' ? raw('discarded') : slot(payload, 'result');
494
+ }
495
+ case 'throw':
496
+ return slot(thrownValueCarrier, 'thrown');
497
+ case 'await':
498
+ return raw('compute-operand');
499
+ case 'yield': {
500
+ const abi = abiOfCaller(operation);
501
+ const result = abi ? (abi.result.kind === 'promise' ? abi.result.value : abi.result) : null;
502
+ if (result?.kind !== 'iterator')
503
+ return unclassified('a yield in a body whose convention states no cursor');
504
+ return slot(result.element, 'yield');
505
+ }
506
+ default:
507
+ return unclassified(`role "${role}" on a "${operation.form}" control operation`);
508
+ }
509
+ }
510
+ case 'invocation':
511
+ return invocationSlot(operation, operand);
512
+ case 'property': {
513
+ if (role === 'receiver')
514
+ return raw('receiver');
515
+ if (role === 'key')
516
+ return raw('key');
517
+ if (role === 'short-circuit-guard')
518
+ return raw('condition');
519
+ if (role !== 'value')
520
+ return unclassified(`role "${role}" on a property ${operation.internalMethod}`);
521
+ const receiverOperand = operandOf(operation, 'receiver');
522
+ const receiver = receiverOperand ? carrierOf(operation, receiverOperand) : null;
523
+ if (!receiver || !receiverOperand)
524
+ return unclassified('a property store whose receiver has no carrier');
525
+ return storeSlot(operation, narrowedOperandView(receiver, receiverOperand, input.deriver), operandOf(operation, 'key'));
526
+ }
527
+ case 'allocation': {
528
+ if (role === 'spread')
529
+ return raw('spread-range');
530
+ if (role === 'capture')
531
+ return raw('capture');
532
+ if (role === 'raw' || role === 'cooked' || role === 'pattern-source' || role === 'pattern-flags')
533
+ return raw('constant-text');
534
+ if (role !== 'element')
535
+ return unclassified(`role "${role}" on a ${operation.allocated} allocation`);
536
+ const result = resultCarrier(operation, 'value');
537
+ if (!result)
538
+ return unclassified('an array literal with no result carrier');
539
+ const tuple = unwrapBorrowed(result);
540
+ if (tuple.kind === 'record' || tuple.kind === 'native-record-ref')
541
+ return fieldSlot(tuple, String(operand.ordinal));
542
+ if (tuple.kind === 'array-object')
543
+ return slot(tuple.element, 'element');
544
+ if (tuple.kind === 'dynamic')
545
+ return slot(tuple, 'dynamic');
546
+ return unclassified(`an array literal carried as "${tuple.kind}" states no element slot`);
547
+ }
548
+ case 'class-lifecycle': {
549
+ if (role === 'key')
550
+ return raw('key');
551
+ if (role === 'method') {
552
+ const publicFrame = operandOf(operation, 'method-storage');
553
+ return publicFrame ? slot(input.deriver.derive(publicFrame.type), 'field') : raw('method-allocation');
554
+ }
555
+ if (role === 'heritage')
556
+ return raw('heritage');
557
+ if (role === 'static-block' || role === 'field-storage' || role === 'method-storage')
558
+ return raw('provenance');
559
+ if (role !== 'initializer' || operation.event !== 'define-field') {
560
+ return unclassified(`role "${role}" on a class ${operation.event}`);
561
+ }
562
+ const keyOperand = operandOf(operation, 'key');
563
+ const key = keyOperand?.source.kind === 'constant' ? keyOperand.source.text : null;
564
+ if (key === null)
565
+ return unclassified('a class field whose key is not a constant');
566
+ // Lifecycle events are minted per monomorphized copy; the layout is
567
+ // the copy's PHYSICAL class (`projection/classes.ts`'s
568
+ // `classLayoutOfCopy`) -- the root for a class with one layout, its
569
+ // own group's when the generic is instantiated at several.
570
+ const layout = classLayoutOfCopy(input.classes, operation.classDeclaration);
571
+ const root = layout?.declaration ?? withoutSpecialization(operation.classDeclaration);
572
+ if (operation.placement === 'static') {
573
+ const site = classStaticMemberOf(input.classes, root, key);
574
+ const field = site?.kind === 'field' ? input.classes.get(site.owner)?.staticFields.find((entry) => entry.key === key) : undefined;
575
+ return field?.representation
576
+ ? slot(field.representation, 'static-field')
577
+ : unclassified(`static field "${key}" of ${root} has no carrier in its layout`);
578
+ }
579
+ const instance = layout?.instance;
580
+ if (instance?.kind !== 'class-ref')
581
+ return unclassified(`class ${root} has no instance carrier to place field "${key}" in`);
582
+ return fieldSlot(instance, key);
583
+ }
584
+ case 'destructuring': {
585
+ switch (operation.form) {
586
+ case 'object-source': {
587
+ const result = resultCarrier(operation, 'value');
588
+ return result ? slot(result, 'alias') : unclassified('an object-source step with no result carrier');
589
+ }
590
+ case 'object-pattern':
591
+ return role === 'base' ? raw('receiver') : role === 'key' ? raw('key') : unclassified(`role "${role}" on an object pattern`);
592
+ case 'array-pattern': {
593
+ if (role === 'iterator')
594
+ return raw('iterator-record');
595
+ if (role !== 'base')
596
+ return unclassified(`role "${role}" on an array pattern`);
597
+ const record = resultCarrier(operation, 'iterator-record');
598
+ return record ? slot(record, 'alias') : unclassified('an array-pattern source step with no iterator-record carrier');
599
+ }
600
+ case 'array-pattern-close':
601
+ return raw('iterator-record');
602
+ case 'rest-element':
603
+ return role === 'base'
604
+ ? raw('receiver')
605
+ : role === 'excluded-key'
606
+ ? raw('key')
607
+ : unclassified(`role "${role}" on a rest element`);
608
+ case 'default-value': {
609
+ const result = resultCarrier(operation, 'value');
610
+ return result ? slot(result, 'phi') : unclassified('a default-value step with no result carrier');
611
+ }
612
+ }
613
+ return unclassified(`role "${role}" on a destructuring step`);
614
+ }
615
+ case 'element':
616
+ return elementSlot(operation, operand);
617
+ case 'protocol': {
618
+ if (operation.protocol === 'spread') {
619
+ return role === 'receiver'
620
+ ? raw('receiver')
621
+ : role === 'source'
622
+ ? raw('spread-source')
623
+ : unclassified(`role "${role}" on a spread step`);
624
+ }
625
+ switch (operation.step) {
626
+ case 'get-method':
627
+ return role === 'target' ? raw('receiver') : role === 'key' ? raw('key') : unclassified(`role "${role}" on get-method`);
628
+ case 'get-iterator':
629
+ return role === 'target'
630
+ ? raw('receiver')
631
+ : role === 'method'
632
+ ? raw('protocol-method')
633
+ : unclassified(`role "${role}" on get-iterator`);
634
+ case 'next': {
635
+ if (role === 'iterator-record')
636
+ return raw('iterator-record');
637
+ if (role !== 'value')
638
+ return unclassified(`role "${role}" on a next step`);
639
+ const recordOperand = operandOf(operation, 'iterator-record');
640
+ const record = recordOperand ? carrierOf(operation, recordOperand) : null;
641
+ return record?.kind === 'iterator'
642
+ ? slot(record.resume, 'resume')
643
+ : unclassified('a resume value sent to a cursor that states no resume carrier');
644
+ }
645
+ case 'close':
646
+ case 'return':
647
+ case 'throw':
648
+ return role === 'iterator-record' ? raw('iterator-record') : unclassified(`role "${role}" on a ${operation.step} step`);
649
+ }
650
+ return unclassified(`role "${role}" on a protocol step`);
651
+ }
652
+ case 'reference':
653
+ case 'boundary':
654
+ case 'declaration-lifecycle':
655
+ return raw('provenance');
656
+ case 'dynamic-language':
657
+ return operand.source.kind === 'constant' ? raw('constant-text') : raw('compute-operand');
658
+ default:
659
+ return unclassified(`role "${role}" on a "${family}" operation`);
660
+ }
661
+ };
662
+ return census;
663
+ };