@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,20 @@
1
+ import type { RecordLayoutPolicy } from '../../representation/policies.js';
2
+ import type { Representation } from '../../representation/model.js';
3
+ import { type RecordViewPlan } from '../../conversion/record-view.js';
4
+ import { type ConversionSite } from './emit-narrowing.js';
5
+ export declare const viewPlanFor: (layouts: RecordLayoutPolicy, source: Representation, target: Representation) => RecordViewPlan | null;
6
+ /**
7
+ * A record viewed as another shape it satisfies: the census's plan
8
+ * (`conversion/record-view.ts`), rendered. The plan decides which pairs are
9
+ * views and how each field is reached; this spells it. `null` only where the
10
+ * plan promised what this context cannot spell -- a bound class method that
11
+ * captures, whose environment slot is spent on the receiver -- which
12
+ * `emitConvert` then refuses.
13
+ *
14
+ * `viewPlanFor` above is asked rather than `structuralRecordViewPlan`
15
+ * directly: `conversions.ts`'s `staticRecipe` already built this same plan
16
+ * to answer whether the census's `view:structural-record` capability exists
17
+ * at all, and this is that plan's one consumer, not a second derivation of
18
+ * it.
19
+ */
20
+ export declare const structuralRecordViewText: (ctx: ConversionSite, source: Representation, target: Representation, text: string) => string | null;
@@ -0,0 +1,354 @@
1
+ import { representationKey } from '../../representation/model.js';
2
+ import { structuralRecordViewPlan } from '../../conversion/record-view.js';
3
+ import { classFamilyOverridesOf, virtualDispatchKey } from '../../projection/dispatch.js';
4
+ import { cppVirtualMemberName } from './virtual-methods.js';
5
+ import { classMemberOf } from './class-layout.js';
6
+ import { alignedValueText, boxedAssertionText, chainConverts, convertedValueText, dynamicCarrierBoxText, recastedUnionFromHomes, recastUnionArmText } from './emit-narrowing.js';
7
+ import { ownedRecordMaterializationText } from './emit-owned-record.js';
8
+ import { cppRecordIndexAttributesNameFor, cppRecordIndexSidecarName, cppRecordIndexSidecarNameFor } from './records.js';
9
+ import { cppAbiParameterType, cppBodyName, cppRecordFieldName, cppRecordFieldPresenceName, cppRecordStructName, cppResultTypeOf, cppTypeOf } from './types.js';
10
+ /**
11
+ * The renderer of the census's `view:structural-record` recipe
12
+ * (`conversion/record-view.ts`): a record or class instance viewed as another
13
+ * shape it satisfies. Its own module because both the chain's caller
14
+ * (`emit-narrowing.ts`'s `alignedValueText`, which renders whatever recipe
15
+ * the census names for a pair) and the call renderer (`emit-callable.ts`)
16
+ * reach it, and the plan is the one authority on which pairs are views.
17
+ */
18
+ /**
19
+ * The structural-record-view plan, built once per `(layouts, source,
20
+ * target)` and shared between the two places that ask for it:
21
+ * `conversions.ts`'s `staticRecipe`, which tests whether a view exists at
22
+ * all while the conversion census derives the pair's capability, and
23
+ * `structuralRecordViewText` below, which spells the plan the census
24
+ * already built. Without this cache the two independently ran
25
+ * `structuralRecordViewPlan` -- decided the pair twice, the same defect this
26
+ * refactor removes for the chain's own steps (`conversionRecipeOf`'s memo).
27
+ *
28
+ * Lives here rather than in `conversions.ts`: this module already sits
29
+ * downstream of `emit-narrowing.ts` (for `chainConverts`) and
30
+ * `conversions.ts` already sits upstream of `emit-narrowing.ts`, so a
31
+ * `conversions.ts` import of this file adds one edge to an existing acyclic
32
+ * chain, while the reverse (this file importing from `conversions.ts`)
33
+ * would close `emit-narrowing.ts -> emit-record-view.ts -> conversions.ts
34
+ * -> emit-narrowing.ts` into a cycle through a THIRD file, worse than the
35
+ * two-file cycle `emit-narrowing.ts`/`emit-record-view.ts` already have.
36
+ *
37
+ * Keyed by object identity through nested `WeakMap`s, the same discipline
38
+ * `emit-narrowing.ts`'s `spellability` memo uses, rather than a string key
39
+ * built from `representationKey` -- so a compile's representations and its
40
+ * plans are never retained past the compile that created them, and two
41
+ * unrelated compiles sharing a coincidentally-equal key string can never
42
+ * collide. `layouts` is the outermost key rather than an assumed-identical
43
+ * singleton: the cache stays correct even if a caller ever passes a
44
+ * different policy for the same pair, at the cost of one more miss, not a
45
+ * wrong answer.
46
+ */
47
+ const recordViewPlans = new WeakMap();
48
+ export const viewPlanFor = (layouts, source, target) => {
49
+ let bySource = recordViewPlans.get(layouts);
50
+ if (bySource === undefined) {
51
+ bySource = new WeakMap();
52
+ recordViewPlans.set(layouts, bySource);
53
+ }
54
+ let byTarget = bySource.get(source);
55
+ if (byTarget === undefined) {
56
+ byTarget = new WeakMap();
57
+ bySource.set(source, byTarget);
58
+ }
59
+ if (byTarget.has(target))
60
+ return byTarget.get(target) ?? null;
61
+ const plan = structuralRecordViewPlan(layouts, source, target, chainConverts);
62
+ byTarget.set(target, plan);
63
+ return plan;
64
+ };
65
+ const viewEnvironmentName = 'gea_view_env';
66
+ const viewSlotName = 'gea_view_slot';
67
+ const viewReceiverName = 'gea_view_this';
68
+ const viewArgumentName = (ordinal) => `gea_view_arg_${ordinal}`;
69
+ /**
70
+ * A class METHOD as the member a structural view of that class needs.
71
+ *
72
+ * A class's methods are not storage: they are free functions taking the
73
+ * instance as a leading formal, which is why `boundMethodValueRepresentation`
74
+ * (`class-properties/emit-class-properties.ts`) has to ADD a receiver to the
75
+ * carrier of a plain `obj.method` read. An interface that declares the same
76
+ * method declares STORAGE for it -- a `gea::CallableObject` member with no
77
+ * receiver in its frame -- so the two spellings of one method differ by
78
+ * exactly the receiver, and nothing in `gea::CallableObject`'s four converting
79
+ * constructors binds one.
80
+ *
81
+ * hono is where this stops the compile: `HonoBase.router` is declared
82
+ * `Router<[H, RouterRoute]>` -- an interface whose members are `name`, `add`
83
+ * and `match` -- and the constructor stores `new PatternRouter()` into it. The
84
+ * class provides `name` as a field and the other two as methods, so the view
85
+ * had two required members with no source field and refused, and the store
86
+ * fell through to a raw assignment clang rejected.
87
+ *
88
+ * The binding is `gea::CallableObject`'s own public `(Invoke, void*)`
89
+ * constructor over the receiver packed as the environment, which is the exact
90
+ * shape every closure this backend emits already uses -- `packEnvironment`
91
+ * keeps a heap copy (and therefore a reference count) for a carrier that can
92
+ * outlive the frame, and the lambda unpacks it the same way a generated thunk
93
+ * does. What it does NOT do is preserve identity: the view is a new object, so
94
+ * a later write through the class reference is not seen through the view. That
95
+ * is a real deviation, and it is the reason this is reached only after
96
+ * `convertedValueText` has refused -- a pair with an identity-preserving
97
+ * conversion never gets here.
98
+ *
99
+ * Refused, rather than rendered wrong, for a method that captures anything:
100
+ * the environment slot is spent on the receiver, and a method with its own
101
+ * captures needs both.
102
+ */
103
+ const boundClassMethodText = (ctx, source, member, key, text) => {
104
+ // A view that refuses names only the PAIR, so which member refused is
105
+ // invisible in the refusal -- and a record view is all-or-nothing, so one
106
+ // member is the whole answer. Behind an env var because it is the only way
107
+ // to attribute one.
108
+ const trace = (why) => {
109
+ if (process.env['GEA_RECORD_VIEW_DEBUG'])
110
+ console.log(`[VIEW] ${representationKey(source)} member ${key}: ${why}`);
111
+ return null;
112
+ };
113
+ if (source.kind !== 'class-ref' || source.ownership !== 'shared-refcount')
114
+ return trace('source is not a shared-refcount class ref');
115
+ const abi = 'abi' in member ? member.abi : null;
116
+ if (abi === null || abi.receiver !== null || abi.restFrom !== null)
117
+ return trace('member declares no plain callable abi');
118
+ const site = classMemberOf(ctx.classes, source.declaration, key);
119
+ if (site === null || site.kind !== 'method' || site.method.callable === null)
120
+ return trace('class has no callable method of that name');
121
+ if (ctx.captures.of(site.method.callable).kind !== 'none')
122
+ return trace('method captures, and the environment slot holds the receiver');
123
+ const receiverType = cppTypeOf(source);
124
+ const formals = abi.parameters.map((parameter, ordinal) => `${cppAbiParameterType(parameter)} ${viewArgumentName(ordinal)}`);
125
+ const actuals = abi.parameters.map((_, ordinal) => viewArgumentName(ordinal));
126
+ const call = `${cppBodyName(site.method.callable)}(${[`*${viewReceiverName}`, ...actuals].join(', ')})`;
127
+ // A void-result member needs no conversion at all -- `call` is a statement,
128
+ // not an expression the lambda hands back -- so only a non-void result asks
129
+ // for the class's OWN declared signature, `ownAbi`. That is deliberately
130
+ // NOT `abi`: `abi` is the INTERFACE member's declared signature the view is
131
+ // being built for, and the two agree on the receiver and (in every program
132
+ // seen so far) on the parameters, but nothing forces the class's own result
133
+ // to already be the interface's -- a method the checker types to return
134
+ // `this` (a typed class ref) can back an interface member the wider census
135
+ // erased to `gea::Value`, and the body function genuinely returns the
136
+ // narrower carrier. Symmetric with every other position this file converts
137
+ // through (`recordFieldsViewText`'s field reads, the union arms below): the
138
+ // census-backed `alignedValueText` (not a direct `convertedValueText` call
139
+ // -- see `scripts/architecture.mjs`'s exact-count gate on this file) is the
140
+ // one authority on turning one carrier into the other. E.g. `gea::Value`
141
+ // has no implicit constructor from a `gea::Ref<T>`, so an unconverted
142
+ // `return call;` compiled only when the two happened to already agree.
143
+ // `representation` is OPTIONAL on a `ClassMethod`, and every callable kind
144
+ // that carries a convention carries it under the same `abi` key -- `function`
145
+ // is only the commonest of them. Reading it the same structural way the
146
+ // member's own abi is read above keeps the two sides symmetric; narrowing to
147
+ // `kind === 'function'` refused `Duplex.write` here, whose convention is
148
+ // published under another callable kind entirely.
149
+ const ownRepresentation = site.method.representation;
150
+ const ownAbi = ownRepresentation !== undefined && 'abi' in ownRepresentation ? ownRepresentation.abi : null;
151
+ let returned = call;
152
+ // No published convention at all means there is nothing to compare against,
153
+ // which is where this renderer stood before it converted anything: hand the
154
+ // call back unchanged rather than refuse, since the two agree in every
155
+ // program the emitted-set gate covers and a refusal here would drop them all.
156
+ if (abi.result.kind !== 'void' && ownAbi !== null) {
157
+ const converted = alignedValueText(ctx, 'emit-record-view.ts:158', ownAbi.result, abi.result, call);
158
+ if (converted === null)
159
+ return trace(`no conversion from the method's own result ${representationKey(ownAbi.result)} into the member's ${representationKey(abi.result)}`);
160
+ returned = converted;
161
+ }
162
+ const body = `alignas(void*) unsigned char ${viewSlotName}[sizeof(void*)]; ` +
163
+ `auto* ${viewReceiverName} = gea::unpackEnvironment<${receiverType}>(${viewEnvironmentName}, ${viewSlotName}); ` +
164
+ `${abi.result.kind === 'void' ? `${call};` : `return ${returned};`}`;
165
+ const invoke = `+[](void* ${viewEnvironmentName}${formals.length > 0 ? ', ' : ''}${formals.join(', ')}) -> ${cppResultTypeOf(abi.result)} { ${body} }`;
166
+ return `${cppTypeOf(member)}(${invoke}, gea::packEnvironment<${receiverType}>(${text}))`;
167
+ };
168
+ /**
169
+ * A getter-backed member, read by CALLING the getter -- the same answer
170
+ * `emit-class-properties.ts` gives an ordinary `obj.member` read of an
171
+ * accessor, and the reason a class's accessors can back an interface's plain
172
+ * fields at all.
173
+ *
174
+ * The direct body call is only correct while the family is CLOSED at this
175
+ * key: a derived class that redeclares the getter must run its own, and
176
+ * nothing in a struct-building expression dispatches. That case is refused
177
+ * rather than dispatched here because this renderer has no virtual-dispatch
178
+ * table to reach for -- `ConversionSite` carries the class map and the
179
+ * capture index, not the emitted member set -- and a wrong body is worse than
180
+ * a named refusal.
181
+ */
182
+ const classAccessorReadText = (ctx, source, member, key, published, text) => {
183
+ if (source.kind !== 'class-ref')
184
+ return null;
185
+ const site = classMemberOf(ctx.classes, source.declaration, key);
186
+ if (site === null || site.kind !== 'accessor' || site.accessor.getter === null)
187
+ return null;
188
+ if (classFamilyOverridesOf(ctx.classes, source.declaration, key).length > 0) {
189
+ // An overridden getter is read through the family's dispatch member, as a
190
+ // plain read of it is (`emit-class-properties.ts`).
191
+ const dispatch = ctx.virtualDispatch?.get(virtualDispatchKey(source.declaration, key, 'get'));
192
+ if (dispatch === undefined)
193
+ return null;
194
+ return alignedValueText(ctx, 'emit-record-view.ts:classAccessorReadText', dispatch.result, member, `${text}->${cppVirtualMemberName(key, 'get')}()`);
195
+ }
196
+ return alignedValueText(ctx, 'emit-record-view.ts:classAccessorReadText', published, member, `${cppBodyName(site.accessor.getter)}(${text})`);
197
+ };
198
+ /**
199
+ * A record viewed as another shape it satisfies: the census's plan
200
+ * (`conversion/record-view.ts`), rendered. The plan decides which pairs are
201
+ * views and how each field is reached; this spells it. `null` only where the
202
+ * plan promised what this context cannot spell -- a bound class method that
203
+ * captures, whose environment slot is spent on the receiver -- which
204
+ * `emitConvert` then refuses.
205
+ *
206
+ * `viewPlanFor` above is asked rather than `structuralRecordViewPlan`
207
+ * directly: `conversions.ts`'s `staticRecipe` already built this same plan
208
+ * to answer whether the census's `view:structural-record` capability exists
209
+ * at all, and this is that plan's one consumer, not a second derivation of
210
+ * it.
211
+ */
212
+ export const structuralRecordViewText = (ctx, source, target, text) => {
213
+ const plan = viewPlanFor(ctx.layouts, source, target);
214
+ return plan === null ? boxedAssertionText(source, target, text) : recordViewText(ctx, plan, text);
215
+ };
216
+ const recordViewText = (ctx, plan, text) => {
217
+ switch (plan.kind) {
218
+ case 'owned':
219
+ return ownedRecordMaterializationText(plan.plan, text);
220
+ case 'arm': {
221
+ const arm = plan.target.arms[plan.index];
222
+ if (arm === undefined)
223
+ return null;
224
+ const converted = plan.payload === null ? convertedValueText(plan.source, arm.value, text) : recordViewText(ctx, plan.payload, text);
225
+ return converted === null ? null : `${cppTypeOf(plan.target)}::ofArm<${plan.index}>(${converted})`;
226
+ }
227
+ case 'optional': {
228
+ const built = recordViewText(ctx, plan.payload, plan.sourceOptional ? `(*${text})` : text);
229
+ if (built === null)
230
+ return null;
231
+ const optional = cppTypeOf(plan.target);
232
+ if (!plan.sourceOptional)
233
+ return `${optional}(${built})`;
234
+ return `(${text}.has_value() ? ${optional}(${built}) : ${optional}())`;
235
+ }
236
+ case 'assert': {
237
+ const built = recordViewText(ctx, plan.payload, `(*${text})`);
238
+ if (built === null)
239
+ return null;
240
+ // The language's own `!` is erased at runtime; a later member read of an
241
+ // actually-absent value throws a TypeError, so the faithful C++ is a
242
+ // CHECKED unwrap that throws too -- not a bare `*text`, which would be
243
+ // undefined behaviour on absence. `gea::host::throwGetPropertyOfNullish`
244
+ // is the same helper `emit-context.ts`/`emit-properties.ts` reach for a
245
+ // nullish-base property read, and its `[[noreturn]] T` return lets it
246
+ // stand as an expression of the target's own type in the ternary's other
247
+ // arm.
248
+ return `(${text}.has_value() ? ${built} : gea::host::throwGetPropertyOfNullish<${cppTypeOf(plan.target)}>())`;
249
+ }
250
+ case 'recast-union': {
251
+ const homes = [];
252
+ for (const [index, home] of plan.arms.entries()) {
253
+ const armText = recastUnionArmText(plan.source, text, index);
254
+ const from = plan.source.arms[index];
255
+ const into = plan.target.arms[home.index];
256
+ if (from === undefined || into === undefined)
257
+ return null;
258
+ const rendered = home.via === 'exact'
259
+ ? armText
260
+ : home.via === 'convert'
261
+ ? convertedValueText(from.value, into.value, armText)
262
+ : recordViewText(ctx, home.via, armText);
263
+ if (rendered === null)
264
+ return null;
265
+ homes.push({ index: home.index, text: rendered });
266
+ }
267
+ return recastedUnionFromHomes(plan.source, plan.target, text, homes);
268
+ }
269
+ case 'fields':
270
+ return recordFieldsViewText(ctx, plan, text);
271
+ }
272
+ };
273
+ const recordFieldsViewText = (ctx, plan, text) => {
274
+ const { source, target } = plan;
275
+ // An `owned` record is a value, not a handle: its members are reached with
276
+ // `.` where every refcounted carrier uses `->`.
277
+ const arrow = (source.kind === 'record' || source.kind === 'record-with-index') && source.ownership !== 'shared-refcount' ? '.' : '->';
278
+ const reads = [];
279
+ const presences = [];
280
+ const structName = cppRecordStructName(target.shapeId);
281
+ for (const { field, read } of plan.fields) {
282
+ if (read.kind === 'bound-method') {
283
+ const bound = boundClassMethodText(ctx, source, field.value, field.key, text);
284
+ if (bound === null)
285
+ return null;
286
+ reads.push(bound);
287
+ if (!field.required)
288
+ presences.push('true');
289
+ continue;
290
+ }
291
+ if (read.kind === 'class-accessor') {
292
+ const got = classAccessorReadText(ctx, source, field.value, field.key, read.value, text);
293
+ if (got === null)
294
+ return null;
295
+ reads.push(got);
296
+ if (!field.required)
297
+ presences.push('true');
298
+ continue;
299
+ }
300
+ if (read.kind === 'absent') {
301
+ reads.push(`${cppTypeOf(field.value)}{}`);
302
+ if (!field.required)
303
+ presences.push('false');
304
+ continue;
305
+ }
306
+ const held = read.held;
307
+ const converted = convertedValueText(held.value, field.value, `${text}${arrow}${cppRecordFieldName(field.key)}`);
308
+ if (converted === null)
309
+ return null;
310
+ // Inside braces [dcl.init.list]/7 forbids the narrowing every other
311
+ // position allows: a field the integer census holds in a `long long`
312
+ // (`{ kind, type }` with `kind: 1 | 2`) is a hard error written into a
313
+ // `double` member of the layout it is viewed as, though both carriers say
314
+ // `scalar(number)`. `static_cast` spells the same conversion explicitly --
315
+ // `emit-narrowing.ts`'s `recastFieldText` answers the identical rule this
316
+ // way -- and is a no-op where the two already agree. The cast names the
317
+ // member's OWN declared type, `decltype(Struct::member)`, because the
318
+ // census's answer lives in the struct declaration `records.ts` emitted
319
+ // and nowhere this emitter can ask: the representation says `double` for
320
+ // both sides, and casting to that spelling is the same narrowing error
321
+ // in the other direction whenever the TARGET member is the narrowed one
322
+ // (a `Leaf { value: number }` read through a `Branch | Leaf` arm).
323
+ const arithmetic = field.value.kind === 'scalar' && field.value.domain !== 'bigint';
324
+ reads.push(arithmetic && held.value.kind === 'scalar'
325
+ ? `static_cast<decltype(${structName}::${cppRecordFieldName(field.key)})>(${converted})`
326
+ : converted);
327
+ if (!field.required) {
328
+ presences.push(held.required ? 'true' : `${text}${arrow}${cppRecordFieldPresenceName(field.key)}`);
329
+ }
330
+ }
331
+ if (source.kind === 'record-with-index') {
332
+ for (const { source: sourceIndex } of plan.indexes) {
333
+ reads.push(`${text}${arrow}${cppRecordIndexSidecarNameFor(sourceIndex, source.indexes)}`);
334
+ reads.push(`${text}${arrow}${cppRecordIndexAttributesNameFor(sourceIndex, source.indexes)}`);
335
+ }
336
+ }
337
+ reads.push(...presences);
338
+ const structure = `${structName}{${reads.join(', ')}}`;
339
+ if (target.ownership !== 'shared-refcount')
340
+ return structure;
341
+ const allocated = `gea::makeRef<${structName}>(${structure})`;
342
+ if (plan.expando)
343
+ return `gea::record::recastWithExpando(${allocated}, ${text}${arrow}${cppRecordIndexSidecarName})`;
344
+ // A class instance's view remembers the instance, so `instanceof` and a
345
+ // narrowing back to the class still answer from it
346
+ // (`gea::record::viewOrigin`, `projection/instance-test.ts`).
347
+ if (source.kind === 'class-ref') {
348
+ const boxed = dynamicCarrierBoxText(source, text);
349
+ if (boxed === null)
350
+ return null;
351
+ return `gea::record::rememberViewOrigin(${allocated}, ${boxed})`;
352
+ }
353
+ return allocated;
354
+ };
@@ -0,0 +1,5 @@
1
+ import type { IrTerminatorOperation } from '../../ir/model.js';
2
+ import type { EmitContext } from './emit-context.js';
3
+ export declare const emitReturn: (ctx: EmitContext, lines: string[], terminator: Extract<IrTerminatorOperation, {
4
+ kind: "return";
5
+ }>) => void;
@@ -0,0 +1,237 @@
1
+ import { representationKey } from '../../representation/model.js';
2
+ import { operandText, createCppEmitBlockedError } from './emit-context.js';
3
+ import { cppTypeOf, cppUndefinedIn } from './types.js';
4
+ import { alignedValueText, dynamicPromiseAdoptionText } from './emit-narrowing.js';
5
+ import { structuralRecordViewText } from './emit-record-view.js';
6
+ /**
7
+ * The `return` terminator: the one place a body's own value meets the calling
8
+ * convention its callers were compiled against.
9
+ *
10
+ * Three ABI results make different demands here -- a generator (`co_return`,
11
+ * and no completion value), a promise (a SETTLED value rather than a converted
12
+ * one), and everything else (an ordinary two-direction reconciliation) -- which
13
+ * is why this lives beside `emit.ts` rather than inside its terminator switch.
14
+ */
15
+ /**
16
+ * A derived constructor's own completion rules (ECMA-262 10.2.2 step 13),
17
+ * decided statically. A body with no `super-initialize` anywhere never binds
18
+ * `this`, so every normal completion is the ReferenceError the language
19
+ * throws; a `return` of a primitive is the TypeError. Both were silently
20
+ * rendered as an ordinary construction before, which is a wrong answer, not
21
+ * a refusal. `undefined`/`void` returns are the ordinary case and fall
22
+ * through; a `return` of an OBJECT other than the receiver itself is the
23
+ * return-override this backend does not implement, and is refused by name
24
+ * rather than discarded.
25
+ */
26
+ const constructorCompletionText = (ctx, value) => {
27
+ const owning = ctx.constructorOf;
28
+ if (owning === null)
29
+ return null;
30
+ if (owning.derived && !owning.callsSuper) {
31
+ return ('gea::host::throwRuntimeError("ReferenceError", "Must call super constructor in derived class before accessing \'this\' or ' +
32
+ 'returning from derived constructor");');
33
+ }
34
+ const kind = value?.representation.kind;
35
+ if (value === null || kind === undefined || kind === 'void' || kind === 'undefined' || ctx.receiverValues.has(value.value))
36
+ return null;
37
+ if (kind === 'string' || kind === 'scalar' || kind === 'null') {
38
+ if (!owning.derived)
39
+ return null;
40
+ return `(void)(${operandText(ctx, value)}); gea::host::throwRuntimeError("TypeError", "Derived constructors may only return object or undefined");`;
41
+ }
42
+ throw createCppEmitBlockedError('call-abi:constructor-return-override', `a constructor of class ${owning.layout.declaration} returns a "${representationKey(value.representation)}" value, which would ` +
43
+ 'replace the constructed instance ([[Construct]] step 10.a); this backend does not implement a constructor return override');
44
+ };
45
+ export const emitReturn = (ctx, lines, terminator) => {
46
+ const completion = constructorCompletionText(ctx, terminator.value ?? null);
47
+ if (completion !== null) {
48
+ lines.push(completion);
49
+ return;
50
+ }
51
+ // A coroutine may not use `return` at all -- C++20 [stmt.return] makes it
52
+ // ill-formed inside one -- so a generator body's every return, implicit
53
+ // fall-off included, spells `co_return`. A generator's completion VALUE
54
+ // (`return v` inside a `function*`) is carried when the cursor's own
55
+ // `completion` slot is a real native carrier (`representation/derive.ts`'s
56
+ // `GeneratorDeclarationPolicy`, `runtime/gea_runtime.h`'s
57
+ // `promise_type::return_value`) -- otherwise (an unresolved/dynamic
58
+ // `TReturn`, collapsed to `undefined` on purpose rather than boxed) a
59
+ // valued return is refused, since there is no storage to fill with it.
60
+ //
61
+ // Keyed on the BODY's own generator-ness, never on its result carrier: an
62
+ // ordinary `function makeGen() { return g() }` returns the identical
63
+ // `iterator(source: generator)` cursor a `function*` does, and spelling its
64
+ // `return` as `co_return` (or refusing it for lacking a completion channel)
65
+ // mistook the value's shape for the frame's.
66
+ if (ctx.generatorBody) {
67
+ const cursor = ctx.abi?.result;
68
+ if (cursor?.kind !== 'iterator') {
69
+ throw createCppEmitBlockedError('runtime-helper:boundary:generator-resume', `a generator body's calling convention returns "${cursor ? representationKey(cursor) : 'nothing'}" rather than an iterator cursor`);
70
+ }
71
+ if (!terminator.value) {
72
+ lines.push('co_return;');
73
+ return;
74
+ }
75
+ if (cursor.completion.kind === 'void' || cursor.completion.kind === 'undefined') {
76
+ throw createCppEmitBlockedError('runtime-helper:boundary:generator-resume', 'returns a value from a generator body whose completion channel is "undefined" -- either TReturn never resolved to a native ' +
77
+ 'carrier, or this generator is not annotated as one -- and this cursor has no storage to fill with it');
78
+ }
79
+ const text = operandText(ctx, terminator.value);
80
+ const converted = alignedValueText(ctx, 'emit-return.ts:92', terminator.value.representation, cursor.completion, text);
81
+ if (converted === null) {
82
+ throw createCppEmitBlockedError(`conversion:${representationKey(terminator.value.representation)}->${representationKey(cursor.completion)}`, `returns a ${terminator.value.representation.kind} where this generator's completion channel is ${cursor.completion.kind}, ` +
83
+ 'and no conversion is installed between them');
84
+ }
85
+ lines.push(`co_return ${converted};`);
86
+ return;
87
+ }
88
+ if (!terminator.value) {
89
+ // `Promise<void>` is a real class type, not the literal `void` -- a
90
+ // bare `return;` inside a function whose ABI result is
91
+ // `Promise<void>` is a C++ compile error (returning nothing from a
92
+ // function declared to return a class). `T === void` is the only
93
+ // payload for which a `return` terminator carries no value operand
94
+ // at all here, so this is reached exactly once per such function, at
95
+ // its implicit or explicit valueless return.
96
+ if (ctx.abi?.result.kind === 'promise' && ctx.abi.result.value.kind === 'void') {
97
+ lines.push(`return ${cppTypeOf(ctx.abi.result)}::settled_value();`);
98
+ return;
99
+ }
100
+ if (ctx.abi && ctx.abi.result.kind !== 'void') {
101
+ const result = ctx.abi.result;
102
+ const payload = result.kind === 'promise' ? result.value : result;
103
+ const absent = cppUndefinedIn(payload);
104
+ if (absent === null) {
105
+ // A valueless return into a result with no absence value is the one
106
+ // shape TypeScript admits only at an unreachable point: `return
107
+ // fail(...)` where `fail(): never`. The lowering drops the `never`
108
+ // carrier (it names no value), the call itself was rendered as its
109
+ // own statement and does not return, and this is the point after it
110
+ // -- `[[noreturn]]`, so the function's own result type needs no
111
+ // value here (`emit-callable.ts` renders an unreachable argument the
112
+ // same way).
113
+ lines.push(`return gea::host::unreachableValue<${cppTypeOf(result)}>();`);
114
+ return;
115
+ }
116
+ lines.push(result.kind === 'promise' ? `return ${cppTypeOf(result)}(${absent});` : `return ${absent};`);
117
+ return;
118
+ }
119
+ lines.push('return;');
120
+ return;
121
+ }
122
+ const text = operandText(ctx, terminator.value);
123
+ // The body's own declared ABI result is the "held" side of the same
124
+ // reconciliation `emit-bindings.ts` already applies to a binding cell -- see
125
+ // citations.md finding 1. `ctx.abi` is `null` only for an uncalled region,
126
+ // which never has a `return` with a value to widen.
127
+ //
128
+ // `convertedValueText`, not `widenedStoreText`: the store direction alone
129
+ // answers only a value WIDENING into the declared result, and returns `null`
130
+ // for the mirror case -- a `dynamic` value returned where the ABI result is
131
+ // concrete. That `null` then fell through to the bare `text`, emitting
132
+ // `return gea_arg_1;` from a `gea::Value` into a
133
+ // `gea::TaggedUnion<std::string, double>` with no conversion at all: a
134
+ // certified, preflight-clean program that clang rejects. A JSDoc
135
+ // `@returns {number|string}` on a JS function whose parameter's call sites
136
+ // disagree is enough to reach it. `convertedValueText` is the general
137
+ // reconciliation in both directions -- it asks `unboxedLoadText` for a
138
+ // dynamic source and falls through to the same `widenedStoreText` otherwise
139
+ // -- and is already what every argument slot (`emit-callable.ts`) uses.
140
+ //
141
+ // An async body's ABI result is `Promise<V>` while its `return v` carries a
142
+ // bare `V`: that pair is a RESOLUTION, not a conversion, and `Promise`'s
143
+ // converting constructor exists for this one site and no other -- its own
144
+ // class comment says so ("TypeScript never lets an ordinary binding or field
145
+ // hold a bare `T` where `Promise<T>` is declared -- so this is reached only
146
+ // from a function whose declared return type is `Promise<T>`"). Verified by
147
+ // RUNNING it: an async arrow returning an awaited `number` emits `return
148
+ // total;` from a `gea::Promise<double>` function and prints the right answer.
149
+ // Reconciling against the promise's PAYLOAD rather than against the promise
150
+ // keeps the guard below fail-closed on the part that really is a conversion.
151
+ // Returning an already-promise value (a pass-through) reconciles against the
152
+ // promise itself, so it is left to the general path.
153
+ // A DYNAMIC value may itself be a promise (hono's `formData()` returns its
154
+ // `any`-typed `#cachedBody(...)`), and an async return adopts one rather
155
+ // than fulfilling with it (ECMA-262 27.2.1.3.2) -- decided at run time.
156
+ // Lowering already converted the value toward the payload, so the dynamic
157
+ // operand is the convert's source.
158
+ const dynamicSource = terminator.value.representation.kind === 'dynamic' ? terminator.value : (ctx.conversionSources.get(terminator.value.value) ?? null);
159
+ if (ctx.abi?.result.kind === 'promise' && dynamicSource?.representation.kind === 'dynamic') {
160
+ const adopted = dynamicPromiseAdoptionText(ctx.abi.result, operandText(ctx, dynamicSource));
161
+ if (adopted !== null) {
162
+ lines.push(`return ${adopted};`);
163
+ return;
164
+ }
165
+ }
166
+ const settlesIntoPromise = ctx.abi !== null && ctx.abi.result.kind === 'promise' && terminator.value.representation.kind !== 'promise';
167
+ const abiResult = settlesIntoPromise && ctx.abi ? ctx.abi.result.value : (ctx.abi?.result ?? null);
168
+ // `Promise<void>` carries no payload at all (`cppResultTypeOf` elides
169
+ // `void`), so a valued return whose value is itself `void` -- `return f()`
170
+ // where `f` completes without producing one -- has nothing to settle WITH.
171
+ // The evaluation still has to happen for its effects, so it is discarded
172
+ // explicitly and the settled promise minted by the same named factory the
173
+ // valueless return above uses.
174
+ if (ctx.abi && ctx.abi.result.kind === 'promise' && abiResult && abiResult.kind === 'void') {
175
+ lines.push(`(void)(${text});`);
176
+ lines.push(`return ${cppTypeOf(ctx.abi.result)}::settled_value();`);
177
+ return;
178
+ }
179
+ // A value-returning source statement may still implement a `void` ABI:
180
+ // `return undefined` and `return sideEffect()` both evaluate an expression,
181
+ // then expose no result to the caller. Preserve that evaluation and discard
182
+ // its value explicitly. Passing `void` into the general conversion below is
183
+ // invalid by construction -- it has no C++ value type for `cppTypeOf` to
184
+ // compare -- and previously crashed the entire emission after lowering had
185
+ // already accepted the body.
186
+ if (abiResult?.kind === 'void') {
187
+ lines.push(`(void)(${text});`);
188
+ lines.push('return;');
189
+ return;
190
+ }
191
+ // The same two-step an ARGUMENT already takes (`alignedText`, emit-callable.
192
+ // ts): `convertedValueText` first, and only when it refuses, the view that
193
+ // needs both LAYOUTS in hand. A `native-record-ref` carries a shape id and no
194
+ // field list, so the general conversion cannot reach the target's members --
195
+ // this is the one place the deriver is available to resolve them. `return
196
+ // options` out of a method declared to return an overlapping named shape is
197
+ // ordinary TypeScript and the mongodb driver is built out of it.
198
+ const converted = abiResult
199
+ ? (alignedValueText(ctx, 'emit-return.ts:202', terminator.value.representation, abiResult, text) ??
200
+ structuralRecordViewText(ctx, terminator.value.representation, abiResult, text))
201
+ : null;
202
+ // FAIL CLOSED. `convertedValueText` answers `text` unchanged whenever the two
203
+ // carriers already agree, so `null` here means no recipe exists for this pair
204
+ // -- and emitting the bare operand anyway is how a `gea::Value` came to be
205
+ // returned from a function declared `gea::TaggedUnion<std::string, double>`:
206
+ // certified, preflight-clean, and rejected by clang. A missing conversion is
207
+ // a refusal, not a silently unconverted store.
208
+ if (abiResult && converted === null) {
209
+ throw createCppEmitBlockedError(`conversion:${representationKey(terminator.value.representation)}->${representationKey(abiResult)}`, `returns a ${terminator.value.representation.kind} where this body's ABI result is ${abiResult.kind}, ` +
210
+ 'and no conversion is installed between them');
211
+ }
212
+ // ONE user-defined conversion, and the promise already spends it.
213
+ //
214
+ // Reconciling against the payload is right, but it leaves the step from the
215
+ // payload to the promise implicit -- and `convertedValueText` renders a
216
+ // widening that `gea::Optional<T>`'s (or any other) converting constructor
217
+ // performs as the operand text UNCHANGED, because for an ordinary store that
218
+ // single implicit conversion is exactly what happens. Stacked, they are two:
219
+ // `return v3;` from a `double` in a body whose result is
220
+ // `gea::Promise<gea::Optional<double>>` needs `double` -> `Optional<double>`
221
+ // -> `Promise<Optional<double>>`, and C++ [over.ics.user] permits one
222
+ // user-defined conversion per implicit sequence. clang rejected it -- "no
223
+ // viable conversion from returned value of type 'double'" -- on a body that
224
+ // certified clean and emitted. `async next(): Promise<number | null>` with
225
+ // `return this.index++` is the whole program it takes; mongodb's
226
+ // `AbstractCursor.next` is the same shape.
227
+ //
228
+ // Naming the promise explicitly spends the sequence's one slot on the
229
+ // payload widening instead, which is the step that actually needs it. The
230
+ // file's own optional-target comment makes the same argument at the other
231
+ // end of the same pair.
232
+ if (settlesIntoPromise && ctx.abi) {
233
+ lines.push(`return ${cppTypeOf(ctx.abi.result)}(${converted ?? text});`);
234
+ return;
235
+ }
236
+ lines.push(`return ${converted ?? text};`);
237
+ };
@@ -0,0 +1,10 @@
1
+ import type { Representation } from '../../representation/model.js';
2
+ import { type NativeSumPlan } from '../../conversion/native-sum.js';
3
+ export { nativeSumWidenable } from '../../conversion/native-sum.js';
4
+ export declare const renderNativeSumPlan: (step: NativeSumPlan, text: string, spell: (target: Representation) => string, dependent?: boolean) => string;
5
+ /**
6
+ * Own the source while dispatching: lvalues copy once, temporaries move into
7
+ * the parameter, and the selected payload moves into its destination. Borrowing
8
+ * a temporary through const& would force an otherwise unnecessary deep copy.
9
+ */
10
+ export declare const widenedNativeSumText: (source: Representation, target: Representation, text: string) => string | null;