@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,47 @@
1
+ import type { CallOperation } from '../../../ir/model.js';
2
+ import type { Representation } from '../../../representation/model.js';
3
+ import { type EmitContext } from '../emit-context.js';
4
+ /**
5
+ * `%GeneratorPrototype%.next`/`.return`/`.throw` (ECMA-262 27.5.1.2-27.5.1.4)
6
+ * off a generator value, which this backend carries as the cursor
7
+ * `gea::Iterator<T, TReturn, TNext>` -- one type that is both the coroutine
8
+ * and the iterator over it (`gea_runtime.h`'s own rationale:
9
+ * `%GeneratorPrototype%[@@iterator]` returns `this`).
10
+ *
11
+ * The call is fused with its deferred `[[Get]]` exactly as a Promise method
12
+ * is (`emit-prototype-invoke.ts`'s header), and its result is the value the
13
+ * CHECKER typed the call with: `IteratorResult<T, TReturn>`, which is
14
+ * `IteratorYieldResult<T> | IteratorReturnResult<TReturn>` in `lib.es2015.iterable.d.ts`
15
+ * and derives to a tagged union of two records. Nothing here invents a
16
+ * `{value, done}` carrier of its own -- `CreateIterResultObject` (7.4.14) is
17
+ * rendered by constructing whichever of the two records the checker already
18
+ * laid out and tagging the union with it, so every later `.value`/`.done`
19
+ * read goes through the same union-member path any other two-record union
20
+ * takes.
21
+ *
22
+ * Which arm is which is read off the layout rather than off the union's arm
23
+ * order (which is the checker's type-id order, and differs from program to
24
+ * program): the return arm is the one whose `done` is REQUIRED (declared
25
+ * `done: true`), the yield arm the one whose `done` is optional (declared
26
+ * `done?: false`). A result with any other shape is refused by name.
27
+ *
28
+ * `.return`/`.throw` are claimed ONLY for a generator-sourced cursor
29
+ * (`carrier.source === 'generator'`, `representation/model.ts`'s `iterator`
30
+ * kind): the four fixed-storage walks (`Array`/`Set`/`string`/`Map`) and the
31
+ * `for`-`in` enumerator publish the identical `iterator(E)` carrier but their
32
+ * real `%ArrayIteratorPrototype%` and siblings define neither method at all
33
+ * (ECMA-262 27.1.2), so a `'sequence'`-sourced receiver refuses both by name
34
+ * rather than certifying a method its real prototype does not have.
35
+ *
36
+ * What a `'sequence'` cursor's `next` (and a valueless generator's `next`)
37
+ * still does not carry is refused by name too, never approximated: a
38
+ * `next(v)`/`.return(v)`'s own value, or a completion value, that resolved to
39
+ * no native carrier (`representation/derive.ts` collapses an unresolved/
40
+ * dynamic `TReturn`/`TNext` to `undefined` on purpose, rather than boxing it)
41
+ * has no storage to read or fill, and the read/call that needs one refuses
42
+ * here instead.
43
+ */
44
+ export declare const iteratorPrototypeMethods: ReadonlySet<string>;
45
+ export declare const iteratorCallText: (ctx: EmitContext, member: string, receiverText: string, carrier: Extract<Representation, {
46
+ kind: "iterator";
47
+ }> | undefined, operation: CallOperation) => string;
@@ -0,0 +1,250 @@
1
+ import { thrownValueCarrier } from '../../../ir/lower-exceptions.js';
2
+ import { representationKey } from '../../../representation/model.js';
3
+ import { createCppEmitBlockedError, operandText } from '../emit-context.js';
4
+ import { alignedValueText } from '../emit-narrowing.js';
5
+ import { memberAccessOperator } from '../emit-carrier-members.js';
6
+ import { recordFieldsOfShape } from '../records.js';
7
+ import { cppRecordFieldName, cppRecordFieldPresenceName, cppRecordStructName, cppTypeOf } from '../types.js';
8
+ /**
9
+ * `%GeneratorPrototype%.next`/`.return`/`.throw` (ECMA-262 27.5.1.2-27.5.1.4)
10
+ * off a generator value, which this backend carries as the cursor
11
+ * `gea::Iterator<T, TReturn, TNext>` -- one type that is both the coroutine
12
+ * and the iterator over it (`gea_runtime.h`'s own rationale:
13
+ * `%GeneratorPrototype%[@@iterator]` returns `this`).
14
+ *
15
+ * The call is fused with its deferred `[[Get]]` exactly as a Promise method
16
+ * is (`emit-prototype-invoke.ts`'s header), and its result is the value the
17
+ * CHECKER typed the call with: `IteratorResult<T, TReturn>`, which is
18
+ * `IteratorYieldResult<T> | IteratorReturnResult<TReturn>` in `lib.es2015.iterable.d.ts`
19
+ * and derives to a tagged union of two records. Nothing here invents a
20
+ * `{value, done}` carrier of its own -- `CreateIterResultObject` (7.4.14) is
21
+ * rendered by constructing whichever of the two records the checker already
22
+ * laid out and tagging the union with it, so every later `.value`/`.done`
23
+ * read goes through the same union-member path any other two-record union
24
+ * takes.
25
+ *
26
+ * Which arm is which is read off the layout rather than off the union's arm
27
+ * order (which is the checker's type-id order, and differs from program to
28
+ * program): the return arm is the one whose `done` is REQUIRED (declared
29
+ * `done: true`), the yield arm the one whose `done` is optional (declared
30
+ * `done?: false`). A result with any other shape is refused by name.
31
+ *
32
+ * `.return`/`.throw` are claimed ONLY for a generator-sourced cursor
33
+ * (`carrier.source === 'generator'`, `representation/model.ts`'s `iterator`
34
+ * kind): the four fixed-storage walks (`Array`/`Set`/`string`/`Map`) and the
35
+ * `for`-`in` enumerator publish the identical `iterator(E)` carrier but their
36
+ * real `%ArrayIteratorPrototype%` and siblings define neither method at all
37
+ * (ECMA-262 27.1.2), so a `'sequence'`-sourced receiver refuses both by name
38
+ * rather than certifying a method its real prototype does not have.
39
+ *
40
+ * What a `'sequence'` cursor's `next` (and a valueless generator's `next`)
41
+ * still does not carry is refused by name too, never approximated: a
42
+ * `next(v)`/`.return(v)`'s own value, or a completion value, that resolved to
43
+ * no native carrier (`representation/derive.ts` collapses an unresolved/
44
+ * dynamic `TReturn`/`TNext` to `undefined` on purpose, rather than boxing it)
45
+ * has no storage to read or fill, and the read/call that needs one refuses
46
+ * here instead.
47
+ */
48
+ export const iteratorPrototypeMethods = new Set(['next', 'return', 'throw']);
49
+ const isRecordArm = (representation) => representation.kind === 'record' || representation.kind === 'native-record-ref';
50
+ /** The arm's own declared fields, or `null` for a host-named struct this compiler did not lay out. */
51
+ const armFieldsOf = (ctx, arm) => arm.kind === 'record' ? arm.fields : arm.native === null ? recordFieldsOfShape(ctx.deriver, arm.shapeId) : null;
52
+ const constructionText = (arm) => {
53
+ switch (arm.ownership) {
54
+ case 'owned':
55
+ return `${cppTypeOf(arm)}{}`;
56
+ case 'shared-refcount':
57
+ return `gea::makeRef<${cppRecordStructName(arm.shapeId)}>()`;
58
+ case 'borrowed':
59
+ throw createCppEmitBlockedError(`physical-cpp-type:${representationKey(arm)}`, 'an IteratorResult arm carries ownership "borrowed", and a fresh iteration result has no other frame to borrow it from');
60
+ }
61
+ };
62
+ const isValueless = (representation) => representation.kind === 'void' || representation.kind === 'undefined';
63
+ /** `member = <value>;` plus the presence bit an optional field keeps beside its storage (`emitFieldInits`'s own rule). */
64
+ const fieldStoreText = (accessor, field, valueText) => `gea_result${accessor}${cppRecordFieldName(field.key)} = ${valueText}; ` +
65
+ (field.required ? '' : `gea_result${accessor}${cppRecordFieldPresenceName(field.key)} = true; `);
66
+ /**
67
+ * A padded `undefined` (an omitted optional argument the lowering fills in)
68
+ * sends nothing -- `next(undefined)` and `next()` are one `GeneratorResume`
69
+ * (27.5.1.2 passes the value through unchanged, and the first resumption
70
+ * discards it) -- and so is the EMPTY rest pack `next(...[value]: [] |
71
+ * [TNext])`'s variadic convention makes `ir/lower-operands.ts`'s
72
+ * `packRestArguments` build for a bare `next()`: withheld whole
73
+ * (`ctx.pendingPacks`), it lists its element expressions, and none is no
74
+ * value sent.
75
+ */
76
+ const sendsNothing = (ctx, argument) => argument.representation.kind === 'undefined' ||
77
+ argument.representation.kind === 'void' ||
78
+ (argument.representation.kind === 'array-object' && ctx.pendingPacks.get(argument.value)?.elements.length === 0);
79
+ /**
80
+ * Builds `IteratorYieldResult<T> | IteratorReturnResult<TReturn>` from
81
+ * whichever `stepText` expression already advanced (or injected an abrupt
82
+ * completion into) the cursor -- shared by `next`, `return` and `throw`,
83
+ * which differ only in how they got the frame moving, never in how the
84
+ * record that comes back is read off it.
85
+ */
86
+ const iteratorResultText = (ctx, receiverText, carrier, result, stepText) => {
87
+ if (result.representation.kind !== 'tagged-union') {
88
+ throw createCppEmitBlockedError(`runtime-helper:protocol:result:${representationKey(carrier)}`, `publishes "${representationKey(result.representation)}", but ` +
89
+ 'IteratorResult<T, TReturn> is a union of two records and this file renders exactly that');
90
+ }
91
+ const union = result.representation;
92
+ const arms = union.arms.map((arm, index) => {
93
+ const value = arm.value;
94
+ if (!isRecordArm(value))
95
+ return null;
96
+ const fields = armFieldsOf(ctx, value);
97
+ const done = fields?.find((field) => field.key === 'done');
98
+ if (fields === null || done === undefined)
99
+ return null;
100
+ return { index, value, done, valueField: fields.find((field) => field.key === 'value') ?? null };
101
+ });
102
+ const returnArm = arms.find((arm) => arm !== null && arm.done.required) ?? null;
103
+ const yieldArm = arms.find((arm) => arm !== null && !arm.done.required) ?? null;
104
+ if (union.arms.length !== 2 || returnArm === null || yieldArm === null) {
105
+ throw createCppEmitBlockedError(`runtime-helper:protocol:result:${representationKey(carrier)}`, `publishes "${representationKey(union)}", which is not IteratorYieldResult<T> | IteratorReturnResult<TReturn> ` +
106
+ '(two records, told apart by a required `done: true` against an optional `done?: false`)');
107
+ }
108
+ // The return arm's `value` field is the generator's COMPLETION value,
109
+ // read off the cursor's own `takeCompletionValue()` -- never off
110
+ // whatever was passed to `next`/`return`, because a `finally` block that
111
+ // runs during an abrupt completion can override it with its own `return`
112
+ // (ECMA-262 27.5.3.3's own note), and `promise_type::completion_value` is
113
+ // exactly the slot both roads write through (`gea_runtime.h`).
114
+ const completionText = returnArm.valueField === null || isValueless(returnArm.valueField.value)
115
+ ? null
116
+ : (() => {
117
+ if (isValueless(carrier.completion)) {
118
+ throw createCppEmitBlockedError(`conversion:${representationKey(carrier.completion)}->${representationKey(returnArm.valueField.value)}`, `a generator's completion value is carried as "${representationKey(returnArm.valueField.value)}", and this generator's own ` +
119
+ 'completion channel is "undefined" -- either TReturn never resolved to a native carrier, or this generator is not ' +
120
+ 'annotated as one -- so the cursor has no storage to read one back from');
121
+ }
122
+ const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:155', carrier.completion, returnArm.valueField.value, `${receiverText}.takeCompletionValue()`);
123
+ if (text === null) {
124
+ throw createCppEmitBlockedError(`conversion:${representationKey(carrier.completion)}->${representationKey(returnArm.valueField.value)}`, `the cursor completes with "${representationKey(carrier.completion)}" while the IteratorResult "value" field carries ` +
125
+ `"${representationKey(returnArm.valueField.value)}", and no installed conversion reconciles them`);
126
+ }
127
+ return text;
128
+ })();
129
+ const trueText = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:165', { kind: 'scalar', domain: 'boolean' }, returnArm.done.value, 'true');
130
+ const falseText = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:166', { kind: 'scalar', domain: 'boolean' }, yieldArm.done.value, 'false');
131
+ if (trueText === null || falseText === null) {
132
+ throw createCppEmitBlockedError(`conversion:scalar(boolean)->${representationKey((trueText === null ? returnArm : yieldArm).done.value)}`, `an IteratorResult "done" field carries "${representationKey((trueText === null ? returnArm : yieldArm).done.value)}", ` +
133
+ 'and no installed conversion writes a boolean into it');
134
+ }
135
+ const yieldValueText = yieldArm.valueField === null || isValueless(yieldArm.valueField.value)
136
+ ? null
137
+ : alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:177', carrier.element, yieldArm.valueField.value, 'gea_next');
138
+ if (yieldArm.valueField !== null && !isValueless(yieldArm.valueField.value) && yieldValueText === null) {
139
+ throw createCppEmitBlockedError(`conversion:${representationKey(carrier.element)}->${representationKey(yieldArm.valueField.value)}`, `the cursor yields "${representationKey(carrier.element)}" while the IteratorResult "value" field carries ` +
140
+ `"${representationKey(yieldArm.valueField.value)}", and no installed conversion reconciles them`);
141
+ }
142
+ const unionType = cppTypeOf(union);
143
+ const returnAccessor = memberAccessOperator(returnArm.value.ownership);
144
+ const yieldAccessor = memberAccessOperator(yieldArm.value.ownership);
145
+ const returnBranch = `auto gea_result = ${constructionText(returnArm.value)}; ${fieldStoreText(returnAccessor, returnArm.done, trueText)}` +
146
+ (completionText === null || returnArm.valueField === null ? '' : fieldStoreText(returnAccessor, returnArm.valueField, completionText)) +
147
+ `return ${unionType}::ofArm<${returnArm.index}>(gea_result);`;
148
+ const yieldBranch = `auto gea_result = ${constructionText(yieldArm.value)}; ${fieldStoreText(yieldAccessor, yieldArm.done, falseText)}` +
149
+ (yieldValueText === null || yieldArm.valueField === null ? '' : fieldStoreText(yieldAccessor, yieldArm.valueField, yieldValueText)) +
150
+ `return ${unionType}::ofArm<${yieldArm.index}>(gea_result);`;
151
+ return (`([&]() -> ${unionType} { auto gea_next = ${stepText}; (void)gea_next; ` +
152
+ `if (${receiverText}.done()) { ${returnBranch} } ${yieldBranch} })()`);
153
+ };
154
+ /**
155
+ * `iter.next(v)` (member already checked to be `"next"`). Builds the step
156
+ * text -- an ordinary `arrayNext()` when nothing was sent, `resumeWith(v)`
157
+ * once converted into the cursor's own resume carrier -- and, only when the
158
+ * call's own result is actually read, the `IteratorResult` on top of it.
159
+ */
160
+ const nextCallText = (ctx, receiverText, carrier, operation) => {
161
+ const sent = operation.arguments.filter((argument) => !sendsNothing(ctx, argument));
162
+ const stepText = sent.length === 0
163
+ ? `${receiverText}.arrayNext()`
164
+ : (() => {
165
+ if (isValueless(carrier.resume)) {
166
+ throw createCppEmitBlockedError(`runtime-helper:protocol:next:${representationKey(carrier)}`, "a generator's next(v) sends a value back into the suspended yield, and this generator's own resume channel is " +
167
+ '"undefined" -- either TNext never resolved to a native carrier, or this generator is not annotated as one -- so the ' +
168
+ `cursor has no storage to send it through; the call carries ` +
169
+ `${operation.arguments.map((argument) => `"${representationKey(argument.representation)}"`).join(', ')}`);
170
+ }
171
+ if (sent.length !== 1) {
172
+ throw createCppEmitBlockedError('call-abi:next', `next(v) sends more than one value operand (${sent.length}), which is not valid syntax to model`);
173
+ }
174
+ const argument = sent[0];
175
+ const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:235', argument.representation, carrier.resume, operandText(ctx, argument));
176
+ if (text === null) {
177
+ throw createCppEmitBlockedError(`conversion:${representationKey(argument.representation)}->${representationKey(carrier.resume)}`, `sends "${representationKey(argument.representation)}" into a resume channel carried as "${representationKey(carrier.resume)}", ` +
178
+ 'and no installed conversion reconciles them');
179
+ }
180
+ return `${receiverText}.resumeWith(${text})`;
181
+ })();
182
+ return operation.result === null ? stepText : iteratorResultText(ctx, receiverText, carrier, operation.result, stepText);
183
+ };
184
+ /**
185
+ * `iter.return(v)`/`iter.throw(e)`, claimed only for `carrier.source ===
186
+ * 'generator'` -- see this file's own header comment for why. Both read back
187
+ * through the identical `IteratorResult` construction `next` uses: ECMA-262
188
+ * 27.5.3.3/27.5.3.4 both resume the frame like an ordinary step, they just
189
+ * inject an ABRUPT completion at the paused `yield` instead of a normal one
190
+ * (`gea_runtime.h`'s `resumeReturn`/`resumeThrow`), and a `finally` in scope
191
+ * can still turn either into an ordinary yield (`{value, done: false}`) --
192
+ * exactly the shape `iteratorResultText` already renders generically.
193
+ */
194
+ const abruptCallText = (ctx, member, receiverText, carrier, operation) => {
195
+ if (carrier.source !== 'generator') {
196
+ throw createCppEmitBlockedError(`runtime-helper:protocol:${member}:${representationKey(carrier)}`, `"${member}" was recorded as a deferred %GeneratorPrototype% read over a "${carrier.source}"-sourced cursor -- only a real ` +
197
+ `generator's iterator has a %GeneratorPrototype%.${member}; the four fixed-storage walks and the \`for\`-in enumerator do not`);
198
+ }
199
+ const argument = operation.arguments[0];
200
+ if (member === 'throw') {
201
+ if (!argument) {
202
+ throw createCppEmitBlockedError('call-abi:throw', 'throw(e) carries no argument to inject as the abrupt completion');
203
+ }
204
+ // The coroutine body's own `catch` clauses match by C++ type, and every
205
+ // `catch (e)` this backend can ever emit binds `e` as `thrownValueCarrier`
206
+ // -- see `lower.ts`'s ordinary `throw` terminator, which converts into the
207
+ // identical carrier before its own native `throw` for the identical
208
+ // reason. Injecting the raw, unboxed argument here throws a type no
209
+ // `catch` inside the generator was ever written to match, so ECMA-262's
210
+ // "the generator catches its own injected exception" silently became "the
211
+ // exception escapes the coroutine and the process aborts".
212
+ const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:285', argument.representation, thrownValueCarrier, operandText(ctx, argument));
213
+ if (text === null) {
214
+ throw createCppEmitBlockedError(`conversion:${representationKey(argument.representation)}->${representationKey(thrownValueCarrier)}`, `throw(e) sends "${representationKey(argument.representation)}" into the thrown-value carrier, and no installed conversion reconciles them`);
215
+ }
216
+ return `${receiverText}.resumeThrow(std::make_exception_ptr(${text}))`;
217
+ }
218
+ // `return(v)`'s completion value is whatever this call site passed, not
219
+ // what the cursor's `completion` carrier declares elsewhere in the
220
+ // program -- but if THIS generator's completion channel never resolved to
221
+ // a native carrier, there is still no storage for it, and `v`'s own value
222
+ // (as opposed to its evaluation, which still has to happen for its
223
+ // effects) is discarded exactly as a valueless `return` terminator's own
224
+ // operand already is (`emit-return.ts`).
225
+ if (isValueless(carrier.completion)) {
226
+ const discard = argument && !sendsNothing(ctx, argument) ? `(void)(${operandText(ctx, argument)}), ` : '';
227
+ return `${discard}${receiverText}.resumeReturn({})`;
228
+ }
229
+ if (!argument) {
230
+ throw createCppEmitBlockedError('call-abi:return', "return(v) carries no argument, but this generator's completion channel carries a real value");
231
+ }
232
+ const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:308', argument.representation, carrier.completion, operandText(ctx, argument));
233
+ if (text === null) {
234
+ throw createCppEmitBlockedError(`conversion:${representationKey(argument.representation)}->${representationKey(carrier.completion)}`, `return(v) sends "${representationKey(argument.representation)}" into a completion channel carried as "${representationKey(carrier.completion)}", ` +
235
+ 'and no installed conversion reconciles them');
236
+ }
237
+ return `${receiverText}.resumeReturn(${text})`;
238
+ };
239
+ export const iteratorCallText = (ctx, member, receiverText, carrier, operation) => {
240
+ if (!iteratorPrototypeMethods.has(member)) {
241
+ throw createCppEmitBlockedError('property-access:iterator:get:false', `"${member}" was recorded as a deferred %GeneratorPrototype% read but this file renders no call for it`);
242
+ }
243
+ if (carrier === undefined) {
244
+ throw createCppEmitBlockedError(`host-invocation:GeneratorPrototype.${member}`, `"${member}" was recorded as a deferred iterator read with no cursor carrier to render it off`);
245
+ }
246
+ if (member === 'next')
247
+ return nextCallText(ctx, receiverText, carrier, operation);
248
+ const stepText = abruptCallText(ctx, member, receiverText, carrier, operation);
249
+ return operation.result === null ? stepText : iteratorResultText(ctx, receiverText, carrier, operation.result, stepText);
250
+ };
@@ -0,0 +1,46 @@
1
+ import { type Representation } from '../../../representation/model.js';
2
+ import { type ConversionSite } from '../emit-narrowing.js';
3
+ /**
4
+ * Resolving a value the way `await` and `Promise.all` both do.
5
+ *
6
+ * ECMA-262 27.2.4.7.1 `PromiseResolve` is the one operation behind both: a
7
+ * thenable is adopted, and anything else resolves to ITSELF. `Awaited<T>` is
8
+ * TypeScript's name for the same fact, which is why `await 1` is `1`.
9
+ *
10
+ * `gea::Promise<V>` is a settled-value box with no job queue (see its own doc
11
+ * comment in `runtime/gea_runtime.h`), so adoption is reading the value now --
12
+ * `.awaited()` -- rather than a suspension this substrate has no coroutine
13
+ * primitive for.
14
+ *
15
+ * The case this exists for is the THIRD one, which neither half of that
16
+ * sentence covers on its own: a union of both. `string | Promise<string>` is
17
+ * what every `Promise.all` argument and every conditionally-async helper is
18
+ * made of (hono's `utils/html.ts` is exactly that), and it is neither "a
19
+ * promise" nor "not a promise" -- it is a discriminant test away from either.
20
+ * `emitAwait` used to ask only `kind === 'promise'` and pass such a union
21
+ * through untouched, handing a `TaggedUnion<...>` to a consumer that had been
22
+ * told it would get the payload.
23
+ *
24
+ * `null` for a carrier with nothing to resolve, which is the caller's signal
25
+ * that the value is already its own resolution and needs no text at all.
26
+ *
27
+ * `ctx`/`site` are the conversion census's site: the optional shape below
28
+ * stores an absence into the result cell, and every cross-carrier store goes
29
+ * through `alignedValueText` so the census is asked and printer drift is
30
+ * recorded -- calling the recipe printer's renderer directly would answer the
31
+ * spelling without recording that the question was put (the architecture
32
+ * gate counts exactly that).
33
+ */
34
+ export declare const awaitedText: (ctx: ConversionSite, site: string, carrier: Representation, text: string, target?: Representation | null) => string | null;
35
+ /**
36
+ * What `awaitedText` resolves a carrier TO -- the carrier's `Awaited<T>`.
37
+ *
38
+ * Stated beside the render rather than derived by a caller, so the two cannot
39
+ * disagree about which arms survive. A union of promises over one payload
40
+ * resolves to that payload; a union mixing a payload with a promise of the
41
+ * same payload resolves to the payload as well, which is the ordinary case.
42
+ * `null` when the arms do not agree, which is a real hole rather than a
43
+ * missing recipe: `string | Promise<number>` resolves to `string | number`,
44
+ * a union this cannot mint without the census's own arm ordering.
45
+ */
46
+ export declare const awaitedRepresentation: (carrier: Representation) => Representation | null;
@@ -0,0 +1,143 @@
1
+ import { representationKey } from '../../../representation/model.js';
2
+ import { optionalOf } from '../../../representation/optional.js';
3
+ import { alignedValueText } from '../emit-narrowing.js';
4
+ import { cppConstantLiteral } from '../types.js';
5
+ /**
6
+ * Resolving a value the way `await` and `Promise.all` both do.
7
+ *
8
+ * ECMA-262 27.2.4.7.1 `PromiseResolve` is the one operation behind both: a
9
+ * thenable is adopted, and anything else resolves to ITSELF. `Awaited<T>` is
10
+ * TypeScript's name for the same fact, which is why `await 1` is `1`.
11
+ *
12
+ * `gea::Promise<V>` is a settled-value box with no job queue (see its own doc
13
+ * comment in `runtime/gea_runtime.h`), so adoption is reading the value now --
14
+ * `.awaited()` -- rather than a suspension this substrate has no coroutine
15
+ * primitive for.
16
+ *
17
+ * The case this exists for is the THIRD one, which neither half of that
18
+ * sentence covers on its own: a union of both. `string | Promise<string>` is
19
+ * what every `Promise.all` argument and every conditionally-async helper is
20
+ * made of (hono's `utils/html.ts` is exactly that), and it is neither "a
21
+ * promise" nor "not a promise" -- it is a discriminant test away from either.
22
+ * `emitAwait` used to ask only `kind === 'promise'` and pass such a union
23
+ * through untouched, handing a `TaggedUnion<...>` to a consumer that had been
24
+ * told it would get the payload.
25
+ *
26
+ * `null` for a carrier with nothing to resolve, which is the caller's signal
27
+ * that the value is already its own resolution and needs no text at all.
28
+ *
29
+ * `ctx`/`site` are the conversion census's site: the optional shape below
30
+ * stores an absence into the result cell, and every cross-carrier store goes
31
+ * through `alignedValueText` so the census is asked and printer drift is
32
+ * recorded -- calling the recipe printer's renderer directly would answer the
33
+ * spelling without recording that the question was put (the architecture
34
+ * gate counts exactly that).
35
+ */
36
+ export const awaitedText = (ctx, site, carrier, text, target = null) => {
37
+ if (carrier.kind === 'promise')
38
+ return `${text}.awaited()`;
39
+ if (carrier.kind === 'optional')
40
+ return awaitedOptionalText(ctx, site, carrier, text, target);
41
+ if (carrier.kind !== 'tagged-union')
42
+ return null;
43
+ if (!carrier.arms.some((arm) => arm.value.kind === 'promise'))
44
+ return null;
45
+ // Every arm is accounted for, not just the promise ones: an arm that is not
46
+ // a thenable resolves to itself, so it contributes its own payload. The last
47
+ // arm is the fall-through and is never tested, because the union holds one
48
+ // of its arms by construction and a test with no `else` has nothing to
49
+ // answer -- the same shape `taggedUnionArmText` (emit-narrowing.ts) uses.
50
+ const armTexts = carrier.arms.map((arm, index) => arm.value.kind === 'promise' ? `${text}.get<${index}>().awaited()` : `${text}.get<${index}>()`);
51
+ const last = armTexts[armTexts.length - 1];
52
+ if (last === undefined)
53
+ return null;
54
+ let chain = last;
55
+ for (let index = armTexts.length - 2; index >= 0; index -= 1) {
56
+ chain = `${text}.is<${index}>() ? ${armTexts[index]} : (${chain})`;
57
+ }
58
+ return `(${chain})`;
59
+ };
60
+ /**
61
+ * The FOURTH shape: a thenable that may also be ABSENT.
62
+ *
63
+ * `PromiseResolve` resolves a non-thenable to itself, and `undefined` is a
64
+ * non-thenable, so `await (Promise<T> | undefined)` is `T | undefined` -- and
65
+ * the carrier for such a value is an `optional` WRAPPER around the thing that
66
+ * may be a promise, never a promise or a union of one. Asking only the three
67
+ * kinds above therefore passed it through untouched, and the result cell was
68
+ * then told it held the payload while it was handed the wrapper: five of the
69
+ * @hono/node-server stores clang refused were exactly that
70
+ * (`responseViaCache`'s `await writeFromReadableStream(...)?.catch(...)`,
71
+ * `Optional<Promise<undefined>>`, and `responseViaResponseObject`'s
72
+ * `await options.errorHandler(err)`, an optional over a union).
73
+ *
74
+ * The presence test is the resolution: present resolves the payload by the
75
+ * same three rules one level in, absent resolves to the absence itself. Which
76
+ * absence is the wrapper's own tag -- `null` and `undefined` are distinguishable
77
+ * values and a later `=== null` on the result would answer the wrong one --
78
+ * and it is spelled by `cppConstantLiteral` and stored by `alignedValueText`,
79
+ * the same pair every other absence store already goes through, rather than a
80
+ * second hand-written empty-optional spelling that could drift from theirs.
81
+ *
82
+ * `target` is the cell the text must produce, and it is the IR's own result
83
+ * carrier rather than something derived here: the two arms resolve to
84
+ * DIFFERENT carriers whenever the payload is a union mixing `T` with
85
+ * `Promise<T | undefined>` (`CustomErrorHandler` is exactly that), so
86
+ * `awaitedRepresentation` cannot name one and only the consumer knows which
87
+ * cell is waiting. It falls back to that derivation for the caller that has no
88
+ * result cell of its own -- `Promise.all`, whose element lambda deduces its
89
+ * own return type.
90
+ */
91
+ const awaitedOptionalText = (ctx, site, carrier, text, target) => {
92
+ const present = awaitedText(ctx, site, carrier.payload, `(*${text})`);
93
+ // Nothing under the wrapper is a thenable, so the optional is already its
94
+ // own resolution and needs no text -- the same answer the bare-carrier case
95
+ // gives, one level out.
96
+ if (present === null)
97
+ return null;
98
+ const resolved = target ?? awaitedRepresentation(carrier);
99
+ // A `void` result has no value to select between, so there is no ternary to
100
+ // build; and a payload whose arms resolve to carriers that disagree leaves
101
+ // the derivation with no name for the cell, which is a real hole rather than
102
+ // a spelling gap.
103
+ if (resolved === null || resolved.kind === 'void')
104
+ return null;
105
+ const absence = { kind: carrier.absence };
106
+ const absenceText = cppConstantLiteral(carrier.absence, carrier.absence, absence);
107
+ const absent = alignedValueText(ctx, site, absence, resolved, absenceText);
108
+ if (absent === null)
109
+ return null;
110
+ return `(${text}.has_value() ? ${present} : ${absent})`;
111
+ };
112
+ /**
113
+ * What `awaitedText` resolves a carrier TO -- the carrier's `Awaited<T>`.
114
+ *
115
+ * Stated beside the render rather than derived by a caller, so the two cannot
116
+ * disagree about which arms survive. A union of promises over one payload
117
+ * resolves to that payload; a union mixing a payload with a promise of the
118
+ * same payload resolves to the payload as well, which is the ordinary case.
119
+ * `null` when the arms do not agree, which is a real hole rather than a
120
+ * missing recipe: `string | Promise<number>` resolves to `string | number`,
121
+ * a union this cannot mint without the census's own arm ordering.
122
+ */
123
+ export const awaitedRepresentation = (carrier) => {
124
+ if (carrier.kind === 'promise')
125
+ return carrier.value;
126
+ // An absence survives the resolution -- `PromiseResolve(undefined)` is
127
+ // `undefined` -- so the wrapper is kept over whatever the payload resolves
128
+ // to. Through `optionalOf` rather than a literal wrapper because the payload
129
+ // may already carry its own absence (a refcounted instance, a handle, a box,
130
+ // or a second optional), and stacking a flag onto one of those is the carrier
131
+ // the census forbids rather than a type this backend can spell.
132
+ if (carrier.kind === 'optional') {
133
+ const payload = awaitedRepresentation(carrier.payload);
134
+ return payload === null ? null : optionalOf(payload, carrier.absence);
135
+ }
136
+ if (carrier.kind !== 'tagged-union')
137
+ return carrier;
138
+ const resolved = carrier.arms.map((arm) => (arm.value.kind === 'promise' ? arm.value.value : arm.value));
139
+ const [first, ...rest] = resolved;
140
+ if (!first)
141
+ return null;
142
+ return rest.every((entry) => representationKey(entry) === representationKey(first)) ? first : null;
143
+ };