@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,11 @@
1
+ import type { DeclarationId, IrValueId } from '../identity/ids.js';
2
+ import type { BindingPlacement } from '../projection/bindings.js';
3
+ import type { ClassLayout } from '../projection/classes.js';
4
+ import type { CallCalleeIdentity, IrBody } from './model.js';
5
+ /**
6
+ * Static methods have projected implementation identities just like instance
7
+ * methods. Publish them only while the constructor object stays inside uses
8
+ * that cannot replace its members. This is a callable identity proof, not a
9
+ * request to bypass the callable's environment or receiver convention.
10
+ */
11
+ export declare const closedStaticCallablesOf: (bodies: readonly IrBody[], placements: ReadonlyMap<DeclarationId, BindingPlacement>, classes: ReadonlyMap<DeclarationId, ClassLayout>) => ReadonlyMap<IrValueId, CallCalleeIdentity>;
@@ -0,0 +1,163 @@
1
+ import { classMemberOf, classStaticMemberOf } from '../projection/fields.js';
2
+ import { representationKey } from '../representation/model.js';
3
+ import { operandsOfIrOperation, resultOfIrOperation } from './queries.js';
4
+ /**
5
+ * Static methods have projected implementation identities just like instance
6
+ * methods. Publish them only while the constructor object stays inside uses
7
+ * that cannot replace its members. This is a callable identity proof, not a
8
+ * request to bypass the callable's environment or receiver convention.
9
+ */
10
+ export const closedStaticCallablesOf = (bodies, placements, classes) => {
11
+ const operations = bodies.flatMap((body) => body.blockOrder.flatMap((id) => {
12
+ const block = body.blocks.get(id);
13
+ return block ? [...block.operations, block.terminator] : [];
14
+ }));
15
+ const producers = new Map();
16
+ const writes = new Map();
17
+ for (const operation of operations) {
18
+ const result = resultOfIrOperation(operation);
19
+ if (result)
20
+ producers.set(result.id, operation);
21
+ if (operation.kind === 'binding-write') {
22
+ const values = writes.get(operation.declaration) ?? [];
23
+ values.push(operation.value.value);
24
+ writes.set(operation.declaration, values);
25
+ }
26
+ }
27
+ const nativeConstructor = (id, declaration, visiting = new Set()) => {
28
+ if (visiting.has(id))
29
+ return false;
30
+ const operation = producers.get(id);
31
+ if (!operation)
32
+ return false;
33
+ if (operation.kind === 'allocate-constructor')
34
+ return operation.declaration === declaration;
35
+ let sources = null;
36
+ if (operation.kind === 'binding-read') {
37
+ const storage = placements.get(operation.declaration)?.storage.kind;
38
+ if (storage === 'local' || storage === 'region')
39
+ sources = writes.get(operation.declaration) ?? null;
40
+ }
41
+ else if (operation.kind === 'phi')
42
+ sources = operation.incoming.map((incoming) => incoming.value.value);
43
+ else if (operation.kind === 'convert' &&
44
+ representationKey(operation.source.representation) === representationKey(operation.result.representation))
45
+ sources = [operation.source.value];
46
+ if (!sources?.length)
47
+ return false;
48
+ visiting.add(id);
49
+ const closed = sources.every((source) => nativeConstructor(source, declaration, visiting));
50
+ visiting.delete(id);
51
+ return closed;
52
+ };
53
+ const membersOf = (value) => {
54
+ if (value.kind === 'constructor-family')
55
+ return value.members;
56
+ // An escaped instance exposes its constructor through its prototype.
57
+ // Treat it as another route to mutation, not as an unrelated payload.
58
+ if (value.kind === 'class-ref')
59
+ return [value.declaration];
60
+ if (value.kind === 'optional')
61
+ return membersOf(value.payload);
62
+ if (value.kind === 'borrowed-ref')
63
+ return membersOf(value.referent);
64
+ if (value.kind === 'tagged-union')
65
+ return value.arms.flatMap((arm) => membersOf(arm.value));
66
+ return [];
67
+ };
68
+ const candidates = new Map();
69
+ for (const operation of operations) {
70
+ if (operation.kind !== 'get' || operation.receiver.representation.kind !== 'constructor-family')
71
+ continue;
72
+ const members = operation.receiver.representation.members;
73
+ // A family with different static implementations needs its own dispatch
74
+ // recipe; the existing static member renderer selects one declaration.
75
+ if (members.length !== 1)
76
+ continue;
77
+ const key = producers.get(operation.key.value);
78
+ if (key?.kind !== 'constant' || key.literal !== 'string')
79
+ continue;
80
+ const receiver = members[0];
81
+ if (!nativeConstructor(operation.receiver.value, receiver))
82
+ continue;
83
+ const site = classStaticMemberOf(classes, receiver, key.text);
84
+ if (site?.kind !== 'method' || site.method.callable === null)
85
+ continue;
86
+ candidates.set(operation.result.id, {
87
+ receiver,
88
+ owner: site.owner,
89
+ identity: { kind: 'exact', functionId: site.method.callable }
90
+ });
91
+ }
92
+ const untrusted = new Set();
93
+ for (const operation of operations) {
94
+ for (const operand of operandsOfIrOperation(operation)) {
95
+ const members = membersOf(operand.representation);
96
+ if (members.length === 0)
97
+ continue;
98
+ if (operand.representation.kind === 'class-ref' &&
99
+ (operation.kind === 'get' || operation.kind === 'set') &&
100
+ operand.value === operation.receiver.value &&
101
+ (operation.kind !== 'set' || operation.value.value !== operand.value)) {
102
+ const key = producers.get(operation.key.value);
103
+ const member = key?.kind === 'constant' && key.literal === 'string' ? classMemberOf(classes, operand.representation.declaration, key.text) : null;
104
+ if (member?.kind === 'field' || (operation.kind === 'get' && member?.kind === 'method'))
105
+ continue;
106
+ }
107
+ if (operation.kind === 'get' && operand.value === operation.receiver.value && candidates.has(operation.result.id))
108
+ continue;
109
+ if (operation.kind === 'binding-write') {
110
+ const placement = placements.get(operation.declaration);
111
+ if ((placement?.storage.kind === 'local' || placement?.storage.kind === 'region') &&
112
+ placement.representation !== null &&
113
+ representationKey(placement.representation) === representationKey(operand.representation))
114
+ continue;
115
+ }
116
+ if (operation.kind === 'construct' &&
117
+ (operand.value === operation.callee.value || operand.value === operation.newTarget.value) &&
118
+ !operation.arguments.some((argument) => argument.value === operand.value))
119
+ continue;
120
+ if (operation.kind === 'call' &&
121
+ operand.value === operation.receiver?.value &&
122
+ candidates.has(operation.callee.value) &&
123
+ !operation.arguments.some((argument) => argument.value === operand.value))
124
+ continue;
125
+ if ((operation.kind === 'convert' &&
126
+ representationKey(operation.source.representation) === representationKey(operation.result.representation)) ||
127
+ (operation.kind === 'phi' &&
128
+ operation.incoming.every((incoming) => representationKey(incoming.value.representation) === representationKey(operation.result.representation))) ||
129
+ operation.kind === 'test' ||
130
+ (operation.kind === 'compute' &&
131
+ (operation.form === 'typeof' ||
132
+ (operation.form === 'unary' && (operation.operator === 'void' || operation.operator === '!')) ||
133
+ (operation.form === 'equality' && (operation.operator === '===' || operation.operator === '!==')))))
134
+ continue;
135
+ // An unknown consumer can walk the constructor's prototype chain and
136
+ // replace an inherited member on an ancestor as well.
137
+ for (const member of members) {
138
+ let declaration = member;
139
+ const seen = new Set();
140
+ while (declaration !== null && !seen.has(declaration)) {
141
+ untrusted.add(declaration);
142
+ seen.add(declaration);
143
+ declaration = classes.get(declaration)?.base ?? null;
144
+ }
145
+ }
146
+ }
147
+ }
148
+ return new Map([...candidates].flatMap(([id, candidate]) => {
149
+ // An intermediate constructor can shadow the inherited method without
150
+ // mutating either the receiver or the original declaring constructor.
151
+ let declaration = candidate.receiver;
152
+ const seen = new Set();
153
+ while (declaration !== null && !seen.has(declaration)) {
154
+ if (untrusted.has(declaration))
155
+ return [];
156
+ if (declaration === candidate.owner)
157
+ return [[id, candidate.identity]];
158
+ seen.add(declaration);
159
+ declaration = classes.get(declaration)?.base ?? null;
160
+ }
161
+ return [];
162
+ }));
163
+ };
@@ -0,0 +1,13 @@
1
+ import type { IrValueId } from '../identity/ids.js';
2
+ import type { HoistPlan } from './hoist.js';
3
+ import type { IrBody } from './model.js';
4
+ export interface SharedStringLayout {
5
+ readonly ordinal: number;
6
+ readonly initialize: boolean;
7
+ }
8
+ /** Share the scan only among reads already proved invariant and relocated to
9
+ * the same preheader. Binding identities are interchangeable only when their
10
+ * reads occur in that same relocation list: a matching declaration elsewhere
11
+ * could observe a different value. This consumes the hoist proof instead of
12
+ * inventing another alias or callback-effect analysis. */
13
+ export declare const sharedStringLayoutsOf: (body: IrBody, hoists: HoistPlan, excluded: ReadonlySet<IrValueId>) => ReadonlyMap<IrValueId, SharedStringLayout>;
@@ -0,0 +1,39 @@
1
+ import { stringConstantsOf } from './dead-values.js';
2
+ /** Share the scan only among reads already proved invariant and relocated to
3
+ * the same preheader. Binding identities are interchangeable only when their
4
+ * reads occur in that same relocation list: a matching declaration elsewhere
5
+ * could observe a different value. This consumes the hoist proof instead of
6
+ * inventing another alias or callback-effect analysis. */
7
+ export const sharedStringLayoutsOf = (body, hoists, excluded) => {
8
+ const layouts = new Map();
9
+ const keys = stringConstantsOf(body);
10
+ let ordinal = 0;
11
+ for (const operations of hoists.into.values()) {
12
+ const receivers = new Map();
13
+ for (const operation of operations) {
14
+ if (operation.kind === 'binding-read')
15
+ receivers.set(operation.result.id, `binding:${operation.declaration}`);
16
+ }
17
+ const groups = new Map();
18
+ for (const operation of operations) {
19
+ if (operation.kind !== 'get' || operation.receiver.representation.kind !== 'string' || excluded.has(operation.result.id))
20
+ continue;
21
+ const key = keys.get(operation.key.value);
22
+ if (key !== 'length' && key !== 'charCodeAt')
23
+ continue;
24
+ const identity = receivers.get(operation.receiver.value) ?? `value:${operation.receiver.value}`;
25
+ const group = groups.get(identity) ?? [];
26
+ group.push(operation);
27
+ groups.set(identity, group);
28
+ }
29
+ for (const group of groups.values()) {
30
+ if (group.length < 2 || !group.some((operation) => keys.get(operation.key.value) === 'charCodeAt'))
31
+ continue;
32
+ for (const [index, operation] of group.entries()) {
33
+ layouts.set(operation.result.id, { ordinal, initialize: index === 0 });
34
+ }
35
+ ordinal++;
36
+ }
37
+ }
38
+ return layouts;
39
+ };
@@ -0,0 +1,8 @@
1
+ import type { DeclarationId, IrValueId } from '../identity/ids.js';
2
+ import type { IrBody, IrOperand } from './model.js';
3
+ /** Reuse a dominating native string length. The receiver must be the same
4
+ * SSA value, or a read of a cell the caller proves aliases an unchanged
5
+ * formal. No object getters, mutable cells, or assumptions about callees.
6
+ * Relocated/dead reads are excluded: their original CFG position no longer
7
+ * states where (or whether) their result will be available. */
8
+ export declare const stringLengthReuseOf: (body: IrBody, stableFormals: ReadonlySet<DeclarationId>, excluded: ReadonlySet<IrValueId>) => ReadonlyMap<IrValueId, IrOperand>;
@@ -0,0 +1,47 @@
1
+ import { dominatorTreeOf } from './dominance.js';
2
+ import { stringConstantsOf } from './dead-values.js';
3
+ /** Reuse a dominating native string length. The receiver must be the same
4
+ * SSA value, or a read of a cell the caller proves aliases an unchanged
5
+ * formal. No object getters, mutable cells, or assumptions about callees.
6
+ * Relocated/dead reads are excluded: their original CFG position no longer
7
+ * states where (or whether) their result will be available. */
8
+ export const stringLengthReuseOf = (body, stableFormals, excluded) => {
9
+ const reuse = new Map();
10
+ if (body.tryRegions.length > 0 || (body.iteratorCloseRegions?.length ?? 0) > 0)
11
+ return reuse;
12
+ const keys = stringConstantsOf(body);
13
+ const receivers = new Map();
14
+ for (const block of body.blocks.values()) {
15
+ for (const operation of block.operations) {
16
+ if (operation.kind === 'binding-read' && stableFormals.has(operation.declaration))
17
+ receivers.set(operation.result.id, `formal:${operation.declaration}`);
18
+ if (operation.kind === 'parameter')
19
+ receivers.set(operation.result.id, `parameter:${operation.ordinal}`);
20
+ }
21
+ }
22
+ const dominance = dominatorTreeOf(body);
23
+ const available = new Map();
24
+ for (const blockId of body.blockOrder) {
25
+ const block = body.blocks.get(blockId);
26
+ if (!block)
27
+ continue;
28
+ for (const operation of block.operations) {
29
+ if (operation.kind !== 'get' ||
30
+ operation.receiver.representation.kind !== 'string' ||
31
+ keys.get(operation.key.value) !== 'length' ||
32
+ excluded.has(operation.result.id))
33
+ continue;
34
+ // Non-formal binding reads deliberately keep their distinct SSA IDs.
35
+ const identity = receivers.get(operation.receiver.value) ?? `value:${operation.receiver.value}`;
36
+ const prior = available.get(identity) ?? [];
37
+ const dominating = prior.find((candidate) => dominance.dominates(candidate.block, blockId));
38
+ if (dominating)
39
+ reuse.set(operation.result.id, dominating.operand);
40
+ else {
41
+ prior.push({ block: blockId, operand: { value: operation.result.id, representation: operation.result.representation } });
42
+ available.set(identity, prior);
43
+ }
44
+ }
45
+ }
46
+ return reuse;
47
+ };
@@ -0,0 +1,78 @@
1
+ import type { IrValueId } from '../identity/ids.js';
2
+ import type { IrBody, ValueTransfer } from './model.js';
3
+ /**
4
+ * Relocated from `targets/cpp/captures.ts` per
5
+ * the `IrOperand.transfer` step that moved this fact out of the target: the
6
+ * move pipeline reasons only about the lowered IR (SSA uses, cells, control
7
+ * flow), never about how the target renders anything, so it belongs here
8
+ * rather than beside the printer. `cppTypeOf` stays a target import for now
9
+ * -- `ownedFormalInputsOf`'s optional-unwrap check compares two carriers by
10
+ * their C++ SPELLING, which is the target's own historical answer to "does
11
+ * this conversion actually change the representation"; swapping it for
12
+ * `representationKey` would be a behavior change (two representations can
13
+ * share a spelling while differing in fields this key tracks, e.g.
14
+ * `shapeId`), and this refactor's contract is byte-identical output, not a
15
+ * better answer. Collapsing that comparison onto a pure representation
16
+ * predicate is future work, not this step's.
17
+ */
18
+ /**
19
+ * Argument reads whose value is DYING at the call that takes it: the cell is
20
+ * read ONCE in the whole unit, that read is the argument's only use, and every
21
+ * write to the cell is in the body that reads it. Nothing can observe the cell
22
+ * after the call, so the argument MOVES into the callee rather than copying.
23
+ *
24
+ * The copy is not free. A `gea::Ref` argument passed by value increments on the
25
+ * way in and releases on the way out, and the release is a decrement, a branch,
26
+ * and -- on the taken side -- an out-of-line destructor call clang cannot prove
27
+ * unreachable. `binary_trees`' `build` pays that pair twice per node, for the
28
+ * two subtrees it has just built and will never look at again. Measured on
29
+ * `binary_trees` at 1M nodes: 41.9ms as emitted, 40.8ms with the two subtree
30
+ * arguments moved.
31
+ *
32
+ * Each condition is a way the move would be OBSERVED, so none of them can be
33
+ * relaxed for a bigger catch:
34
+ * - a second read anywhere in the unit -- a module-scope cell two bodies read,
35
+ * a cell a closure captures by reference -- would see the emptied cell.
36
+ * - a second use of the same read, `f(x, x)`, moves the first argument out
37
+ * from under the second.
38
+ * - a read or its single use that a loop re-enters moves once and passes an
39
+ * empty `Ref` on every iteration after. A loop-invariant read can live in
40
+ * an acyclic preheader while its SSA value is consumed in the cyclic body,
41
+ * so both blocks must be acyclic.
42
+ * - a write in ANOTHER body means the cell outlives this frame: the read is
43
+ * local but the storage is not.
44
+ */
45
+ export declare const buildDyingArgumentIndex: (bodies: readonly IrBody[]) => ReadonlySet<IrValueId>;
46
+ /**
47
+ * Single-use SSA storage can move across a branch if the consumer cannot run
48
+ * twice without its defining operation running again. Removing the definition
49
+ * block from the CFG makes that loop-carried-use question explicit. Binding
50
+ * aliases and borrowed formals are excluded later by the emitter's actual
51
+ * storage ownership, rather than inferred from a read's source type.
52
+ */
53
+ export declare const ownedDyingValuesOf: (body: IrBody) => ReadonlySet<IrValueId>;
54
+ /** Last uses of by-value ABI inputs, grouped by formal rather than SSA read. */
55
+ export declare const ownedFormalInputsOf: (body: IrBody) => {
56
+ readonly arguments: ReadonlySet<IrValueId>;
57
+ readonly conversions: ReadonlySet<IrValueId>;
58
+ };
59
+ /**
60
+ * The single decision `emit-narrowing.ts`'s `movedValueText` and
61
+ * `emit-callable.ts`'s stable-borrow-entry check used to make twice, verbatim,
62
+ * against the same two whole-program facts above plus the target's own
63
+ * storage-ownership census (`EmitContext.ownedValues` -- carrier ownership
64
+ * class for a capture is a separate, still target-computed Phase 3 step per
65
+ * a program fact of the IR, not of this one). A dying read moves
66
+ * outright (`buildDyingArgumentIndex`); an SSA-dying temporary
67
+ * (`ownedDyingValuesOf`) moves only once storage ownership is proven, since
68
+ * that census alone cannot tell a physical owner from a borrowed alias.
69
+ */
70
+ export declare const transferOf: (dyingArguments: ReadonlySet<IrValueId>, ownedValues: ReadonlySet<IrValueId>, ownedDyingValues: ReadonlySet<IrValueId>, value: IrValueId) => ValueTransfer;
71
+ /**
72
+ * The formal-conversion half of the same pipeline (`ownedFormalInputsOf`'s
73
+ * `conversions`): a dying by-value parameter that reaches its one use through
74
+ * an optional-unwrap `convert` moves at the CONVERT's result, not at a read of
75
+ * the parameter itself -- `emit.ts`'s `emitConvert` is the one renderer that
76
+ * ever sees that result id, so this is keyed by result rather than by operand.
77
+ */
78
+ export declare const transfersFormalConversion: (consumingFormalConversions: ReadonlySet<IrValueId>, resultValue: IrValueId) => ValueTransfer;
@@ -0,0 +1,270 @@
1
+ import { cppTypeOf } from '../targets/cpp/types.js';
2
+ import { controlFlowGraphOf, cyclicBlocksOf } from './dominance.js';
3
+ import { operandsOfIrOperation, resultOfIrOperation } from './queries.js';
4
+ /**
5
+ * Relocated from `targets/cpp/captures.ts` per
6
+ * the `IrOperand.transfer` step that moved this fact out of the target: the
7
+ * move pipeline reasons only about the lowered IR (SSA uses, cells, control
8
+ * flow), never about how the target renders anything, so it belongs here
9
+ * rather than beside the printer. `cppTypeOf` stays a target import for now
10
+ * -- `ownedFormalInputsOf`'s optional-unwrap check compares two carriers by
11
+ * their C++ SPELLING, which is the target's own historical answer to "does
12
+ * this conversion actually change the representation"; swapping it for
13
+ * `representationKey` would be a behavior change (two representations can
14
+ * share a spelling while differing in fields this key tracks, e.g.
15
+ * `shapeId`), and this refactor's contract is byte-identical output, not a
16
+ * better answer. Collapsing that comparison onto a pure representation
17
+ * predicate is future work, not this step's.
18
+ */
19
+ /**
20
+ * Argument reads whose value is DYING at the call that takes it: the cell is
21
+ * read ONCE in the whole unit, that read is the argument's only use, and every
22
+ * write to the cell is in the body that reads it. Nothing can observe the cell
23
+ * after the call, so the argument MOVES into the callee rather than copying.
24
+ *
25
+ * The copy is not free. A `gea::Ref` argument passed by value increments on the
26
+ * way in and releases on the way out, and the release is a decrement, a branch,
27
+ * and -- on the taken side -- an out-of-line destructor call clang cannot prove
28
+ * unreachable. `binary_trees`' `build` pays that pair twice per node, for the
29
+ * two subtrees it has just built and will never look at again. Measured on
30
+ * `binary_trees` at 1M nodes: 41.9ms as emitted, 40.8ms with the two subtree
31
+ * arguments moved.
32
+ *
33
+ * Each condition is a way the move would be OBSERVED, so none of them can be
34
+ * relaxed for a bigger catch:
35
+ * - a second read anywhere in the unit -- a module-scope cell two bodies read,
36
+ * a cell a closure captures by reference -- would see the emptied cell.
37
+ * - a second use of the same read, `f(x, x)`, moves the first argument out
38
+ * from under the second.
39
+ * - a read or its single use that a loop re-enters moves once and passes an
40
+ * empty `Ref` on every iteration after. A loop-invariant read can live in
41
+ * an acyclic preheader while its SSA value is consumed in the cyclic body,
42
+ * so both blocks must be acyclic.
43
+ * - a write in ANOTHER body means the cell outlives this frame: the read is
44
+ * local but the storage is not.
45
+ */
46
+ export const buildDyingArgumentIndex = (bodies) => {
47
+ const reads = new Map();
48
+ const readCounts = new Map();
49
+ const writeBodies = new Map();
50
+ const uses = new Map();
51
+ const passed = new Set();
52
+ const definedIn = new Map();
53
+ const usedIn = new Map();
54
+ for (const body of bodies) {
55
+ for (const [blockId, block] of body.blocks) {
56
+ for (const operation of [...block.operations, block.terminator]) {
57
+ const produced = resultOfIrOperation(operation);
58
+ if (produced !== null)
59
+ definedIn.set(produced.id, blockId);
60
+ for (const operand of operandsOfIrOperation(operation)) {
61
+ uses.set(operand.value, (uses.get(operand.value) ?? 0) + 1);
62
+ usedIn.set(operand.value, blockId);
63
+ }
64
+ if (operation.kind === 'binding-read') {
65
+ reads.set(operation.result.id, { declaration: operation.declaration, body, block: blockId });
66
+ readCounts.set(operation.declaration, (readCounts.get(operation.declaration) ?? 0) + 1);
67
+ }
68
+ if (operation.kind === 'binding-write') {
69
+ const bodiesOfCell = writeBodies.get(operation.declaration) ?? new Set();
70
+ bodiesOfCell.add(body);
71
+ writeBodies.set(operation.declaration, bodiesOfCell);
72
+ }
73
+ if (operation.kind === 'call' || operation.kind === 'construct') {
74
+ for (const argument of operation.arguments)
75
+ passed.add(argument.value);
76
+ }
77
+ // A field store hands the value over exactly as an argument does, and so
78
+ // does a write into a cell -- the cell keeps what the value held, and a
79
+ // value with one use has nothing left to keep.
80
+ if (operation.kind === 'set' || operation.kind === 'define-own-property')
81
+ passed.add(operation.value.value);
82
+ if (operation.kind === 'binding-write')
83
+ passed.add(operation.value.value);
84
+ }
85
+ }
86
+ }
87
+ const cyclic = new Map();
88
+ const dying = new Set();
89
+ // A value the SAME BLOCK defines and then passes is the simplest dying shape
90
+ // there is, and needs no cell reasoning at all: straight-line code redefines
91
+ // it before every use, so a loop cannot carry an emptied one into the next
92
+ // iteration and no other block can name it. `binary_trees`' `build` is
93
+ // exactly this -- the two subtrees it has just recursed for.
94
+ for (const [value, block] of definedIn) {
95
+ if (reads.has(value) || !passed.has(value) || uses.get(value) !== 1)
96
+ continue;
97
+ if (usedIn.get(value) === block)
98
+ dying.add(value);
99
+ }
100
+ for (const [value, read] of reads) {
101
+ if (!passed.has(value) || uses.get(value) !== 1)
102
+ continue;
103
+ if (readCounts.get(read.declaration) !== 1)
104
+ continue;
105
+ const written = writeBodies.get(read.declaration);
106
+ if (written === undefined || written.size !== 1 || !written.has(read.body))
107
+ continue;
108
+ const blocks = cyclic.get(read.body) ?? cyclicBlocksOf(read.body);
109
+ cyclic.set(read.body, blocks);
110
+ const useBlock = usedIn.get(value);
111
+ if (blocks.has(read.block) || (useBlock !== undefined && blocks.has(useBlock)))
112
+ continue;
113
+ dying.add(value);
114
+ }
115
+ return dying;
116
+ };
117
+ /**
118
+ * Single-use SSA storage can move across a branch if the consumer cannot run
119
+ * twice without its defining operation running again. Removing the definition
120
+ * block from the CFG makes that loop-carried-use question explicit. Binding
121
+ * aliases and borrowed formals are excluded later by the emitter's actual
122
+ * storage ownership, rather than inferred from a read's source type.
123
+ */
124
+ export const ownedDyingValuesOf = (body) => {
125
+ const definitions = new Map();
126
+ const uses = new Map();
127
+ for (const [blockId, block] of body.blocks) {
128
+ for (const operation of [...block.operations, block.terminator]) {
129
+ const result = resultOfIrOperation(operation);
130
+ if (result)
131
+ definitions.set(result.id, blockId);
132
+ for (const operand of operandsOfIrOperation(operation)) {
133
+ const readers = uses.get(operand.value) ?? [];
134
+ readers.push(blockId);
135
+ uses.set(operand.value, readers);
136
+ }
137
+ }
138
+ }
139
+ const graph = controlFlowGraphOf(body);
140
+ const cyclic = cyclicBlocksOf(body);
141
+ const dying = new Set();
142
+ for (const [value, definition] of definitions) {
143
+ const readers = uses.get(value);
144
+ if (readers?.length !== 1)
145
+ continue;
146
+ const use = readers[0];
147
+ if (use === undefined)
148
+ continue;
149
+ // A value defined outside a loop can still have its sole SSA use inside
150
+ // the loop. Moving at that use empties the storage on the first iteration
151
+ // and every later iteration observes a null Ref. The CFG re-entry check
152
+ // below only handles distinct definition/use blocks, so exclude cyclic
153
+ // uses before the same-block fast path as well.
154
+ if (cyclic.has(use))
155
+ continue;
156
+ if (use === definition) {
157
+ dying.add(value);
158
+ continue;
159
+ }
160
+ // Exceptional region edges are not represented by this CFG.
161
+ if (body.tryRegions.length > 0 || (body.iteratorCloseRegions?.length ?? 0) > 0)
162
+ continue;
163
+ const pending = [...(graph.successors.get(use) ?? [])];
164
+ const visited = new Set();
165
+ let reentered = false;
166
+ while (pending.length > 0) {
167
+ const next = pending.pop();
168
+ if (next === undefined || next === definition || visited.has(next))
169
+ continue;
170
+ if (next === use) {
171
+ reentered = true;
172
+ break;
173
+ }
174
+ visited.add(next);
175
+ pending.push(...(graph.successors.get(next) ?? []));
176
+ }
177
+ if (!reentered)
178
+ dying.add(value);
179
+ }
180
+ return dying;
181
+ };
182
+ /** Last uses of by-value ABI inputs, grouped by formal rather than SSA read. */
183
+ export const ownedFormalInputsOf = (body) => {
184
+ const arguments_ = new Set();
185
+ const conversions = new Set();
186
+ if (body.tryRegions.length > 0 || (body.iteratorCloseRegions?.length ?? 0) > 0)
187
+ return { arguments: arguments_, conversions };
188
+ const parameters = new Map();
189
+ for (const block of body.blocks.values()) {
190
+ for (const operation of block.operations) {
191
+ if (operation.kind === 'parameter' && body.abi?.parameters[operation.ordinal]?.ownership !== 'borrowed')
192
+ parameters.set(operation.result.id, operation.ordinal);
193
+ }
194
+ }
195
+ const uses = new Map();
196
+ for (const [blockId, block] of body.blocks) {
197
+ for (const [index, operation] of [...block.operations, block.terminator].entries()) {
198
+ for (const operand of operandsOfIrOperation(operation)) {
199
+ const ordinal = parameters.get(operand.value);
200
+ if (ordinal === undefined)
201
+ continue;
202
+ const readers = uses.get(ordinal) ?? [];
203
+ readers.push({ block: blockId, index, operation, value: operand.value });
204
+ uses.set(ordinal, readers);
205
+ }
206
+ }
207
+ }
208
+ const graph = controlFlowGraphOf(body);
209
+ const cyclic = cyclicBlocksOf(body);
210
+ for (const readers of uses.values()) {
211
+ // A binding write may be a formal-cell alias, not a physical copy. Its
212
+ // subsequent binding reads are outside this direct formal-use census.
213
+ if (readers.some((read) => read.operation.kind === 'binding-write'))
214
+ continue;
215
+ for (const read of readers) {
216
+ if (cyclic.has(read.block))
217
+ continue;
218
+ const operation = read.operation;
219
+ if (readers.length === 1 && (operation.kind === 'call' || operation.kind === 'construct')) {
220
+ if (operation.arguments.some((argument) => argument.value === read.value))
221
+ arguments_.add(read.value);
222
+ }
223
+ if (operation.kind !== 'convert')
224
+ continue;
225
+ const source = operation.source.representation;
226
+ const target = operation.result.representation;
227
+ if (source.kind !== 'optional' || (target.kind !== 'string' && target.kind !== 'class-ref'))
228
+ continue;
229
+ if (cppTypeOf(source.payload) !== cppTypeOf(target))
230
+ continue;
231
+ // Same-block reads may be deferred past this operation by the pure
232
+ // expression scheduler. A different block gives a real ordering boundary.
233
+ if (readers.some((other) => other !== read && other.block === read.block))
234
+ continue;
235
+ const reachable = new Set();
236
+ const pending = [...(graph.successors.get(read.block) ?? [])];
237
+ while (pending.length > 0) {
238
+ const next = pending.pop();
239
+ if (next === undefined || reachable.has(next))
240
+ continue;
241
+ reachable.add(next);
242
+ pending.push(...(graph.successors.get(next) ?? []));
243
+ }
244
+ if (readers.some((other) => reachable.has(other.block)))
245
+ continue;
246
+ conversions.add(operation.result.id);
247
+ }
248
+ }
249
+ return { arguments: arguments_, conversions };
250
+ };
251
+ /**
252
+ * The single decision `emit-narrowing.ts`'s `movedValueText` and
253
+ * `emit-callable.ts`'s stable-borrow-entry check used to make twice, verbatim,
254
+ * against the same two whole-program facts above plus the target's own
255
+ * storage-ownership census (`EmitContext.ownedValues` -- carrier ownership
256
+ * class for a capture is a separate, still target-computed Phase 3 step per
257
+ * a program fact of the IR, not of this one). A dying read moves
258
+ * outright (`buildDyingArgumentIndex`); an SSA-dying temporary
259
+ * (`ownedDyingValuesOf`) moves only once storage ownership is proven, since
260
+ * that census alone cannot tell a physical owner from a borrowed alias.
261
+ */
262
+ export const transferOf = (dyingArguments, ownedValues, ownedDyingValues, value) => (dyingArguments.has(value) || (ownedValues.has(value) && ownedDyingValues.has(value)) ? 'move' : 'retain');
263
+ /**
264
+ * The formal-conversion half of the same pipeline (`ownedFormalInputsOf`'s
265
+ * `conversions`): a dying by-value parameter that reaches its one use through
266
+ * an optional-unwrap `convert` moves at the CONVERT's result, not at a read of
267
+ * the parameter itself -- `emit.ts`'s `emitConvert` is the one renderer that
268
+ * ever sees that result id, so this is keyed by result rather than by operand.
269
+ */
270
+ export const transfersFormalConversion = (consumingFormalConversions, resultValue) => consumingFormalConversions.has(resultValue) ? 'move' : 'retain';
@@ -0,0 +1,25 @@
1
+ import type { DeclarationId, IrValueId } from '../identity/ids.js';
2
+ import { type ComputeOperation, type IrBody, type IrOperand } from './model.js';
3
+ export type TypeQueryOperand = {
4
+ readonly kind: 'tag';
5
+ readonly operand: IrOperand;
6
+ } | {
7
+ readonly kind: 'literal';
8
+ readonly text: string;
9
+ };
10
+ export interface TypeQueryComparison {
11
+ readonly left: TypeQueryOperand;
12
+ readonly right: TypeQueryOperand;
13
+ readonly unequal: boolean;
14
+ }
15
+ /** A typeof result consumed only by equality tests needs its finite type tag,
16
+ * not a constructed string. This is a snapshot at the query's original site,
17
+ * never a new query at the comparison (the input may have changed meanwhile).
18
+ * Native storage is confined to SSA values and private, single-writer cells
19
+ * whose write dominates every read. Any escape invalidates the entire chain.
20
+ * The caller supplies the existing placement/capture proof, not a new census. */
21
+ export declare const typeQueryResultsOf: (body: IrBody, privateCell: (declaration: DeclarationId) => boolean) => {
22
+ readonly values: ReadonlySet<IrValueId>;
23
+ readonly bindings: ReadonlySet<DeclarationId>;
24
+ readonly comparisons: ReadonlyMap<ComputeOperation, TypeQueryComparison>;
25
+ };