@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,461 @@
1
+ import { detachedMethodAbiOf, isClosedContiguousTupleRecord } from '../projection/callee.js';
2
+ import { classMemberOf } from '../projection/fields.js';
3
+ import { representationKey } from '../representation/model.js';
4
+ import { operandOf, resultOf } from '../semantics/model/operands.js';
5
+ import { anchorResultOf, IrLoweringBlockedError, requireRepresentation } from './lower-graph.js';
6
+ /**
7
+ * Whether a property read's receiver+key names a field an installed plugin
8
+ * declared a reactive cell.
9
+ *
10
+ * Answered once, here, at the point a `get` is about to be built
11
+ * (`lower-property.ts`, `lower-destructuring.ts`'s object-pattern step) --
12
+ * see `GetOperation.reactive` for why this belongs on the operation instead
13
+ * of being re-asked from a table the target does not publish until struct
14
+ * rendering. `classMemberOf` finds the field's DECLARING class along the
15
+ * inheritance chain, which is the class `reactiveFields` is keyed by (own
16
+ * fields only -- `component-classes.ts`'s `GeaReactiveFields`); a receiver
17
+ * that is not a class at all (a record, a dictionary, ...) answers `false`
18
+ * without a lookup, since the plugin's table only ever names class fields.
19
+ */
20
+ export const reactiveFieldReadOf = (classes, receiver, key, reactiveFields) => {
21
+ if (receiver.kind !== 'class-ref')
22
+ return false;
23
+ const site = classMemberOf(classes, receiver.declaration, key);
24
+ return site !== null && site.kind === 'field' && reactiveFields.get(site.owner)?.has(key) === true;
25
+ };
26
+ export const describeOperand = (operand) => `operand "${operand.role}"#${operand.ordinal}`;
27
+ /** The ABI projection's stated reason, ready to append to a refusal, or nothing when it stated none. */
28
+ const abiRefusalOf = (ctx) => ctx.abiRefusal === null ? '' : `; the ABI projection refused this convention because ${ctx.abiRefusal}`;
29
+ /** A published result's carrier plus the SSA id already minted for it -- the only legal source for an operand that names a prior result. */
30
+ export const resolveResultValue = (ctx, result, describe) => {
31
+ const value = ctx.values.get(result);
32
+ if (!value) {
33
+ throw new IrLoweringBlockedError(`${describe} references result ${result}, which was not lowered in this owner ` +
34
+ '(a value produced by a different owner needs capture lowering, which is not supported yet)');
35
+ }
36
+ return { value, representation: requireRepresentation(ctx.plan, result, describe) };
37
+ };
38
+ export const resolveRequiredOperand = (ctx, block, lineage, operand) => {
39
+ const source = operand.source;
40
+ if (source.kind === 'absent')
41
+ throw new IrLoweringBlockedError(`${describeOperand(operand)} is absent where a value is required`);
42
+ // A result whose carrier is `void` minted no SSA name (`namesVoidResult`),
43
+ // and an operand that reads one -- `let u: number | void = f()`, `return
44
+ // f()` in a valued function, `g(f())` -- is a STORED position, where the
45
+ // language's value for "nothing" is `undefined`
46
+ // (`representation/primitives.ts`'s `storedCarrier`, the same rule the
47
+ // representations apply to every nested `void`). A consumer that can
48
+ // genuinely take nothing (`return f()` in a `void` function, an expression
49
+ // statement) asks `namesVoidResult` itself before resolving. A `never`-typed
50
+ // result shares the void carrier and is the opposite fact -- the point past
51
+ // `return Debug.fail(...)` is unreachable, not undefined -- so it keeps
52
+ // refusing here; its consumers (`emit-return.ts`) render the point as
53
+ // `gea::host::unreachableValue<T>()` from the absence of a value.
54
+ if (source.kind === 'result' && namesVoidResult(ctx, operand) && !ctx.constantDeriver.isNeverType(operand.type)) {
55
+ const absent = { kind: 'undefined' };
56
+ return { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
57
+ }
58
+ if (source.kind === 'result')
59
+ return resolveResultValue(ctx, source.result, describeOperand(operand));
60
+ if (source.kind === 'parameter') {
61
+ // The carrier comes from the ABI slot, not from the operand's own type: the
62
+ // ABI is what the caller pushed, and a body that read the slot as anything
63
+ // else would be reading a frame nobody wrote.
64
+ const declared = ctx.abi?.parameters[source.ordinal];
65
+ if (!declared) {
66
+ throw new IrLoweringBlockedError(`${describeOperand(operand)} reads ABI position ${source.ordinal}, which this body's calling convention does not declare` +
67
+ abiRefusalOf(ctx));
68
+ }
69
+ return {
70
+ value: ctx.builder.parameter(block, lineage, source.ordinal, declared.value),
71
+ representation: declared.value
72
+ };
73
+ }
74
+ if (source.kind === 'receiver') {
75
+ // Same rule as a parameter: the carrier is normally the one the
76
+ // convention declares, because that is what the caller pushed. A body
77
+ // with no convention has no receiver at all, and reading one would
78
+ // ordinarily invent a frame slot -- except for the one role
79
+ // `semantics/normalize/producers/references.ts`'s `buildThisReference`
80
+ // mints when it has already proven the read resolves to an *enclosing*
81
+ // class's own instance: `this` inside an arrow, captured across the
82
+ // function-object boundary that arrow's allocation crosses. That proof
83
+ // lives in the operand's own role, not re-derived here: an ordinary,
84
+ // undeclared `receiver` role still refuses exactly as it always has, and
85
+ // only the producer-verified `captured-receiver` role derives a carrier
86
+ // from the operand's own type -- the same field the enclosing class's own
87
+ // receiver representation is itself derived from
88
+ // (`representation/derive.ts`'s `signature.thisParameter`), so the two
89
+ // agree by construction rather than by coincidence.
90
+ const declared = ctx.abi?.receiver;
91
+ if (declared)
92
+ return { value: ctx.builder.receiver(block, lineage, declared), representation: declared };
93
+ if (operand.role === 'static-class-receiver') {
94
+ const representation = ctx.constantDeriver.derive(operand.type);
95
+ const declaration = representation.kind === 'constructor-family' && representation.members.length === 1 ? representation.members[0] : null;
96
+ if (!declaration) {
97
+ throw new IrLoweringBlockedError(`${describeOperand(operand)} denotes a static block's class value, but its carrier is ` +
98
+ `"${representationKey(representation)}" rather than one exact constructor-family`);
99
+ }
100
+ return {
101
+ value: ctx.builder.allocateConstructor(block, lineage, declaration, [], representation),
102
+ representation
103
+ };
104
+ }
105
+ if (operand.role !== 'captured-receiver') {
106
+ throw new IrLoweringBlockedError(`${describeOperand(operand)} reads the frame's receiver, which this body's calling convention does not declare` + abiRefusalOf(ctx));
107
+ }
108
+ const representation = ctx.constantDeriver.derive(operand.type);
109
+ if (representation.kind === 'unresolved') {
110
+ throw new IrLoweringBlockedError(`${describeOperand(operand)} captures the enclosing receiver, and no carrier is derivable for it: ${representation.reason}`);
111
+ }
112
+ return { value: ctx.builder.receiver(block, lineage, representation), representation };
113
+ }
114
+ const representation = ctx.constantDeriver.derive(operand.type);
115
+ if (representation.kind === 'unresolved') {
116
+ throw new IrLoweringBlockedError(`${describeOperand(operand)} has no derivable carrier: ${representation.reason}`);
117
+ }
118
+ return { value: ctx.builder.constant(block, lineage, source.text, source.literal, representation), representation };
119
+ };
120
+ export const resolveOptionalOperand = (ctx, block, lineage, operand) => {
121
+ if (!operand || operand.source.kind === 'absent')
122
+ return null;
123
+ return resolveRequiredOperand(ctx, block, lineage, operand);
124
+ };
125
+ /**
126
+ * Whether an operand names a result whose carrier is `void`.
127
+ *
128
+ * `void` is the carrier for "there is no value": a call that returns it mints
129
+ * no SSA id at all (`build.ts`'s `mintOptionalResult`). So an operand naming
130
+ * one cannot be resolved, and a consumer that can legitimately have nothing --
131
+ * `return f()` in a `void` function, which C++ spells the same way -- has to
132
+ * ask before resolving rather than be refused for a value that was correctly
133
+ * never minted.
134
+ */
135
+ export const namesVoidResult = (ctx, operand) => operand?.source.kind === 'result' && ctx.plan.selected.get(operand.source.result)?.kind === 'void';
136
+ export const namedOperand = (operation, role, ordinal = 0) => {
137
+ const found = operandOf(operation, role, ordinal);
138
+ if (!found)
139
+ throw new IrLoweringBlockedError(`a ${operation.family} operation has no "${role}" operand to lower`);
140
+ return found;
141
+ };
142
+ export const orderedOperandsOf = (operation, role) => operation.operands.filter((operand) => operand.role === role).sort((left, right) => left.ordinal - right.ordinal);
143
+ /** The one non-provenance operand of an operation that has exactly one, when no operand is explicitly named `value`. */
144
+ export const singleValueOperand = (operation) => {
145
+ const named = operandOf(operation, 'value', 0);
146
+ if (named)
147
+ return named;
148
+ const runtime = operation.operands.filter((operand) => operand.evaluation.kind !== 'provenance');
149
+ const only = runtime.length === 1 ? runtime[0] : undefined;
150
+ if (only)
151
+ return only;
152
+ throw new IrLoweringBlockedError(`a ${operation.family} operation has no unambiguous value operand to lower`);
153
+ };
154
+ export const requireLineage = (operation) => {
155
+ const anchor = anchorResultOf(operation);
156
+ if (!anchor)
157
+ throw new IrLoweringBlockedError(`a ${operation.family} operation published no semantic result for the IR to cite as lineage`);
158
+ return anchor;
159
+ };
160
+ export const optionalResultRepresentation = (ctx, operation, role) => {
161
+ const result = resultOf(operation, role);
162
+ return result ? requireRepresentation(ctx.plan, result.id, `result ${result.id}`) : null;
163
+ };
164
+ export const requireResultRepresentation = (ctx, operation, role, describe) => {
165
+ const result = resultOf(operation, role);
166
+ if (!result)
167
+ throw new IrLoweringBlockedError(`${describe} published no "${role}" result`);
168
+ return requireRepresentation(ctx.plan, result.id, describe);
169
+ };
170
+ /** Registers the SSA id an operation's own IR lowering just produced under the same anchor `requireLineage` would cite for it. */
171
+ /**
172
+ * A value in exactly the carrier a slot declares.
173
+ *
174
+ * The one place lowering converts. A consumer that needs an operand in its
175
+ * slot's carrier asks here rather than converting on its own, so every
176
+ * `convert` in the IR names a node of the conversion census -- the same node
177
+ * the certificate checks and the printer renders -- and no consumer decides a
178
+ * pair for itself. Identity is no conversion at all: the operand is handed
179
+ * back untouched, so a slot that already agrees costs nothing in the IR.
180
+ */
181
+ export const convertTo = (ctx, block, lineage, operand, slot, via = 'slot') => {
182
+ if (representationKey(operand.representation) === representationKey(slot))
183
+ return operand;
184
+ const node = ctx.program.conversions.nodeFor(operand.representation, slot);
185
+ if (node.capability.kind === 'never')
186
+ return null;
187
+ const value = ctx.builder.convert(block, lineage, node.id, operand, slot);
188
+ traceSpeculativeLoad(lineage, via, node, value);
189
+ return { value, representation: slot };
190
+ };
191
+ /**
192
+ * Diagnostic only, under `GEA_SPECULATIVE_LOADS`: every classifier-gated load
193
+ * lowering minted, with the site that asked for it, so the loads no presence
194
+ * or membership proof stands behind can be counted by site.
195
+ */
196
+ export const speculativeLoads = [];
197
+ const tracingSpeculativeLoads = process.env.GEA_SPECULATIVE_LOADS !== undefined;
198
+ const traceSpeculativeLoad = (lineage, via, node, value) => {
199
+ if (tracingSpeculativeLoads && node.capability.kind === 'atom')
200
+ speculativeLoads.push({ lineage, via, node, value });
201
+ };
202
+ /**
203
+ * An operand as its consumer's slot wants it: resolved, then converted into
204
+ * the slot's carrier when the census names one. A raw operand -- a key, a
205
+ * callee, a condition, an argument to a host member the printer spells from
206
+ * its own carrier -- is handed back as it arrived; so is an operand whose
207
+ * pair the census cannot convert, which is recorded in `program.drift` and
208
+ * left to the printer's own path (see `LoweringProgram.drift`).
209
+ */
210
+ export const enter = (ctx, block, lineage, operation, operand, resolved) => {
211
+ const answer = ctx.program.slots.slotOf(operation, operand);
212
+ if (answer.kind === 'coerce') {
213
+ // The census named an abstract operation, not a store: the node comes from
214
+ // the coercion table, and a `never` there is drift the printer refuses by
215
+ // name at the operator (no mixed-carrier spelling exists any more).
216
+ const node = ctx.program.conversions.coercionFor(resolved.representation, answer.operation);
217
+ if (node.capability.kind === 'identity')
218
+ return resolved;
219
+ if (node.capability.kind === 'never') {
220
+ recordDrift(ctx, block, operation.id, operand.role, operand.ordinal, resolved.representation, node.target, node);
221
+ return resolved;
222
+ }
223
+ return { value: ctx.builder.convert(block, lineage, node.id, resolved, node.target), representation: node.target };
224
+ }
225
+ if (answer.kind !== 'slot')
226
+ return resolved;
227
+ const bound = bindDetachedMethod(ctx, block, lineage, resolved, answer.representation);
228
+ if (bound !== null)
229
+ return bound;
230
+ // An `alias` slot is a VIEW the consuming lowering builds itself -- an
231
+ // object-source step's frozen view, an array pattern's cursor -- not a value
232
+ // converted on the way in; converting here would hand the view builder a
233
+ // value it then re-viewed.
234
+ if (answer.source === 'alias')
235
+ return resolved;
236
+ const entered = convertTo(ctx, block, lineage, resolved, answer.representation);
237
+ if (entered !== null)
238
+ return entered;
239
+ recordDrift(ctx, block, operation.id, operand.role, operand.ordinal, resolved.representation, answer.representation);
240
+ return resolved;
241
+ };
242
+ /** The row `LoweringProgram.drift` keeps for a pair the census has no recipe for. */
243
+ const recordDrift = (ctx, block, operation, role, ordinal, source, slot, node = ctx.program.conversions.nodeFor(source, slot)) => {
244
+ ctx.program.drift.push({
245
+ block,
246
+ operation,
247
+ role,
248
+ ordinal,
249
+ source: representationKey(source),
250
+ slot: representationKey(slot),
251
+ reason: node.capability.kind === 'never' ? node.capability.reason : node.capability.kind,
252
+ sourceRepresentation: source,
253
+ slotRepresentation: slot
254
+ });
255
+ };
256
+ /**
257
+ * A conversion the lowering itself decides on rather than one a slot asks
258
+ * for -- a receiver's narrowed view, a dead merge arm's absence, the thrown
259
+ * carrier, an omitted formal's `undefined`: the census node for the pair,
260
+ * named on the `convert` instruction like every slot-driven conversion. A
261
+ * pair the census cannot convert is recorded as drift under the given role
262
+ * and STILL minted, because the consumer needs the value in `target` (a phi
263
+ * arm, a `throw`) and the printer's own chain is what answers such a pair
264
+ * until the census does. Every `convert` a lowering mints goes through here
265
+ * or `convertTo`: a hand-built use id named a conversion no census had
266
+ * counted, which is how a pair certified under one authority and refused
267
+ * under another.
268
+ */
269
+ export const convertOrDrift = (ctx, block, lineage, operation, role, ordinal, operand, target, via = 'lowering') => {
270
+ const converted = convertTo(ctx, block, lineage, operand, target, via);
271
+ if (converted !== null)
272
+ return converted;
273
+ recordDrift(ctx, block, operation, role, ordinal, operand.representation, target);
274
+ const node = ctx.program.conversions.nodeFor(operand.representation, target);
275
+ return { value: ctx.builder.convert(block, lineage, node.id, operand, target), representation: target };
276
+ };
277
+ /**
278
+ * A method value entering a receiver-less slot, bound to the object it was
279
+ * read from -- the receiver converted into the convention's own receiver
280
+ * carrier first, the way any receiver enters a frame. `null` when the pair is
281
+ * not that, or when the value's origin is not a method read this body saw.
282
+ */
283
+ const bindDetachedMethod = (ctx, block, lineage, resolved, slot) => {
284
+ const abi = detachedMethodAbiOf(resolved.representation, slot);
285
+ if (abi === null || abi.receiver === null)
286
+ return null;
287
+ const origin = ctx.program.methodValueReceivers.get(resolved.value);
288
+ if (origin === undefined)
289
+ return null;
290
+ const receiver = convertTo(ctx, block, lineage, origin.receiver, abi.receiver) ?? origin.receiver;
291
+ return {
292
+ value: ctx.builder.bindCallable(block, lineage, resolved, origin.method, abi, null, receiver, [], slot, true),
293
+ representation: slot
294
+ };
295
+ };
296
+ /**
297
+ * A binding read in the carrier the plan selected for it, which is the cell's
298
+ * own carrier or a narrowing of it: `x` read as `string` out of a cell placed
299
+ * `optional(string)` behind the guard that proved it present. The read itself
300
+ * yields the cell's carrier and the narrowing is a `convert` the conversion
301
+ * census names, exactly as a store into the cell converts the other way. A
302
+ * pair the census cannot convert is recorded as drift and the read is minted
303
+ * in the selected carrier for the printer's own path to narrow.
304
+ */
305
+ export const narrowedBindingRead = (ctx, block, lineage, operation, declaration, representation) => {
306
+ const placement = ctx.program.slots.input.placements.get(declaration);
307
+ const storage = placement?.storage.kind;
308
+ const held = placement && (storage === 'local' || storage === 'region' || storage === 'external') ? placement.representation : null;
309
+ // `resolvedBinding` is the ONLY route a field's own declaration reaches a
310
+ // binding read (`lower-property.ts`); an ordinary lexical variable's
311
+ // declaration is never a key of `reactiveFieldDeclarations`, so this is a
312
+ // no-op lookup for every other caller of this function.
313
+ const reactive = ctx.program.reactiveFieldDeclarations.has(declaration);
314
+ if (held === null || representationKey(held) === representationKey(representation)) {
315
+ return ctx.builder.bindingRead(block, lineage, declaration, representation, reactive);
316
+ }
317
+ const node = ctx.program.conversions.nodeFor(held, representation);
318
+ if (node.capability.kind === 'never') {
319
+ recordDrift(ctx, block, operation.id, 'read', 0, held, representation);
320
+ return ctx.builder.bindingRead(block, lineage, declaration, representation, reactive);
321
+ }
322
+ const raw = ctx.builder.bindingRead(block, lineage, declaration, held, reactive);
323
+ const value = ctx.builder.convert(block, lineage, node.id, { value: raw, representation: held }, representation);
324
+ traceSpeculativeLoad(lineage, 'read', node, value);
325
+ return value;
326
+ };
327
+ /** `resolveRequiredOperand` followed by `enter`, for the consumers whose operand is a value in a slot. */
328
+ export const enterRequiredOperand = (ctx, block, lineage, operation, operand) => enter(ctx, block, lineage, operation, operand, resolveRequiredOperand(ctx, block, lineage, operand));
329
+ export const registerResult = (ctx, operation, value) => {
330
+ if (value === null)
331
+ return;
332
+ const anchor = anchorResultOf(operation);
333
+ if (anchor)
334
+ ctx.values.set(anchor, value);
335
+ };
336
+ export { abiOfCallee, constructAbiOfCallee } from '../projection/callee.js';
337
+ /**
338
+ * The named fields a record carrier lays out.
339
+ *
340
+ * A record type written inline (`function Row(props: {label: string})`) carries
341
+ * its fields directly; one written as a named interface is carried *by name*,
342
+ * because that is what makes a self-referential type finite -- so its layout
343
+ * lives in the sealed structural table and is read back by deriving the shape
344
+ * the reference names. Both are the same physical object; only the carrier
345
+ * differs, and a lowering that handled just the first would refuse an ordinary
346
+ * `interface RowProps` for no reason the program could act on.
347
+ */
348
+ export const recordLayoutOf = (ctx, props) => {
349
+ if (props.kind === 'record')
350
+ return props.fields;
351
+ if (props.kind !== 'native-record-ref')
352
+ return null;
353
+ const resolved = ctx.constantDeriver.layoutOf(props.shapeId);
354
+ return resolved.kind === 'record' ? resolved.fields : null;
355
+ };
356
+ export const packRestArguments = (ctx, block, lineage, operation, abi, passed) => {
357
+ let args = passed;
358
+ const firstSpread = args.findIndex((slot) => slot.kind === 'spread');
359
+ if (!abi || abi.restFrom === null) {
360
+ if (firstSpread >= 0) {
361
+ throw new IrLoweringBlockedError('a call range-copies a spread argument into a convention that declares no rest slot; a spread contributes a runtime number of ' +
362
+ 'values and there is no fixed formal for them to land in');
363
+ }
364
+ return args.map((slot) => slot.value);
365
+ }
366
+ const slot = abi.parameters[abi.restFrom];
367
+ if (!slot) {
368
+ throw new IrLoweringBlockedError('a variadic convention declares no parameter at its own rest position and cannot be packed');
369
+ }
370
+ if (firstSpread >= 0 && firstSpread < abi.restFrom) {
371
+ throw new IrLoweringBlockedError(`a call range-copies a spread argument at position ${firstSpread}, before this convention's rest slot at ${abi.restFrom}; ` +
372
+ 'only the rest tail can absorb a runtime number of values');
373
+ }
374
+ // A call may pass fewer arguments than the convention names before its rest
375
+ // slot -- `verifyProperty(obj, name, desc)` against `(obj, name, desc,
376
+ // options, ...args)`, where the phantom tail exists only because the body
377
+ // reads `arguments` -- and ECMA-262 10.2.1 binds each omitted formal to
378
+ // `undefined`. The emitter pads an omitted formal for a convention with NO
379
+ // rest slot (`paddedArguments`, emit-context.ts), but it identifies the rest
380
+ // array positionally as the last argument, so the padding for a rest
381
+ // convention has to happen here, before the tail is packed: each omitted
382
+ // named slot is the language's literal `undefined`, converted into the
383
+ // slot's own carrier by the same two steps `lower-short-circuit.ts` uses
384
+ // for `??`'s absent arm, and a carrier that cannot hold the absence refuses
385
+ // in that conversion rather than being default-constructed.
386
+ const omitted = [];
387
+ for (let position = args.length; position < abi.restFrom; position += 1) {
388
+ const named = abi.parameters[position];
389
+ if (!named)
390
+ throw new IrLoweringBlockedError(`a variadic convention declares no parameter at named position ${position}`);
391
+ const absent = ctx.builder.constant(block, lineage, 'undefined', 'undefined', { kind: 'undefined' });
392
+ const converted = convertOrDrift(ctx, block, lineage, operation, 'omitted', position, { value: absent, representation: { kind: 'undefined' } }, named.value);
393
+ omitted.push({ kind: 'value', value: converted });
394
+ }
395
+ if (omitted.length > 0)
396
+ args = [...args, ...omitted];
397
+ // A tuple carried as a positional record has a bounded field set.
398
+ // Optional trailing positions may be omitted: leave those fields absent,
399
+ // preserving the difference from a present argument whose value is undefined.
400
+ if (isClosedContiguousTupleRecord(slot.value)) {
401
+ const tail = args.slice(abi.restFrom);
402
+ if (firstSpread >= 0) {
403
+ throw new IrLoweringBlockedError('a call range-copies a spread argument into a rest slot whose convention is a fixed-arity tuple, not a runtime-sized array; ' +
404
+ 'a spread contributes a runtime number of values and a tuple has no primitive to absorb one');
405
+ }
406
+ if (tail.length > slot.value.fields.length) {
407
+ throw new IrLoweringBlockedError(`a call passes ${tail.length} trailing argument(s) into a rest slot whose tuple convention declares ${slot.value.fields.length}; ` +
408
+ 'a fixed-arity rest slot and its call site have to agree on arity');
409
+ }
410
+ const fields = slot.value.fields.flatMap((field, index) => {
411
+ const entry = tail[index];
412
+ if (!entry) {
413
+ if (field.required)
414
+ throw new IrLoweringBlockedError(`a tuple-shaped rest slot's required field ${index} has no matching trailing argument`);
415
+ return [];
416
+ }
417
+ return [{ key: field.key, value: entry.value }];
418
+ });
419
+ const packed = ctx.builder.allocateRecord(block, lineage, fields, slot.value);
420
+ return [...args.slice(0, abi.restFrom).map((entry) => entry.value), { value: packed, representation: slot.value }];
421
+ }
422
+ if (slot.value.kind !== 'array-object') {
423
+ throw new IrLoweringBlockedError('a variadic convention declares a rest slot that is not an array-object and cannot be packed');
424
+ }
425
+ // `slot` is captured by the element callback below; keep the narrowing in a
426
+ // stable local rather than asking TypeScript to retain it through closure
427
+ // control flow. This is the same ABI-proved rest carrier, not a cast.
428
+ const restArray = slot.value;
429
+ // The rest array is FRESH per call -- the language binds `...rest` to a new
430
+ // Array, never to the caller's -- so a spread contributes a range copy into
431
+ // it rather than aliasing it. That is also why a mixed `f(a, ...xs, b)`
432
+ // needs no special case: the copy and the push are both just elements of the
433
+ // array being built, in written order.
434
+ const elements = args.slice(abi.restFrom).map((entry) => {
435
+ // A positional element enters the pack's element slot the way a literal's
436
+ // element enters an array literal's: converted here, so the printer's
437
+ // folded push (`emit-arrays.ts`) and the packed array agree on the carrier.
438
+ if (entry.kind !== 'spread')
439
+ return { kind: 'element', value: convertTo(ctx, block, lineage, entry.value, restArray.element) ?? entry.value };
440
+ if (entry.value.representation.kind === 'dynamic') {
441
+ if (restArray.element.kind !== 'dynamic') {
442
+ throw new IrLoweringBlockedError(`a call gathers a dynamic iterator into a "${representationKey(restArray.element)}" rest element carrier; ` +
443
+ 'per-element dynamic conversion is not installed');
444
+ }
445
+ return { kind: 'gather', iterator: entry.value };
446
+ }
447
+ // Set/string/cursor range sources retain their existing emitter checks.
448
+ // Only a dynamic iterator needs this dedicated materialization path.
449
+ // A source carried wider than the rest element -- an open-ended tuple's
450
+ // tail, whose array carries the union of every position -- converts per
451
+ // element on the way in; the emitter installs the conversion from the
452
+ // ordinary recipes and refuses by name where none exists.
453
+ const converts = entry.value.representation.kind === 'array-object' &&
454
+ representationKey(entry.value.representation.element) !== representationKey(restArray.element);
455
+ return converts
456
+ ? { kind: 'spread', value: entry.value, from: entry.from ?? 0, element: restArray.element }
457
+ : { kind: 'spread', value: entry.value, from: entry.from ?? 0 };
458
+ });
459
+ const packed = ctx.builder.allocateArrayObject(block, lineage, elements, restArray);
460
+ return [...args.slice(0, abi.restFrom).map((entry) => entry.value), { value: packed, representation: restArray }];
461
+ };
@@ -0,0 +1,21 @@
1
+ import type { IrBlockId } from './model.js';
2
+ import type { PropertyOperation } from '../semantics/model/operations.js';
3
+ import { type LoweringContext } from './lower-operands.js';
4
+ /**
5
+ * Lowering the property family: the six object internal methods, and nothing
6
+ * else.
7
+ *
8
+ * Property syntax has exactly one route to the runtime -- `[[Get]]`, `[[Set]]`,
9
+ * `[[Delete]]`, `[[HasProperty]]`, `[[OwnPropertyKeys]]`,
10
+ * `[[DefineOwnProperty]]` (`ir/model.ts`) -- so this file is a dispatch over
11
+ * `internalMethod` with no second, source-shaped path for a property
12
+ * expression to take. It lives apart from `lower.ts` for the same reason
13
+ * `lower-element.ts` and `lower-destructuring.ts` do: one family, one file.
14
+ */
15
+ /**
16
+ * The class method body a property read names when it reads a method as a
17
+ * VALUE: a callable carrier stating a receiver, read by a constant key off a
18
+ * class instance (or a class constructor, for a static). What `enter` binds
19
+ * the receiver to when the value reaches a receiver-less slot.
20
+ */
21
+ export declare const lowerProperty: (ctx: LoweringContext, block: IrBlockId, operation: PropertyOperation) => void;
@@ -0,0 +1,132 @@
1
+ import { narrowedOperandView } from '../conversion/operand-view.js';
2
+ import { callableOwnPrototypeAt } from '../semantics/callable-origins.js';
3
+ import { resultOf } from '../semantics/model/operands.js';
4
+ import { IrLoweringBlockedError } from './lower-graph.js';
5
+ import { pendingShortCircuitOf } from './lower-short-circuit.js';
6
+ import { methodValueOriginOf } from '../projection/callee.js';
7
+ import { propertyReadResultRepresentationOf } from '../projection/fields.js';
8
+ import { typedComputedReadRecipeOf, typedComputedWriteRecipeOf } from './typed-property-access.js';
9
+ import { namedOperand, optionalResultRepresentation, registerResult, requireLineage, requireResultRepresentation, resolveRequiredOperand, convertOrDrift, enterRequiredOperand, narrowedBindingRead, reactiveFieldReadOf } from './lower-operands.js';
10
+ /**
11
+ * Lowering the property family: the six object internal methods, and nothing
12
+ * else.
13
+ *
14
+ * Property syntax has exactly one route to the runtime -- `[[Get]]`, `[[Set]]`,
15
+ * `[[Delete]]`, `[[HasProperty]]`, `[[OwnPropertyKeys]]`,
16
+ * `[[DefineOwnProperty]]` (`ir/model.ts`) -- so this file is a dispatch over
17
+ * `internalMethod` with no second, source-shaped path for a property
18
+ * expression to take. It lives apart from `lower.ts` for the same reason
19
+ * `lower-element.ts` and `lower-destructuring.ts` do: one family, one file.
20
+ */
21
+ /**
22
+ * The class method body a property read names when it reads a method as a
23
+ * VALUE: a callable carrier stating a receiver, read by a constant key off a
24
+ * class instance (or a class constructor, for a static). What `enter` binds
25
+ * the receiver to when the value reaches a receiver-less slot.
26
+ */
27
+ export const lowerProperty = (ctx, block, operation) => {
28
+ const lineage = requireLineage(operation);
29
+ if (operation.internalMethod === 'get' && operation.resolvedBinding !== undefined) {
30
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'a resolved binding property read');
31
+ const value = narrowedBindingRead(ctx, block, lineage, operation, operation.resolvedBinding, representation);
32
+ registerResult(ctx, operation, value);
33
+ if (operation.shortCircuitAlwaysPresent) {
34
+ const expression = resultOf(operation, 'short-circuit');
35
+ if (expression)
36
+ ctx.values.set(expression.id, value);
37
+ return;
38
+ }
39
+ const pending = pendingShortCircuitOf(ctx, operation, { value, representation });
40
+ if (pending)
41
+ ctx.shortCircuits.set(pending.result, pending);
42
+ return;
43
+ }
44
+ const receiverOperand = namedOperand(operation, 'receiver');
45
+ const incoming = resolveRequiredOperand(ctx, block, lineage, receiverOperand);
46
+ const view = narrowedOperandView(incoming.representation, receiverOperand, ctx.constantDeriver);
47
+ const receiver = convertOrDrift(ctx, block, lineage, operation.id, 'receiver', receiverOperand.ordinal, incoming, view, 'receiver-view');
48
+ switch (operation.internalMethod) {
49
+ case 'own-property-keys': {
50
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an own-property-keys operation');
51
+ registerResult(ctx, operation, ctx.builder.ownPropertyKeys(block, lineage, receiver, representation));
52
+ return;
53
+ }
54
+ case 'get': {
55
+ const keyOperand = namedOperand(operation, 'key');
56
+ const key = resolveRequiredOperand(ctx, block, lineage, keyOperand);
57
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'a property get operation');
58
+ const reactive = keyOperand.source.kind === 'constant'
59
+ ? reactiveFieldReadOf(ctx.program.classes, receiver.representation, keyOperand.source.text, ctx.program.reactiveFields)
60
+ : false;
61
+ const held = keyOperand.source.kind === 'constant'
62
+ ? propertyReadResultRepresentationOf(ctx.constantDeriver, ctx.program.classes, ctx.program.abis, receiver.representation, keyOperand.source.text)
63
+ : null;
64
+ // The declaration's own `prototype` fact, asked once and carried on the
65
+ // read (`GetOperation.callableOwnPrototype`). The printer cannot ask:
66
+ // the census lives on the semantic graph, and by emission time only the
67
+ // carrier is left -- which is precisely the authority that used to
68
+ // answer this question by accident.
69
+ const callableOwnPrototype = keyOperand.source.kind === 'constant' &&
70
+ keyOperand.source.text === 'prototype' &&
71
+ receiver.representation.kind === 'function-value-dispatch'
72
+ ? (callableOwnPrototypeAt(ctx.graph, operation) ?? undefined)
73
+ : undefined;
74
+ const typedComputedRead = typedComputedReadRecipeOf(ctx.graph, operation, receiver.representation, held ?? representation, key.representation, ctx.constantDeriver, ctx.program.classes, ctx.program.conversions);
75
+ const raw = ctx.builder.get(block, lineage, receiver, key, held ?? representation, operation.hostMethod, reactive, callableOwnPrototype, operation.normalResult, typedComputedRead ?? undefined, operation.provenKeyTexts);
76
+ const value = held === null
77
+ ? raw
78
+ : convertOrDrift(ctx, block, lineage, operation.id, 'read', 0, { value: raw, representation: held }, representation, 'field-read')
79
+ .value;
80
+ registerResult(ctx, operation, value);
81
+ const method = keyOperand.source.kind === 'constant'
82
+ ? methodValueOriginOf(ctx.program.classes, receiver.representation, keyOperand.source.text, representation)
83
+ : null;
84
+ if (method !== null)
85
+ ctx.program.methodValueReceivers.set(value, { receiver, method });
86
+ if (operation.shortCircuitAlwaysPresent) {
87
+ const expression = resultOf(operation, 'short-circuit');
88
+ if (expression)
89
+ ctx.values.set(expression.id, value);
90
+ return;
91
+ }
92
+ // `a?.b` publishes a second value -- what the *expression* evaluates to --
93
+ // which is a merge this arm cannot close. It is recorded and settled once
94
+ // an operation outside the guard runs (`lower-short-circuit.ts`).
95
+ const pending = pendingShortCircuitOf(ctx, operation, { value, representation });
96
+ if (pending)
97
+ ctx.shortCircuits.set(pending.result, pending);
98
+ return;
99
+ }
100
+ case 'has-property': {
101
+ const key = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'key'));
102
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'a has-property operation');
103
+ registerResult(ctx, operation, ctx.builder.hasProperty(block, lineage, receiver, key, representation));
104
+ return;
105
+ }
106
+ case 'delete': {
107
+ const key = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'key'));
108
+ registerResult(ctx, operation, ctx.builder.delete(block, lineage, receiver, key, operation.strict, optionalResultRepresentation(ctx, operation, 'value')));
109
+ return;
110
+ }
111
+ case 'set': {
112
+ const key = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'key'));
113
+ const value = enterRequiredOperand(ctx, block, lineage, operation, namedOperand(operation, 'value'));
114
+ registerResult(ctx, operation, ctx.builder.set(block, lineage, receiver, key, value, operation.strict, optionalResultRepresentation(ctx, operation, 'value'), typedComputedWriteRecipeOf(ctx.graph, operation, receiver.representation, ctx.constantDeriver, ctx.program.classes) ?? undefined, operation.provenKeyTexts));
115
+ return;
116
+ }
117
+ case 'define-own-property': {
118
+ const key = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'key'));
119
+ const value = enterRequiredOperand(ctx, block, lineage, operation, namedOperand(operation, 'value'));
120
+ // The attributes are the operation's own, never defaults chosen here: a
121
+ // definition with no stated descriptor is an unanswerable question, not
122
+ // a permissive one, and guessing would install a property the source
123
+ // never described.
124
+ const descriptor = operation.descriptor;
125
+ if (!descriptor) {
126
+ throw new IrLoweringBlockedError('a define-own-property operation states no descriptor for the IR to install');
127
+ }
128
+ registerResult(ctx, operation, ctx.builder.defineOwnProperty(block, lineage, receiver, key, value, { writable: descriptor.writable, enumerable: descriptor.enumerable, configurable: descriptor.configurable }, optionalResultRepresentation(ctx, operation, 'value')));
129
+ return;
130
+ }
131
+ }
132
+ };
@@ -0,0 +1,11 @@
1
+ import type { IrBlockId } from './model.js';
2
+ import type { ProtocolOperation } from '../semantics/model/operations.js';
3
+ import { type LoweringContext } from './lower-operands.js';
4
+ /**
5
+ * The iteration protocol's steps.
6
+ *
7
+ * Split out of `lower.ts` on the same family boundary `lower-allocation.ts`
8
+ * and `lower-destructuring.ts` already draw, so the file that dispatches every
9
+ * family does not also carry one family's whole implementation.
10
+ */
11
+ export declare const lowerProtocol: (ctx: LoweringContext, block: IrBlockId, operation: ProtocolOperation) => void;