@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,1484 @@
1
+ import { cppDynamicArgumentHostParameters } from '../host/dynamic-argument-members.js';
2
+ import { cppNativeProtocolsOf } from '../host/native-protocols.js';
3
+ import { coreHostMembers } from '../host/host-members.js';
4
+ import { hasPropertyHelperClaims } from '../emit-in.js';
5
+ import { dynamicIteratorHelperClaims, enumerateHelperClaims, staticTupleIteratorHelperClaims } from '../emit-iterator.js';
6
+ import { cppInstanceofHelperKeys } from '../emit-instanceof.js';
7
+ import { completeTemplateObjectCapabilityKey } from '../../../representation/template-object.js';
8
+ /**
9
+ * The capabilities of the backend as it stands.
10
+ *
11
+ * Each row here corresponds to something `emit.ts` actually renders, and to
12
+ * nothing else. The order matters and is not a formality: a capability claimed
13
+ * before it is implemented turns a preflight pass into a crash during
14
+ * rendering, which is the exact failure preflight exists to prevent. So a row
15
+ * is added only after the emitter refuses to throw for it.
16
+ *
17
+ * A recipe key names the carrier as well as the operation, because the two
18
+ * together are what decides whether a recipe exists. `native-record-ref` field
19
+ * access is a `->` member load and needs no runtime at all; the same `[[Get]]`
20
+ * on an ordinary object needs machinery nothing has written. Claiming
21
+ * `get:false` without the carrier would assert both.
22
+ */
23
+ export const currentCppRuntimeCapabilities = Object.freeze({
24
+ // `emit.ts` renders every call through the callable carrier's own invoke
25
+ // pointer, which is the generic path: it needs no proof about the target, and
26
+ // the ABI it calls through is the one the plan published. A direct call to a
27
+ // known symbol would be a devirtualization on top of this, not a substitute
28
+ // for it, so it stays unclaimed until it is written.
29
+ hasGenericCallPath: true,
30
+ // `gea::Value::callAsFunction` (gea_runtime.h): a thunk recorded at
31
+ // `Value::box`, where the payload's signature is still a C++ type, adapting
32
+ // boxed arguments to the callable's own declared parameters and boxing its
33
+ // result back. Arity is the language's -- an omitted argument is
34
+ // `undefined`, an extra one is dropped -- and a payload that is not a
35
+ // callable, or whose parameter types the header states no rule for, refuses
36
+ // by name instead of answering. `emit-callable.ts`'s `dynamicCallText`
37
+ // renders it.
38
+ hasDynamicCallPath: true,
39
+ propertyRecipes: new Set([
40
+ // GetV throws for either nullish receiver after the computed key has
41
+ // evaluated. emitGet installs that path without object materialization.
42
+ 'undefined:get:false',
43
+ 'undefined:get:true',
44
+ 'null:get:false',
45
+ 'null:get:true',
46
+ 'void:get:false',
47
+ 'void:get:true',
48
+ // A receiver carried as an optional, accessed on a branch that proved it
49
+ // present -- see `unwrapPresentValue` (emit-context.ts) for why the
50
+ // language admits no other kind of access through one, on either the read
51
+ // or the write side. The payload's own recipe still has to be claimed
52
+ // separately; this row only says the dereference is renderable.
53
+ //
54
+ // `emitFieldStoreLines` (emit-properties.ts) unwraps the receiver the
55
+ // identical way `emitGet` already did -- both a constant and a computed
56
+ // key reach the SAME unwrap, so both `:set:false` and `:set:true` are one
57
+ // capability, not two, exactly as the two `:get:*` rows above already are.
58
+ 'optional:get:false',
59
+ 'optional:get:true',
60
+ 'optional:set:false',
61
+ 'optional:set:true',
62
+ 'record:get:false',
63
+ 'record:set:false',
64
+ 'record:define-own-property:false',
65
+ // `g.next()`/`.return()`/`.throw()` on an iterator, carried as the cursor
66
+ // `iterator(T)` (`representation/model.ts`). Each member is claimed BY
67
+ // NAME, the way `function-value-dispatch(call)` is:
68
+ // `preflight/property-access.ts` refines the receiver key with the
69
+ // constant member it reads, so these three rows certify exactly those
70
+ // three members and nothing else -- a flat `iterator:get:false` would
71
+ // have certified `[Symbol.iterator]` and any other member too.
72
+ // `emit-carrier-members.ts`'s `iteratorMemberText` defers the read and
73
+ // `prototype/emit-prototype-iterator.ts` renders the fused call --
74
+ // `return`/`throw` further refined there, by the receiver's own
75
+ // `source` tag, to a real generator's cursor: the four fixed-storage
76
+ // walks publish this same carrier but their actual
77
+ // `%ArrayIteratorPrototype%`-and-siblings define neither method
78
+ // (ECMA-262 27.1.2), so a claim here is necessary but not sufficient for
79
+ // them, exactly like `record-with-index`'s per-site refinement below.
80
+ 'iterator(next):get:false',
81
+ 'iterator(return):get:false',
82
+ 'iterator(throw):get:false',
83
+ 'native-record-ref:get:false',
84
+ // `emit-properties.ts`'s `emitGet` fallback (the same one `:get:false`
85
+ // above claims) resolves its key through `staticKeyTextOf`, which reads
86
+ // `ctx.constantTexts` and does not consult `operation.keyIsComputed` at
87
+ // all: `mesh['position']` and `mesh.position` reach the identical struct
88
+ // member load once the key is a literal, because the census already
89
+ // records both spellings as the same `constant` key operand. So a
90
+ // computed get needs nothing this backend has not already written --
91
+ // unlike `record-with-index`, whose computed form would have to route
92
+ // into a dictionary sidecar this codebase has twice refused to build
93
+ // (see that recipe's own comment below), a `native-record-ref` receiver
94
+ // has no such second path to reopen: field access is field access
95
+ // either way. A key that is genuinely dynamic (no recorded constant
96
+ // text) still fails closed exactly as it already does for `:get:false`
97
+ // -- `staticKeyTextOf` throws its own "dynamic-property-key" refusal at
98
+ // emission, unconditionally on `computed` -- so claiming this recipe
99
+ // widens what preflight admits without widening what the emitter
100
+ // actually renders.
101
+ 'native-record-ref:get:true',
102
+ 'native-record-ref:set:false',
103
+ 'native-record-ref:define-own-property:false',
104
+ // `record-with-index`'s named half is exactly a `record` field -- a fixed
105
+ // struct member with its own static offset -- so a constant key that
106
+ // spells one of the carrier's own fields renders through the identical
107
+ // struct-access fallback `record`/`native-record-ref` use above (see
108
+ // `emit-properties.ts`'s `recordWithIndexFieldText`).
109
+ // `preflight/property-access.ts`'s `recordWithIndexKeyNamesAField` checks
110
+ // the match per site, because this flat claim cannot see which key a
111
+ // given operation reads.
112
+ 'record-with-index:get:false',
113
+ // A constant key that names NO field routes into the index-signature
114
+ // sidecar instead -- `emit-carrier-members.ts`'s
115
+ // `recordIndexSidecarReadText`/`recordIndexSidecarTableOf`, over the
116
+ // identical `gea::Dictionary`/`gea::NumericDictionary` machinery
117
+ // `dictionary:get:true` below already renders, reached through one more
118
+ // member access. Claimed under its own, deliberately DIFFERENT receiver
119
+ // spelling (`property-access.ts`'s `buildPropertyAccessObligation` gives
120
+ // this exact case the refined key `record-with-index(unmatched-key)`)
121
+ // rather than folding it into the bare `record-with-index:get:false`
122
+ // claim above: the two are different capabilities that happen to share a
123
+ // carrier and a `computed` flag, and only THIS one needs
124
+ // `recordWithIndexKeyNamesAField` to have already said "no" before the
125
+ // claim is honest -- the bare claim above is asked (and honoured) only
126
+ // when it says "yes".
127
+ 'record-with-index(unmatched-key):get:false',
128
+ // A COMPUTED key, by contrast, never spells a specific field by
129
+ // construction -- the checker itself answers a computed numeric/string
130
+ // read of an interface with both named members and an index signature
131
+ // (`ArrayLike<number>`, `{ length: number; [i: number]: number }`)
132
+ // through the index signature, never through a named field, because it
133
+ // cannot know at compile time which field a runtime key names. So every
134
+ // computed `get` on a `record-with-index` receiver routes into its
135
+ // `gea_dynamic` sidecar (`records.ts`'s `renderStructDefinition` gives
136
+ // every such struct one), rendered by `emit-carrier-members.ts`'s
137
+ // `recordIndexSidecarReadText` -- the same `gea::Dictionary`/
138
+ // `gea::NumericDictionary` machinery `dictionary:get:true` below already
139
+ // renders, reached through one more member access. Unconditional,
140
+ // unlike `record-with-index:get:false` above: `record-with-index`'s
141
+ // every instance *by construction* has an index signature (that is what
142
+ // distinguishes it from a plain `record`), so there is no per-site
143
+ // "does this one actually have a sidecar" question to ask.
144
+ 'record-with-index:get:true',
145
+ // The store side of the identical split, over the identical machinery,
146
+ // now that `emit-properties.ts`'s `recordOwnershipOf`/
147
+ // `declaredFieldRepresentationOf` (`records.ts`) spell the struct half
148
+ // and `emit-carrier-members.ts`'s `emitRecordIndexSidecarStore` spells
149
+ // the sidecar half for BOTH a constant key naming no field and a computed
150
+ // key (which, exactly as the read side's comment above states, can never
151
+ // name one). `property-access.ts` raises one bare `record-with-index:
152
+ // set:*` obligation per site regardless of which half a key resolves to
153
+ // -- unlike `get`, `buildPropertyAccessObligation` gives `set` no
154
+ // "(unmatched-key)" refinement, because a STORE has no second, narrower
155
+ // capability to tell apart: whichever half a key's own `recordOwnershipOf`
156
+ // and `emitRecordIndexSidecarStore` route it to, the site is answered.
157
+ // So claiming this honestly requires both halves to already render,
158
+ // which is why this sits after the struct-member write (above, shared
159
+ // with `record`/`native-record-ref`) and the sidecar store both exist.
160
+ 'record-with-index:set:false',
161
+ 'record-with-index:set:true',
162
+ // Object-literal definitions use a fully permissive data descriptor.
163
+ // The named half reaches the ordinary struct store, while an unmatched or
164
+ // computed key reaches `emitRecordIndexSidecarStore`; both preserve the
165
+ // typed index value rather than widening the record to `gea::Value`.
166
+ 'record-with-index:define-own-property:false',
167
+ 'record-with-index:define-own-property:true',
168
+ // `native-record-ref` names a shape by id rather than carrying its own
169
+ // layout (model.ts); the identical `ArrayLike<number>`-shaped interface
170
+ // derives this carrier instead of `record-with-index` when it reaches
171
+ // representation selection through a *named* declaration
172
+ // (`representation/derive.ts`'s `declared` case) rather than an inline
173
+ // object type. A computed `get` needs the identical sidecar read, once
174
+ // the shape it names is resolved (`emit-carrier-members.ts`'s
175
+ // `recordIndexSidecarTableOf`) -- but unlike `record-with-index`, not
176
+ // every `native-record-ref` names a shape with an index signature at all
177
+ // (an ordinary interface has none), so this is NOT claimed
178
+ // unconditionally: `preflight/property-access.ts`'s
179
+ // `nativeRecordRefHasIndexSidecar` checks the named shape per site, the
180
+ // same way `constructorFamilyIsCensused` checks a `constructor-family`
181
+ // receiver's class per site above.
182
+ 'native-record-ref:get:true',
183
+ // A class instance is a struct of its own fields, so a field load and store
184
+ // are the same `->` member access a record uses. Method and accessor keys
185
+ // are deliberately absent: neither is instance storage, and the emitter
186
+ // refuses a key it finds no field for rather than loading a member that
187
+ // does not exist.
188
+ 'class-ref:get:false',
189
+ 'class-ref:set:false',
190
+ 'class-ref:define-own-property:false',
191
+ // The constructor side of a class -- a static method or get-only
192
+ // accessor read off the class value itself (`Quaternion.fromEuler`), and
193
+ // the assignment-only static field three.js spells as a bare
194
+ // `Object3D.DEFAULT_UP = new Vector3(0, 1, 0)`. That second kind is real
195
+ // emitted storage: `class-layout.ts`'s `censusClassStaticFieldStorage`
196
+ // claims one global per (class, key) the whole program writes,
197
+ // `records.ts` defines them ahead of every body, and both directions
198
+ // resolve one through the single `classConstructorStaticFieldName`. A key
199
+ // a `static` member DECLARES is still absent -- the census skips those,
200
+ // so no storage exists to read or write -- and so is a computed key,
201
+ // which is why only the `false` rows are claimed. This recipe resolves a
202
+ // specific site only when
203
+ // `projectClasses` actually published the receiver's class -- an ambient
204
+ // `declare class` never is (`semantics/program.ts` excludes declaration
205
+ // files from the census), so `preflight/run.ts` additionally verifies
206
+ // that per declaration before calling this obligation satisfied; see its
207
+ // own comment for why the flat claim below is not enough by itself.
208
+ 'constructor-family:get:false',
209
+ // A computed key on the constructor is a dispatch over that same finite
210
+ // member set (`emit-dynamic-properties.ts`'s
211
+ // `constructorFamilyComputedGetText`): `C[String(1)]` after
212
+ // `static [1] = 2`. Reads only -- a computed WRITE would need storage for
213
+ // a key nothing declared, which the constructor object does not have.
214
+ 'constructor-family:get:true',
215
+ 'constructor-family:set:false',
216
+ 'constructor-family:define-own-property:false',
217
+ // An Array's `length` get/set, its element get/set by a numeric key
218
+ // (computed or a constant that spells a canonical index -- `a[0]` and
219
+ // `a[i]` are the same rule, just with the index known at different
220
+ // times), and `length`'s own truncate/extend write. The ordinary-property
221
+ // half of an Array object is deliberately absent, with one exception: a
222
+ // constant key naming an `Array.prototype` METHOD this backend renders
223
+ // (`emit-prototype-array.ts`'s `arrayMethods` is the one authority for
224
+ // which) defers instead of refusing, and fuses with the call that follows.
225
+ // Every other non-index, non-`length` constant key still needs a property
226
+ // table this carrier does not have, and the emitter refuses those by name
227
+ // -- with a stated reason where there is one (`arrayMemberRefusals`).
228
+ // A dictionary is a `std::map`-backed table, so every key reaches it the
229
+ // same way whether the source spelled a computed one (`counts[k]`) or a
230
+ // constant (`counts.total`): both are one lookup in one container, which
231
+ // is why both the computed and the static row are claimed. The read is
232
+ // `Dictionary::read`, which does not insert; the store is `operator[]`,
233
+ // which does. `record-with-index`'s index sidecar is this identical
234
+ // container (see `records.ts`'s `renderStructDefinition`), but nothing
235
+ // claimed above reaches it: that claim is scoped to a key naming one of
236
+ // the carrier's own named fields, and a key that would have to land here
237
+ // instead -- computed, or a constant naming no field -- stays refused by
238
+ // name, deliberately (see that claim's own comment for why).
239
+ 'dictionary:get:false',
240
+ 'dictionary:get:true',
241
+ 'dictionary:set:false',
242
+ 'dictionary:set:true',
243
+ 'dictionary:define-own-property:false',
244
+ 'dictionary:define-own-property:true',
245
+ 'array-object:get:false',
246
+ 'array-object:get:true',
247
+ 'array-object:set:false',
248
+ 'array-object:set:true',
249
+ // A typed array's element get/set (constant canonical index, computed
250
+ // scalar index, and `length`) -- the same computed/constant/`length`
251
+ // shape `array-object` claims above. Its ordinary-property half is
252
+ // absent for the same reason: ECMA-262 23.2's integer-indexed exotic
253
+ // object has no ordinary-property table this carrier keeps, and the
254
+ // emitter refuses those by name -- see `typedArrayAccessText`/
255
+ // `emitFieldStore` in emit-properties.ts.
256
+ 'typed-array:get:false',
257
+ 'typed-array:get:true',
258
+ 'typed-array:set:false',
259
+ 'typed-array:set:true',
260
+ // An ArrayBuffer's own reads: `byteLength`, and the `slice` method that
261
+ // defers and fuses with its call. It has no indexed access at all --
262
+ // ECMA-262 25.1 gives it no exotic `[[Get]]`, so `b[0]` really is
263
+ // `undefined` -- which is why only the constant-key half is claimed here,
264
+ // and why a computed key on one is refused by name at emission rather
265
+ // than answering a byte.
266
+ 'array-buffer:get:false',
267
+ 'shared-array-buffer:get:false',
268
+ // A DataView's `getInt8`/`setFloat64`/... plus its three geometry
269
+ // accessors, all constant keys. Same reasoning: no indexed access exists
270
+ // on a DataView either.
271
+ 'data-view:get:false',
272
+ // A string's `length` read -- its count of UTF-16 CODE UNITS, ECMA-262
273
+ // 6.1.4, not of the UTF-8 bytes this backend stores it in -- plus every
274
+ // `String.prototype` method `emit-prototype-string.ts`'s `stringMethods`
275
+ // renders, which defers at the access and fuses with the call that
276
+ // follows. Every other static key is still a method refused by name in
277
+ // the emitter, because the checker gives an ambient interface method no
278
+ // `this` parameter and the resulting calling convention has nowhere to
279
+ // carry the receiver -- see `stringMemberText` in emit-carrier-members.ts,
280
+ // and `stringMemberRefusals` for the members that state a reason.
281
+ 'string:get:false',
282
+ // A symbol's `description` (ECMA-262 20.4.3.2), `symbolMemberText` in
283
+ // emit-carrier-members.ts; every other constant key refuses by name there.
284
+ 'symbol:get:false',
285
+ // A string INDEX read, `s[i]` -- ECMA-262 10.4.3's String exotic `[[Get]]`,
286
+ // which is the only thing a computed key on a string can be: `ToPropertyKey`
287
+ // of a number is its String, and no `String.prototype` member has a name a
288
+ // number spells. Rendered by `stringIndexText` (emit-carrier-members.ts)
289
+ // through `gea::runtime::string::charAt`, which already owns the UTF-16
290
+ // code-unit projection over this backend's UTF-8 storage. Claimed
291
+ // unconditionally, because the one case it does not cover -- a result
292
+ // carried as `string | undefined`, the shape `noUncheckedIndexedAccess`
293
+ // gives every indexed read -- is refused by name at emission rather than
294
+ // rendered wrong.
295
+ 'string:get:true',
296
+ // A `scalar` (`number`, `boolean`, ...) has no own data property at all --
297
+ // every static key is a `Number.prototype`/`Boolean.prototype` method. The
298
+ // three `Number.prototype` formatters (`toFixed`/`toExponential`/
299
+ // `toPrecision`) defer and fuse with their call, exactly as `substring`
300
+ // does off a string; every other key is still refused for the same
301
+ // missing-receiver reason `string:get:false` refuses every key but
302
+ // `length`. See `scalarMemberText` in emit-carrier-members.ts.
303
+ 'scalar:get:false',
304
+ // A promise has no own data property either: `then`/`catch`/`finally` are
305
+ // `Promise.prototype` methods, and `then` is the one this backend renders
306
+ // -- deferred and fused with its call exactly as `substring` is off a
307
+ // string (`promiseMemberText`, emit-carrier-members.ts). `catch`/`finally`
308
+ // stay refused by name and not for lack of syntax: this runtime's promise
309
+ // carries a fulfilled value and no rejection state, so a rejection handler
310
+ // would be a handler that can never run.
311
+ 'promise:get:false',
312
+ // A `Map`/`Set`/`WeakMap`/`WeakSet` receiver. `size` renders directly (it
313
+ // is an accessor over the collection's own storage, ECMA-262 23.1.3.14 /
314
+ // 24.2.3.9, not a method); every claimed METHOD defers and fuses with its
315
+ // call exactly as `then` does off a promise -- see
316
+ // `keyedCollectionMemberText` (emit-carrier-members.ts) and
317
+ // `keyedCollectionPrototypeMethods` (emit-prototype-invoke.ts), which is
318
+ // the one authority for which members exist per family. Everything else on
319
+ // these four interfaces -- `forEach`, `keys`/`values`/`entries`, the
320
+ // ES2025 set-algebra family, `getOrInsert` -- is still refused by name at
321
+ // the access, and `size`/`clear` are refused on the two WEAK families
322
+ // specifically, because ECMA-262 gives them neither.
323
+ //
324
+ // A computed key ("get:true") is absent for the same reason
325
+ // `array-object`'s ordinary half is: there is no runtime member table on
326
+ // these carriers to dispatch a computed name against.
327
+ 'keyed-collection:get:false',
328
+ // A host singleton (`Math`, `Date`, `String`, ...) has no runtime member
329
+ // table at all -- every key is a qualified `gea::host::<protocol>::<key>`
330
+ // symbol resolved at compile time, so a computed key has nothing to
331
+ // dispatch against. See `nativeHandleMemberText` in emit-host-properties.ts.
332
+ 'native-handle:get:false',
333
+ // The write half of the same member table (`nativeHandleStore`, same
334
+ // file). A host property is written through the host's own store spelling
335
+ // with `{value}` filled in, never through a field offset this compiler does
336
+ // not own -- and a member no table claims as settable is refused by name at
337
+ // the site, exactly as an unclaimed read is. Claimed only now that the
338
+ // renderer exists: this set is added to after the emitter stops throwing,
339
+ // never before.
340
+ 'native-handle:set:false',
341
+ // `delete Math.SQRT2` and its siblings -- the ANSWER `[[Delete]]` gives
342
+ // for a host intrinsic's own member, read from the same static host
343
+ // member table `native-handle:get:false` already consults, never a real
344
+ // removal (a native-handle carries no per-instance storage to remove
345
+ // from). See `emitNativeHandleDelete` in emit-dynamic-properties.ts.
346
+ 'native-handle:delete:false',
347
+ // The computed-key half of all three, for a namespace-shaped intrinsic
348
+ // (`Math[name]`, `Math[name] = v`, `delete Math[name]` with a runtime
349
+ // `name`): a static name-comparison chain over the protocol's classified
350
+ // member table in front of a per-protocol runtime sidecar
351
+ // (`gea::detail::hostIntrinsicSidecar`). See `computedNativeHandleGetText`
352
+ // in emit-host-properties.ts for the design and its one stated limit.
353
+ // test262's `verifyProperty` reaches all three on every host-intrinsic
354
+ // `prop-desc` case.
355
+ 'native-handle:get:true',
356
+ 'native-handle:set:true',
357
+ 'native-handle:delete:true',
358
+ // The `dynamic` carrier's own property table -- `gea::Value`'s
359
+ // `DynamicObject`, rendered by `emit-dynamic-properties.ts`.
360
+ //
361
+ // This is the one carrier for which a *dynamic* property operation is the
362
+ // correct lowering rather than a defect. A value the program itself
363
+ // declared `any`/`unknown` and never narrowed is one of the four boundaries
364
+ // `representation/model.ts` admits, and `obj[k] = v` over one is ordinary
365
+ // TypeScript that a compiler which refuses it simply cannot compile. What
366
+ // is NOT here is any suggestion that a statically typed receiver may reach
367
+ // this row: a class instance used dynamically keeps its `class-ref`
368
+ // carrier and answers through its own sidecar (`class-ref:get:true`
369
+ // below), because boxing it to get here is exactly the shortcut this
370
+ // compiler refuses.
371
+ //
372
+ // Computed and static are both claimed, and for the reason
373
+ // `dictionary`'s two rows above are: one table, one lookup, and the key's
374
+ // spelling is the only difference -- a constant renders as a
375
+ // `gea::PropertyKey::string` literal, a computed one converts through
376
+ // `propertyKeyText`. A key carrier that has no ToPropertyKey (an object,
377
+ // whose conversion runs user code) is still refused by name at the site.
378
+ // The one `set` recipe covers both Reference strictness modes because the
379
+ // semantic operation carries `strict` through typed IR: emission calls
380
+ // `Value::reflectSet`, throws on its false result only for strict code,
381
+ // and explicitly discards that same false result for sloppy code.
382
+ 'dynamic:get:false',
383
+ 'dynamic:get:true',
384
+ 'dynamic:set:false',
385
+ 'dynamic:set:true',
386
+ 'dynamic:delete:false',
387
+ 'dynamic:delete:true',
388
+ 'dynamic:has-property:false',
389
+ 'dynamic:has-property:true',
390
+ // `[[DefineOwnProperty]]` with the default attributes IS `[[Set]]` on a
391
+ // key the object does not hold (ECMA-262 10.1.9.2 step 1.d.iii creates a
392
+ // writable, enumerable, configurable data property), which is exactly what
393
+ // `DynamicObject::set` installs -- so the same renderer answers both
394
+ // rather than a second one that could disagree about the attribute
395
+ // defaults.
396
+ 'dynamic:define-own-property:false',
397
+ 'dynamic:define-own-property:true',
398
+ // The dynamic-property SIDECAR on a statically typed receiver: a class
399
+ // instance or a record reached through a key only known at runtime.
400
+ //
401
+ // `(this as any)[key] = v` and `(raw as any)[prop]` are ordinary
402
+ // TypeScript, and the receiver of both keeps its native C++ type all the
403
+ // way through. Its declared members are reached by the field dispatcher
404
+ // `records.ts` renders on the struct -- so a dynamic write to a declared
405
+ // field is seen by every native read of that same field -- and the keys
406
+ // the struct does not declare live in a `gea::DynamicObject` keyed on the
407
+ // object's own ownership, shared with any box of the same object.
408
+ //
409
+ // Computed only. A constant key names a declared member and is reached as
410
+ // one, by the branches above these in `emitGet`/`emitFieldStore`; routing
411
+ // it through a runtime lookup instead would be slower and no more correct.
412
+ 'class-ref:get:true',
413
+ 'class-ref:set:true',
414
+ 'record:get:true',
415
+ 'record:set:true',
416
+ 'native-record-ref:get:true',
417
+ 'native-record-ref:set:true',
418
+ // The same claim under the more specific name `preflight/property-access.ts`
419
+ // gives a `native-record-ref` computed read whose named shape derives NO
420
+ // index sidecar. That specialization exists because routing such a read
421
+ // into a sidecar member the struct does not declare would be a claim about
422
+ // storage that is not there -- and the sidecar path claimed here is a
423
+ // different answer to the same question: the struct's field dispatcher
424
+ // answers its declared members, and the expando answers the rest, neither
425
+ // of which needs an index signature to exist.
426
+ 'native-record-ref(no-index-sidecar):get:true',
427
+ // A `[[DefineOwnProperty]]` with a COMPUTED key on a `native-record-ref`
428
+ // receiver -- `Object.defineProperty(shape, key, {value, ...})` or a
429
+ // dynamic class-field-like install where the key is not a source
430
+ // literal. `emit-properties.ts`'s `emitFieldStoreLines` guards every
431
+ // `define-own-property` (this receiver included) on the descriptor
432
+ // actually being the default writable/enumerable/configurable data
433
+ // triple before reaching here, and once past that guard a
434
+ // `define-own-property` and a `set` render through the identical
435
+ // sidecar (`emitNativeSidecarSet`, `emit-dynamic-properties.ts`) this
436
+ // receiver's `set:true` row above already claims -- so this is that
437
+ // same primitive, claimed under `define-own-property`'s own name rather
438
+ // than assumed to fall out of the `set` claim.
439
+ 'native-record-ref:define-own-property:true',
440
+ // A runtime-only delete key is deliberately unclaimed for record-shaped
441
+ // receivers. It can name either an expando or an optional declared field,
442
+ // and the runtime dispatcher does not yet carry the field-specific clear
443
+ // operation needed for the latter. Returning `false` there would silently
444
+ // treat a configurable generated field as non-configurable.
445
+ // A compiler-emitted optional field has a value member plus an independent
446
+ // presence bit. A constant delete clears both and therefore preserves the
447
+ // distinction between a missing key and a present `undefined` value.
448
+ // Preflight refines only a key proven to name such a field to this row;
449
+ // required fields and host-native layouts remain refused.
450
+ 'record(optional-field):delete:false',
451
+ 'record(optional-field):delete:true',
452
+ // A constant delete key naming NO declared field at all -- neither
453
+ // required nor optional -- names a key the sidecar itself owns (one
454
+ // `Object.defineProperty` added after the fact, since the checker's own
455
+ // ambient signature does not widen the receiver's declared shape). That
456
+ // is a DIFFERENT case from the one the comment above refuses: there is no
457
+ // struct member here to mis-clear, only the same `gea::DynamicObject`
458
+ // expando table `record:get:true`/`record:set:true` above already claim,
459
+ // and `deleteOwnProperty` (gea_runtime.h, 10.1.10.1) refuses a
460
+ // non-configurable entry there exactly as it does for every other
461
+ // carrier reaching it -- see `emitNativeSidecarDelete`
462
+ // (emit-dynamic-properties.ts). Certification names that case
463
+ // (`deleteNamesRecordExpandoKey`, ir/certify/property-access.ts), so the
464
+ // plain `record:delete:false` left over is a constant key naming a
465
+ // REQUIRED field, which stays unclaimed: the field's presence bit exists
466
+ // but no typed read consults it, and this row claimed for ten days what
467
+ // the emitter refused by the same name.
468
+ 'record(expando-key):delete:false',
469
+ // Generated class instances dispatch deletion through their concrete
470
+ // own-field table and identity sidecar, including base-typed receivers.
471
+ 'class-ref:delete:false',
472
+ // A native-record-ref whose resolved generated shape has an index
473
+ // sidecar, with a constant key proven not to name a fixed field. The
474
+ // generated sidecar owns this entry's configurable state, and
475
+ // `nativeDynamicDelete` dispatches to that exact table. This stays a
476
+ // refined row: a computed key could name an optional generated field,
477
+ // whose clear protocol is different, and must not be certified here.
478
+ 'native-record-ref(index-sidecar):delete:false',
479
+ // Shared disjoint index authority proves the key cannot name a fixed slot.
480
+ // The native delete recipe consults the typed index's configurable state.
481
+ 'record(disjoint-index):delete:false',
482
+ 'record(disjoint-index):delete:true',
483
+ // A `dictionary`'s own `std::map`-backed table (`emitDictionaryDelete`).
484
+ // Both computed and constant keys reach the identical `erase`, for the
485
+ // same reason `dictionary:get:false`/`:get:true` above are both
486
+ // claimed: one table, one lookup, and the key's spelling is the only
487
+ // difference.
488
+ 'dictionary:delete:true',
489
+ 'dictionary:delete:false',
490
+ // Reading/writing a STATIC key through a `tagged-union` receiver, over
491
+ // the arms that all declare the field named
492
+ // (`emit-union-properties.ts`'s `taggedUnionGetText`/
493
+ // `emitTaggedUnionSet`). A union with even one arm that does not
494
+ // declare the field refuses by name at emission instead: this is a
495
+ // per-site fact the flat claim below cannot see, exactly the same
496
+ // asymmetry `class-ref:get:false`'s per-key refusal already lives with.
497
+ // A COMPUTED key over a MIXED-kind union (an `array-object` arm beside a
498
+ // `dictionary` arm, say) is deliberately absent -- a per-arm dispatch of
499
+ // a runtime-only key over arms of different KINDS would additionally
500
+ // have to reconcile their different read primitives, which is not
501
+ // written. The two shapes that owe no such reconciliation are claimed
502
+ // below under their own refined keys instead of widening this one.
503
+ 'tagged-union:get:false',
504
+ 'tagged-union:set:false',
505
+ // The computed key IS written for the two union shapes that owe no
506
+ // ARM-KIND reconciliation: every arm a `typed-array`
507
+ // (`emit-union-properties.ts`'s `taggedUnionElementText` /
508
+ // `emitTaggedUnionElementSet`). `TypedArray` is nine views differing only
509
+ // in element WIDTH, and `TypedArray::elementAt` returns `double` for all
510
+ // of them, so the per-arm dispatch produces one C++ type on every arm.
511
+ // Refined into its own key by `preflight/property-access.ts` rather than
512
+ // widening the flat claim above, which would over-claim for the
513
+ // `array-object`- and `dictionary`-shaped arms that reconciliation is
514
+ // about.
515
+ 'tagged-union(typed-array-arms):get:true',
516
+ 'tagged-union(typed-array-arms):set:true',
517
+ // ...and every arm a `dictionary` (`emit-union-properties.ts`'s
518
+ // `taggedUnionDictionaryGetText`/`taggedUnionHasOnlyDictionaryArms`,
519
+ // refined by `preflight/property-access.ts`'s
520
+ // `taggedUnionArmsAreAllDictionaries`). Every `dictionary` renders a
521
+ // computed read through the identical `member.read(key)`/`.has(key)`
522
+ // pair regardless of its value type, so only each arm's own VALUE needs
523
+ // reconciling to what the union's `get` publishes
524
+ // (`dictionaryArmReadText`'s `widenedStoreText` call) -- hono's
525
+ // `ParamIndexMap | Params` route table and `Record<string, string> |
526
+ // Record<string, string[]>` query-string result are both this shape.
527
+ // `:set:true` is deliberately absent: a computed WRITE into one of these
528
+ // arms is not a per-arm dispatch at all -- hono's own
529
+ // `results[name] = []` writes through the SAME live dictionary whichever
530
+ // arm it is, other keys included, so "switch the union's tag to answer
531
+ // this one write" would silently reinterpret every other entry already
532
+ // stored under the other arm's value type. That is a real gap in how
533
+ // this receiver shape is derived (a single dictionary of a per-entry
534
+ // union value, not a union of two whole dictionaries), not an emitter
535
+ // gap this file's evidence justified papering over.
536
+ 'tagged-union(dictionary-arms):get:true',
537
+ // ...and every arm an `array-object` (`emit-union-properties.ts`'s
538
+ // `taggedUnionArrayGetText`/`taggedUnionHasOnlyArrayObjectArms`, refined
539
+ // by `preflight/property-access.ts`'s `taggedUnionArmsAreAllArrayObjects`).
540
+ // Every `array-object` renders a computed read through the identical
541
+ // `elementAt`/`hasElement` pair regardless of its own element type, so
542
+ // only each arm's own ELEMENT needs reconciling to what the union's
543
+ // `get` publishes (`arrayArmReadText`'s `widenedStoreText` call) --
544
+ // hono's `[T, ParamIndexMap][] | [T, Params][]` router match result
545
+ // (indexed by `routeIndex`) is this shape. `:set:true` stays unclaimed
546
+ // for the same reason the dictionary-arms case above declines it.
547
+ 'tagged-union(array-arms):get:true',
548
+ // A runtime key over a tagged union of generated shared records/classes
549
+ // (and genuine dynamic/nullish alternatives) dispatches per live arm to
550
+ // `nativeDynamicGet`/`Value::getProperty`. The native helper checks
551
+ // fixed fields and typed index entries before the identity-keyed expando;
552
+ // `emit-union-properties.ts` decodes the resulting value into the
553
+ // already-selected result carrier. Host-native and by-value arms stay
554
+ // absent: neither has this generated sidecar contract.
555
+ 'tagged-union(native-sidecar-arms):get:true',
556
+ // Its store twin (`emitTaggedUnionNativeSidecarSet`): `nativeDynamicSet`
557
+ // per live arm, the value boxed only for the sidecar.
558
+ 'tagged-union(native-sidecar-arms):set:true',
559
+ // Each alternative retains its own native array/table storage. Numeric
560
+ // named record fields are excluded by the shared indexing predicate.
561
+ 'tagged-union(numeric-index-arms):get:true',
562
+ 'tagged-union(numeric-index-arms):set:true',
563
+ // `Function.prototype.call` read off a genuinely callable value --
564
+ // `add.call(x, 3, 4)`. There is no C++ object anywhere that implements
565
+ // `Function.prototype.call` itself (`lib.es5.d.ts`'s `strictBindCallApply`
566
+ // overload is a checker-only convention, not a physical one this or any
567
+ // backend could render a member for), so this is not a member LOAD the
568
+ // way `record:get:false` above is: `ir/lower-invocation.ts`'s
569
+ // `deferredFunctionCallCalleeOf` rewrites the *invocation* that reads this
570
+ // member to call the underlying receiver directly, with the read's own
571
+ // value never materialized -- which is why this claim has no emitter
572
+ // counterpart in `emit-properties.ts` to point at, unlike every other row
573
+ // in this set. Refined by `preflight/property-access.ts`'s
574
+ // `deferredFunctionPrototypeMember`, the same per-site technique
575
+ // `constructorFamilyIsCensused` and its siblings already use: the flat
576
+ // manifest can only say "a `.call` read off a callable value has
577
+ // somewhere to go", never which literal member name a given site actually
578
+ // reads, so a `.foo` read off the same receiver kind that is not
579
+ // `call` stays correctly unclaimed rather than silently over-claimed.
580
+ 'function-value-dispatch(call):get:false',
581
+ 'function(call):get:false',
582
+ 'function-family(call):get:false',
583
+ 'function-value-family(call):get:false',
584
+ // `Function.prototype.apply` read off a callable value --
585
+ // `Math.max.apply(null, [1, 5, 3])`. Identical shape to `.call` above,
586
+ // and the same reasoning: no C++ object implements `.apply` itself, so
587
+ // `ir/lower-invocation.ts`'s `deferredFunctionApplyCalleeOf` rewrites the
588
+ // invocation to call the underlying receiver directly -- the read's own
589
+ // value is never materialized -- which is why this claim has no emitter
590
+ // counterpart either. Refined per-site by `functionValueMemberIs`, so a
591
+ // `.foo` read off the same receiver kind that is not `apply` stays
592
+ // correctly unclaimed.
593
+ 'function-value-dispatch(apply):get:false',
594
+ 'function(apply):get:false',
595
+ 'function-family(apply):get:false',
596
+ 'function-value-family(apply):get:false',
597
+ // Only an immediately invoked bind read is admitted. It creates one new
598
+ // native callable with a captured receiver/prefix; extracting `.bind`
599
+ // itself remains unclaimed.
600
+ 'function-value-dispatch(bind-direct):get:false',
601
+ 'function(bind-direct):get:false',
602
+ 'function-family(bind-direct):get:false',
603
+ 'function-value-family(bind-direct):get:false',
604
+ // When an own write may shadow call/apply/bind, preserve the ordinary
605
+ // [[Get]] and invoke the Value returned by the callable's identity-owned
606
+ // property table. Function.prototype mutation itself remains unclaimed:
607
+ // the current runtime prototype object is immutable and cannot truthfully
608
+ // observe that write.
609
+ 'function(prototype-dynamic):get:false',
610
+ 'function-family(prototype-dynamic):get:false',
611
+ 'function-value-family(prototype-dynamic):get:false',
612
+ 'function-value-dispatch(prototype-dynamic):get:false',
613
+ 'function-and-constructor(prototype-dynamic):get:false',
614
+ 'function-value-dispatch(toString-direct):get:false',
615
+ // `.name`/`.length`: both `gea::CallableObject` facts decided once at the
616
+ // allocation site (a callable's own declared name, or the `NamedEvaluation`
617
+ // name from where an anonymous function/arrow literal was defined; the
618
+ // written parameters before the first default/rest one) and read back
619
+ // through `emit-properties.ts`'s matching arms. Refined the identical way
620
+ // `function-value-dispatch(call)` is, by the exact constant key a given
621
+ // site reads -- `.prototype`/`.bind` and any other `Function.prototype`
622
+ // member off the same receiver kind stay correctly unclaimed.
623
+ 'function-value-dispatch(name):get:false',
624
+ 'function-value-dispatch(length):get:false',
625
+ // The same two rows for a callable with no calling convention. Nothing
626
+ // else is claimed off `callable-identity`: it has no `.call`/`.apply`/
627
+ // `.bind` ladder, no expando arm and no computed-key arm, because the
628
+ // value is a builtin this backend renders for reflection only.
629
+ 'callable-identity(name):get:false',
630
+ 'callable-identity(length):get:false',
631
+ // An ordinary function's own `prototype`, materialized by
632
+ // `gea::installCallableOrdinaryPrototype` (gea_runtime.h) exactly as a
633
+ // `function-and-constructor`'s is -- one routine, because ECMA-262 10.2.5
634
+ // `MakeConstructor` is one step and the two carriers differ only in
635
+ // whether the checker also gave the value a construct signature. Refined
636
+ // BY THE DECLARATION, not by this key alone: `ir/certify/property-access.
637
+ // ts` admits the recipe only where the census proved the function makes a
638
+ // constructor -- or proved it does not, which is the same read landing on
639
+ // `Function.prototype`'s own (absent) `prototype` and answering
640
+ // `undefined`. A generator, whose `prototype` exists but inherits an
641
+ // intrinsic this runtime has no object for, states nothing and falls
642
+ // through to the unrefined `function-value-dispatch:get:false`, which is
643
+ // registered nowhere and refuses.
644
+ 'function-value-dispatch(prototype):get:false',
645
+ // A function value is not widened merely because it receives an own
646
+ // property. `CallableObject` keeps the call ABI and identity, while its
647
+ // identity-owned dynamic-property table receives ordinary assignments.
648
+ // This row deliberately covers writes only: reads still need a result
649
+ // carrier and prototype-chain rule that the emitter has not installed.
650
+ 'function-value-dispatch:set:false',
651
+ // Static deletion uses the same native Function-object property table as
652
+ // computed deletion; a literal key does not require a different carrier.
653
+ 'function-value-dispatch:delete:false',
654
+ // Fixed Function own properties and static expandos are separately
655
+ // certified: preflight rejects Function.prototype members not named here,
656
+ // and `callableDynamicGet` reads the one shared function-object table.
657
+ 'function-value-dispatch(expando):get:false',
658
+ 'function-value-dispatch(own-symbol):get:true',
659
+ 'function-value-dispatch(own-symbol):set:true',
660
+ // A RUNTIME string key on a callable -- test262's property helper reads,
661
+ // writes and deletes `obj[name]` on a builtin function to verify its own
662
+ // `name`/`length`. The one shared function-object table answers all three
663
+ // (`callableDynamicGet`/`callableDynamicSet`/`deleteOwnProperty`, facts
664
+ // installed first). The prototype-chain rule this row states is the
665
+ // narrow one the emitter renders: a key naming a `Function.prototype`
666
+ // member this backend does not model (`call`, `apply`, `bind`, ...)
667
+ // throws a TypeError at the read rather than answering `undefined` --
668
+ // see `callableSidecarGetText`'s computed arm.
669
+ 'function-value-dispatch:get:true',
670
+ 'function-value-dispatch:set:true',
671
+ 'function-value-dispatch:delete:true',
672
+ // A callable constructor retains both its call and construct entries. The
673
+ // property rows below therefore never coerce it to a plain callable view.
674
+ 'function-and-constructor(call):get:false',
675
+ 'function-and-constructor(apply):get:false',
676
+ 'function-and-constructor(toString-direct):get:false',
677
+ 'function-and-constructor(name):get:false',
678
+ 'function-and-constructor(length):get:false',
679
+ // `prototype` is a fixed own data property only on values proven to carry
680
+ // [[Construct]]. The callable keeps both ABI entries while its shared
681
+ // Function-object table performs ordinary Set/Delete, materializing that
682
+ // fixed descriptor before either operation reaches it.
683
+ 'function-and-constructor(prototype):get:false',
684
+ 'function-and-constructor(expando):get:false',
685
+ 'function-and-constructor(own-symbol):get:true',
686
+ 'function-and-constructor(own-symbol):set:true',
687
+ 'function-and-constructor:set:false',
688
+ 'function-and-constructor:delete:false',
689
+ 'function-and-constructor:get:true',
690
+ 'function-and-constructor:set:true',
691
+ 'function-and-constructor:delete:true'
692
+ ]),
693
+ // `'value'`: a scalar, string, or callable carrier -- nothing else aliases
694
+ // it, and a callable's own environment pointer is a deliberate, permanent
695
+ // leak (see `emitAllocateCallable`), so a copy of the pair is exactly as
696
+ // safe as the original. `'shared-refcount'`: a `shared_ptr`-backed carrier
697
+ // (class-ref/record/native-record-ref/array-object/dictionary) whose copy
698
+ // keeps the pointee alive as long as either copy survives, so the
699
+ // environment's copy is never left dangling by the frame that allocated it
700
+ // returning. `'owned'`: a by-value aggregate -- `cppOwnershipWrap` spells it
701
+ // as the bare struct, so a copy into an environment copies the storage
702
+ // itself, exactly as `'value'` does for a scalar, and any handle INSIDE it
703
+ // copies by its own rule. It used to be listed with `'borrowed'` as "not
704
+ // provably tied to the copy", which is true of a reference and not of a
705
+ // value: the two tiers were being refused for one tier's reason. It refused
706
+ // every closure capturing a host facade (`derive.ts` gives a namespace root
707
+ // and a host-bound record `'owned'` outright) and every closure capturing a
708
+ // value record. `'borrowed'` stays absent, and now for its own reason: it
709
+ // is spelled `T&`, so the environment would transport a reference that can
710
+ // outlive what it names.
711
+ captureOwnershipSupport: new Set(['value', 'shared-refcount', 'owned']),
712
+ // "jsx-element"@1: the JSX intrinsic element's `native-handle` protocol.
713
+ // `gea::NativeHandle<gea_native_protocol_jsx_element_v1>` and the
714
+ // `gea::jsx::create`/`prop`/`child` operations it is built with live in
715
+ // gea_runtime.h. Registered here, not guessed: `buildNativeBoundaryObligation`
716
+ // in preflight/run.ts checks this exact `protocol@version` key before any
717
+ // native-handle result is allowed to carry one.
718
+ // "Math"@1 / "DateConstructor"@1 / "StringConstructor"@1: the three ambient
719
+ // host-object protocols `gea_runtime.h`'s `gea::host` namespace actually
720
+ // implements, member by member (see that header's comments for exactly
721
+ // which members). These are genuine host boundaries: real ECMAScript
722
+ // ambient globals with no TypeScript source anywhere to compile. A
723
+ // `@geastack/core` export (`Display`, `WiFi`, `window`, `mount`, ...) is
724
+ // NOT one of these -- it is ordinary TypeScript, compiled from
725
+ // `runtime.ts` like any other module, and was only ever misclassified as
726
+ // ambient by a stale project mapping that pointed the package's import at
727
+ // its declaration file instead of its source. A per-framework registry of
728
+ // such names is exactly the source-specific hack this manifest exists to
729
+ // avoid: nothing framework-shaped is registered here, or ever should be.
730
+ // "ErrorConstructor"@1 is the same kind of row, but for the *invocation*
731
+ // half a `native-handle` can carry (`emit-host-invoke.ts`): `new Error(x)`
732
+ // now has a real `gea::host::ErrorConstructor::create` behind it, message
733
+ // only -- `ErrorOptions.cause` is accepted by the checker's overload set
734
+ // and silently unread, exactly as that file's own comment states.
735
+ // "Console"@1: `console.log`/`console.error` only, member by member, not
736
+ // the full ~18-member `lib.dom.d.ts` interface -- no real corpus program
737
+ // calls anything else (`citations.md` section 2a). A call to one of those
738
+ // still refuses by name rather than emitting a call to a symbol
739
+ // `gea_runtime.h` does not declare, same as any other unclaimed member.
740
+ // Every other genuinely ambient interface (`ArrayBuffer`, ...) is real,
741
+ // unclaimed ground: nothing here answers a read of one, so preflight
742
+ // refuses those programs instead of emitting a call to a symbol this
743
+ // header does not declare. `JSON`@1 (below) is claimed despite having no
744
+ // `HostMember` template in this file's own table: its two members render
745
+ // through a dedicated, type-directed path instead (`emit-json.ts`'s
746
+ // `jsonCallText`, wired into `emit-host-invoke.ts`'s `hostCallText`),
747
+ // because a fixed template signature for `stringify(value: any) =>
748
+ // string`/`parse(text: string) => any` is only reachable by boxing every
749
+ // call through it -- see citations.md finding 1 for the certify-then-fail
750
+ // this claim would otherwise cause without that rendering already landed.
751
+ // The eight typed-array constructors ARE claimed below, but not through
752
+ // this call/construct-ABI mechanism the way Math/Date/String/Error/Number
753
+ // are: their checker overload set has no single physical frame (`new
754
+ // (length: number)` and `new (array: ArrayLike<number>)` are genuinely
755
+ // different parameter-0 shapes; ECMA-262 23.2.5.1's buffer/iterable/copy
756
+ // overloads are refused by name at emission), so `derive.ts` correctly
757
+ // leaves `.construct` `null` for them and `emit-callable.ts`'s
758
+ // `emitTypedArrayConstruct` renders directly off each construct operation's
759
+ // own, already-resolved argument representation instead of the whole-type
760
+ // ABI every other native-handle construct uses.
761
+ // Every entry needs a matching `gea_native_protocol_<name>_v1` tag struct in
762
+ // `runtime/gea_runtime.h`, and a real implementation behind it. A claim with
763
+ // no tag certifies and then fails in clang, which is the one ordering this
764
+ // manifest exists to prevent.
765
+ //
766
+ // Only the language's own. `Math`, `Date`, `String`, `Error`, `Number`,
767
+ // `Promise` and the typed arrays are `lib.es5.d.ts`/`lib.es2015.*` -- the
768
+ // ECMAScript standard library, which a TypeScript compiler must render to
769
+ // compile TypeScript. `Console` and `Storage` are the two `lib.dom.d.ts`
770
+ // names kept here deliberately: neither has a document or a node tree behind
771
+ // it, and every JavaScript host in existence provides them.
772
+ //
773
+ // The document, the element tree, JSX and the audio graph are NOT here. They
774
+ // are a host's model of itself, not the language's, so the plugin that
775
+ // installs that host claims them alongside the templates that render them
776
+ // (`plugins/gea/host.ts`), and `compiler.ts` unions the two sets in one step.
777
+ // The authenticated host protocols, COMPUTED from `coreHostMembers` and the
778
+ // emitter's own dispatch tables by `host/native-protocols.ts`'s
779
+ // `cppNativeProtocolsOf` -- not a hand list, so a row here can no longer
780
+ // drift from the renderer it claims to speak for. `createCppTargetManifest`
781
+ // (manifest.ts) recomputes the same call for the specific host tables a
782
+ // compilation actually built; this is the plugin-independent default for a
783
+ // caller that supplies none.
784
+ nativeProtocols: cppNativeProtocolsOf(coreHostMembers),
785
+ // The member/role/positions whose call-site renderer takes a `dynamic`
786
+ // argument straight through; `host/dynamic-argument-members.ts` owns the
787
+ // list and states why each position needs the waiver while its siblings do
788
+ // not.
789
+ dynamicArgumentHostParameters: cppDynamicArgumentHostParameters,
790
+ runtimeHelpers: new Set([
791
+ 'computation:strict-equality:dynamic-number',
792
+ 'computation:strict-equality:dynamic-boolean',
793
+ 'computation:strict-equality:dynamic-string',
794
+ 'computation:strict-equality:dynamic-symbol',
795
+ 'computation:strict-equality:dynamic-bigint',
796
+ 'invocation:call:nullish',
797
+ 'invocation:construct:nullish',
798
+ // `emitRegExpConstruct` preserves the typed Pattern path and sends only a
799
+ // genuinely dynamic pattern/flags argument through the runtime brand +
800
+ // ToString helper. The key is intentionally narrower than the protocol:
801
+ // it does not claim arbitrary RegExp static members or calls.
802
+ 'invocation:construct:regexp-dynamic',
803
+ // `v instanceof <error constructor>`: the seven rows `emit-instanceof.ts`
804
+ // renders, derived from that file's own table so the claim and the
805
+ // rendering are one list. Every other `instanceof` -- a program's own
806
+ // class, another host protocol, a statically typed left operand -- has no
807
+ // row and refuses by name there.
808
+ ...cppInstanceofHelperKeys,
809
+ // The control forms `ir/lower.ts`'s `lowerControl` actually renders, and
810
+ // only those. `debugger` and `branch` are markers it deliberately drops
811
+ // (a `branch`'s transfer is already built from `ConditionalEdge`
812
+ // membership); `return` and `throw` render terminators; `loop` is a
813
+ // head-tested loop whose blocks are the guard's own.
814
+ //
815
+ // Deliberately absent, each refused by name in `lowerControl` and now
816
+ // refused earlier, here: `switch` (needs case dispatch), `label` (its
817
+ // `label-target` boundary operation publishes no result, so nothing can
818
+ // anchor an obligation for it -- a labelled `break`/`continue` therefore
819
+ // stays certify-then-crash even though the loop/continue targets below
820
+ // are real), `yield` (needs a real generator frame), and
821
+ // `control:loop:iteration` -- a loop not driven by a boolean condition,
822
+ // which is what a `for...of` is.
823
+ //
824
+ // `break` and `continue` render as an ordinary `goto` out of (`break`) or
825
+ // back into (`continue`) the enclosing loop's own blocks -- `loopExitOf`
826
+ // and the loop's header/latch, both already built for the loop's own test
827
+ // -- so they are claimed here now that the census mints a `completion`
828
+ // result for them to anchor this obligation on (`producers/control.ts`,
829
+ // `contributeBreakOrContinue`).
830
+ //
831
+ // `await` is claimed too, as of `ir/lower.ts`'s `lowerControl` `'await'`
832
+ // case and `emit.ts`'s `emitAwait`: not a real suspension (this substrate
833
+ // has no coroutine primitive), but the honest, narrower answer this
834
+ // runtime's settled-value-only `gea::Promise` supports -- see
835
+ // `AwaitOperation`'s doc comment (`ir/model.ts`) and `gea::Promise::
836
+ // awaited()` (`runtime/gea_runtime.h`) for why reading the value
837
+ // immediately is complete for every promise this backend can construct.
838
+ 'control:debugger',
839
+ 'control:branch',
840
+ 'control:return',
841
+ 'control:throw',
842
+ 'control:loop',
843
+ // `do`/`while`: the head-tested loop's own blocks in the other order --
844
+ // body in the header, condition in the latch, and the latch's terminator
845
+ // is the conditional back edge (`ir/lower-flow.ts`'s `closeBackEdge`).
846
+ 'control:loop-tail',
847
+ 'control:break',
848
+ 'control:continue',
849
+ 'control:await',
850
+ // The `await` resume boundary (`producers/control.ts`'s `contributeAwait`
851
+ // mints one alongside every `control:await`). Claimed for the same reason
852
+ // `control:await` is: `ir/lower.ts`'s `lowerBoundary` renders it as
853
+ // nothing, honestly, because this backend's `await` never suspends -- see
854
+ // that function's own comment.
855
+ 'boundary:async-resume',
856
+ // Real native C++ `try`/`catch`, over a straight-line try/catch body only
857
+ // (`targets/cpp/emit-exceptions.ts`'s `straightLineChain` refuses a
858
+ // branch or a loop inside one by name at emission, since
859
+ // `ir/lower-flow.ts`'s region bookkeeping does not yet track the extra
860
+ // blocks either would need). A `finally` clause is refused earlier still,
861
+ // the moment the try marker itself lowers (`ir/lower.ts`'s `'try'` case).
862
+ 'control:try',
863
+ // The caught value, only reached at all for a *bound* `catch (e)`
864
+ // (`preflight/run.ts`'s `buildRuntimeHelperObligation` anchors on the
865
+ // exception region's own published result, and a bindingless `catch {}`
866
+ // publishes none). `e`'s checker type is `unknown` -- one of the four
867
+ // legitimate dynamic boundaries -- and it materializes as the native
868
+ // `catch (const gea::Value& e)` parameter itself
869
+ // (`CatchBindingOperation`), not a second, redundant declaration.
870
+ 'boundary:exception-region',
871
+ // Postfix `x++`/`x--`'s own coercion half (`computations.ts`'s
872
+ // `contributeUpdate`): `ToNumeric` over a `dynamic` operand landing on
873
+ // `scalar(number)`, the only pair this obligation's key
874
+ // (`runtime-helper-key.ts`, unkeyed by carrier -- every non-identity
875
+ // `ToNumeric` shares this one string) is ever raised for in practice.
876
+ // `emit-tonumber.ts`'s `dynamicToNumericText` renders it: switch on the
877
+ // box's own runtime tag, ECMAScript's per-tag ToNumber for the four tags
878
+ // that have one (Number identity, Boolean 1/0, String parse, Null 0,
879
+ // Undefined NaN), and a loud runtime refusal -- never a silent NaN -- for
880
+ // Object/Function/Symbol/BigInt, none of which this backend's ToNumeric
881
+ // can convert (Object needs ToPrimitive, which can run arbitrary user
882
+ // code; BigInt is a lossy conversion the language defines separately).
883
+ 'computation:coercion:ToNumeric',
884
+ 'allocation:object-literal:dynamic',
885
+ 'allocation:object-literal:record',
886
+ // An object literal whose selected carrier is `record-with-index` -- the
887
+ // struct half of a "no writes yet, but a computed-key write reaches this
888
+ // storage somewhere in the program" shape, e.g. `this.morphAttributes =
889
+ // {}` later filled by `container.morphAttributes[ name ] = value`
890
+ // elsewhere. `emit-allocation.ts`'s `emitAllocateRecord` allocates it
891
+ // through the identical `cppRecordStructName`/`cppTypeOf` spelling a
892
+ // `record` allocation uses just above -- `types.ts`'s `cppTypeOf` already
893
+ // spells the two through the same `case 'record': case
894
+ // 'record-with-index':` fallthrough, because the index-signature half is
895
+ // a MEMBER of the one struct (`records.ts`'s `renderStructDefinition`),
896
+ // never a second allocation. Every member this obligation's own literal
897
+ // installs inline resolves through `emitFieldInits`, the same as a
898
+ // `record`'s; a member the literal does not install inline (the common
899
+ // case for this carrier -- see `AllocateRecordOperation`'s own comment)
900
+ // is written afterward as an ordinary `define-own-property`/`set`, which
901
+ // `record-with-index:set:false`/`record-with-index:set:true` above claim.
902
+ 'allocation:object-literal:record-with-index',
903
+ // An object literal whose DECLARED type has an index signature
904
+ // (`{ [key: string]: T }`, a `Record<K, V>`) derives a `dictionary`
905
+ // carrier, not a record, so the literal's members are keyed stores rather
906
+ // than struct field assignments. `emit-properties.ts`'s
907
+ // `emitAllocateDictionary` renders them through the container's own
908
+ // `operator[]`, the store path `gea::Dictionary` documents.
909
+ 'allocation:object-literal:dictionary',
910
+ 'allocation:object-literal:native-record-ref',
911
+ // A tagged template's template object. The usual TypeScript
912
+ // `TemplateStringsArray` shape is one exact `array-object`: indexed cooked
913
+ // strings are the Array's own slots and its required `raw` Array is a
914
+ // typed extension field on that same identity. This is deliberately the
915
+ // only certified carrier: record-with-index and native-record-ref cannot
916
+ // implement Array exotic index/length descriptors, frozen integrity, or
917
+ // a present cooked `undefined` for an invalid escape. Legitimate
918
+ // TemplateStringsArray declarations derive through the general
919
+ // interface-extends-ReadonlyArray rule to this array-object shape.
920
+ // `emitAllocateTemplateObject` builds it once per parse site behind a
921
+ // function `static`; every other carrier refuses by name.
922
+ completeTemplateObjectCapabilityKey,
923
+ // A regular-expression literal. The native carrier receives the Pattern
924
+ // directly; an authorized dynamic boundary receives that same fresh
925
+ // Pattern boxed as an Object. `emitAllocateRegExp` writes both forms, and
926
+ // refuses every other carrier rather than constructing a pattern into a
927
+ // layout it cannot name.
928
+ 'allocation:regexp-object:native-record-ref(supported-flags)',
929
+ 'allocation:regexp-object:dynamic(supported-flags)',
930
+ 'allocation:regexp-object:native-record-ref(unicode-flags)',
931
+ 'allocation:regexp-object:dynamic(unicode-flags)',
932
+ // The plainest carrier there is: an ordinary `gea::CallableObject<S>`,
933
+ // written by `emitAllocateCallable`'s generic tail as `{invoke,
934
+ // environment}` (or `{invoke, nullptr}` when nothing is captured).
935
+ //
936
+ // This row was MISSING while the printer rendered it unconditionally --
937
+ // the same certify/print disagreement 2.3 fixed four of, and it stayed
938
+ // invisible for a structural reason worth remembering: the demand only
939
+ // arises in a body `ir/generator-split.ts` MINTS, and certification used
940
+ // to run on the pre-split, pre-shake body list, so nothing ever asked.
941
+ // Certifying the shaken program is what surfaced it, on
942
+ // `generator-parameter-binding-at-call` and
943
+ // `generator-bridged-parameter-ownership` -- two programs that emitted
944
+ // correctly and passed the runtime suite the whole time.
945
+ 'allocation:function-object:function',
946
+ // A capture-free callable is a pointer pair the emitter writes inline; a
947
+ // capturing one needs an environment layout that is not written, and
948
+ // `emitAllocateCallable` refuses it by name rather than allocating nothing.
949
+ 'allocation:function-object:function-value-dispatch',
950
+ // The identical allocation for a class method the checker marked OPTIONAL
951
+ // (`?`) for structural-compatibility reasons alone (`bodyString?(): string`
952
+ // in node-compat's `globals.ts`, matching `ClientResponse`'s narrower
953
+ // shape) -- the payload built is the same `CallableObject`, wrapped in
954
+ // `gea::Optional<T>` because the FIELD's type admits absence, not because
955
+ // this allocation ever produces one. `emitAllocateCallable`'s `payloadCarrier`/
956
+ // `wrap` render it by building the payload at its own type and handing it
957
+ // to `Optional` as the one value its constructor takes.
958
+ 'allocation:function-object:optional',
959
+ // A pre-`class` JavaScript constructor function -- one `function
960
+ // WebGLClipping( properties ) { this.uniform = uniform; ... }` that is
961
+ // both called and `new`ed, which is how three.js writes its whole
962
+ // renderer. The carrier is `gea::CallableConstructorObject`, holding two
963
+ // function pointers because `[[Call]]` and `[[Construct]]` differ at both
964
+ // ends: one is handed a receiver and returns what the body returns, the
965
+ // other manufactures the receiver (ECMA-262 10.2.2) and evaluates to it.
966
+ // `emitAllocateCallable` writes both, and `translation-unit.ts`'s
967
+ // `constructThunkOf` renders the second -- allocate the instance, enter
968
+ // the body with it, return it -- over the SAME body the invoke thunk
969
+ // adapts, so nothing here is a second lowering of the function.
970
+ 'allocation:function-object:function-and-constructor',
971
+ // A plain JS constructor function whose own `.prototype` is read or
972
+ // written (`prototypeMutatedConstructorTypes`, dynamic-fallback.ts) --
973
+ // boxed to `gea::Value` because it needs a real, mutable "prototype" own
974
+ // property no native callable carrier has (ECMA-262 10.2.5
975
+ // MakeConstructor). `emitAllocateCallable`'s `payloadCarrier.kind ===
976
+ // 'dynamic'` branch recovers the lost call ABI through `ctx.abiOfCallable`,
977
+ // boxes the same thunk pointer every other carrier here would have used,
978
+ // and installs the default "prototype" object through
979
+ // `gea::host::installOrdinaryConstructorPrototype`.
980
+ 'allocation:function-object:dynamic',
981
+ 'allocation:array-literal:dynamic',
982
+ // A dynamic-fallback array literal still keeps its fresh Array exotic
983
+ // allocation native. When one spread source is dynamic,
984
+ // `emitAllocateArrayObject` drains the acquired iterator record through
985
+ // `runtime::iterator::appendGather`; this is distinct from an ordinary
986
+ // dynamic array literal so a target cannot certify that runtime loop
987
+ // without spelling it.
988
+ 'allocation:array-literal:dynamic(dynamic-gather)',
989
+ 'allocation:array-literal:array-object',
990
+ 'allocation:array-literal:array-object(dynamic-gather)',
991
+ // A tuple literal (`[a, b]` typed `[number, string]`, `readonly [x, y]`,
992
+ // or any other array literal whose own type derives to `record` --
993
+ // `representation/derive.ts`'s `deriveTuple` states there is deliberately
994
+ // no separate tuple carrier: a tuple *is* a record whose keys are its
995
+ // positions). `ir/lower-allocation.ts`'s `lowerTupleLiteral` already
996
+ // renders this through the identical `ctx.builder.allocateRecord` an
997
+ // object literal with a record carrier uses -- the same IR node, the same
998
+ // `emitAllocateRecord` -- so this is not new machinery, only the claim
999
+ // `object-literal:record` above already states for the identical builder
1000
+ // call, restated for the literal syntax that also reaches it. Leaving it
1001
+ // unclaimed blocked every tuple-typed array literal at preflight even
1002
+ // though lowering already handled it cleanly.
1003
+ //
1004
+ // `native-record-ref` is deliberately NOT claimed alongside it, and not
1005
+ // for lack of matching machinery: `structural.ts`'s `layoutTypeAt` gives
1006
+ // an array literal's OWN type only when the checker's contextual type is
1007
+ // itself array- or tuple-shaped (`checker.isArrayType`/`isTupleType`), and
1008
+ // `checker.isTupleType` is decided before a declared/named-alias anchor is
1009
+ // ever consulted (`structural.ts`'s own type walk), so a tuple can never
1010
+ // reach a `declared`/`object-anchor` shape and therefore never derives to
1011
+ // `native-record-ref`. There is consequently no TypeScript program for
1012
+ // which an array literal's shape resolves to `native-record-ref` at all --
1013
+ // before `layoutTypeAt` was narrowed, one DID reach it, but only by a
1014
+ // defect: an array literal being contextually typed against an unrelated
1015
+ // Object-flagged interface an overloaded call's parameter happened to name
1016
+ // (`new Uint8Array([68, 73, 65, 71])` against `Iterable<number>`, a
1017
+ // symbol-keyed protocol with zero data fields) -- `lowerTupleLiteral`'s own
1018
+ // arity check ("4 elements into a layout of 0 fields") is what caught it
1019
+ // once claimed, exactly the crash-during-rendering a certified program is
1020
+ // supposed to never reach. Fixed at the source in `layoutTypeAt`; nothing
1021
+ // is left here to claim.
1022
+ 'allocation:array-literal:record',
1023
+ // Fixed-arity array-destructuring and its rest element, over a provably
1024
+ // plain Array source only -- `ir/lower-destructuring.ts`'s fast path
1025
+ // reads the source by constant index / range-copies it, the same
1026
+ // machinery `allocation:array-literal:array-object` and array spread
1027
+ // already use. `preflight/run.ts`'s obligation key carries the source's
1028
+ // own carrier for exactly this claim to stay narrow: every other carrier
1029
+ // (a Map, a Set, a user-defined iterable) is left correctly unclaimed and
1030
+ // refuses at preflight, not mid-lowering. An object-pattern rest
1031
+ // ("{...rest}") is kept structurally unclaimable even over an
1032
+ // array-typed source -- see the "object-pattern" key segment in
1033
+ // `preflight/run.ts`'s 'rest-element' case.
1034
+ 'destructuring:array-pattern:array-object',
1035
+ // A source declared `any`/`unknown`, including the true arm of
1036
+ // `Array.isArray(source)`, keeps its `Value` identity and is stepped via
1037
+ // `runtime::iterator`; array rest drains the same record through a fresh
1038
+ // dynamic-element array rather than projecting the source as an array.
1039
+ 'destructuring:array-pattern:dynamic',
1040
+ 'destructuring:array-pattern-close:dynamic',
1041
+ 'destructuring:array-pattern-close:iterator',
1042
+ 'destructuring:rest-element:dynamic',
1043
+ // A presence test followed by TypeError on absence; the source stays in
1044
+ // its selected carrier, including primitive and native object sources.
1045
+ 'destructuring:RequireObjectCoercible',
1046
+ // A tuple's element, read back by position -- `const [a, b] = pair` over a
1047
+ // `record`-carried tuple. This is a record field get keyed by the
1048
+ // position's own string ("0", "1", ...), exactly the field
1049
+ // `lowerTupleLiteral` (above) wrote it under -- never the iterator
1050
+ // protocol: a statically-typed tuple's shape is closed and known at
1051
+ // compile time, so there is nothing for GetIterator/next() to resolve
1052
+ // that a plain field read does not already answer. `rest-element` over a
1053
+ // tuple source is deliberately NOT claimed alongside this: a tuple's
1054
+ // remaining positions have no common carrier to range-copy into the way
1055
+ // a plain Array's do, and `destructuring:rest-element:record` stays
1056
+ // correctly unclaimed for that reason.
1057
+ //
1058
+ // Unlike the allocation claim above, this one is genuinely narrower than
1059
+ // "every `record` source": a destructuring source's type is the value's
1060
+ // own declared/inferred type, never routed through `layoutTypeAt`'s
1061
+ // array-literal guard, so an ordinary named-field object that also
1062
+ // declares `[Symbol.iterator]` (`const [a, b] = value` over a `{ first,
1063
+ // second, [Symbol.iterator]() {...} }`-shaped value) derives to the
1064
+ // identical `record` carrier without being a tuple at all.
1065
+ // `preflight/run.ts`'s `sourceIsPositionalTupleRecord` narrows the
1066
+ // obligation key to "record(non-tuple)" -- which this manifest does not
1067
+ // claim -- whenever the record's own fields are not exactly "0".."n-1" in
1068
+ // order, so that shape still refuses at preflight rather than certifying
1069
+ // and then throwing out of `lowerTuplePatternRead`'s own field-key check.
1070
+ // `native-record-ref` gets no claim at all for the identical reason
1071
+ // `sourceIsPositionalTupleRecord`'s own comment states: preflight has no
1072
+ // deriver to resolve its shape id back to fields, so the positional check
1073
+ // this claim depends on cannot be run for it, and claiming it unchecked
1074
+ // would reopen the exact false-certification risk this narrowing exists
1075
+ // to close.
1076
+ 'destructuring:array-pattern:record',
1077
+ // A tuple's element, read back by position, when the source is a
1078
+ // `tagged-union` all of whose arms are themselves tuples --
1079
+ // `[T, ParamIndexMap][] | [T, Params][]`'s own per-entry type
1080
+ // (`[T, ParamIndexMap] | [T, Params]`), hono's own router match result:
1081
+ // fixed arity at fixed positions in EVERY arm, so `.map(([[, route]]) =>
1082
+ // route)`'s pattern reads position 0 the same closed-shape way a lone
1083
+ // tuple's positional field get already does. `ir/lower-destructuring.ts`'s
1084
+ // `isTupleUnionCarrier` is what recognizes the shape (the shared source
1085
+ // step aliases straight to the base value, same as the lone-tuple case
1086
+ // just above), and `lowerTaggedUnionTuplePatternRead` renders each
1087
+ // element as an ordinary record field get keyed by the position's own
1088
+ // string -- the identical `ctx.builder.get` the lone-tuple path already
1089
+ // uses, just against a `tagged-union` receiver instead of a `record` one.
1090
+ // That receiver kind is nothing new to the C++ backend: a `get` whose
1091
+ // receiver is a `tagged-union` already renders through
1092
+ // `emit-properties.ts`'s existing dispatch to `emit-union-properties.ts`'s
1093
+ // `taggedUnionGetText`, which was already claiming per-arm STATIC-key
1094
+ // field dispatch (`armFieldSite`) for exactly this receiver kind before
1095
+ // this task -- so no emitter code was added for this claim, only the
1096
+ // preflight/lowering acceptance that a tagged union of tuples is as
1097
+ // closed-shape as a lone tuple already was.
1098
+ 'destructuring:array-pattern:tagged-union',
1099
+ // A general iterable source -- a `Generator<T>` reached directly (`var
1100
+ // [a, b] = g()`), or one whose `[Symbol.iterator]()` itself returns one
1101
+ // (a class/record method written as a generator, `generatorRecordTypeOf`
1102
+ // in `producers/protocol.ts`): `representation/publish.ts` derives the
1103
+ // shared source step's own `iterator-record` result straight off the
1104
+ // base's structural type with no override needed, because
1105
+ // `GeneratorDeclarationPolicy` (`representation/derive.ts`) already
1106
+ // carries a `Generator<T>` as the native `iterator(T)` cursor --
1107
+ // `%GeneratorPrototype%[@@iterator]` returns `this` (ECMA-262 27.5.1.2),
1108
+ // so the pattern's own "get iterator" step is an ALIAS of the base value,
1109
+ // never a construction, exactly as the tuple/array-object fast paths
1110
+ // above alias rather than build. `ir/lower-destructuring.ts`'s
1111
+ // `lowerArrayPatternSource` registers that alias, and each bound
1112
+ // element's own step advances the SAME cursor with `arrayNext()`/`done()`
1113
+ // -- the identical primitives a `for`-`of` over the same generator already
1114
+ // uses (`emit-iterator.ts`'s `emitIteratorNext`/`emitIteratorDone`), so no
1115
+ // new emission is needed, only the acceptance that a pattern may read
1116
+ // them one call per bound position instead of one call per loop
1117
+ // iteration.
1118
+ //
1119
+ // Scoped to a source that is ALREADY a cursor. A receiver whose
1120
+ // `[Symbol.iterator]()` is an ordinary method returning a hand-built
1121
+ // `{next, return}` record (the fully dynamic protocol
1122
+ // `mintIteratorSteps`/`emitDynamicGetIterator` render for `for`-`of`) is
1123
+ // a DIFFERENT shape -- a `record`/`class-ref`/`native-record-ref`
1124
+ // `iterator-record`, never this `iterator` one -- and this claim says
1125
+ // nothing about it; that shape stays correctly unclaimed for the
1126
+ // array-pattern form until this producer also mints the get-method/
1127
+ // get-iterator call the loop's own `mintIteratorSteps` already does.
1128
+ //
1129
+ // A REST element over the same cursor source (`[...xs] = g()`) is
1130
+ // deliberately NOT claimed alongside it: draining an unbounded cursor into
1131
+ // a fresh array needs an actual gathering LOOP, and every loop this IR
1132
+ // builds today lowers a real source-level `for`/`while`/`for`-`of`
1133
+ // construct through `control.ts`'s own census/gating wiring -- there is no
1134
+ // synthetic-loop desugaring an array-pattern's rest element could reach
1135
+ // for instead, so it stays refused at preflight rather than certifying a
1136
+ // shape nothing can lower.
1137
+ 'destructuring:array-pattern:iterator',
1138
+ 'destructuring:rest-element:array-object',
1139
+ // `const { strict, ...rest } = options` over a `record`/`native-record-ref`
1140
+ // source: the "object-pattern" segment in the obligation key
1141
+ // (`preflight/runtime-helper-key.ts`'s 'rest-element' case) keeps this
1142
+ // structurally distinct from `destructuring:rest-element:record` above,
1143
+ // which stays correctly unclaimed for the ARRAY-pattern tuple-rest case a
1144
+ // few lines up. This one is the opposite of that exclusion's reasoning:
1145
+ // an object-pattern rest's own type is `Omit<Source, K>`, a CLOSED field
1146
+ // set TypeScript already resolved at check time, not the general
1147
+ // `CopyDataProperties` over a key set computed at runtime -- so there is
1148
+ // no dynamic key enumeration to perform, only a field-by-field copy.
1149
+ // `ir/lower-destructuring.ts`'s `lowerObjectPatternRest` renders it: read
1150
+ // the rest binding's own required record layout, `[[Get]]` each field off
1151
+ // the source by name (the same primitive an object-pattern element read
1152
+ // already uses), and assemble the result with `allocateRecord` (the same
1153
+ // primitive an object literal's own allocation uses).
1154
+ 'destructuring:rest-element:object-pattern:record',
1155
+ 'destructuring:rest-element:object-pattern:native-record-ref',
1156
+ // An open dictionary's key set is runtime state. The lowering allocates a
1157
+ // fresh dictionary, uses the existing CopyDataProperties walk, and deletes
1158
+ // the pattern's excluded keys from that result; the source is unchanged.
1159
+ 'destructuring:rest-element:object-pattern:dictionary',
1160
+ // A class's constructor object is a pointer to the construct function
1161
+ // `translation-unit.ts` emits for that class, with no environment: a class
1162
+ // declaration captures nothing. A class *expression* inside a closure would,
1163
+ // and `emitAllocateConstructor` refuses a capture-carrying one by name.
1164
+ 'allocation:class-constructor-object:constructor-family',
1165
+ // An intrinsic JSX element (`<view>`, `<text>`, ...) allocates through
1166
+ // `gea::jsx::create`, with every prop and child threaded through
1167
+ // `gea::jsx::prop`/`gea::jsx::child`. `element:value` and
1168
+ // `element:fragment` are deliberately absent, and not for lack of effort:
1169
+ // an element whose tag names a value means whatever the library that
1170
+ // declared it says it means, so the recipe belongs to that library's
1171
+ // plugin and arrives with it. Claiming either here would assert this
1172
+ // backend can build something it has no definition of.
1173
+ 'element:intrinsic',
1174
+ // `ToBoolean`, per carrier, because the rule differs per carrier and a
1175
+ // backend that can test a number has said nothing about testing a record.
1176
+ // `dynamic` is claimed too, as of `gea::host::detail::toBoolean`
1177
+ // (gea_runtime.h): ECMA-262 7.1.2 is a closed nine-tag table, so a boxed
1178
+ // value's truthiness is answerable from its own tag (and, for a boxed
1179
+ // boolean/number/string, its payload) without any open-ended dispatch.
1180
+ // `unresolved` stays absent -- lattice bottom names no runtime value to
1181
+ // test at all.
1182
+ 'conversion:to-boolean:scalar',
1183
+ 'conversion:to-boolean:string',
1184
+ 'conversion:to-boolean:null',
1185
+ 'conversion:to-boolean:undefined',
1186
+ 'conversion:to-boolean:optional',
1187
+ 'conversion:to-boolean:tagged-union',
1188
+ 'conversion:to-boolean:class-ref',
1189
+ 'conversion:to-boolean:record',
1190
+ 'conversion:to-boolean:native-record-ref',
1191
+ 'conversion:to-boolean:array-object',
1192
+ 'conversion:to-boolean:dictionary',
1193
+ // Every Object is truthy: `new Map()` with zero entries is `true`, exactly
1194
+ // as `[]` is. `emit-presence.ts`'s always-truthy group renders it, and
1195
+ // `model.ts`'s `alwaysTruthyKinds` is what licenses a merge over one.
1196
+ 'conversion:to-boolean:keyed-collection',
1197
+ 'conversion:to-boolean:native-handle',
1198
+ 'conversion:to-boolean:function',
1199
+ 'conversion:to-boolean:function-family',
1200
+ 'conversion:to-boolean:function-value-family',
1201
+ 'conversion:to-boolean:function-value-dispatch',
1202
+ 'conversion:to-boolean:constructor-family',
1203
+ 'conversion:to-boolean:constructor-value-dispatch',
1204
+ 'conversion:to-boolean:function-and-constructor',
1205
+ 'conversion:to-boolean:dynamic',
1206
+ // `for`-`of`/argument-spread/`yield*` over a provably plain `T[]`: ECMA-262
1207
+ // 23.1.5's Array Iterator is a plain index/length walk over the exact
1208
+ // array, so `get-iterator` allocates a `gea::Iterator<T>` cursor directly
1209
+ // (no `[[Get]]` of `@@iterator`, no dynamic method call -- there is no
1210
+ // `protocol:iterator:get-method:*` claim anywhere in this manifest, and
1211
+ // there does not need to be one for this path) and `next` walks it
1212
+ // in-place (`targets/cpp/runtime/gea_runtime.h`'s `Iterator::arrayNext`,
1213
+ // `targets/cpp/emit-iterator.ts`). The carrier suffix is what keeps this
1214
+ // claim scoped to exactly that shape: `preflight/runtime-helper-key.ts`'s
1215
+ // `runtimeHelperKey` keys a protocol step by the operand carrier it reads,
1216
+ // so a for-of over any other iterable -- a `Map`, a `Set`, a genuinely
1217
+ // dynamic `Iterable<T>` -- resolves a different, unclaimed key
1218
+ // (`...:unresolved`, `...:dynamic`, ...) and is correctly refused here,
1219
+ // before lowering ever sees it. `next`'s own carrier is the iterator
1220
+ // *record* it advances, which by the time this step runs is the
1221
+ // `gea::Iterator<T>` the matching `get-iterator` already published
1222
+ // (`representation/publish.ts`'s `arrayFastPathIteratorCursorOf`) -- so
1223
+ // the claim reads `iterator`, the representation kind, not `array-object`.
1224
+ // `k in o`, stated by the file that renders it so the claim and the
1225
+ // rendering cannot drift: `emit-in.ts`'s `hasPropertyHelperClaims`.
1226
+ ...hasPropertyHelperClaims,
1227
+ 'protocol:iterator:get-iterator:array-object',
1228
+ // The same cursor over a `Set<T>` (ECMA-262 24.2.3.10): a fixed walk of
1229
+ // the collection's own insertion-ordered entries with no `@@iterator`
1230
+ // lookup, so `gea::Iterator<T>`'s Set constructor serves it and
1231
+ // `producers/shared.ts`'s `isNativeIterableSetType` is what keeps a
1232
+ // `get-method` step from being minted for one. `Map` is deliberately not
1233
+ // claimed -- its iterator yields a `[K, V]` pair with no cursor carrier --
1234
+ // and neither weak family iterates at all, so both still refuse by name.
1235
+ 'protocol:iterator:get-iterator:keyed-collection',
1236
+ // The same cursor over a `string` (ECMA-262 22.1.3.36
1237
+ // `String.prototype[@@iterator]`): one CODE POINT per step over immutable
1238
+ // storage, so there is nothing for `GetIterator` to resolve that the value
1239
+ // itself does not already answer, and `gea::Iterator<std::string>`'s
1240
+ // string constructor serves it. `producers/shared.ts`'s
1241
+ // `isNativeIterableStringType` is what keeps a `get-method` step from
1242
+ // being minted for one; a shape that CARRIES as `string` without matching
1243
+ // that predicate (a union of string literals) still mints one and refuses
1244
+ // on the unclaimed `protocol:iterator:get-method:string` instead, which is
1245
+ // the fail-closed direction.
1246
+ 'protocol:iterator:get-iterator:string',
1247
+ // A `Generator<T, TReturn, TNext>` (ECMA-262 27.5), carried as the same
1248
+ // `iterator(T)` cursor because a generator IS its own iterator:
1249
+ // `%GeneratorPrototype%[@@iterator]` returns `this`, so `get-iterator` over
1250
+ // one is an assignment (`emit-iterator.ts`) rather than a construction, and
1251
+ // `next` walks the coroutine frame `gea::Iterator<E>::promise_type` owns.
1252
+ 'protocol:iterator:get-iterator:iterator',
1253
+ // The four native cursors again, this time over a POSSIBLY-ABSENT source
1254
+ // (`T[] | undefined`, `Set<T> | null`, ...). Iterating an absent value is
1255
+ // a runtime `TypeError` in the language itself -- ECMA-262 7.4.2
1256
+ // `GetIterator` performs `GetMethod(obj, @@iterator)`, which throws on
1257
+ // `undefined`/`null` -- never a static impossibility, so the walk over a
1258
+ // present payload is byte-for-byte the walk over a bare one and the
1259
+ // absence is ONE extra fact: whether the walk starts.
1260
+ // `targets/cpp/emit-iterator.ts` spells that as
1261
+ // `gea::detail::requireIterablePresent` in front of the same cursor
1262
+ // constructor, and `producers/shared.ts`'s `presentIterationArm` is what
1263
+ // routes such a source onto this path at all rather than demanding an
1264
+ // `@@iterator` lookup this backend has no representation for. Measured on
1265
+ // three.js: `this.materialCache.get( material )` is `Set<T> | undefined`
1266
+ // from the collection census, and every `for`-`of` over one refused with
1267
+ // an unclaimed `protocol:iterator:get-method:optional`.
1268
+ //
1269
+ // Claimed under their OWN keys rather than folded into the four above --
1270
+ // `preflight/runtime-helper-key.ts`'s `optionalIterationSourceKind`
1271
+ // reports `optional(<payload kind>)`, the same spelling
1272
+ // `spreadSourceCarrierKind` uses -- so a payload this emitter cannot
1273
+ // unwrap (a fixed-arity tuple, whose positions are read through a lambda
1274
+ // capture instead of a cursor constructor) stays refused by name at
1275
+ // preflight instead of being certified and crashed at emission.
1276
+ //
1277
+ // `for`-`in`'s own absent claim sits beside its dictionary claims below,
1278
+ // and it is NOT one of these assertions: ECMA-262 14.7.5.5 evaluates an
1279
+ // `undefined`/`null` enumerate source to a BREAK completion and the loop
1280
+ // runs zero times, so it is spelled as an empty cursor instead.
1281
+ 'protocol:iterator:get-iterator:optional(array-object)',
1282
+ 'protocol:iterator:get-iterator:optional(keyed-collection)',
1283
+ 'protocol:iterator:get-iterator:optional(string)',
1284
+ 'protocol:iterator:get-iterator:optional(iterator)',
1285
+ 'protocol:iterator:next:iterator',
1286
+ // The GENERAL protocol: a class instance or a plain object whose
1287
+ // `[Symbol.iterator]()` is a real, program-written method (`Headers`'s
1288
+ // own, in `runtime/node/globals.ts`), rather than one of the native
1289
+ // sources above. `get-method` resolves the member (a `[[Get]]`,
1290
+ // `ir/lower-protocol.ts`'s own `get-method` case), `get-iterator` calls
1291
+ // it, and `next` calls the returned record's own `next()` once per step
1292
+ // -- all three claimed and rendered together by the file whose own
1293
+ // `dynamicIteratorHelperClaims` this spreads in, for the one-authority
1294
+ // reason `enumerateHelperClaims` already states below. `class-ref` and
1295
+ // `record` only: `preflight/runtime-helper-key.ts`'s
1296
+ // `iteratorMethodCarrierKind` keeps a "record" receiver with no
1297
+ // discoverable `@@iterator` FIELD -- an open tuple, whose iterator is
1298
+ // `Array.prototype`'s own -- off this claim, on the deliberately
1299
+ // unclaimed `record(no-iterator-method)` sibling instead.
1300
+ ...dynamicIteratorHelperClaims,
1301
+ // `for (const name of ['a', 'b'] as const)` -- a fixed-arity tuple, which
1302
+ // has no method to fetch at all and unrolls to a positional read; stated
1303
+ // by the file that renders it, same as the two lists around it.
1304
+ ...staticTupleIteratorHelperClaims,
1305
+ // `for (const k in table)` over a string-keyed index signature -- ECMA-262
1306
+ // 14.7.5.9 `EnumerateObjectProperties` -- carried as the same
1307
+ // `gea::Iterator<std::string>` cursor every claim above uses, walking
1308
+ // `gea::Dictionary::propertyKeys` (whose order IS
1309
+ // `OrdinaryOwnPropertyKeys`, 10.1.11, which is why that container holds
1310
+ // its entries in creation order rather than sorted). The carrier suffix
1311
+ // scopes this exactly: a `for`-`in` over a RECORD -- a struct whose keys
1312
+ // are a compile-time list, not a runtime table -- resolves
1313
+ // `protocol:enumerate:get-iterator:record`, which nothing claims, and is
1314
+ // refused here before lowering, exactly as an unclaimed iterable is.
1315
+ 'protocol:enumerate:get-iterator:dictionary(string)',
1316
+ 'protocol:enumerate:get-iterator:dictionary(symbol)',
1317
+ // The same two tables behind a possibly-absent carrier. This is the one
1318
+ // absent claim that is not a presence assertion: ECMA-262 14.7.5.5 runs a
1319
+ // `for`-`in` over `undefined`/`null` zero times, so `emit-iterator.ts`
1320
+ // spells it as `gea::detail::enumerateIfPresent` -- the table's own key
1321
+ // cursor when present, a default-constructed, already-done cursor when
1322
+ // not. Three's `WebGLPrograms.getProgramCacheKey` walks
1323
+ // `parameters.defines`, which the base-class overlay states
1324
+ // `Record | undefined` on `Material`, through an untyped JS parameter the
1325
+ // checker cannot narrow at the site's own `!== undefined` guard. Only
1326
+ // the two table domains: an absent record/class/host struct stays refused
1327
+ // by name (`runtime-helper-key.ts`'s `enumerateGetIteratorCarrierKind`)
1328
+ // because the static-snapshot walks read fields off the receiver itself.
1329
+ 'protocol:enumerate:get-iterator:optional(dictionary(string))',
1330
+ 'protocol:enumerate:get-iterator:optional(dictionary(symbol))',
1331
+ 'protocol:enumerate:next:iterator',
1332
+ // `for`-`in` over a statically shaped receiver (a record, a class
1333
+ // instance, a named interface/type-alias, ...) or a genuinely dynamic
1334
+ // one -- the two remaining enumeration sources, claimed by the file that
1335
+ // renders both (`emit-iterator.ts`'s own `enumerateHelperClaims`, spread
1336
+ // in here so the claim and the rendering stay one authority). This
1337
+ // claims the bare `native-record-ref` key only -- a data-only HOST-bound
1338
+ // declared type derives that identical `.kind` but is reported under the
1339
+ // refined, deliberately UNCLAIMED `native-record-ref(host-bound)` key
1340
+ // instead (`preflight/runtime-helper-key.ts`'s
1341
+ // `enumerateGetIteratorCarrierKind`), because `emitStaticEnumerateIterator`
1342
+ // throws for it: a host struct has no compiler-rendered field dispatcher.
1343
+ ...enumerateHelperClaims,
1344
+ // Object spread's `CopyDataProperties` (ECMA-262 7.3.25) when the
1345
+ // source's own-property set is not known until this runs -- a spread of
1346
+ // a union or an index-signature type into a literal whose own layout
1347
+ // resolves to a `dictionary` (`structural-layout-type.ts`'s
1348
+ // `layoutTypeAt`, "the one member of a union that can genuinely hold ANY
1349
+ // key the spread might copy"). `targets/cpp/emit-allocation.ts`'s
1350
+ // `emitSpreadCopy` renders it: a plain string/symbol `dictionary` source
1351
+ // walks its domain-matched `Dictionary::copyInto`/
1352
+ // `SymbolDictionary::copyInto` at runtime; the source->receiver suffix is
1353
+ // part of the certificate, so neither a numeric table nor a cross-domain
1354
+ // copy can borrow that claim. A `tagged-union`
1355
+ // source unrolls per arm, guarded by `armIs` -- claimed only under the
1356
+ // refined `tagged-union(record-or-dictionary)` key
1357
+ // (`preflight/runtime-helper-key.ts`'s `spreadSourceCarrierKind`), which
1358
+ // that same file computes as EXACTLY the union shapes `emitSpreadCopy`
1359
+ // can render (every arm a `dictionary`, or a `record` with no accessor
1360
+ // and no optional field) -- a union carrying any other arm kind keeps the
1361
+ // bare, deliberately unclaimed `tagged-union` key and refuses by name
1362
+ // before lowering ever reaches it.
1363
+ 'protocol:spread:next:dictionary(string->string)',
1364
+ 'protocol:spread:next:dictionary(symbol->symbol)',
1365
+ 'protocol:spread:next:tagged-union(record-or-dictionary)',
1366
+ // An `optional` source -- `headers?: HeaderRecord` in hono's own
1367
+ // `setDefaultContentType` (`...headers,` inside an object literal) --
1368
+ // refines the identical way one layer out: `CopyDataProperties` copies
1369
+ // nothing for `null`/`undefined`, so `emitSpreadCopy`'s `optional`
1370
+ // branch renders that absent case as no write at all, and the present
1371
+ // case recurses into the SAME per-arm dispatch above. Claimed only under
1372
+ // the refined `optional(tagged-union(record-or-dictionary))` key
1373
+ // (`preflight/runtime-helper-key.ts`'s `spreadSourceCarrierKind`, which
1374
+ // computes it via the identical `isCopyableSpreadUnion` check as the
1375
+ // bare tagged-union claim) -- an optional payload of any other shape
1376
+ // keeps its own bare `optional(...)` key, deliberately unclaimed.
1377
+ 'protocol:spread:next:optional(tagged-union(record-or-dictionary))',
1378
+ // A bare `dictionary` under `optional` -- `headers?: Record<string,
1379
+ // string>`, no union at all -- refines the identical one layer out too.
1380
+ // `emitSpreadSourceCopy`'s `optional` branch (`emit-allocation.ts`)
1381
+ // recurses on the present payload through its own generic `source.kind
1382
+ // !== 'tagged-union'` fallback, which reaches `emitSpreadArmCopy` and
1383
+ // then `emitSpreadDictionaryArmCopy` -- the identical `dictionary`-arm
1384
+ // render the matching domain-qualified bare dictionary claim above already
1385
+ // exercises for a non-optional source, just reached one payload-read
1386
+ // deeper. `spreadSourceCarrierKind` already computes this exact key
1387
+ // (`optional(dictionary(string->string))`, or its symbol sibling) and the
1388
+ // renderer already proven above is the only thing these claims add.
1389
+ 'protocol:spread:next:optional(dictionary(string->string))',
1390
+ 'protocol:spread:next:optional(dictionary(symbol->symbol))',
1391
+ // A source that simply IS a record `emitSpreadRecordArmCopy` can unroll --
1392
+ // no accessor member, every field required -- with no union and no
1393
+ // optional around it. `emitSpreadSourceCopy`'s own `source.kind !==
1394
+ // 'tagged-union'` fallback routes it to the identical `emitSpreadArmCopy`
1395
+ // dispatch a one-armed `tagged-union(record-or-dictionary)` already
1396
+ // reaches, so this claims a render already proven by the union claim
1397
+ // above, one arm-read shallower. Until now `spreadSourceCarrierKind`
1398
+ // returned the bare, unrefined `record` key for it, which meant `{ ...r }`
1399
+ // over a record refused while `{ ...(r as R | R2) }` over the same value
1400
+ // compiled -- the shape, not the union, is what the emitter reads.
1401
+ //
1402
+ // The refined key is what carries the proof. A field that may be absent is
1403
+ // copied under the independent presence bit generated beside its value --
1404
+ // `CopyDataProperties` copies the key only when the source has it, even
1405
+ // when the present value is `undefined`. A record with an accessor member
1406
+ // keeps the bare `record` key and stays deliberately unclaimed, exactly as
1407
+ // a union with an unrenderable arm does.
1408
+ 'protocol:spread:next:record(copyable)',
1409
+ // A `class-ref` and a data-only `native-record-ref` name their field list
1410
+ // instead of carrying it, and that list IS the instance's own enumerable
1411
+ // key set: methods and accessors are on the prototype, never own
1412
+ // properties, so `{ ...instance }` copies exactly the fields. This is the
1413
+ // same list `host/object-protocol.ts` already enumerates for
1414
+ // `Object.keys`/`Object.assign` over a class, reached here through
1415
+ // `representation/record-fields.ts`'s `staticOwnFieldsOf` -- which is
1416
+ // also what the refined key above is computed from, so the render and its
1417
+ // licence read one list rather than two.
1418
+ //
1419
+ // A HOST-stated struct keeps the bare, unclaimed `native-record-ref` key:
1420
+ // its own enumerable properties are the host's to define and nothing here
1421
+ // can know whether the C++ members it was told about are the JavaScript
1422
+ // object's own keys.
1423
+ 'protocol:spread:next:class-ref(copyable)',
1424
+ 'protocol:spread:next:native-record-ref(copyable)',
1425
+ 'protocol:spread:next:optional(class-ref(copyable))',
1426
+ 'protocol:spread:next:optional(native-record-ref(copyable))',
1427
+ // The same record under `optional`, for the reason
1428
+ // `optional(dictionary)`'s claim gives: the absent case copies nothing by
1429
+ // `CopyDataProperties`'s own definition, and the present case recurses
1430
+ // into the dispatch this file's previous claim already proves.
1431
+ 'protocol:spread:next:optional(record(copyable))',
1432
+ // `CopyDataProperties` over a genuinely dynamic source and a genuinely
1433
+ // dynamic fresh object. `emitSpreadCopy` walks the source's own keys,
1434
+ // filters its descriptors for enumerability, gets each value, then creates
1435
+ // a data property on the receiver. The `dynamic->dynamic` suffix is
1436
+ // mandatory: a dictionary receiver requires a different key-domain
1437
+ // contract and remains deliberately unclaimed.
1438
+ 'protocol:spread:next:dynamic->dynamic',
1439
+ // `yield x` inside a `function*`, and the resume point paired with it.
1440
+ //
1441
+ // The body is emitted as a C++20 coroutine returning `gea::Iterator<T>`
1442
+ // (`targets/cpp/emit.ts`'s `emitYield`, and its `return` terminator's
1443
+ // `co_return` arm); the resume boundary is a no-op because the coroutine
1444
+ // transform owns the resume point itself (`ir/lower-exceptions.ts`).
1445
+ //
1446
+ // Both are claimed for the WHOLE forms, not a narrowed slice, because
1447
+ // everything this backend cannot do about a generator is refused EARLIER,
1448
+ // by name, at the census: `producers/control.ts` refuses `yield*` (a
1449
+ // delegation loop in an expression position) and refuses a `yield` whose
1450
+ // own value is read (there is no resume channel to carry what `next(v)`
1451
+ // sends). What is left reaching these keys is exactly what the coroutine
1452
+ // renders.
1453
+ 'control:yield',
1454
+ 'boundary:generator-resume'
1455
+ ]),
1456
+ unsupportedRuntimeHelpers: new Set(),
1457
+ // `throw`, `break` and `continue`. `emit.ts`'s terminator renders a C++
1458
+ // `throw` of the thrown value's own carrier, and an uncaught one
1459
+ // terminating the process is what an uncaught ECMAScript exception already
1460
+ // does -- so that edge is genuinely handled, not half-handled. `break` and
1461
+ // `continue` are handled too, as of this patch: `ir/lower.ts`'s
1462
+ // `break`/`continue` case renders an ordinary `goto` to the loop's exit or
1463
+ // header/latch block, built from the same guard/loop machinery a plain loop
1464
+ // already uses.
1465
+ //
1466
+ // `suspend` is claimed too, now that `ir/lower.ts`'s `lowerBoundary` gives
1467
+ // it a real, honest handling: the edge between an `await` and its
1468
+ // `async-resume` boundary never becomes a runtime transfer at all, because
1469
+ // this backend's `await` completes synchronously (see `AwaitOperation`'s
1470
+ // doc comment, `ir/model.ts`) -- there is no queue to park a continuation
1471
+ // in, so "handled" here means "provably a no-op", not "renders a jump".
1472
+ //
1473
+ // `return` is the edge `producers/control.ts` mints ONLY when a `finally`
1474
+ // intercepts the completion, so claiming it is a claim about `finally` and
1475
+ // nothing else. What handles it is `gea::ScopeExit` (`runtime/
1476
+ // gea_runtime.h`), the object `emit-exceptions.ts` wraps the whole region in:
1477
+ // C++ destroys a scoped object on `return` exactly as ECMAScript runs a
1478
+ // finally clause on one, so the return stays an ordinary `return` terminator
1479
+ // and the interception is the destructor. The same object is what handles
1480
+ // this set's `break`/`continue` and `throw` edges when they cross a finally,
1481
+ // for the identical reason -- one mechanism, four completions, which is why
1482
+ // there is no completion record anywhere in the emit.
1483
+ abruptEdgeHandlers: new Set(['throw', 'break', 'continue', 'suspend', 'return'])
1484
+ });