@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,513 @@
1
+ import { controlFlowGraphOf } from '../../ir/dominance.js';
2
+ import { thrownValueCarrier } from '../../ir/lower-exceptions.js';
3
+ import { successorsOfTerminator } from '../../ir/queries.js';
4
+ import { createCppEmitBlockedError, defineValueBoundElsewhere, operandText } from './emit-context.js';
5
+ import { cppFinallyGuardName, cppFinallyPendingName, cppTypeOf } from './types.js';
6
+ /**
7
+ * Every block one part of a region owns: reachable from that part's entry
8
+ * without passing through the region's join, minus everything the try
9
+ * STATEMENT does not contain.
10
+ *
11
+ * The join is where both parts hand control back to the ordinary per-block
12
+ * loop, so it belongs to neither and stops the walk. A part that never reaches
13
+ * it -- both arms `return` -- simply runs out of successors instead.
14
+ *
15
+ * Reachability alone is not ownership, and a jump OUT of the part is what
16
+ * exposes the difference. A `continue` written inside a catch handler --
17
+ * hono's `SmartRouter.match` skipping a router that rejected the route set --
18
+ * targets the enclosing loop's latch, so the plain walk collected the latch,
19
+ * then the loop header, then the header's test, and then walked straight back
20
+ * into the try body: the handler "owned" the body's blocks and emission
21
+ * refused with `a catch handler contains a block reached by a jump from
22
+ * outside it`. The jump the source wrote is legal C++ (leaving a try block is
23
+ * fine; only entering one is not); it was the walk that was wrong.
24
+ *
25
+ * Two cuts fix it, and both are about what the BRACES may contain rather than
26
+ * about what control can reach.
27
+ *
28
+ * The first is the enclosing loop's own cycle. A block from which the region's
29
+ * `tryEntry` is reachable again -- without going through the join, which the
30
+ * walk already stops at -- can only be on a path that RE-ENTERS the try
31
+ * statement, so it is the enclosing loop's latch, header or test and not part
32
+ * of this statement at all. That is exactly what ECMAScript says: `continue`
33
+ * completes the try statement first and the incrementor runs after it, so
34
+ * rendering the latch inside `try { }` would put a throwing `for (;; next())`
35
+ * under a handler the language says it has left. A loop written INSIDE the try
36
+ * body is untouched, because its latch reaches its own header and never
37
+ * `tryEntry` -- nothing jumps back to the first block of a try statement from
38
+ * within it.
39
+ *
40
+ * The second is entry-dominance, as a fixpoint rather than a dominator query:
41
+ * a catch entry is reached by NO control-flow edge and so is globally
42
+ * unreachable, and `dominatorTreeOf` fails closed on exactly the part that
43
+ * needs it most. Dropping every non-entry block that has a predecessor outside
44
+ * the set, until nothing more drops, computes entry-dominance within the
45
+ * walked subgraph, which is what the braces require: a block rendered inside
46
+ * them must have no way in except through them.
47
+ *
48
+ * Neither cut can shrink a set that used to be accepted. `verifyNoInboundJumps`
49
+ * already demanded that no non-entry owned block have an outside predecessor
50
+ * -- the fixpoint's own stopping condition -- and a set holding a block that
51
+ * re-enters `tryEntry` necessarily held `tryEntry`'s outside predecessor too,
52
+ * which that check refused.
53
+ */
54
+ const collectPartBlocks = (body, entry, join, regionEntry) => {
55
+ const owned = new Set();
56
+ const pending = [entry];
57
+ while (pending.length > 0) {
58
+ const current = pending.pop();
59
+ if (current === undefined || current === join || owned.has(current))
60
+ continue;
61
+ owned.add(current);
62
+ const block = body.blocks.get(current);
63
+ if (!block)
64
+ throw new Error(`ir body ${body.owner} names block ${current} in a try region but has no matching block`);
65
+ for (const successor of successorsOfTerminator(block.terminator))
66
+ pending.push(successor);
67
+ }
68
+ const predecessors = controlFlowGraphOf(body).predecessors;
69
+ // Backwards from the region's own first block, over predecessors the walk
70
+ // already admitted: every block from which the try statement is re-entered.
71
+ const reenters = new Set();
72
+ const backwards = [regionEntry];
73
+ while (backwards.length > 0) {
74
+ const current = backwards.pop();
75
+ if (current === undefined)
76
+ continue;
77
+ for (const from of predecessors.get(current) ?? []) {
78
+ if (!owned.has(from) || reenters.has(from))
79
+ continue;
80
+ reenters.add(from);
81
+ backwards.push(from);
82
+ }
83
+ }
84
+ for (const id of reenters)
85
+ if (id !== entry)
86
+ owned.delete(id);
87
+ for (let dropped = true; dropped;) {
88
+ dropped = false;
89
+ for (const id of owned) {
90
+ if (id === entry)
91
+ continue;
92
+ if ((predecessors.get(id) ?? []).every((from) => owned.has(from)))
93
+ continue;
94
+ owned.delete(id);
95
+ dropped = true;
96
+ }
97
+ }
98
+ return owned;
99
+ };
100
+ /**
101
+ * The rendering order for one part: its entry first, then everything else in
102
+ * the body's own block order.
103
+ *
104
+ * The entry has to come first because it is reached by FALLTHROUGH -- into
105
+ * `try {` from the predecessor whose `goto` `emit.ts` omits, and into
106
+ * `catch (...) {` from the native unwinder. Neither can land on a label, so
107
+ * whatever is written first inside those braces is what runs first. Every other
108
+ * block is reached by an ordinary `goto` and so may sit in any order; taking
109
+ * the body's own keeps the output stable and matches the loop outside.
110
+ */
111
+ const partOrder = (body, owned, entry, rendersItself) => [entry, ...body.blockOrder.filter((id) => owned.has(id) && id !== entry && !rendersItself.has(id))];
112
+ /**
113
+ * Every block a region owns, across all three of its parts and every region
114
+ * nested inside them. A nested region's catch handler and finally clause are
115
+ * reached by no control-flow edge, so a reachability walk from the outer
116
+ * part's entry never finds them -- yet textually they sit inside the outer
117
+ * braces, and a jump out of them to the outer part is a jump WITHIN the outer
118
+ * try block, which C++ allows. Counting them as the outer part's own is what
119
+ * lets `verifyNoInboundJumps` see that edge for what it is.
120
+ */
121
+ const blocksOfRegion = (body, region, rendering) => {
122
+ const all = new Set();
123
+ for (const entry of [region.tryEntry, region.catchEntry, region.finallyEntry]) {
124
+ if (entry === null)
125
+ continue;
126
+ for (const id of collectPartBlocks(body, entry, region.join, region.tryEntry))
127
+ all.add(id);
128
+ }
129
+ for (const id of [...all]) {
130
+ const nested = id === region.tryEntry ? undefined : rendering.regionByTryEntry.get(id);
131
+ if (nested)
132
+ for (const inner of blocksOfRegion(body, nested, rendering))
133
+ all.add(inner);
134
+ // A finite destructuring / `for`-`of` written directly inside this try
135
+ // region's own body/handler/finally names its OWN block list already
136
+ // (`IrIteratorCloseRegion.blocks`, computed by `iterator-close-regions-of`
137
+ // in `ir/lower.ts` over the very same predecessor-closure `closeRegionOverGraph`
138
+ // uses for a loop's) -- no recursive reachability walk is needed here the
139
+ // way a try region's needs one for its handler/finally, which no ordinary
140
+ // control-flow edge reaches.
141
+ const nestedIteratorClose = id === region.tryEntry ? undefined : rendering.iteratorCloseRegionByEntry.get(id);
142
+ if (nestedIteratorClose)
143
+ for (const inner of nestedIteratorClose.blocks)
144
+ all.add(inner);
145
+ }
146
+ return all;
147
+ };
148
+ /**
149
+ * Refuses a part no native `try`/`catch` can express, by name, before a line of it is written.
150
+ *
151
+ * The rule C++ states is narrow and exact: a `goto` may not enter a `try` block
152
+ * or a handler from outside. So every edge into an interior block must come
153
+ * from inside the same part, and the entry itself may be entered from outside
154
+ * at most once -- that one entry being the fallthrough. A second outside
155
+ * predecessor would need a `goto` the language does not allow, and a source
156
+ * program cannot write one anyway; reaching this means the graph disagrees with
157
+ * the source, which is worth saying rather than silently emitting a jump the
158
+ * compiler will reject.
159
+ */
160
+ const verifyNoInboundJumps = (body, owned, entry, describe) => {
161
+ const predecessors = controlFlowGraphOf(body).predecessors;
162
+ for (const id of owned) {
163
+ const outside = (predecessors.get(id) ?? []).filter((from) => !owned.has(from));
164
+ if (id === entry) {
165
+ if (outside.length > 1) {
166
+ throw createCppEmitBlockedError('runtime-helper:control:try', `${describe} is entered from ${outside.length} places outside it; C++ enters a try block by falling into it, which admits exactly one`);
167
+ }
168
+ continue;
169
+ }
170
+ if (outside.length > 0) {
171
+ throw createCppEmitBlockedError('runtime-helper:control:try', `${describe} contains a block reached by a jump from outside it, which C++ forbids ("goto" into a try block)`);
172
+ }
173
+ }
174
+ };
175
+ /**
176
+ * One part's blocks, rendered exactly as the ordinary per-block loop renders
177
+ * every other block: label, operations, merge writes, terminator.
178
+ *
179
+ * A label is written only for a block something in this part actually jumps to.
180
+ * Nothing outside can (that is what `verifyNoInboundJumps` just established),
181
+ * so an untargeted block needs no label -- which keeps the common straight-line
182
+ * case rendering as the plain run of statements it always was.
183
+ *
184
+ * The terminator is always rendered, including the trailing `jump` to the
185
+ * region's join. That jump used to be omitted, on the reasoning that the join's
186
+ * own text follows immediately and fallthrough reaches it either way. That
187
+ * holds for exactly one exit; a body that branches has several, and only one of
188
+ * them can be the last thing inside the brace. Writing the `goto` every time is
189
+ * correct for all of them, and costs a jump to the next line in the case that
190
+ * used to fall through.
191
+ */
192
+ const renderPart = (ctx, body, rendering, order, owned, skipFirstOperation, entryLabelledOutside) => {
193
+ const targeted = new Set();
194
+ for (const id of owned) {
195
+ const block = body.blocks.get(id);
196
+ if (!block)
197
+ continue;
198
+ for (const successor of successorsOfTerminator(block.terminator))
199
+ if (owned.has(successor))
200
+ targeted.add(successor);
201
+ }
202
+ const lines = [];
203
+ order.forEach((id, index) => {
204
+ const block = body.blocks.get(id);
205
+ if (!block)
206
+ return;
207
+ // A nested try statement is rendered where its entry falls, as its own
208
+ // `try`/`catch` text inside this part's braces: C++ nests try blocks
209
+ // freely, and the nested region's interior blocks were left out of this
210
+ // part's order (`partOrder`) precisely so the nested rendering owns them.
211
+ const nested = index === 0 ? undefined : rendering.regionByTryEntry.get(id);
212
+ if (nested) {
213
+ renderTryRegion(ctx, lines, body, nested, rendering);
214
+ return;
215
+ }
216
+ // The identical accommodation for a `for`-`of`/finite-destructuring
217
+ // IteratorClose region whose entry falls inside this part: it renders its
218
+ // own `CompletionGuard`/`try`/`catch` text, exactly as a nested try does.
219
+ const nestedIteratorClose = index === 0 ? undefined : rendering.iteratorCloseRegionByEntry.get(id);
220
+ if (nestedIteratorClose) {
221
+ rendering.renderIteratorCloseRegion(ctx, lines, body, nestedIteratorClose, rendering);
222
+ return;
223
+ }
224
+ // The entry's own label belongs OUTSIDE the braces -- `renderTryRegion`
225
+ // writes it there so a jump into the region is an ordinary `goto` -- and
226
+ // repeating it here would define one label twice.
227
+ if (targeted.has(id) && !(index === 0 && entryLabelledOutside))
228
+ lines.push(`${rendering.labelOf(rendering.labels, id)}:`);
229
+ const operations = index === 0 && skipFirstOperation ? block.operations.slice(1) : block.operations;
230
+ for (const operation of operations) {
231
+ // A read the hoist plan RELOCATED renders in its destination block, not
232
+ // here. The ordinary per-block loop has always skipped it at its origin;
233
+ // this part did not, and a try body holding a loop-invariant read inside
234
+ // an enclosing loop -- `try { found = attempt(i) } catch { continue }`,
235
+ // whose `attempt` binding is hoisted to the loop's preheader -- defined
236
+ // the same SSA value twice. It went unseen only because every shape that
237
+ // reaches it was refused a step earlier, for the unrelated reason
238
+ // `collectPartBlocks` records.
239
+ const result = 'result' in operation ? operation.result : null;
240
+ if (result && rendering.relocated.has(result.id))
241
+ continue;
242
+ rendering.emitOperation(ctx, lines, operation);
243
+ }
244
+ // The other half of the same plan, in the same order the ordinary loop
245
+ // writes it: the reads hoisted INTO this block, then the merge writes,
246
+ // then a dense window's setup, then a counted fill loop -- which REPLACES
247
+ // the terminator, and says so by answering `true`.
248
+ rendering.emitHoistedInto(ctx, lines, id);
249
+ for (const write of rendering.mergeWrites.get(id) ?? [])
250
+ lines.push(`${write.name} = ${operandText(ctx, write.value)};`);
251
+ if (rendering.emitBlockTail(ctx, lines, id))
252
+ return;
253
+ rendering.emitTerminator(ctx, lines, rendering.labels, rendering.isSingleBlock, block.terminator);
254
+ });
255
+ return lines;
256
+ };
257
+ /** Every block of one part, refused as a whole if it holds a shape no native handler can express. */
258
+ const preparePart = (body, rendering, region, entry, join, describe) => {
259
+ const reachable = collectPartBlocks(body, entry, join, region.tryEntry);
260
+ // A nested try statement's blocks -- all three parts, handlers included --
261
+ // belong to this part for ownership and for the inbound-jump check, and are
262
+ // rendered by the nested region itself rather than by this part's loop.
263
+ const owned = new Set(reachable);
264
+ const rendersItself = new Set();
265
+ for (const id of reachable) {
266
+ const nested = id === entry ? undefined : rendering.regionByTryEntry.get(id);
267
+ if (nested) {
268
+ for (const inner of blocksOfRegion(body, nested, rendering)) {
269
+ owned.add(inner);
270
+ if (inner !== id)
271
+ rendersItself.add(inner);
272
+ }
273
+ continue;
274
+ }
275
+ // A finite destructuring/`for`-`of` IteratorClose region written directly
276
+ // in this part is the reverse nesting of the ordinary case above -- see
277
+ // `RegionRendering.iteratorCloseRegionByEntry`'s own comment -- and is
278
+ // folded in the identical way: its blocks belong to this part's ownership
279
+ // and inbound-jump check, but its ENTRY renders itself.
280
+ const nestedIteratorClose = id === entry ? undefined : rendering.iteratorCloseRegionByEntry.get(id);
281
+ if (nestedIteratorClose) {
282
+ for (const inner of nestedIteratorClose.blocks) {
283
+ owned.add(inner);
284
+ if (inner !== id)
285
+ rendersItself.add(inner);
286
+ }
287
+ }
288
+ }
289
+ verifyNoInboundJumps(body, owned, entry, describe);
290
+ return { owned, order: partOrder(body, owned, entry, rendersItself) };
291
+ };
292
+ /**
293
+ * The C++ type of a finally clause's scope guard, and the name one region's
294
+ * guard is declared under.
295
+ *
296
+ * A destructor is the mechanism for THREE of the four completions. ECMAScript
297
+ * says a finally block runs however the try body completes, and C++ says a
298
+ * scoped object is destroyed however the scope is left -- falling off the end,
299
+ * `return`, and a `goto` past it (which is what `break`/`continue` lower to
300
+ * here). Those stay ordinary IR terminators and the guard covers each with no
301
+ * completion record and no dispatch.
302
+ *
303
+ * The fourth -- an exception propagating out of the try body or the catch
304
+ * handler -- is the one a destructor CANNOT express, and it is why a pending
305
+ * slot sits beside the guard. C++ destroys the guard while that exception is
306
+ * unwinding, and a destructor that throws during unwinding calls
307
+ * `std::terminate`; ECMAScript instead says the clause's own throw REPLACES
308
+ * the in-flight completion (14.15.3: the finally block's abrupt completion is
309
+ * the statement's completion). The two are not reconcilable while the clause
310
+ * runs under an unwind, so the emitted region does not let it: an outer
311
+ * `catch (...)` parks the exception in an `std::exception_ptr` declared before
312
+ * the guard's scope, the scope then closes NORMALLY -- so a clause that throws
313
+ * propagates ordinarily and the parked exception is simply dropped, which is
314
+ * exactly the replacement ECMAScript asks for -- and a rethrow after the scope
315
+ * resumes the parked one when the clause completes normally.
316
+ *
317
+ * `generator-finite-destructuring-close.ts` is the program that made this
318
+ * necessary: `.return()` on a paused generator is delivered as a `ReturnSignal`
319
+ * throw at the `yield` (`gea_runtime.h`'s `YieldAwaiter::await_resume`), so a
320
+ * `finally { throw x }` in that generator ran under an unwind on EVERY close,
321
+ * not on some rare path, and aborted the process instead of delivering `x` to
322
+ * the caller's `catch`. The park makes `ReturnSignal` an ordinary parked
323
+ * completion like any other: dropped when the clause throws, rethrown into the
324
+ * promise's `unhandled_exception` when it does not.
325
+ *
326
+ * The names are keyed by the region's own operation id so two try statements in
327
+ * one function never collide, and so the declarations are stable across builds.
328
+ */
329
+ const finallyGuardType = 'const gea::ScopeExit';
330
+ const finallyGuardName = (region) => cppFinallyGuardName(region.region);
331
+ const finallyPendingName = (region) => cppFinallyPendingName(region.region);
332
+ /**
333
+ * The finally clause's own blocks, refused by name for every shape a
334
+ * destructor body cannot express.
335
+ *
336
+ * Three of them, and each is a real source program rather than a hypothetical:
337
+ *
338
+ * - a `return` written inside the finally clause. `producers/control.ts`'s
339
+ * `nearestInterceptingFinally` deliberately does NOT intercept a completion
340
+ * originating inside the clause itself, so such a return reaches lowering as
341
+ * an ordinary one -- and an ordinary `return` inside the guard's lambda would
342
+ * return from the LAMBDA, leaving the enclosing function running. That is a
343
+ * silent miscompile, not a compile error, which is exactly the kind this
344
+ * refuses rather than emits.
345
+ * - a `break`/`continue` inside the clause targeting an enclosing loop. It
346
+ * lowers to a jump to a block outside the clause, and `verifyNoInboundJumps`
347
+ * catches it from the other side: the loop's own exit or latch becomes
348
+ * reachable from this part while the loop's branch also reaches it from
349
+ * outside.
350
+ * - a clause sharing a block with the try body or the catch handler, which
351
+ * would put one run of statements inside two different braces.
352
+ *
353
+ * A `throw` inside the clause is NOT refused here and does not need to be: it
354
+ * lowers to an ordinary `throw` terminator, and `gea::ScopeExit` is
355
+ * deliberately not `noexcept`, so it propagates the way ECMAScript says it
356
+ * does. It used to need the caveat that a clause throwing while an exception
357
+ * was ALREADY propagating terminated instead of replacing it; the region's
358
+ * pending slot removes that case rather than stating it -- see
359
+ * `finallyGuardType`.
360
+ */
361
+ const prepareFinallyPart = (body, rendering, region, tryOwned, catchOwned) => {
362
+ if (region.finallyEntry === null)
363
+ throw new Error('prepareFinallyPart called for a region with no finally clause');
364
+ const part = preparePart(body, rendering, region, region.finallyEntry, region.join, 'a finally clause');
365
+ for (const id of part.owned) {
366
+ if (tryOwned.has(id) || catchOwned?.has(id) === true) {
367
+ throw createCppEmitBlockedError('runtime-helper:control:finally', 'a finally clause shares a block with the try body or catch handler, so neither owns it');
368
+ }
369
+ // The clause's own exit is the one `return` terminator here that is not a
370
+ // source `return`: `lower-flow.ts` builds it to give the part's normal
371
+ // completion a block, and falling off the end of the guard body is exactly
372
+ // what it means. Every other one came from the program.
373
+ if (id === region.finallyExit)
374
+ continue;
375
+ const block = body.blocks.get(id);
376
+ if (block?.terminator.kind === 'return') {
377
+ throw createCppEmitBlockedError('abrupt-edge:return', 'a "return" written inside a finally clause would return from the scope guard that runs the clause, not from the function');
378
+ }
379
+ }
380
+ return part;
381
+ };
382
+ /**
383
+ * The finally clause's rendering, differing from every other part's in TWO
384
+ * terminators: its own `finallyExit`, and a `throw`.
385
+ *
386
+ * The clause's body is a LAMBDA returning `void`, and the enclosing function's
387
+ * return type is not this lambda's. `emit-return.ts` renders a valueless return
388
+ * against the enclosing function's ABI -- for a `Promise<void>` result it
389
+ * writes `return gea::Promise<void>::settled_value();`, because a bare
390
+ * `return;` from a function declared to return a class type is a C++ error.
391
+ * Inside the guard body that reasoning is inverted and the bare `return;` is
392
+ * the only correct text, so the override is here rather than a condition inside
393
+ * `emit-return.ts`: the fact that differs is which function is being returned
394
+ * from, and only this caller knows it.
395
+ *
396
+ * `emit.ts`'s own `throw` case appends an unreachable `co_return;` whenever
397
+ * `ctx.generatorBody` is set, so a `function*` whose body is nothing but a
398
+ * `throw` still compiles as a coroutine (see that file's comment). `ctx` is
399
+ * the whole PHYSICAL BODY's context and cannot tell "the generator's own
400
+ * frame" apart from "a plain lambda this body happens to render inside it" --
401
+ * and a finally clause's guard is exactly the latter: `gea::ScopeExit`'s
402
+ * `[&]() { ... }` is an ordinary `void`-returning lambda even when the
403
+ * generator that owns it is a coroutine. `defaultGenerator`'s `finally {
404
+ * ...; throw x }` (`generator-finite-destructuring-close.ts`) emitted that
405
+ * `co_return;` straight into the guard lambda, and clang refuses a `co_return`
406
+ * in a function with a deduced return type. The throw itself is unaffected by
407
+ * this override -- it is a real ECMAScript throw out of the guard, exactly as
408
+ * `renderTryRegion`'s own header comment already says a `throw` in a finally
409
+ * clause is not refused and needs no special handling beyond an ordinary
410
+ * `throw` terminator.
411
+ */
412
+ const finallyRendering = (rendering) => ({
413
+ ...rendering,
414
+ emitTerminator: (ctx, lines, labels, isSingleBlock, terminator) => {
415
+ if (terminator.kind === 'return' && terminator.value === null) {
416
+ lines.push('return;');
417
+ return;
418
+ }
419
+ if (terminator.kind === 'throw') {
420
+ lines.push(`throw ${operandText(ctx, terminator.value)};`);
421
+ return;
422
+ }
423
+ rendering.emitTerminator(ctx, lines, labels, isSingleBlock, terminator);
424
+ }
425
+ });
426
+ /** Renders one region's `try { } catch (...) { }` text and returns every block it consumed, so the caller can skip them in the ordinary per-block loop. */
427
+ export const renderTryRegion = (ctx, lines, body, region, rendering) => {
428
+ const tryPart = preparePart(body, rendering, region, region.tryEntry, region.join, 'a try body');
429
+ if (region.catchEntry === null && region.finallyEntry === null) {
430
+ // Every `TryStatement` the checker accepted has a catch or a finally, so
431
+ // a region with neither is one whose handler the lowering proved dead --
432
+ // a try body nothing in it can throw out of. The body is then ordinary
433
+ // straight-line code and is rendered as exactly that: no braces, no
434
+ // handler, the same blocks in the same order.
435
+ lines.push(`${rendering.labelOf(rendering.labels, region.tryEntry)}:`);
436
+ lines.push(...renderPart(ctx, body, rendering, tryPart.order, tryPart.owned, false, true));
437
+ return [...tryPart.owned];
438
+ }
439
+ const catchPart = region.catchEntry === null ? null : preparePart(body, rendering, region, region.catchEntry, region.join, 'a catch handler');
440
+ for (const id of catchPart?.owned ?? []) {
441
+ // Two parts sharing a block would put one run of statements inside both
442
+ // braces, which is not a rendering problem but a claim about the graph that
443
+ // cannot be true: nothing reaches a handler except by throwing.
444
+ if (tryPart.owned.has(id))
445
+ throw createCppEmitBlockedError('runtime-helper:control:try', 'a try body and its catch handler share a block, so neither owns it');
446
+ }
447
+ const finallyPart = region.finallyEntry === null ? null : prepareFinallyPart(body, rendering, region, tryPart.owned, catchPart?.owned ?? null);
448
+ const catchEntryBlock = region.catchEntry === null ? null : body.blocks.get(region.catchEntry);
449
+ if (region.catchEntry !== null && !catchEntryBlock) {
450
+ throw new Error(`ir body ${body.owner} names catch block ${region.catchEntry} but has no matching block`);
451
+ }
452
+ const firstOperation = catchEntryBlock?.operations[0];
453
+ const binding = firstOperation && firstOperation.kind === 'catch-binding' ? firstOperation : null;
454
+ // A native C++ handler catches BY TYPE, so this parameter's type and the type
455
+ // every `throw` actually throws are one fact, not two. `ir/lower.ts` converts
456
+ // every thrown value into `thrownValueCarrier` for that reason; this is the
457
+ // other half of the same agreement, checked rather than assumed -- the two
458
+ // sides sat in different files with no test between them, and the version
459
+ // that disagreed emitted `throw v0;` of a `std::string` against
460
+ // `catch (const gea::Value& v1)`: clang-clean, certificate clean, and the
461
+ // handler the source program wrote never ran. Compared on the C++ spelling
462
+ // rather than on `representationKey`, because agreeing physically is the
463
+ // whole requirement: a caught binding's carrier states the reason
464
+ // `'declared-any-never-narrowed'` (the checker's `unknown`) where the thrown
465
+ // one states `'thrown-error-carrier'`, and those are the same storage.
466
+ if (binding && cppTypeOf(binding.result.representation) !== cppTypeOf(thrownValueCarrier)) {
467
+ throw createCppEmitBlockedError('runtime-helper:control:catch', `a catch clause binds its parameter as "${cppTypeOf(binding.result.representation)}" but every throw carries ` +
468
+ `"${cppTypeOf(thrownValueCarrier)}"; a native handler matches by type, so this handler could never catch`);
469
+ }
470
+ const parameter = binding ? `const ${cppTypeOf(binding.result.representation)}& ${defineValueBoundElsewhere(ctx, binding.result)}` : '...';
471
+ // The region's entry label, immediately BEFORE the `try` rather than inside
472
+ // it. C++ forbids transferring control into a try block, which is why this
473
+ // rendering used to demand that the predecessor fall through -- the region's
474
+ // text had to be the next thing emitted, and a block order that put anything
475
+ // between the two refused. A label on the try STATEMENT is not inside the
476
+ // block, so an ordinary `goto` reaches it and the region can be rendered
477
+ // wherever the block order puts it. The cost is a jump to the next line in
478
+ // the case that used to fall through, the same trade `renderPart`'s own
479
+ // terminator note already records.
480
+ lines.push(`${rendering.labelOf(rendering.labels, region.tryEntry)}:`);
481
+ // The guard's own scope opens OUTSIDE the label's statement, so a `goto` to
482
+ // the region enters this block from the top and initializes the guard on the
483
+ // way in. Jumping PAST the initialization of an object with a destructor is
484
+ // what C++ forbids, and entering the block normally is not that.
485
+ // The pending slot is declared OUTSIDE the guard's scope, so the rethrow that
486
+ // reads it can be written AFTER the guard has been destroyed -- which is the
487
+ // whole reason the slot exists (`finallyGuardType`'s comment says why).
488
+ if (finallyPart) {
489
+ lines.push('{');
490
+ lines.push(`std::exception_ptr ${finallyPendingName(region)};`);
491
+ lines.push('{');
492
+ lines.push(`${finallyGuardType} ${finallyGuardName(region)}{[&]() {`);
493
+ lines.push(...renderPart(ctx, body, finallyRendering(rendering), finallyPart.order, finallyPart.owned, false, true));
494
+ lines.push('}};');
495
+ lines.push('try {');
496
+ }
497
+ if (catchPart !== null)
498
+ lines.push('try {');
499
+ lines.push(...renderPart(ctx, body, rendering, tryPart.order, tryPart.owned, false, true));
500
+ if (catchPart) {
501
+ lines.push('}');
502
+ lines.push(`catch (${parameter}) {`);
503
+ lines.push(...renderPart(ctx, body, rendering, catchPart.order, catchPart.owned, binding !== null, false));
504
+ lines.push('}');
505
+ }
506
+ if (finallyPart) {
507
+ lines.push(`} catch (...) { ${finallyPendingName(region)} = std::current_exception(); }`);
508
+ lines.push('}');
509
+ lines.push(`if (${finallyPendingName(region)}) std::rethrow_exception(${finallyPendingName(region)});`);
510
+ lines.push('}');
511
+ }
512
+ return [...tryPart.owned, ...(catchPart?.owned ?? []), ...(finallyPart?.owned ?? [])];
513
+ };
@@ -0,0 +1,4 @@
1
+ import type { GetOperation } from '../../ir/model.js';
2
+ import { type EmitContext } from './emit-context.js';
3
+ /** Print the class identities and conversion nodes certified on the read. */
4
+ export declare const nativeFieldOwnerReadText: (ctx: EmitContext, operation: GetOperation) => string | null;
@@ -0,0 +1,27 @@
1
+ import { createCppEmitBlockedError, operandText } from './emit-context.js';
2
+ import { recipeText } from './emit-narrowing.js';
3
+ import { cppClassName, cppRecordFieldName, cppRecordFieldPresenceName, cppTypeOf } from './types.js';
4
+ /** Print the class identities and conversion nodes certified on the read. */
5
+ export const nativeFieldOwnerReadText = (ctx, operation) => {
6
+ const recipe = operation.nativeFieldOwnerRead;
7
+ if (!recipe)
8
+ return null;
9
+ const render = (id, value) => {
10
+ const node = ctx.conversions.nodeById(id);
11
+ const text = node ? recipeText(ctx, node, value) : null;
12
+ if (text === null)
13
+ throw createCppEmitBlockedError(`conversion:${id}`, 'a certified native field-owner read has no conversion renderer');
14
+ return text;
15
+ };
16
+ const missing = render(recipe.missing, 'gea::Undefined{}');
17
+ const arms = recipe.arms.map((arm) => {
18
+ const type = cppClassName(arm.member.declaration);
19
+ const value = `gea_field_owner->${cppRecordFieldName(recipe.key)}`;
20
+ const present = `gea_field_owner->${cppRecordFieldPresenceName(recipe.key)}`;
21
+ return (`if (gea::host::hasNativeClassLayoutRef<${type}>(gea_field_receiver)) { ` +
22
+ `const auto gea_field_owner = gea::host::downcastClassRef<${type}>(gea_field_receiver); ` +
23
+ `return ${present} ? ${render(arm.conversion, value)} : ${missing}; }`);
24
+ });
25
+ return (`([&]() -> ${cppTypeOf(operation.result.representation)} { const auto& gea_field_receiver = ${operandText(ctx, operation.receiver)}; ` +
26
+ `${arms.join(' ')} return ${missing}; })()`);
27
+ };
@@ -0,0 +1,31 @@
1
+ import type { HasPropertyOperation } from '../../ir/model.js';
2
+ import { type EmitContext } from './emit-context.js';
3
+ /**
4
+ * The single `[[HasProperty]]` dispatcher.
5
+ *
6
+ * The runtime-table renderer is asked first and the layout rules second because
7
+ * the two are disjoint by construction -- a `dynamic` receiver has no layout to
8
+ * read fields from, and no other carrier owns that table -- so the order states
9
+ * a preference that can never be exercised rather than hiding a fallthrough.
10
+ */
11
+ export declare const emitHasProperty: (ctx: EmitContext, lines: string[], operation: HasPropertyOperation) => void;
12
+ /**
13
+ * The `computation:in:*` rows this file renders, stated here rather than in
14
+ * `manifest.ts` so the claim and the rendering are one authority: a row added
15
+ * to the manifest without a branch above would certify a program this file then
16
+ * refuses, which is the certify-then-crash the whole obligation census exists
17
+ * to prevent.
18
+ *
19
+ * `record(own-field)` is the constant `true` above; the two `dictionary(...)`
20
+ * domains are the two containers' own `has`, claimed separately because
21
+ * `gea::Dictionary` (string-keyed) and `gea::NumericDictionary` (double-keyed)
22
+ * are different types and a key of the wrong domain would not compile.
23
+ *
24
+ * The `dynamic` rows are the four key forms `propertyKeyText` can turn into a
25
+ * `gea::PropertyKey` -- a string constant, a numeric constant, a `std::string`,
26
+ * a `gea::Symbol`, and a number through ToString. A boolean or bigint key is
27
+ * deliberately absent: ToPropertyKey over one is ToString of it, which is a
28
+ * conversion this backend does not install for those domains, so it is refused
29
+ * by name at the site rather than certified here and crashed on there.
30
+ */
31
+ export declare const hasPropertyHelperClaims: readonly string[];