@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,320 @@
1
+ import { carriesMergeAbsence, carriesNoAbsence, carriesUndefined, contributesOnlyAbsence, contributesNoTruthiness, isBooleanShapedMergeTarget, isDeadMergeContribution, mergesAsTruthiness, partialDeadMergeArms, representationKey } from '../representation/model.js';
2
+ import { mergeFalsyAbsence, mergeMaterialization, mergeTaggedAbsence } from '../representation/merge.js';
3
+ import { operandOf } from '../semantics/model/operands.js';
4
+ import { IrLoweringBlockedError } from './lower-graph.js';
5
+ import { convertOrDrift, convertTo, resolveRequiredOperand } from './lower-operands.js';
6
+ /**
7
+ * A merge arm the census cannot bring into the merge's carrier blocks the
8
+ * body. This is the certification of a merge: preflight used to rebuild
9
+ * `mergeIncoming`'s decision tree over the semantic graph and refuse the
10
+ * same pairs one stage earlier (`buildMergeNarrowingObligations`, deleted in
11
+ * one authority for narrowing); with one authority left,
12
+ * "no node" is a refusal here rather than a drift row the printer's own
13
+ * chain would answer, because nothing downstream is entitled to decide it.
14
+ */
15
+ const blockedMergeArm = (operation, role, from, to) => new IrLoweringBlockedError(`merge arm "${role}" of ${operation.family === 'computation' ? `${operation.form} ${'operator' in operation ? operation.operator : ''}`.trim() : operation.family}: ` +
16
+ `no conversion is installed from ${representationKey(from)} into ${representationKey(to)}`);
17
+ /**
18
+ * Every live arm of a rebuilt union must have somewhere to go: the merge's
19
+ * own key, a census node, or -- for the `&&` rebuild only -- a boolean-shaped
20
+ * merge, which `emitMergeLiveArmRebuild` renders by `ToBoolean`, total over
21
+ * every carrier. The `??` rebuild admits no `ToBoolean` shortcut: its kept
22
+ * branch proved the value PRESENT, and its payload arms are values, not
23
+ * truthiness. The same two rules preflight's deleted `partialMergeArmsInstalled`
24
+ * and `presentOptionalMergeInstalled` applied.
25
+ */
26
+ const requireLiveArmsConvertible = (ctx, operation, role, arms, merged, admitToBoolean) => {
27
+ if (admitToBoolean && isBooleanShapedMergeTarget(merged))
28
+ return;
29
+ const mergedKey = representationKey(merged);
30
+ for (const arm of arms) {
31
+ if (representationKey(arm) === mergedKey)
32
+ continue;
33
+ if (ctx.program.conversions.nodeFor(arm, merged).capability.kind === 'never')
34
+ throw blockedMergeArm(operation, role, arm, merged);
35
+ }
36
+ };
37
+ /**
38
+ * One incoming value of a merge, in the carrier the merge publishes.
39
+ *
40
+ * A phi's incoming values must already carry the phi's own carrier
41
+ * (`ir/verify.ts`), so wherever an arm does not, the carrier change is an
42
+ * explicit instruction in *that arm's own block* rather than something the phi
43
+ * assumes. `a ?? b` is the standing example: it keeps `a` on the branch where
44
+ * `a` was proven present, and there the merge publishes the payload while the
45
+ * operand still carries the optional.
46
+ *
47
+ * A constant whose declared type is uninhabited is materialized directly in the
48
+ * merge's carrier instead. `never` is the checker's answer to "does control
49
+ * reach here", not to "what storage does this value occupy", and the two part
50
+ * company at exactly one idiom: `typeof X !== 'undefined' ? X : (undefined as
51
+ * unknown as typeof X)`, the ambient-global guard. The false arm narrows to
52
+ * `never` *because* the declared type excludes `undefined` -- yet that arm is
53
+ * the one that runs whenever the host did not inject `X`. The value really is
54
+ * absent and the merge is what states which carrier holds it, so the constant
55
+ * is minted there; `cppConstantLiteral` then spells that carrier's absent value
56
+ * or refuses outright if it has none.
57
+ *
58
+ * A *reference* whose declared type is inhabited can still be dead on this
59
+ * one arm, the identical fact one step less literal: `a && a.b` keeps `a` on
60
+ * the branch where `a` tested falsy, and when `a`'s own carrier is an Object
61
+ * (a class instance, a record, a native reference, an array, a callable, ...)
62
+ * it has no falsy state at all -- ECMAScript's `ToBoolean` never answers
63
+ * `false` for one. Only `a`'s own absence, if it has one, can be why this
64
+ * branch runs; the payload contributes nothing, exactly the way the
65
+ * constant's `never` type contributes nothing above. `role === 'kept'` names
66
+ * this arm precisely (`ir/lower.ts` passes it only for `&&`/`||`/`??`'s
67
+ * reused side, never the freshly-evaluated one), `operator === '&&'` is the
68
+ * one direction where the reachable state is falsy rather than truthy/
69
+ * present, and `carriesMergeAbsence` is what the merge's own carrier must
70
+ * satisfy for "materialize the absence" to have anywhere to land -- an
71
+ * `optional`, or a `native-handle`, which `optional.ts` collapses `T | null`
72
+ * onto precisely because it self-encodes absence -- and both it and
73
+ * `contributesOnlyAbsence` are the facts this one authority asks; preflight's
74
+ * `buildMergeNarrowingObligations` asked the same until Phase 1.6 deleted it.
75
+ *
76
+ * The operand's own null counts as that nothing. A bare
77
+ * `class-ref(shared-refcount)` -- the collapsed form of `T | null` -- is the
78
+ * one carrier whose falsy state is a value rather than a hole, and it is a
79
+ * value the merge's absence already spells; `contributesOnlyAbsence` is the
80
+ * whole-operand reading that admits it, where the per-arm
81
+ * `isDeadMergeContribution` beside it must not.
82
+ */
83
+ export const mergeIncoming = (ctx, block, lineage, operation, role, operand, representation) => {
84
+ const materialization = mergeMaterialization(ctx.graph.structuralTypes, ctx.constantDeriver, operand, representation);
85
+ if (materialization === 'constant' && operand.source.kind === 'constant') {
86
+ return { value: ctx.builder.constant(block, lineage, operand.source.text, operand.source.literal, representation), representation };
87
+ }
88
+ if (materialization === 'absence') {
89
+ // A tagged union can carry both absences; the arm that contributed
90
+ // `undefined` (a `void` default, an uninhabited branch) must land in the
91
+ // `undefined` arm, or `[w = c()]` on a short array prints `null`.
92
+ const absence = representation.kind === 'optional' ? representation.absence : carriesUndefined(representation) ? 'undefined' : 'null';
93
+ return { value: ctx.builder.constant(block, lineage, absence, absence, representation), representation };
94
+ }
95
+ // The same fact one step up from a scalar: an arm whose declared type is
96
+ // uninhabited is materialized in the merge's carrier rather than converted
97
+ // into it. `xs ? xs : []` is the standing idiom -- the checker types the
98
+ // literal `never[]` and the conditional `T[]` -- and a conversion is the
99
+ // wrong instruction for it in both directions: `array-object(undefined)` and
100
+ // `array-object(T)` are different C++ types that cannot alias, so nothing
101
+ // could reinterpret one as the other, and there is nothing to reinterpret
102
+ // either, because an array of the uninhabited type is empty. The empty array
103
+ // OF THE MERGE'S OWN ELEMENT TYPE is the whole value, so it is built here, in
104
+ // this arm's own block, exactly as the constant above is.
105
+ //
106
+ // What this gives up is reference identity with the arm's own array, on the
107
+ // one arm where nothing can observe it: two `never[]`s differ in no element,
108
+ // no length and no future write, so only a `===` against the arm's own
109
+ // binding could tell them apart -- and that arm previously did not lower at
110
+ // all.
111
+ if (representation.kind === 'array-object' && materialization === 'empty-array') {
112
+ return { value: ctx.builder.allocateArrayObject(block, lineage, [], representation), representation };
113
+ }
114
+ // The same construction where the merge's carrier is a stated-native array
115
+ // instead of an `ArrayObject`: `path.match(/\/:/g) || []` (hono's
116
+ // `reg-exp-router/trie.ts:10` and `router.ts:132`) publishes
117
+ // `gea::runtime::regex::MatchResult`, which IS an `ArrayObject<std::string>`
118
+ // carrying 22.1.3.13's named members beside it. `mergeMaterialization` is
119
+ // what proved the empty one is a complete value of that carrier; the
120
+ // primitive is the record allocation an object/array literal with the same
121
+ // carrier already lowers through (`ir/lower-allocation.ts`), with no fields,
122
+ // because an empty array has none to install.
123
+ if (representation.kind === 'native-record-ref' && materialization === 'empty-array') {
124
+ return { value: ctx.builder.allocateRecord(block, lineage, [], representation), representation };
125
+ }
126
+ // An arm typed `never` (`Debug.fail()`) ran its own operations in its own
127
+ // block and never completes; the phi still needs an incoming value from
128
+ // that block, spelled as the dead `&&` arm below spells its own: an
129
+ // `undefined` converted into the merge carrier, which `emit.ts` renders as
130
+ // `gea::host::unreachableValue<T>()` when no load exists.
131
+ if (materialization === 'unreachable') {
132
+ const absent = { kind: 'undefined' };
133
+ const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
134
+ return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
135
+ }
136
+ const incoming = resolveRequiredOperand(ctx, block, lineage, operand);
137
+ const from = representationKey(incoming.representation);
138
+ const to = representationKey(representation);
139
+ if (from === to)
140
+ return incoming;
141
+ const falsyAbsence = mergeFalsyAbsence(incoming.representation, representation);
142
+ if (role === 'kept' &&
143
+ operation.family === 'computation' &&
144
+ operation.form === 'logical' &&
145
+ operation.operator === '&&' &&
146
+ falsyAbsence) {
147
+ return { value: ctx.builder.constant(block, lineage, falsyAbsence, falsyAbsence, representation), representation };
148
+ }
149
+ if (role === 'kept' &&
150
+ operation.family === 'computation' &&
151
+ operation.form === 'logical' &&
152
+ operation.operator === '&&' &&
153
+ carriesMergeAbsence(representation) &&
154
+ contributesOnlyAbsence(incoming.representation)) {
155
+ return { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', representation), representation };
156
+ }
157
+ // The kept operand has NO falsy state and the merge carries no absence for
158
+ // one to land in: `previousSibling && format & Flag` on a present `Node`.
159
+ // This branch never runs, and the checker already dropped the object from
160
+ // the expression's type. The phi still needs an incoming value from the
161
+ // block, so it gets the one thing a dead arm can honestly hold: an
162
+ // `undefined` converted into the merge carrier, which `emit.ts`'s convert
163
+ // renders as `gea::host::unreachableValue<T>()` when no load exists --
164
+ // the same rendering a default past an empty tuple already gets. Licensed
165
+ // by the identical predicate in `preflight/obligations-graph.ts`.
166
+ if (role === 'kept' &&
167
+ operation.family === 'computation' &&
168
+ operation.form === 'logical' &&
169
+ operation.operator === '&&' &&
170
+ isDeadMergeContribution(incoming.representation)) {
171
+ const absent = { kind: 'undefined' };
172
+ const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
173
+ return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
174
+ }
175
+ // The `||` mirror of the dead arm above: the kept operand has NO truthy
176
+ // state (`contributesNoTruthiness`), so `a || b` never publishes it.
177
+ // Licensed by the identical predicate in `preflight/obligations-graph.ts`.
178
+ if (role === 'kept' &&
179
+ operation.family === 'computation' &&
180
+ operation.form === 'logical' &&
181
+ operation.operator === '||' &&
182
+ contributesNoTruthiness(incoming.representation)) {
183
+ const absent = { kind: 'undefined' };
184
+ const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
185
+ return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
186
+ }
187
+ // The partial sibling of the whole-dead-arm bypass immediately above: SOME
188
+ // of `incoming`'s tagged-union arms are dead rather than all of them --
189
+ // `results[name]` typed `T[] | string`, where `T[]` (object-shaped, always
190
+ // truthy) can never be why this `&&` fell through but `string` (an empty
191
+ // one) can. `partialDeadMergeArms` states the split; `requireLiveArmsConvertible`
192
+ // above is what certifies it (every live arm has a census node or the
193
+ // merge is boolean-shaped), blocking the body otherwise. `MergeLiveArmRebuildOperation`
194
+ // (`ir/model.ts`) is why this needs its own operation rather than the
195
+ // general `convert` below: a dropped arm is sound only at a merge the
196
+ // checker's own narrowing already proved it for, not everywhere the same
197
+ // source/result pair recurs, so the proof travels as this operation's own
198
+ // `liveArms`, computed once here and never re-derived at emission.
199
+ const split = partialDeadMergeArms(incoming.representation);
200
+ if (split &&
201
+ role === 'kept' &&
202
+ operation.family === 'computation' &&
203
+ operation.form === 'logical' &&
204
+ operation.operator === '&&' &&
205
+ (!split.keptIsOptional || carriesMergeAbsence(representation) || mergeTaggedAbsence(incoming.representation, representation) !== null)) {
206
+ requireLiveArmsConvertible(ctx, operation, role, split.liveIndices.flatMap((index) => (split.payload.arms[index] ? [split.payload.arms[index].value] : [])), representation, true);
207
+ return {
208
+ value: ctx.builder.mergeLiveArmRebuild(block, lineage, incoming, representation, split.liveIndices, split.keptIsOptional, ctx.program.conversions),
209
+ representation
210
+ };
211
+ }
212
+ // `a ?? b` reaches its kept branch only after the presence test succeeded.
213
+ // When `a` is `Optional<TaggedUnion<...>>`, that proof removes the optional
214
+ // wrapper's absence while preserving every payload arm. Rebuild the live
215
+ // payload into the merge carrier at this site rather than installing the
216
+ // unsound global conversion `optional(T) -> U`, which would have no answer
217
+ // for absence at unguarded occurrences of the same pair.
218
+ if (role === 'kept' &&
219
+ operation.family === 'computation' &&
220
+ operation.form === 'logical' &&
221
+ operation.operator === '??' &&
222
+ incoming.representation.kind === 'optional' &&
223
+ incoming.representation.payload.kind === 'tagged-union') {
224
+ requireLiveArmsConvertible(ctx, operation, role, incoming.representation.payload.arms.map((arm) => arm.value), representation, false);
225
+ return {
226
+ value: ctx.builder.mergeLiveArmRebuild(block, lineage, incoming, representation, incoming.representation.payload.arms.map((_, index) => index), false, ctx.program.conversions),
227
+ representation
228
+ };
229
+ }
230
+ // A `&&` whose merged type is a plain `boolean`: the kept operand is here
231
+ // only as its own truthiness, which is the very question `&&` asked of it.
232
+ // `object && object.isObject3D` over three's `Object3D` is the shape -- the
233
+ // checker collapsed the whole expression to `boolean`, so no VALUE of the
234
+ // kept operand survives to be converted, only its `ToBoolean`.
235
+ // `mergesAsTruthiness` is the identical fact
236
+ // `preflight/obligations-graph.ts` licenses this with, and the `test`
237
+ // operation renders through `emit-presence.ts`'s `booleanTestText`, which
238
+ // is total over every carrier -- including a nullable `class-ref`, whose
239
+ // truthiness is exactly its presence.
240
+ //
241
+ // LAST of the three, on purpose. The whole-dead bypass above materializes an
242
+ // absence where the merge has somewhere to hold one, and the partial-arm
243
+ // rebuild converts each still-live arm on its own; both are strictly more
244
+ // precise than one `ToBoolean` over the operand, and both already covered
245
+ // the programs that reach them. This answers only what neither did.
246
+ if (role === 'kept' &&
247
+ operation.family === 'computation' &&
248
+ operation.form === 'logical' &&
249
+ operation.operator === '&&' &&
250
+ mergesAsTruthiness(representation)) {
251
+ return { value: ctx.builder.test(block, lineage, incoming), representation };
252
+ }
253
+ // Which arms the merge's own test proves present: `a || b` and `a ?? b`
254
+ // keep `a` only when it is truthy or non-nullish, and a default keeps its
255
+ // extraction only past the `is-defined` guard. A conditional's arm, or the
256
+ // falsy operand `&&` keeps, is chosen by something else.
257
+ const guarded = (operation.family === 'computation' &&
258
+ operation.form === 'logical' &&
259
+ (operation.operator === '||' || operation.operator === '??') &&
260
+ role === 'kept') ||
261
+ (operation.family === 'destructuring' && operation.form === 'default-value' && role === 'extracted');
262
+ const converted = convertTo(ctx, block, lineage, incoming, representation, guarded ? 'guard' : 'merge-arm');
263
+ if (converted !== null)
264
+ return converted;
265
+ // The general form of the `optional(tagged-union)` rebuild above, and the
266
+ // last thing asked rather than the first: a guarded arm whose payload -- not
267
+ // the optional around it -- is what the merge's carrier accepts.
268
+ //
269
+ // `(options?.onError ?? console.error)(e)` (node-server's `websocket.ts`) is
270
+ // the standing shape. TypeScript reduces the merged type to `console.error`'s
271
+ // own `(...data: any[]) => void`, because the positional handler really is
272
+ // assignable to it, so the merge publishes that one frame; the kept operand
273
+ // still carries `optional((any) => void)` because that is what the FIELD
274
+ // holds. Both halves are already installed as census nodes -- the presence
275
+ // load `optional(T) -> T`, and `T -> U`, the callable adapter a conditional
276
+ // between the same two functions already lowers through -- and the pair
277
+ // `optional(T) -> U` is not, deliberately: it has no answer for absence at
278
+ // the unguarded occurrences of the same pair, which is precisely why the
279
+ // rebuild above refuses to install it globally.
280
+ //
281
+ // What licenses composing them here is `guarded`, already computed above:
282
+ // `??` reached this branch past a nullish test, `||` past a truthiness test
283
+ // (an absent optional is falsy, so truthy proves present too), and a
284
+ // destructuring default past its own `is-defined` guard. The presence is the
285
+ // branch's, so the unwrap is branch-local -- the same thing the constant and
286
+ // empty-array materializations above are -- and neither step is a new
287
+ // capability.
288
+ if (guarded && incoming.representation.kind === 'optional') {
289
+ const present = convertTo(ctx, block, lineage, incoming, incoming.representation.payload, 'guard');
290
+ const widened = present === null ? null : convertTo(ctx, block, lineage, present, representation, 'merge-arm');
291
+ if (widened !== null)
292
+ return widened;
293
+ }
294
+ // The `??` mirror of the dead KEPT arms above, on the other side of the
295
+ // operator: `a ?? b` evaluates `b` only where `a` was nullish, and a kept
296
+ // operand whose carrier has no absent state at all was never nullish, so this
297
+ // arm never runs.
298
+ //
299
+ // node-server's `websocket.ts` module body is the shape:
300
+ // `globalThis.CloseEvent ?? class extends Event {...}`, where the program's
301
+ // own global read carries a bare `constructor-family`. The fallback class is
302
+ // a SECOND, unrelated program class, and the conversion asked for between the
303
+ // two is a nominal identity C++ has no way to state -- which is the right
304
+ // refusal for a value this arm never produces.
305
+ //
306
+ // Asked LAST, after the ordinary conversion has already been tried and
307
+ // failed, for the same reason `mergesAsTruthiness` above is: an arm that
308
+ // really does convert keeps converting, so this only ever turns a refusal
309
+ // into the dead value, never a working merge into one.
310
+ if (role === 'taken' && operation.family === 'computation' && operation.form === 'logical' && operation.operator === '??') {
311
+ const kept = operandOf(operation, 'left');
312
+ const keptCarrier = kept?.source.kind === 'result' ? ctx.plan.selected.get(kept.source.result) : undefined;
313
+ if (keptCarrier && carriesNoAbsence(keptCarrier)) {
314
+ const absent = { kind: 'undefined' };
315
+ const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
316
+ return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
317
+ }
318
+ }
319
+ throw blockedMergeArm(operation, role, incoming.representation, representation);
320
+ };
@@ -0,0 +1,272 @@
1
+ import type { DeclarationId, FunctionId, IrValueId, OperationId, ResultRole, SemanticResultId } from '../identity/ids.js';
2
+ import type { ConversionCensus } from '../conversion/nodes.js';
3
+ import type { ConversionNode } from '../conversion/algebra.js';
4
+ import type { ClassLayout } from '../projection/classes.js';
5
+ import type { SlotCensus } from '../projection/slots.js';
6
+ import type { RepresentationDeriver } from '../representation/derive.js';
7
+ import { type CallableAbi, type RecordField, type Representation } from '../representation/model.js';
8
+ import type { SealedRepresentationPlan } from '../representation/plan.js';
9
+ import type { SemanticGraph } from '../semantics/model/graph.js';
10
+ import { type SemanticOperand } from '../semantics/model/operands.js';
11
+ import type { SemanticOperation } from '../semantics/model/operations.js';
12
+ import type { IrBodyBuilder } from './build.js';
13
+ import type { PendingShortCircuit } from './lower-short-circuit.js';
14
+ import type { IrBlockId, IrOperand } from './model.js';
15
+ /**
16
+ * Reading an operation's inputs and publishing its result.
17
+ *
18
+ * Every lowering step needs the same three answers -- where does this operand's
19
+ * value come from, which carrier does it arrive in, and under which identity is
20
+ * the result visible to the next step -- and they have to be the same answers
21
+ * everywhere. Two lowerings that each resolved a `parameter` operand their own
22
+ * way would disagree about the frame, which is not a defect any later layer can
23
+ * see: both would produce a well-formed body, and only one would be reading
24
+ * what the caller actually pushed.
25
+ */
26
+ /**
27
+ * The whole-program answers a body cannot derive from its own operations.
28
+ *
29
+ * A class's members and each function's convention are projected once, before
30
+ * any body lowers, precisely so two bodies cannot disagree about them. A
31
+ * lowering that needed one and re-derived it locally would be that second
32
+ * opinion, so the projections are handed in rather than recomputed.
33
+ */
34
+ export interface LoweringProgram {
35
+ readonly abis: ReadonlyMap<FunctionId, CallableAbi>;
36
+ readonly constructs: ReadonlyMap<FunctionId, CallableAbi>;
37
+ /** Checker-authenticated callable identity carried by semantic values. */
38
+ readonly callableOrigins: ReadonlyMap<SemanticResultId, FunctionId>;
39
+ readonly callableOwnPropertyWrites: ReadonlyMap<FunctionId, ReadonlySet<string>>;
40
+ readonly functionPrototypePropertyWrites: ReadonlySet<string>;
41
+ readonly classes: ReadonlyMap<DeclarationId, ClassLayout>;
42
+ /** Which carrier each operand must arrive in (`projection/slots.ts`). */
43
+ readonly slots: SlotCensus;
44
+ /** One conversion node per carrier pair (`conversion/nodes.ts`); every `convert` this lowering mints names one. */
45
+ readonly conversions: ConversionCensus;
46
+ /**
47
+ * Every slot `enter` could not fill: the operand's carrier differs from its
48
+ * slot and the census has no conversion for the pair. The operand went
49
+ * through unconverted, exactly as it did before slots existed, so the
50
+ * printer's own per-consumer path still renders (or refuses) it. Counted
51
+ * rather than refused while that path is still the printer's, so the
52
+ * refactor can see the pairs the census must learn before the printer's
53
+ * path is deleted; it becomes a refusal then.
54
+ */
55
+ readonly drift: SlotDrift[];
56
+ /**
57
+ * Every property read that produced a method VALUE -- a callable carrier
58
+ * stating a receiver -- keyed by the value it produced, with the object it
59
+ * was read from and the body it names. `enter` binds the two when such a
60
+ * value reaches a receiver-less slot (see `BindCallableOperation.detached`).
61
+ */
62
+ readonly methodValueReceivers: Map<IrValueId, {
63
+ readonly receiver: IrOperand;
64
+ readonly method: FunctionId;
65
+ }>;
66
+ /**
67
+ * The installed plugins' reactive-field statement, merged once for this
68
+ * lowering run exactly as `compiler.ts` merges it into
69
+ * `HostSpellings.reactive.fields` -- but gated on a cell actually being
70
+ * configured (empty when no plugin names one), so a `true` reading of
71
+ * `GetOperation.reactive`/`BindingReadOperation.reactive` always means a
72
+ * real cell exists, never merely that some plugin named the field without
73
+ * anything to render it into. See `GetOperation.reactive`.
74
+ */
75
+ readonly reactiveFields: ReadonlyMap<DeclarationId, ReadonlySet<string>>;
76
+ /**
77
+ * The FIELD declarations (not the class declarations `reactiveFields` is
78
+ * keyed by) that are reactive -- the reverse index a resolved-binding
79
+ * property read needs, since `PropertyOperation.resolvedBinding` names the
80
+ * field's own declaration directly, with no receiver/key pair left to walk
81
+ * through `classMemberOf`. Built once from `classes` and `reactiveFields`
82
+ * (`ir/lower.ts`) rather than per read, because a body cannot see the
83
+ * classes it does not declare.
84
+ */
85
+ readonly reactiveFieldDeclarations: ReadonlySet<DeclarationId>;
86
+ }
87
+ /**
88
+ * Whether a property read's receiver+key names a field an installed plugin
89
+ * declared a reactive cell.
90
+ *
91
+ * Answered once, here, at the point a `get` is about to be built
92
+ * (`lower-property.ts`, `lower-destructuring.ts`'s object-pattern step) --
93
+ * see `GetOperation.reactive` for why this belongs on the operation instead
94
+ * of being re-asked from a table the target does not publish until struct
95
+ * rendering. `classMemberOf` finds the field's DECLARING class along the
96
+ * inheritance chain, which is the class `reactiveFields` is keyed by (own
97
+ * fields only -- `component-classes.ts`'s `GeaReactiveFields`); a receiver
98
+ * that is not a class at all (a record, a dictionary, ...) answers `false`
99
+ * without a lookup, since the plugin's table only ever names class fields.
100
+ */
101
+ export declare const reactiveFieldReadOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, receiver: Representation, key: string, reactiveFields: ReadonlyMap<DeclarationId, ReadonlySet<string>>) => boolean;
102
+ export interface SlotDrift {
103
+ /** The block that would execute this conversion, retained for control-flow pruning. */
104
+ readonly block: IrBlockId;
105
+ readonly operation: OperationId;
106
+ readonly role: string;
107
+ readonly ordinal: number;
108
+ readonly source: string;
109
+ readonly slot: string;
110
+ readonly reason: string;
111
+ /** The pair itself, so an instrument can ask the registry about it without re-deriving. */
112
+ readonly sourceRepresentation: Representation;
113
+ readonly slotRepresentation: Representation;
114
+ }
115
+ export interface LoweringContext {
116
+ readonly graph: SemanticGraph;
117
+ readonly plan: SealedRepresentationPlan;
118
+ readonly constantDeriver: RepresentationDeriver;
119
+ readonly program: LoweringProgram;
120
+ /** This owner's calling convention, or `null` for a region nobody calls. */
121
+ readonly abi: CallableAbi | null;
122
+ /**
123
+ * Why this body has no convention, when the ABI projection refused to give it
124
+ * one, and `null` otherwise.
125
+ *
126
+ * The projection already knows the answer -- it states three distinct failure
127
+ * modes by name (`projection/abi.ts`) -- and a body whose convention is absent
128
+ * then refuses with the *symptom*, "reads ABI position 0", which names neither
129
+ * the cause nor a thing to fix. Carrying the reason turns that report back
130
+ * into the one the projection already made. `null` covers two different
131
+ * situations that are both correctly silent here: a region nobody calls, which
132
+ * genuinely has no convention to refuse, and a function the projection never
133
+ * considered -- and inventing a reason for either would be this layer guessing
134
+ * at another's answer.
135
+ */
136
+ readonly abiRefusal: string | null;
137
+ readonly builder: IrBodyBuilder;
138
+ /** Every result this owner has lowered so far, keyed by the anchor result each defining operation registered. */
139
+ readonly values: Map<SemanticResultId, IrValueId>;
140
+ /** Optional-chain expressions whose merge is recorded but not yet closed (`lower-short-circuit.ts`). */
141
+ readonly shortCircuits: Map<SemanticResultId, PendingShortCircuit>;
142
+ }
143
+ export declare const describeOperand: (operand: SemanticOperand) => string;
144
+ /** A published result's carrier plus the SSA id already minted for it -- the only legal source for an operand that names a prior result. */
145
+ export declare const resolveResultValue: (ctx: LoweringContext, result: SemanticResultId, describe: string) => IrOperand;
146
+ export declare const resolveRequiredOperand: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operand: SemanticOperand) => IrOperand;
147
+ export declare const resolveOptionalOperand: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operand: SemanticOperand | undefined) => IrOperand | null;
148
+ /**
149
+ * Whether an operand names a result whose carrier is `void`.
150
+ *
151
+ * `void` is the carrier for "there is no value": a call that returns it mints
152
+ * no SSA id at all (`build.ts`'s `mintOptionalResult`). So an operand naming
153
+ * one cannot be resolved, and a consumer that can legitimately have nothing --
154
+ * `return f()` in a `void` function, which C++ spells the same way -- has to
155
+ * ask before resolving rather than be refused for a value that was correctly
156
+ * never minted.
157
+ */
158
+ export declare const namesVoidResult: (ctx: LoweringContext, operand: SemanticOperand | undefined) => boolean;
159
+ export declare const namedOperand: (operation: SemanticOperation, role: string, ordinal?: number) => SemanticOperand;
160
+ export declare const orderedOperandsOf: (operation: SemanticOperation, role: string) => readonly SemanticOperand[];
161
+ /** The one non-provenance operand of an operation that has exactly one, when no operand is explicitly named `value`. */
162
+ export declare const singleValueOperand: (operation: SemanticOperation) => SemanticOperand;
163
+ export declare const requireLineage: (operation: SemanticOperation) => SemanticResultId;
164
+ export declare const optionalResultRepresentation: (ctx: LoweringContext, operation: SemanticOperation, role: ResultRole) => Representation | null;
165
+ export declare const requireResultRepresentation: (ctx: LoweringContext, operation: SemanticOperation, role: ResultRole, describe: string) => Representation;
166
+ /** Registers the SSA id an operation's own IR lowering just produced under the same anchor `requireLineage` would cite for it. */
167
+ /**
168
+ * A value in exactly the carrier a slot declares.
169
+ *
170
+ * The one place lowering converts. A consumer that needs an operand in its
171
+ * slot's carrier asks here rather than converting on its own, so every
172
+ * `convert` in the IR names a node of the conversion census -- the same node
173
+ * the certificate checks and the printer renders -- and no consumer decides a
174
+ * pair for itself. Identity is no conversion at all: the operand is handed
175
+ * back untouched, so a slot that already agrees costs nothing in the IR.
176
+ */
177
+ export declare const convertTo: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operand: IrOperand, slot: Representation, via?: string) => IrOperand | null;
178
+ /**
179
+ * Diagnostic only, under `GEA_SPECULATIVE_LOADS`: every classifier-gated load
180
+ * lowering minted, with the site that asked for it, so the loads no presence
181
+ * or membership proof stands behind can be counted by site.
182
+ */
183
+ export declare const speculativeLoads: {
184
+ readonly lineage: SemanticResultId;
185
+ readonly via: string;
186
+ readonly node: ConversionNode;
187
+ readonly value: IrValueId;
188
+ }[];
189
+ /**
190
+ * An operand as its consumer's slot wants it: resolved, then converted into
191
+ * the slot's carrier when the census names one. A raw operand -- a key, a
192
+ * callee, a condition, an argument to a host member the printer spells from
193
+ * its own carrier -- is handed back as it arrived; so is an operand whose
194
+ * pair the census cannot convert, which is recorded in `program.drift` and
195
+ * left to the printer's own path (see `LoweringProgram.drift`).
196
+ */
197
+ export declare const enter: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, operand: SemanticOperand, resolved: IrOperand) => IrOperand;
198
+ /**
199
+ * A conversion the lowering itself decides on rather than one a slot asks
200
+ * for -- a receiver's narrowed view, a dead merge arm's absence, the thrown
201
+ * carrier, an omitted formal's `undefined`: the census node for the pair,
202
+ * named on the `convert` instruction like every slot-driven conversion. A
203
+ * pair the census cannot convert is recorded as drift under the given role
204
+ * and STILL minted, because the consumer needs the value in `target` (a phi
205
+ * arm, a `throw`) and the printer's own chain is what answers such a pair
206
+ * until the census does. Every `convert` a lowering mints goes through here
207
+ * or `convertTo`: a hand-built use id named a conversion no census had
208
+ * counted, which is how a pair certified under one authority and refused
209
+ * under another.
210
+ */
211
+ export declare const convertOrDrift: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: OperationId, role: string, ordinal: number, operand: IrOperand, target: Representation, via?: string) => IrOperand;
212
+ /**
213
+ * A binding read in the carrier the plan selected for it, which is the cell's
214
+ * own carrier or a narrowing of it: `x` read as `string` out of a cell placed
215
+ * `optional(string)` behind the guard that proved it present. The read itself
216
+ * yields the cell's carrier and the narrowing is a `convert` the conversion
217
+ * census names, exactly as a store into the cell converts the other way. A
218
+ * pair the census cannot convert is recorded as drift and the read is minted
219
+ * in the selected carrier for the printer's own path to narrow.
220
+ */
221
+ export declare const narrowedBindingRead: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, declaration: DeclarationId, representation: Representation) => IrValueId;
222
+ /** `resolveRequiredOperand` followed by `enter`, for the consumers whose operand is a value in a slot. */
223
+ export declare const enterRequiredOperand: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, operand: SemanticOperand) => IrOperand;
224
+ export declare const registerResult: (ctx: LoweringContext, operation: SemanticOperation, value: IrValueId | null) => void;
225
+ export { abiOfCallee, constructAbiOfCallee } from '../projection/callee.js';
226
+ /**
227
+ * The named fields a record carrier lays out.
228
+ *
229
+ * A record type written inline (`function Row(props: {label: string})`) carries
230
+ * its fields directly; one written as a named interface is carried *by name*,
231
+ * because that is what makes a self-referential type finite -- so its layout
232
+ * lives in the sealed structural table and is read back by deriving the shape
233
+ * the reference names. Both are the same physical object; only the carrier
234
+ * differs, and a lowering that handled just the first would refuse an ordinary
235
+ * `interface RowProps` for no reason the program could act on.
236
+ */
237
+ export declare const recordLayoutOf: (ctx: LoweringContext, props: Representation) => readonly RecordField[] | null;
238
+ /**
239
+ * A call's arguments with its variadic tail packed.
240
+ *
241
+ * A rest parameter is one slot holding an array, not a run of slots, so the
242
+ * packing belongs where a call's operands are read rather than in each caller:
243
+ * the convention states where the tail begins and which array carrier holds it,
244
+ * and a convention that says a rest slot is not an array is refused rather than
245
+ * packed into something that cannot hold it.
246
+ */
247
+ /**
248
+ * A call's arguments with its variadic tail packed.
249
+ *
250
+ * A rest parameter is one slot holding an array, not a run of slots, so the
251
+ * packing belongs where a call's operands are read rather than in each caller:
252
+ * the convention states where the tail begins and which array carrier holds it,
253
+ * and a convention that says a rest slot is not an array is refused rather than
254
+ * packed into something that cannot hold it.
255
+ */
256
+ /**
257
+ * One physical argument, and whether it is one value or a whole range.
258
+ *
259
+ * A `spread` slot carries the ENTIRE source array of a `f(a, ...xs)` call
260
+ * (`producers/spread-arguments.ts` publishes it under its own operand role),
261
+ * so it contributes however many elements that array holds -- which is a
262
+ * runtime count. That is representable in exactly one place: inside the rest
263
+ * array `packRestArguments` builds, as the same `spread` element an array
264
+ * literal's own admitted spread already uses. A `spread` slot anywhere a
265
+ * FIXED count is required has no rendering at all, and is refused.
266
+ */
267
+ export type ArgumentSlot = {
268
+ readonly kind: 'value' | 'spread';
269
+ readonly value: IrOperand;
270
+ readonly from?: number;
271
+ };
272
+ export declare const packRestArguments: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: OperationId, abi: CallableAbi | null, passed: readonly ArgumentSlot[]) => readonly IrOperand[];