@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,4 @@
1
+ import type { InvocationOperation } from '../semantics/model/operations.js';
2
+ import { type LoweringContext } from './lower-operands.js';
3
+ import type { IrBlockId } from './model.js';
4
+ export declare const lowerInvocation: (ctx: LoweringContext, block: IrBlockId, operation: InvocationOperation) => void;
@@ -0,0 +1,514 @@
1
+ import { operandOf } from '../semantics/model/operands.js';
2
+ import { representationKey } from '../representation/model.js';
3
+ import { selectedHostConstructFrameOf } from '../representation/derive.js';
4
+ import { fixedDataDefinitionRecipeOf } from './fixed-data-definition.js';
5
+ import { objectValueConversionsOf } from './object-value-conversions.js';
6
+ import { pendingShortCircuitOf } from './lower-short-circuit.js';
7
+ import { IrLoweringBlockedError } from './lower-graph.js';
8
+ import { publishObjectAssignFieldConversions } from './call-entry.js';
9
+ import { narrowedOperandView } from '../conversion/operand-view.js';
10
+ import { hostTemplateOfRead } from '../representation/host-templates.js';
11
+ import { abiOfCallee, constructAbiOfCallee, packRestArguments, namedOperand, optionalResultRepresentation, orderedOperandsOf, registerResult, requireLineage, requireResultRepresentation, resolveOptionalOperand, resolveRequiredOperand, enter, convertTo, convertOrDrift } from './lower-operands.js';
12
+ import { calleeRenderingOf, deferredCalleeOf, numericRestHostCallOf } from '../projection/callee.js';
13
+ import { fixedApplyArgumentFieldsOf } from '../projection/apply-arguments.js';
14
+ import { callArgumentSlotOf } from '../projection/slots.js';
15
+ /** `Function.prototype.bind` with a finite, statically proved prefix becomes one native callable allocation. */
16
+ const lowerDeferredFunctionBind = (ctx, block, lineage, operation, deferred) => {
17
+ const source = resolveRequiredOperand(ctx, block, lineage, deferred.receiver);
18
+ const result = requireResultRepresentation(ctx, operation, 'value', 'a Function.prototype.bind result');
19
+ if (result.kind !== 'function-value-dispatch') {
20
+ throw new IrLoweringBlockedError('a Function.prototype.bind result has no evaluated function-value dispatch convention');
21
+ }
22
+ const slots = argumentSlotsOf(ctx, block, lineage, operation);
23
+ if (slots.some((slot) => slot.kind === 'spread')) {
24
+ throw new IrLoweringBlockedError('Function.prototype.bind with spread-bound arguments has no finite native prefix to capture');
25
+ }
26
+ const values = slots.map((slot) => slot.value);
27
+ const thisArgument = values.shift() ?? null;
28
+ const receiver = deferred.abi.receiver === null ? null : thisArgument;
29
+ if (deferred.abi.receiver !== null && receiver === null) {
30
+ throw new IrLoweringBlockedError('Function.prototype.bind omits the this-argument required by the source callable convention');
31
+ }
32
+ if (deferred.abi.restFrom !== null || result.abi.restFrom !== null) {
33
+ throw new IrLoweringBlockedError('Function.prototype.bind between rest-taking native callable conventions is not yet a stated runtime protocol');
34
+ }
35
+ if (values.length > deferred.abi.parameters.length) {
36
+ throw new IrLoweringBlockedError('Function.prototype.bind captures more leading arguments than the source callable convention declares');
37
+ }
38
+ const remaining = deferred.abi.parameters.slice(values.length);
39
+ const exactFrame = result.abi.receiver === null &&
40
+ remaining.length === result.abi.parameters.length &&
41
+ representationKey(deferred.abi.result) === representationKey(result.abi.result) &&
42
+ remaining.every((parameter, index) => representationKey(parameter.value) === representationKey(result.abi.parameters[index].value));
43
+ if (!exactFrame) {
44
+ throw new IrLoweringBlockedError('Function.prototype.bind result does not state the source callable suffix convention exactly');
45
+ }
46
+ registerResult(ctx, operation, ctx.builder.bindCallable(block, lineage, source, deferred.functionId, deferred.abi, thisArgument, receiver, values, result));
47
+ };
48
+ /**
49
+ * Rewriting `add.call(x, 3, 4)` into `add`'s own call, with `x` as the
50
+ * receiver and `3, 4` packed against `add`'s own convention -- see
51
+ * `deferredFunctionCallCalleeOf`'s comment for why this is a rewrite and not
52
+ * an ordinary call through `.call`'s own declared signature.
53
+ */
54
+ const lowerDeferredFunctionCall = (ctx, block, lineage, operation, deferred) => {
55
+ const realCallee = resolveRequiredOperand(ctx, block, lineage, deferred.receiver);
56
+ const evaluated = argumentSlotsOf(ctx, block, lineage, operation);
57
+ const [thisArgSlot, ...tailSlots] = evaluated;
58
+ if (!thisArgSlot) {
59
+ throw new IrLoweringBlockedError('"Function.prototype.call" was read with no this-argument to lower; every call needs at least one physical argument');
60
+ }
61
+ if (thisArgSlot.kind === 'spread') {
62
+ throw new IrLoweringBlockedError('a call range-copies a spread argument into "Function.prototype.call"\'s own this-argument position; a spread contributes a ' +
63
+ 'runtime number of values and the this-argument is exactly one fixed position');
64
+ }
65
+ // The receiver is a physical argument only when the underlying callable's
66
+ // OWN convention declares one -- an ordinary function that never reads
67
+ // `this` (the TypeScript default for a function with no declared `this`
68
+ // parameter) ignores whatever `.call` passed for it, exactly as the
69
+ // language does: `add.call(x, 3, 4)` calls `add(3, 4)` and `x` is never
70
+ // observed.
71
+ const receiver = deferred.abi.receiver !== null ? thisArgSlot.value : null;
72
+ // A BOXED frame is not packed here: `Value::callWithReceiver` takes the flat
73
+ // ECMA-262 argument list and the callee's own thunk fills its rest slot from
74
+ // it. Packing against `deferred.abi` -- the underlying callable's PHYSICAL
75
+ // convention, which this call does not fill -- built the rest array a second
76
+ // time. See `DeferredCallee.frame`.
77
+ const args = deferred.frame === 'boxed'
78
+ ? tailSlots.map((slot) => {
79
+ if (slot.kind === 'spread') {
80
+ throw new IrLoweringBlockedError('a call range-copies a spread argument into a boxed "Function.prototype.call" frame; the flat argument list a dynamic ' +
81
+ 'call renders has no expansion for a runtime-counted range');
82
+ }
83
+ return slot.value;
84
+ })
85
+ : packRestArguments(ctx, block, lineage, operation.id, deferred.abi, tailSlots);
86
+ const representation = optionalResultRepresentation(ctx, operation, 'value');
87
+ const returned = ctx.builder.call(block, lineage, realCallee, receiver, args, representation);
88
+ registerResult(ctx, operation, returned);
89
+ if (returned !== null && representation !== null) {
90
+ const pending = pendingShortCircuitOf(ctx, operation, { value: returned, representation });
91
+ if (pending)
92
+ ctx.shortCircuits.set(pending.result, pending);
93
+ }
94
+ };
95
+ /**
96
+ * Rewriting `Math.max.apply(null, [1, 5, 3])` into `Math.max`'s own call,
97
+ * with `null` as the receiver and the array's elements packed against
98
+ * `Math.max`'s own rest convention. A runtime-sized array remains a spread;
99
+ * a closed tuple supplies its stated positions, allowing fixed-arity callees
100
+ * and fixed arguments before a rest tail without inventing a runtime arity.
101
+ *
102
+ * `.apply(thisArg)` -- no second argument -- is the language's own "no
103
+ * arguments" form (`argArray` defaults to an empty list), so a missing
104
+ * second argument packs an empty tail rather than being refused: nothing
105
+ * about the physical argument count here is ambiguous, unlike a truly
106
+ * missing this-argument, which has no such default.
107
+ */
108
+ const lowerDeferredFunctionApply = (ctx, block, lineage, operation, deferred) => {
109
+ const realCallee = resolveRequiredOperand(ctx, block, lineage, deferred.receiver);
110
+ const evaluated = argumentSlotsOf(ctx, block, lineage, operation);
111
+ const [thisArgSlot, argsArraySlot, ...overflow] = evaluated;
112
+ if (!thisArgSlot) {
113
+ throw new IrLoweringBlockedError('"Function.prototype.apply" was read with no this-argument to lower; every call needs at least one physical argument');
114
+ }
115
+ if (thisArgSlot.kind === 'spread') {
116
+ throw new IrLoweringBlockedError('a call range-copies a spread argument into "Function.prototype.apply"\'s own this-argument position; a spread contributes a ' +
117
+ 'runtime number of values and the this-argument is exactly one fixed position');
118
+ }
119
+ if (overflow.length > 0) {
120
+ throw new IrLoweringBlockedError('"Function.prototype.apply" takes exactly a this-argument and one arguments array; this call passes physical arguments beyond ' +
121
+ 'those two, which is not a shape the ambient signature declares');
122
+ }
123
+ if (argsArraySlot?.kind === 'spread') {
124
+ throw new IrLoweringBlockedError('a call range-copies a spread argument into "Function.prototype.apply"\'s own arguments-array position; that position is a ' +
125
+ 'single array value for the language to spread, not a second spread of its own');
126
+ }
127
+ const receiver = deferred.abi.receiver !== null ? thisArgSlot.value : null;
128
+ const argsOperand = operandOf(operation, 'argument', 1);
129
+ const tupleFields = argsArraySlot && argsOperand
130
+ ? fixedApplyArgumentFieldsOf(ctx.graph.structuralTypes, argsOperand.type, argsArraySlot.value.representation, ctx.constantDeriver)
131
+ : null;
132
+ // The same positional Get/conversion operations used by ordinary arguments
133
+ // reach IR certification. No printer-only unpacking or unchecked ABI cast.
134
+ // Array-backed tuples retain observable runtime length (e.g. after push).
135
+ // Expand only the fixed prefix when a real array rest slot can copy the tail.
136
+ const runtimeTailFrom = argsArraySlot?.value.representation.kind === 'array-object' &&
137
+ tupleFields !== null &&
138
+ deferred.abi.restFrom !== null &&
139
+ deferred.abi.parameters[deferred.abi.restFrom]?.value.kind === 'array-object' &&
140
+ tupleFields.length >= deferred.abi.restFrom
141
+ ? deferred.abi.restFrom
142
+ : null;
143
+ const tailSlots = argsArraySlot && tupleFields !== null
144
+ ? [
145
+ ...(runtimeTailFrom === null ? tupleFields : tupleFields.slice(0, runtimeTailFrom)).map((field, index) => {
146
+ const keyRepresentation = { kind: 'string' };
147
+ const key = {
148
+ value: ctx.builder.constant(block, lineage, field.key, 'string', keyRepresentation),
149
+ representation: keyRepresentation
150
+ };
151
+ const read = {
152
+ value: ctx.builder.get(block, lineage, argsArraySlot.value, key, field.value),
153
+ representation: field.value
154
+ };
155
+ const slot = callArgumentSlotOf(deferred.abi, null, index);
156
+ if (slot.kind === 'slot')
157
+ return {
158
+ kind: 'value',
159
+ value: convertOrDrift(ctx, block, lineage, operation.id, 'apply-argument', index, read, slot.representation)
160
+ };
161
+ if (slot.kind === 'raw')
162
+ return { kind: 'value', value: read };
163
+ throw new IrLoweringBlockedError(`a fixed apply argument ${index} has no admitted native formal slot`);
164
+ }),
165
+ ...(runtimeTailFrom === null ? [] : [{ kind: 'spread', value: argsArraySlot.value, from: runtimeTailFrom }])
166
+ ]
167
+ : argsArraySlot
168
+ ? [{ kind: 'spread', value: argsArraySlot.value }]
169
+ : [];
170
+ const args = packRestArguments(ctx, block, lineage, operation.id, deferred.abi, tailSlots);
171
+ const representation = optionalResultRepresentation(ctx, operation, 'value');
172
+ const returned = ctx.builder.call(block, lineage, realCallee, receiver, args, representation);
173
+ registerResult(ctx, operation, returned);
174
+ if (returned !== null && representation !== null) {
175
+ const pending = pendingShortCircuitOf(ctx, operation, { value: returned, representation });
176
+ if (pending)
177
+ ctx.shortCircuits.set(pending.result, pending);
178
+ }
179
+ };
180
+ /**
181
+ * Which host template the printer spells this call from, when it is one this
182
+ * IR states a frame for (`CallOperation.hostTemplate`).
183
+ *
184
+ * The routing is `representation/host-templates.ts`'s `hostTemplateOfRead`,
185
+ * composed of the same predicates the printer routes with: the host protocol
186
+ * `hostMemberReadsOf` looks the member up on, the call-site read it defers,
187
+ * the host member `hostCallText`'s renderers hand to `isArrayText` and
188
+ * `assignText`, and the typed-array receiver and member `prototypeMethodReadsOf`
189
+ * and `typedArrayCallText` defer to `set`'s template. The receiver carrier is the one
190
+ * `lowerProperty` gives that read: the plan's selection, narrowed at the use
191
+ * exactly as `calleeRenderingOf` narrows it. A read this does not recognise --
192
+ * a plugin-bound member, a host-method alias -- records nothing, and its call
193
+ * keeps its convention as its frame.
194
+ */
195
+ const hostTemplateOf = (ctx, operation, callee) => {
196
+ const input = ctx.program.slots.input;
197
+ if (calleeRenderingOf(input, operation) !== 'template')
198
+ return undefined;
199
+ const calleeOperand = operandOf(operation, 'callee');
200
+ if (calleeOperand?.source.kind !== 'result')
201
+ return undefined;
202
+ const producerId = input.graph.results.get(calleeOperand.source.result);
203
+ const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
204
+ if (producer?.family !== 'property' || producer.internalMethod !== 'get')
205
+ return undefined;
206
+ if (producer.hostMethod !== undefined || producer.resolvedBinding !== undefined)
207
+ return undefined;
208
+ const key = operandOf(producer, 'key');
209
+ const receiver = operandOf(producer, 'receiver');
210
+ if (key?.source.kind !== 'constant' || receiver === undefined)
211
+ return undefined;
212
+ const held = receiver.source.kind === 'result'
213
+ ? (input.plan.selected.get(receiver.source.result) ?? null)
214
+ : receiver.source.kind === 'constant'
215
+ ? input.deriver.derive(receiver.type)
216
+ : null;
217
+ if (held === null)
218
+ return undefined;
219
+ const view = narrowedOperandView(held, receiver, input.deriver);
220
+ return hostTemplateOfRead(view, key.source.text, callee.representation) ?? undefined;
221
+ };
222
+ const calleeReceiverIsNativeHandle = (ctx, operation) => {
223
+ if (operation.internalMethod !== 'call')
224
+ return false;
225
+ const receiver = operandOf(operation, 'receiver', 0);
226
+ if (!receiver || receiver.source.kind !== 'result')
227
+ return false;
228
+ return ctx.plan.selected.get(receiver.source.result)?.kind === 'native-handle';
229
+ };
230
+ /**
231
+ * Whether a call's receiver carries the `iterator` cursor
232
+ * (`representation/model.ts`'s `iterator` kind) this backend builds for
233
+ * `for-of`/spread iteration and for a generator's own resumable body.
234
+ *
235
+ * `next`/`return`/`throw` are that carrier's only callable members
236
+ * (`targets/cpp/prototype/emit-prototype-iterator.ts`'s
237
+ * `iteratorPrototypeMethods`), and every one of them renders through a
238
+ * dedicated dispatch that reads the call's own OPERANDS directly rather than
239
+ * a generated function with a physical calling convention -- the identical
240
+ * fact `calleeReceiverIsNativeHandle` states about a host handle, for the
241
+ * identical reason. `Generator.prototype.next` declares its resume argument
242
+ * as a rest parameter (`...args: [] | [TNext]`, so that the argument is
243
+ * optional), and packing that argument through `packRestArguments` here
244
+ * builds a fresh `array-object` no emitted code ever reads back out of --
245
+ * `emit-prototype-iterator.ts`'s `nextCallText` looks at the call's own
246
+ * argument operand directly, not at an ABI slot past a rest position, so the
247
+ * packed array is a frame built and then silently mismatched against the
248
+ * resume channel's own carrier (`parameter-slot.ts`'s
249
+ * `restParameterUnionOfTuplesElementTypeOf` widens the *declared* slot to a
250
+ * native carrier so the ABI stops boxing it, but the physical call this
251
+ * backend renders for `next` was never the generated, ABI-driven kind that
252
+ * slot belongs to).
253
+ */
254
+ const calleeReceiverIsIteratorCarrier = (ctx, operation) => {
255
+ if (operation.internalMethod !== 'call')
256
+ return false;
257
+ const receiver = operandOf(operation, 'receiver', 0);
258
+ if (!receiver || receiver.source.kind !== 'result')
259
+ return false;
260
+ return ctx.plan.selected.get(receiver.source.result)?.kind === 'iterator';
261
+ };
262
+ /**
263
+ * The call's physical argument slots, in argument-list order.
264
+ *
265
+ * `producers/spread-arguments.ts` publishes an ordinary argument under role
266
+ * `argument` and a rest-tail range copy under role `spread-argument`, both
267
+ * keyed by the position they occupy in the list the callee receives -- one
268
+ * shared counter, so merging the two roles by ordinal recovers exactly the
269
+ * order the call was written in. The same merge-by-ordinal shape
270
+ * `lower-allocation.ts`'s `arrayLiteralSlotsOf` uses for the element/spread
271
+ * split of an array literal, for the same reason: neither role has to know
272
+ * the other exists.
273
+ */
274
+ const argumentSlotsOf = (ctx, block, lineage, operation) => {
275
+ const merged = [
276
+ ...orderedOperandsOf(operation, 'argument').map((operand) => ({ ordinal: operand.ordinal, kind: 'value', operand })),
277
+ ...orderedOperandsOf(operation, 'spread-argument').map((operand) => ({ ordinal: operand.ordinal, kind: 'spread', operand }))
278
+ ].sort((left, right) => left.ordinal - right.ordinal);
279
+ return merged.map((entry) => {
280
+ const resolved = resolveRequiredOperand(ctx, block, lineage, entry.operand);
281
+ const value = entry.kind === 'value' ? enter(ctx, block, lineage, operation, entry.operand, resolved) : resolved;
282
+ return entry.operand.from === undefined ? { kind: entry.kind, value } : { kind: entry.kind, value, from: entry.operand.from };
283
+ });
284
+ };
285
+ export const lowerInvocation = (ctx, block, operation) => {
286
+ const lineage = requireLineage(operation);
287
+ if (operation.commonJsRequire) {
288
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'a CommonJS module-record require');
289
+ registerResult(ctx, operation, ctx.builder.commonJsRequire(block, lineage, operation.commonJsRequire.owner, operation.commonJsRequire.target, operation.commonJsRequire.builtinModule, representation));
290
+ return;
291
+ }
292
+ // `add.call(x, 3, 4)` is sugar for a call to `add` itself, not a call
293
+ // through `.call`'s own declared signature; `.apply` and `.bind` are the
294
+ // same rewrite with their own argument frames (`projection/callee.ts`).
295
+ // Checked before the callee is resolved at all, so the deferred `[[Get]]`
296
+ // this rewrite bypasses is never forced to produce a value nothing
297
+ // downstream reads.
298
+ const deferred = deferredCalleeOf({
299
+ graph: ctx.graph,
300
+ plan: ctx.plan,
301
+ abis: ctx.program.abis,
302
+ constructs: ctx.program.constructs,
303
+ callableOrigins: ctx.program.callableOrigins,
304
+ classes: ctx.program.classes
305
+ }, operation);
306
+ if (deferred?.member === 'call') {
307
+ lowerDeferredFunctionCall(ctx, block, lineage, operation, deferred);
308
+ return;
309
+ }
310
+ if (deferred?.member === 'apply') {
311
+ lowerDeferredFunctionApply(ctx, block, lineage, operation, deferred);
312
+ return;
313
+ }
314
+ if (deferred?.member === 'bind') {
315
+ lowerDeferredFunctionBind(ctx, block, lineage, operation, deferred);
316
+ return;
317
+ }
318
+ const callee = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'callee'));
319
+ const evaluated = argumentSlotsOf(ctx, block, lineage, operation);
320
+ // A call through a CHOICE of generic functions: the callee is the set's tag
321
+ // and the `closed-family` target names the copy each member runs at this
322
+ // call. Packed against no convention -- each member's own is padded at
323
+ // emission (`emit-callable.ts`), the same way a callable union's arms are.
324
+ if (callee.representation.kind === 'generic-function-set') {
325
+ if (operation.target.kind !== 'closed-family') {
326
+ throw new IrLoweringBlockedError('a call through a generic function set has no closed family of instantiated copies to dispatch over');
327
+ }
328
+ const family = operation.target.targets.map((target) => target.kind === 'function' && target.member !== undefined ? { member: target.member, functionId: target.functionId } : null);
329
+ if (family.some((entry) => entry === null)) {
330
+ throw new IrLoweringBlockedError('a generic function set family names a target that is not an instantiated member copy');
331
+ }
332
+ const args = packRestArguments(ctx, block, lineage, operation.id, null, evaluated);
333
+ const representation = optionalResultRepresentation(ctx, operation, 'value');
334
+ registerResult(ctx, operation, ctx.builder.call(block, lineage, callee, null, args, representation, family));
335
+ return;
336
+ }
337
+ // `super(...)` is the base class's initialization against the receiver this
338
+ // constructor is already building, not an invocation of anything: a class
339
+ // constructor has no `[[Call]]`. Normalize already decided which this is
340
+ // (`resultDivergence`, semantics/model/selected-signature.ts), so reading
341
+ // that here is a citation; recognizing it downstream from the callee's
342
+ // carrier kind instead would be a second authority over the same question.
343
+ if (operation.resultDivergence.kind === 'super-constructor-initialization') {
344
+ // The evaluated arguments still go through `packRestArguments` against the
345
+ // *base's* construct convention, which is what the callee's carrier states,
346
+ // so a base constructor with a rest parameter receives the same frame a
347
+ // `new Base(...)` would build for it.
348
+ const args = packRestArguments(ctx, block, lineage, operation.id, constructAbiOfCallee(callee.representation), evaluated);
349
+ ctx.builder.superInitialize(block, lineage, args);
350
+ return;
351
+ }
352
+ // A member reached off a `native-handle` receiver has no physical
353
+ // convention to pack against, even though its own declared signature says
354
+ // otherwise -- see `calleeReceiverIsNativeHandle`'s comment above. Packing
355
+ // here would build an `array-object` for a frame `targets/cpp/host-members.ts`'s
356
+ // call renders through a text template, never a generated function that
357
+ // could ever read it -- exactly the defect that made `Console.log`'s rest
358
+ // argument unstringifiable at emission.
359
+ // ...and only for a member whose rest slot is `dynamic`. That is the
360
+ // text-joined template shape and nothing else: `{args}` renders through
361
+ // `consoleArgumentsText`, which ToStrings each argument, so the member has to
362
+ // accept anything and is declared `...data: any[]`. A rest slot with a
363
+ // CONCRETE element type normally uses the real array-parameter callable ABI.
364
+ // A host may additionally publish a borrowed numeric rest spelling, proved
365
+ // separately below. Merely seeing number[] does not authorize skipping the
366
+ // array: ordinary rest functions and first-class builtin values observe it.
367
+ const calleeAbi = abiOfCallee(callee.representation);
368
+ const restElement = calleeAbi?.restFrom === null || calleeAbi === null ? null : (calleeAbi.parameters[calleeAbi.restFrom]?.value ?? null);
369
+ const textJoined = restElement?.kind === 'array-object' && restElement.element.kind === 'dynamic';
370
+ // Only numeric operands use the borrowed host frame. Unknown values still
371
+ // enter the ordinary callable convention, and spread iteration stays on the
372
+ // existing materialized path. All argument expressions were evaluated above.
373
+ const numericRestHostCall = calleeAbi?.restFrom === 0 &&
374
+ restElement?.kind === 'array-object' &&
375
+ restElement.element.kind === 'scalar' &&
376
+ restElement.element.domain === 'number' &&
377
+ evaluated.every((slot) => slot.kind !== 'spread' && slot.value.representation.kind === 'scalar' && slot.value.representation.domain === 'number')
378
+ ? numericRestHostCallOf(ctx.program.slots.input, operation)
379
+ : null;
380
+ // `console.log(...values)`, ENTIRELY -- no leading value, nothing after --
381
+ // needs no range copy at all: `values` already IS the runtime-counted
382
+ // sequence the text-joined template's vararg signature declares, so the
383
+ // call can pass it through whole. `emit-host-invoke.ts`'s `variadic` arity
384
+ // reads `argumentsAreSpread` on the built operation to join THIS array's
385
+ // own elements at runtime (`gea_runtime.h`'s
386
+ // `console::joined(const Ref<ArrayObject<Value>>&)`) instead of the
387
+ // compile-time per-operand join every other text-joined call takes. A
388
+ // mixed call (`console.log("x", ...rest)`) is a different shape -- more
389
+ // than one physical argument, one of them a runtime-counted range -- with
390
+ // no single array to pass whole, and stays refused below: only the pure
391
+ // spread was ever measured.
392
+ const wholeSpreadArgument = textJoined &&
393
+ evaluated.length === 1 &&
394
+ evaluated[0]?.kind === 'spread' &&
395
+ evaluated[0].value.representation.kind === 'array-object' &&
396
+ evaluated[0].value.representation.element.kind === 'dynamic'
397
+ ? evaluated[0].value
398
+ : null;
399
+ const args = numericRestHostCall !== null
400
+ ? evaluated.map((slot) => slot.value)
401
+ : calleeReceiverIsNativeHandle(ctx, operation) && textJoined
402
+ ? wholeSpreadArgument !== null
403
+ ? [wholeSpreadArgument]
404
+ : evaluated.map((slot) => {
405
+ if (slot.kind === 'spread') {
406
+ // The text-joined native-handle path renders its call from the
407
+ // operands themselves, one rendered text per operand, so there is
408
+ // nothing for a range copy to expand INTO -- `console.log(...args)`
409
+ // would print the array where the language prints its elements.
410
+ throw new IrLoweringBlockedError('a spread argument reaches a host member whose call is rendered from its operands as text; a range copy has no expansion there');
411
+ }
412
+ return slot.value;
413
+ })
414
+ : calleeReceiverIsIteratorCarrier(ctx, operation)
415
+ ? evaluated.map((slot) => {
416
+ if (slot.kind === 'spread') {
417
+ throw new IrLoweringBlockedError("a spread argument reaches a generator cursor's next()/return()/throw(), which reads its own resume/abrupt operand " +
418
+ 'directly and has no rest frame for a range copy to expand into');
419
+ }
420
+ return slot.value;
421
+ })
422
+ : packRestArguments(ctx, block, lineage, operation.id, calleeAbi, evaluated);
423
+ // `operation.target` (the `SemanticTargetProof`) is never read here: `open`
424
+ // is a complete answer that selects this same generic path, and a narrower
425
+ // proof does not license skipping straight to a direct call this IR has no
426
+ // separate op for anyway.
427
+ if (operation.internalMethod === 'call') {
428
+ // The semantic graph records the receiver of *every* method-shaped call,
429
+ // because `obj.f()` really does bind `obj` as the this-value -- that is the
430
+ // language, and dropping it there would lose a fact. Whether the receiver
431
+ // is also a *physical* argument is a different question, and the callee's
432
+ // convention is the only authority on it: a signature written in method
433
+ // shape declares a receiver slot, and one written as a function-typed
434
+ // property (an arrow, which closes over `this` instead of binding it)
435
+ // declares none. Passing one anyway to a convention that has no slot for it
436
+ // is what the emitter's own fail-closed check already refuses, so the
437
+ // decision belongs here, once, rather than as a second answer downstream.
438
+ const receiverOperand = operandOf(operation, 'receiver', 0);
439
+ const resolvedReceiver = resolveOptionalOperand(ctx, block, lineage, receiverOperand);
440
+ const supplied = resolvedReceiver !== null && receiverOperand !== undefined
441
+ ? enter(ctx, block, lineage, operation, receiverOperand, resolvedReceiver)
442
+ : resolvedReceiver;
443
+ const declared = abiOfCallee(callee.representation)?.receiver ?? null;
444
+ const receiver = declared || callee.representation.kind === 'dynamic' ? supplied : null;
445
+ const representation = optionalResultRepresentation(ctx, operation, 'value');
446
+ // The call yields what the convention returns; the plan may have selected
447
+ // a narrowing of it for the result (`f()` read as `T` where `f` returns
448
+ // `T | undefined` behind a guard). That narrowing is a `convert` the
449
+ // conversion census names, like a binding read's -- see
450
+ // `narrowedBindingRead`. A pair it cannot convert is left to the printer.
451
+ // Only a call through a callable VALUE yields the convention's result: a
452
+ // template the printer spells from the call's operands (`Object.assign`
453
+ // on a native record, a host member) yields whatever the template
454
+ // produces, which is the selected carrier itself.
455
+ const physical = abiOfCallee(callee.representation)?.result ?? null;
456
+ const narrows = calleeRenderingOf(ctx.program.slots.input, operation) === 'callable' &&
457
+ representation !== null &&
458
+ physical !== null &&
459
+ physical.kind !== 'void' &&
460
+ representationKey(physical) !== representationKey(representation) &&
461
+ ctx.program.conversions.nodeFor(physical, representation).capability.kind !== 'never';
462
+ const produced = narrows ? physical : representation;
463
+ const definitionKey = operandOf(operation, 'argument', 1);
464
+ const fixedDataDefinition = operation.intrinsicMutation === 'object-define-property' &&
465
+ calleeRenderingOf(ctx.program.slots.input, operation) === 'template' &&
466
+ definitionKey?.source.kind === 'constant' &&
467
+ definitionKey.source.literal === 'string' &&
468
+ produced !== null
469
+ ? fixedDataDefinitionRecipeOf(args, definitionKey.source.text, produced, ctx.constantDeriver, ctx.program.classes, ctx.program.conversions, operation.intrinsicDataDefinition === true)
470
+ : null;
471
+ // The host template that prints this call, when this IR states that
472
+ // template's frame; the struct copies it prints are published before the
473
+ // reflection census reads them.
474
+ const hostTemplate = hostTemplateOf(ctx, operation, callee);
475
+ if (hostTemplate === 'object-assign' && wholeSpreadArgument === null)
476
+ publishObjectAssignFieldConversions(args, ctx.constantDeriver, ctx.program.classes, ctx.program.conversions);
477
+ const called = ctx.builder.call(block, lineage, callee, receiver, args, produced, undefined, operation.builtinModuleLookup, wholeSpreadArgument !== null, operation.intrinsicOwnKeys && calleeRenderingOf(ctx.program.slots.input, operation) === 'template' ? true : undefined, fixedDataDefinition ?? undefined, numericRestHostCall ?? undefined, !fixedDataDefinition && wholeSpreadArgument === null && calleeRenderingOf(ctx.program.slots.input, operation) === 'template'
478
+ ? objectValueConversionsOf(operation.intrinsicMutation, args, ctx.constantDeriver, ctx.program.conversions)
479
+ : undefined,
480
+ // Carried whatever the callee's rendering: unlike `intrinsicOwnKeys`,
481
+ // which exists to license a template spelling, this fact says only what
482
+ // the call READS, and that is true of the authenticated intrinsic however
483
+ // it is eventually spelled.
484
+ operation.intrinsicCarrierPredicate, calleeRenderingOf(ctx.program.slots.input, operation) === 'template' ? operation.intrinsicReflection : undefined, hostTemplate);
485
+ const returned = narrows && called !== null && physical !== null && representation !== null
486
+ ? (convertTo(ctx, block, lineage, { value: called, representation: physical }, representation)?.value ?? called)
487
+ : called;
488
+ registerResult(ctx, operation, returned);
489
+ // `a?.b()` publishes a second value -- what the *expression* evaluates to --
490
+ // which is a merge this arm cannot close, exactly as `a?.b`'s is. It is
491
+ // recorded and settled once an operation outside the guard runs
492
+ // (`lower-short-circuit.ts`).
493
+ if (returned !== null && representation !== null) {
494
+ const pending = pendingShortCircuitOf(ctx, operation, { value: returned, representation });
495
+ if (pending)
496
+ ctx.shortCircuits.set(pending.result, pending);
497
+ }
498
+ return;
499
+ }
500
+ const newTarget = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'new-target'));
501
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'a construct operation');
502
+ // `new WeakMap()` through a host constructor whose overload set joins into
503
+ // no single `[[Construct]]` convention: the overload the checker selected at
504
+ // THIS site is the frame it fills (`selectedHostConstructFrameOf`). A spread
505
+ // argument has no fixed position to lay out, so such a site publishes none.
506
+ const hostFrame = callee.representation.kind === 'native-handle' &&
507
+ callee.representation.construct === null &&
508
+ operation.selectedSignature !== null &&
509
+ args.length === evaluated.length &&
510
+ evaluated.every((slot) => slot.kind !== 'spread')
511
+ ? selectedHostConstructFrameOf(ctx.constantDeriver, operation.selectedSignature, args.length, representation)
512
+ : null;
513
+ registerResult(ctx, operation, ctx.builder.construct(block, lineage, callee, newTarget, operation.target, args, representation, hostFrame ?? undefined));
514
+ };
@@ -0,0 +1,53 @@
1
+ import type { SemanticResultId } from '../identity/ids.js';
2
+ import { type Representation } from '../representation/model.js';
3
+ import { type SemanticOperand } from '../semantics/model/operands.js';
4
+ import type { SemanticOperation } from '../semantics/model/operations.js';
5
+ import { type LoweringContext } from './lower-operands.js';
6
+ import type { IrBlockId, IrOperand } from './model.js';
7
+ /**
8
+ * One incoming value of a merge, in the carrier the merge publishes.
9
+ *
10
+ * A phi's incoming values must already carry the phi's own carrier
11
+ * (`ir/verify.ts`), so wherever an arm does not, the carrier change is an
12
+ * explicit instruction in *that arm's own block* rather than something the phi
13
+ * assumes. `a ?? b` is the standing example: it keeps `a` on the branch where
14
+ * `a` was proven present, and there the merge publishes the payload while the
15
+ * operand still carries the optional.
16
+ *
17
+ * A constant whose declared type is uninhabited is materialized directly in the
18
+ * merge's carrier instead. `never` is the checker's answer to "does control
19
+ * reach here", not to "what storage does this value occupy", and the two part
20
+ * company at exactly one idiom: `typeof X !== 'undefined' ? X : (undefined as
21
+ * unknown as typeof X)`, the ambient-global guard. The false arm narrows to
22
+ * `never` *because* the declared type excludes `undefined` -- yet that arm is
23
+ * the one that runs whenever the host did not inject `X`. The value really is
24
+ * absent and the merge is what states which carrier holds it, so the constant
25
+ * is minted there; `cppConstantLiteral` then spells that carrier's absent value
26
+ * or refuses outright if it has none.
27
+ *
28
+ * A *reference* whose declared type is inhabited can still be dead on this
29
+ * one arm, the identical fact one step less literal: `a && a.b` keeps `a` on
30
+ * the branch where `a` tested falsy, and when `a`'s own carrier is an Object
31
+ * (a class instance, a record, a native reference, an array, a callable, ...)
32
+ * it has no falsy state at all -- ECMAScript's `ToBoolean` never answers
33
+ * `false` for one. Only `a`'s own absence, if it has one, can be why this
34
+ * branch runs; the payload contributes nothing, exactly the way the
35
+ * constant's `never` type contributes nothing above. `role === 'kept'` names
36
+ * this arm precisely (`ir/lower.ts` passes it only for `&&`/`||`/`??`'s
37
+ * reused side, never the freshly-evaluated one), `operator === '&&'` is the
38
+ * one direction where the reachable state is falsy rather than truthy/
39
+ * present, and `carriesMergeAbsence` is what the merge's own carrier must
40
+ * satisfy for "materialize the absence" to have anywhere to land -- an
41
+ * `optional`, or a `native-handle`, which `optional.ts` collapses `T | null`
42
+ * onto precisely because it self-encodes absence -- and both it and
43
+ * `contributesOnlyAbsence` are the facts this one authority asks; preflight's
44
+ * `buildMergeNarrowingObligations` asked the same until Phase 1.6 deleted it.
45
+ *
46
+ * The operand's own null counts as that nothing. A bare
47
+ * `class-ref(shared-refcount)` -- the collapsed form of `T | null` -- is the
48
+ * one carrier whose falsy state is a value rather than a hole, and it is a
49
+ * value the merge's absence already spells; `contributesOnlyAbsence` is the
50
+ * whole-operand reading that admits it, where the per-arm
51
+ * `isDeadMergeContribution` beside it must not.
52
+ */
53
+ export declare const mergeIncoming: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, role: string, operand: SemanticOperand, representation: Representation) => IrOperand;