@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,108 @@
1
+ import { classStaticMemberOf } from '../projection/fields.js';
2
+ import { representationKey } from '../representation/model.js';
3
+ /**
4
+ * Which class of a `constructor-family`'s members owns `key`'s static storage.
5
+ *
6
+ * The one selection rule, so the census and every later lookup name the same
7
+ * class for the same receiver. A key no static member declares is the
8
+ * assignment-only idiom and belongs to the first member that could hold it. A
9
+ * declared static FIELD has the same storage requirement, since its
10
+ * class-lifecycle event has already become an ordinary `set` at the exact
11
+ * evaluation point. Methods and accessors remain callable members and must not
12
+ * acquire a second storage location.
13
+ */
14
+ export const staticFieldOwnerOf = (classes, members, key) => {
15
+ const member = members.find((candidate) => {
16
+ if (!classes.has(candidate))
17
+ return false;
18
+ const site = classStaticMemberOf(classes, candidate, key);
19
+ return site === null || site.kind === 'field';
20
+ });
21
+ // Through `staticOwner`: the physical layouts of one generic are several
22
+ // structs and ONE constructor object, so `Box.count` is one cell whether it
23
+ // is written inside `Box<number>`'s constructor, inside `Box<string>`'s,
24
+ // or through the class binding itself. Keying storage on the struct would
25
+ // give one `count` per layout, and `Box.count` would read whichever the
26
+ // last write happened to land in.
27
+ return member === undefined ? undefined : staticStorageOwnerOf(classes, member);
28
+ };
29
+ /** The class one class's static storage lives in: itself, or the generic root whose layouts it is one of. */
30
+ export const staticStorageOwnerOf = (classes, declaration) => classes.get(declaration)?.staticOwner ?? declaration;
31
+ /** The carrier `ClassName.KEY` is stored in, or null when the census proved none. */
32
+ export const staticFieldSlotOf = (census, classes, members, key) => {
33
+ const owner = staticFieldOwnerOf(classes, members, key);
34
+ return owner === undefined ? null : (census.slots.get(owner)?.get(key) ?? null);
35
+ };
36
+ export const censusClassStaticFieldSlots = (bodies, classes) => {
37
+ const byDeclaration = new Map();
38
+ const conflicts = new Set();
39
+ const declaredFields = new Set();
40
+ for (const [declaration, layout] of classes) {
41
+ // Keyed by the storage owner, which for one physical layout of a generic
42
+ // is the root every layout shares; the layouts carry identical static
43
+ // members, so the repeats agree by construction.
44
+ const owner = staticStorageOwnerOf(classes, declaration);
45
+ for (const field of layout.staticFields) {
46
+ if (field.representation === null || field.representation.kind === 'unresolved' || field.representation.kind === 'void')
47
+ continue;
48
+ const perClass = byDeclaration.get(owner) ?? new Map();
49
+ byDeclaration.set(owner, perClass);
50
+ perClass.set(field.key, field.representation);
51
+ declaredFields.add(`${owner}.${field.key}`);
52
+ }
53
+ }
54
+ for (const body of bodies) {
55
+ // Whole-body first pass: a `constant` operation feeding a later block's
56
+ // key is exactly as legitimate as one in the same block, and a single
57
+ // forward-only scan would miss it across a back edge.
58
+ const constants = new Map();
59
+ for (const blockId of body.blockOrder) {
60
+ const block = body.blocks.get(blockId);
61
+ if (!block)
62
+ continue;
63
+ for (const operation of block.operations)
64
+ if (operation.kind === 'constant')
65
+ constants.set(operation.result.id, operation.text);
66
+ }
67
+ for (const blockId of body.blockOrder) {
68
+ const block = body.blocks.get(blockId);
69
+ if (!block)
70
+ continue;
71
+ for (const operation of block.operations) {
72
+ if (operation.kind !== 'set' && operation.kind !== 'define-own-property')
73
+ continue;
74
+ const receiver = operation.receiver.representation;
75
+ if (receiver.kind !== 'constructor-family')
76
+ continue;
77
+ const key = constants.get(operation.key.value);
78
+ if (key === undefined)
79
+ continue;
80
+ const declaration = staticFieldOwnerOf(classes, receiver.members, key);
81
+ if (declaration === undefined)
82
+ continue;
83
+ const representation = operation.value.representation;
84
+ const perClass = byDeclaration.get(declaration) ?? new Map();
85
+ byDeclaration.set(declaration, perClass);
86
+ const existing = perClass.get(key);
87
+ const conflictId = `${declaration}.${key}`;
88
+ if (conflicts.has(conflictId))
89
+ continue;
90
+ if (existing !== undefined) {
91
+ // A declared field's own carrier is the storage authority. Each
92
+ // write is converted against it by the property emitter; differing
93
+ // source carriers such as `Uint8Array` stored into
94
+ // `Uint8Array | null` are expected and do not redefine the cell.
95
+ if (declaredFields.has(conflictId))
96
+ continue;
97
+ if (representationKey(existing) === representationKey(representation))
98
+ continue;
99
+ perClass.delete(key);
100
+ conflicts.add(conflictId);
101
+ continue;
102
+ }
103
+ perClass.set(key, representation);
104
+ }
105
+ }
106
+ }
107
+ return { slots: byDeclaration, conflicts: [...conflicts] };
108
+ };
@@ -0,0 +1,26 @@
1
+ import type { CallableAbi, Representation } from '../representation/model.js';
2
+ import type { ClassLayout } from '../projection/classes.js';
3
+ import type { ConstructOperation, IrBody } from './model.js';
4
+ import type { ConversionCensus } from '../conversion/nodes.js';
5
+ /** The allocation owns the receiver; explicit arguments and result use its construct ABI. */
6
+ export declare const constructMatchesAbi: (operation: ConstructOperation, abi: CallableAbi, conversions?: Pick<ConversionCensus, "nodeById">) => boolean;
7
+ /** The class allocation supplies this receiver before entering the source constructor. */
8
+ export declare const classConstructorBodyMatches: (layout: ClassLayout, body: IrBody) => boolean;
9
+ /** The native ordinary construct thunk allocates its receiver and forwards
10
+ * the construct frame into the source body. An explicit return needs its own
11
+ * entry proof. A void body or an authenticated return of this preserves the
12
+ * allocated receiver; a matching return type alone does not prove identity. */
13
+ export declare const ordinaryConstructBodyMatches: (operation: ConstructOperation, body: Pick<IrBody, "sourceOwner" | "abi" | "construct" | "blocks">, conversions?: Pick<ConversionCensus, "nodeById">) => boolean;
14
+ /** Allocation and body entry must share one native receiver representation.
15
+ * Both provenance and the construct thunk consume this same admission. */
16
+ export declare const nativeOrdinaryConstructInstanceMatches: (abi: CallableAbi, instance: Representation) => instance is Extract<Representation, {
17
+ kind: "record" | "record-with-index" | "native-record-ref";
18
+ }>;
19
+ /**
20
+ * Publish the call entry used by a receiver-free ordinary constructor that
21
+ * always returns an object. The semantic target authenticates [[Construct]];
22
+ * the carrier alone cannot distinguish ordinary functions from arrows. Both
23
+ * the body and the held closure must agree on the entry convention. Keeping
24
+ * the invocation indirect preserves the actual closure's captures.
25
+ */
26
+ export declare const explicitObjectConstructEntryOf: (operation: ConstructOperation, bodyAbi: CallableAbi | null) => ConstructOperation["entry"];
@@ -0,0 +1,117 @@
1
+ import { abiKey, representationKey } from '../representation/model.js';
2
+ import { nativeArgumentsMatch } from './call-entry.js';
3
+ /** The allocation owns the receiver; explicit arguments and result use its construct ABI. */
4
+ export const constructMatchesAbi = (operation, abi, conversions) => abi.receiver === null &&
5
+ representationKey(operation.result.representation) === representationKey(abi.result) &&
6
+ nativeArgumentsMatch(abi, operation.arguments, conversions);
7
+ /** The class allocation supplies this receiver before entering the source constructor. */
8
+ export const classConstructorBodyMatches = (layout, body) => {
9
+ const abi = body.abi;
10
+ const construct = layout.construct;
11
+ return (abi !== null &&
12
+ abi.result.kind === 'void' &&
13
+ layout.instance !== null &&
14
+ abi.receiver !== null &&
15
+ representationKey(abi.receiver) === representationKey(layout.instance) &&
16
+ construct !== null &&
17
+ construct.receiver === null &&
18
+ abi.restFrom === construct.restFrom &&
19
+ abi.parameters.length === construct.parameters.length &&
20
+ abi.parameters.every((parameter, index) => representationKey(parameter.value) === representationKey(construct.parameters[index].value)));
21
+ };
22
+ /** The native ordinary construct thunk allocates its receiver and forwards
23
+ * the construct frame into the source body. An explicit return needs its own
24
+ * entry proof. A void body or an authenticated return of this preserves the
25
+ * allocated receiver; a matching return type alone does not prove identity. */
26
+ export const ordinaryConstructBodyMatches = (operation, body, conversions) => {
27
+ const { abi, construct } = body;
28
+ const callee = operation.callee.representation;
29
+ const target = operation.target;
30
+ if (abi === null ||
31
+ construct === null ||
32
+ callee.kind !== 'function-and-constructor' ||
33
+ operation.callee.value !== operation.newTarget.value ||
34
+ target.kind !== 'exact' ||
35
+ target.target.kind !== 'function' ||
36
+ !target.target.constructable ||
37
+ target.target.functionId !== body.sourceOwner ||
38
+ abiKey(callee.call) !== abiKey(abi) ||
39
+ abiKey(callee.construct) !== abiKey(construct) ||
40
+ abiKey({ ...abi, receiver: null, result: construct.result }) !== abiKey(construct) ||
41
+ !constructMatchesAbi(operation, construct, conversions))
42
+ return false;
43
+ if (abi.result.kind !== 'void') {
44
+ if (abi.receiver === null || representationKey(abi.result) !== representationKey(abi.receiver))
45
+ return false;
46
+ const receivers = new Set([...body.blocks.values()].flatMap((block) => block.operations.flatMap((operation) => (operation.kind === 'receiver' ? [operation.result.id] : []))));
47
+ const returns = [...body.blocks.values()].flatMap((block) => (block.terminator.kind === 'return' ? [block.terminator] : []));
48
+ if (returns.length === 0 || returns.some((operation) => operation.value === null || !receivers.has(operation.value.value)))
49
+ return false;
50
+ }
51
+ return nativeOrdinaryConstructInstanceMatches(abi, construct.result);
52
+ };
53
+ /** Allocation and body entry must share one native receiver representation.
54
+ * Both provenance and the construct thunk consume this same admission. */
55
+ export const nativeOrdinaryConstructInstanceMatches = (abi, instance) => {
56
+ return ((instance.kind === 'record' || instance.kind === 'record-with-index' || instance.kind === 'native-record-ref') &&
57
+ (instance.ownership === 'owned' || instance.ownership === 'shared-refcount') &&
58
+ (abi.receiver === null || representationKey(abi.receiver) === representationKey(instance)));
59
+ };
60
+ /** ECMA-262 ordinary [[Construct]] uses an explicit Object return instead of its receiver. */
61
+ const alwaysReturnsObject = (representation) => {
62
+ switch (representation.kind) {
63
+ case 'array-buffer':
64
+ case 'shared-array-buffer':
65
+ case 'array-object':
66
+ case 'class-ref':
67
+ case 'constructor-family':
68
+ case 'constructor-value-dispatch':
69
+ case 'data-view':
70
+ case 'dense-buffer':
71
+ case 'dictionary':
72
+ case 'function':
73
+ case 'function-and-constructor':
74
+ case 'function-family':
75
+ case 'function-value-dispatch':
76
+ case 'generic-function-set':
77
+ case 'iterator':
78
+ case 'keyed-collection':
79
+ case 'native-handle':
80
+ case 'native-record-ref':
81
+ case 'native-sequence':
82
+ case 'promise':
83
+ case 'proxy-object':
84
+ case 'record':
85
+ case 'record-with-index':
86
+ case 'typed-array':
87
+ return true;
88
+ case 'function-value-family':
89
+ return !representation.optional;
90
+ case 'tagged-union':
91
+ return representation.arms.length > 0 && representation.arms.every((arm) => alwaysReturnsObject(arm.value));
92
+ default:
93
+ return false;
94
+ }
95
+ };
96
+ /**
97
+ * Publish the call entry used by a receiver-free ordinary constructor that
98
+ * always returns an object. The semantic target authenticates [[Construct]];
99
+ * the carrier alone cannot distinguish ordinary functions from arrows. Both
100
+ * the body and the held closure must agree on the entry convention. Keeping
101
+ * the invocation indirect preserves the actual closure's captures.
102
+ */
103
+ export const explicitObjectConstructEntryOf = (operation, bodyAbi) => {
104
+ const callee = operation.callee.representation;
105
+ const target = operation.target;
106
+ if (operation.newTarget.value !== operation.callee.value ||
107
+ callee.kind !== 'function-value-dispatch' ||
108
+ target.kind !== 'exact' ||
109
+ target.target.kind !== 'function' ||
110
+ !target.target.constructable ||
111
+ bodyAbi === null ||
112
+ callee.abi.receiver !== null ||
113
+ !alwaysReturnsObject(callee.abi.result) ||
114
+ representationKey(callee) !== representationKey({ kind: 'function-value-dispatch', abi: bodyAbi }))
115
+ return undefined;
116
+ return { kind: 'explicit-object-return', functionId: target.target.functionId, abi: bodyAbi };
117
+ };
@@ -0,0 +1,90 @@
1
+ import type { IrValueId } from '../identity/ids.js';
2
+ import type { ConstructOperation, GetOperation, IrBody, IrNonTerminatorOperation } from './model.js';
3
+ /**
4
+ * Which results nothing reads, and whose operations may therefore render
5
+ * nothing at all.
6
+ *
7
+ * The IR is three-address form and every producer publishes a result, whether
8
+ * or not the program goes on to read it. A component's render body reads a
9
+ * field the plugin then re-reads through a reactive thunk; a key literal is
10
+ * spelled inline by the member access it keys; a callee that is only ever
11
+ * called by name never needs the function object built for it. Each of those
12
+ * left a statement behind -- `v20 = gea_this->cities;` with no reader,
13
+ * `v13 = "length";`, `v7 = gea::CallableObject<...>{&body, nullptr};` --
14
+ * which the C++ compiler may or may not remove (a `Ref` copy is an atomic
15
+ * increment it may not) and which a reader of the output has to prove dead
16
+ * by hand. `examples/apps/weather` carried 142 unread literal temporaries and
17
+ * 18 unread field reads in one unit.
18
+ *
19
+ * Deletion is a fixed point: an operation whose only reader was itself dead
20
+ * becomes dead in turn, so a chain of pure operations feeding one unread
21
+ * value disappears whole.
22
+ *
23
+ * Only an operation that neither writes nor runs program code may go. The
24
+ * whitelist is by kind, with three exceptions decided per operation:
25
+ *
26
+ * - a `get` is a pure load off an Array, a string, or a record field with no
27
+ * accessor, and a call into the program through an accessor -- the emitter
28
+ * answers which, since it alone knows the receiver's layout;
29
+ * - `compute` and `convert` are arithmetic on primitives and `ToPrimitive`
30
+ * (which runs `valueOf`) on anything else, so they qualify only over
31
+ * primitive operands;
32
+ * - `test` is a comparison, pure on every carrier but the boxed one, where it
33
+ * may reach `valueOf` through loose equality.
34
+ *
35
+ * A `call` reads its callee -- unless the emitter reaches the body by name,
36
+ * in which case the callee's carrier is never spelled. `directCallee` says
37
+ * which producers those are (see `targets/cpp/emit-context.ts`'s
38
+ * `directCallees`), so a function object that exists only to be called
39
+ * directly counts as unread. The name itself is registered up front for
40
+ * every callee `ir/call-dispatch.ts`'s `CallOperation.target` resolved
41
+ * (`emit.ts`'s `emitBody`), independent of whether this producer ends up
42
+ * dead -- what `emit.ts` still has to do where it skips the dead operation is
43
+ * only the handful of side effects genuinely tied to the skipped RENDER
44
+ * itself (a reactive thunk's stashed value, a method read's stashed
45
+ * receiver), never the direct-callee name.
46
+ */
47
+ export interface DeadValueRules {
48
+ /** Whether this member read is a plain load rather than a call into the program. `key` is the IR's own text for a string-literal key, or `null`. */
49
+ readonly pureGet: (operation: GetOperation, key: string | null) => boolean;
50
+ /** Whether a call through this producer's result reaches the body by name, never spelling the carrier. */
51
+ readonly directCallee: (producer: IrNonTerminatorOperation) => boolean;
52
+ /** Whether a construction through this producer reaches the class constructor by name, never spelling the carrier. */
53
+ readonly directConstructor: (producer: IrNonTerminatorOperation) => boolean;
54
+ /**
55
+ * Whether constructing this operation's result has no consequence anything
56
+ * else can observe -- `ir/instantiation.ts`'s
57
+ * `classesConstructedUnobservably`, asked of the class the result carries.
58
+ */
59
+ readonly pureConstruct: (operation: ConstructOperation) => boolean;
60
+ /**
61
+ * Whether the body this call reaches never names its receiver, so the
62
+ * receiver operand is not a read of it.
63
+ *
64
+ * A stateless gea component is the case: its render ignores `this`, but the
65
+ * call still has to hand it one, so a `construct` runs to manufacture a
66
+ * receiver nothing looks at. Combined with `pureConstruct`, that whole
67
+ * construction goes. The emitter then spells a default-constructed receiver
68
+ * at the call, because the callee's SIGNATURE still declares the formal --
69
+ * this drops the argument's value, not the parameter.
70
+ */
71
+ readonly ignoresReceiver: (callee: IrNonTerminatorOperation | undefined) => boolean;
72
+ }
73
+ /** Every string-literal constant's text by value, for member-read purity: a `get` keyed by `"width"` is asked about the member `width`. */
74
+ export declare const stringConstantsOf: (body: IrBody) => ReadonlyMap<IrValueId, string>;
75
+ /** Every boolean-literal constant by value, so a branch on one renders as the jump it is. */
76
+ export declare const booleanConstantsOf: (body: IrBody) => ReadonlyMap<IrValueId, boolean>;
77
+ /**
78
+ * Results no later operation or terminator reads, including effectful
79
+ * producers whose operation must remain.
80
+ *
81
+ * `deadValuesOf` is deliberately narrower: it identifies whole operations
82
+ * the emitter may delete. A call with an unread result is different. The call
83
+ * still runs, but assigning its return value into a temporary pays carrier
84
+ * work that the source program never observes (a returned `Ref`, for example,
85
+ * performs reference-count traffic). Keeping this census separate prevents
86
+ * an effectful operation from ever being mistaken for a deletable one while
87
+ * still letting its backend discard the C++ return value directly.
88
+ */
89
+ export declare const unreadValuesOf: (body: IrBody) => ReadonlySet<IrValueId>;
90
+ export declare const deadValuesOf: (body: IrBody, rules: DeadValueRules) => ReadonlySet<IrValueId>;
@@ -0,0 +1,184 @@
1
+ import { arrayAllocationDrainsDynamicIterator, operandsOfIrOperation, resultOfIrOperation } from './queries.js';
2
+ const alwaysPureKinds = new Set([
3
+ 'constant',
4
+ 'binding-read',
5
+ 'parameter',
6
+ 'receiver',
7
+ 'has-property',
8
+ 'allocate-callable',
9
+ 'allocate-constructor',
10
+ 'phi'
11
+ ]);
12
+ const primitiveKinds = new Set(['scalar', 'string', 'null', 'undefined', 'symbol']);
13
+ const isPrimitive = (operand) => primitiveKinds.has(operand.representation.kind);
14
+ const isEffectFree = (operation, rules, keyTextOf) => {
15
+ if (alwaysPureKinds.has(operation.kind))
16
+ return true;
17
+ // A `gather` element drains a genuinely dynamic iterator, which can invoke
18
+ // a user-defined method -- see `queries.ts`'s
19
+ // `arrayAllocationDrainsDynamicIterator`. An ordinary literal or a native
20
+ // `spread` range-copy stays pure; only that one arm is not "read nothing,
21
+ // run nothing" the way this operation is for every other array shape.
22
+ if (operation.kind === 'allocate-array-object')
23
+ return !arrayAllocationDrainsDynamicIterator(operation);
24
+ if (operation.kind === 'get')
25
+ return rules.pureGet(operation, keyTextOf(operation.key));
26
+ if (operation.kind === 'compute' &&
27
+ (operation.form === 'require-object-coercible' ||
28
+ operation.form === 'require-iterable-present' ||
29
+ operation.form === 'require-tagged-union-arm'))
30
+ return false;
31
+ if (operation.kind === 'compute' || operation.kind === 'convert')
32
+ return operandsOfIrOperation(operation).every(isPrimitive);
33
+ if (operation.kind === 'test')
34
+ return operandsOfIrOperation(operation).every((operand) => operand.representation.kind !== 'dynamic');
35
+ if (operation.kind === 'construct')
36
+ return rules.pureConstruct(operation);
37
+ return false;
38
+ };
39
+ /** Every string-literal constant's text by value, for member-read purity: a `get` keyed by `"width"` is asked about the member `width`. */
40
+ export const stringConstantsOf = (body) => {
41
+ const texts = new Map();
42
+ for (const block of body.blocks.values()) {
43
+ for (const operation of block.operations) {
44
+ if (operation.kind === 'constant' && operation.literal === 'string')
45
+ texts.set(operation.result.id, operation.text);
46
+ }
47
+ }
48
+ return texts;
49
+ };
50
+ /** Every boolean-literal constant by value, so a branch on one renders as the jump it is. */
51
+ export const booleanConstantsOf = (body) => {
52
+ const known = new Map();
53
+ for (const block of body.blocks.values()) {
54
+ for (const operation of block.operations) {
55
+ if (operation.kind === 'constant' && operation.literal === 'boolean')
56
+ known.set(operation.result.id, operation.text === 'true');
57
+ }
58
+ }
59
+ return known;
60
+ };
61
+ /**
62
+ * Results no later operation or terminator reads, including effectful
63
+ * producers whose operation must remain.
64
+ *
65
+ * `deadValuesOf` is deliberately narrower: it identifies whole operations
66
+ * the emitter may delete. A call with an unread result is different. The call
67
+ * still runs, but assigning its return value into a temporary pays carrier
68
+ * work that the source program never observes (a returned `Ref`, for example,
69
+ * performs reference-count traffic). Keeping this census separate prevents
70
+ * an effectful operation from ever being mistaken for a deletable one while
71
+ * still letting its backend discard the C++ return value directly.
72
+ */
73
+ export const unreadValuesOf = (body) => {
74
+ const produced = new Set();
75
+ const read = new Set();
76
+ for (const block of body.blocks.values()) {
77
+ for (const operation of block.operations) {
78
+ const result = resultOfIrOperation(operation);
79
+ if (result !== null)
80
+ produced.add(result.id);
81
+ for (const operand of operandsOfIrOperation(operation))
82
+ read.add(operand.value);
83
+ }
84
+ for (const operand of operandsOfIrOperation(block.terminator))
85
+ read.add(operand.value);
86
+ }
87
+ for (const region of body.iteratorCloseRegions ?? [])
88
+ read.add(region.iterator.value);
89
+ return new Set([...produced].filter((value) => !read.has(value)));
90
+ };
91
+ export const deadValuesOf = (body, rules) => {
92
+ const producers = new Map();
93
+ const readers = new Map();
94
+ const count = (value, by) => {
95
+ readers.set(value, (readers.get(value) ?? 0) + by);
96
+ };
97
+ // A call/construct's callee is read by the operation -- except when the body
98
+ // is reached by name, in which case the carrier is never spelled and its
99
+ // producer is as unread as if the invocation were not there. Guarded on the
100
+ // operand being non-optional: `f?.()` unwraps an `Optional` first, and the
101
+ // call site spells THAT value, not the one the producer published.
102
+ const readsOf = (operation) => {
103
+ const operands = operandsOfIrOperation(operation);
104
+ if (operation.kind === 'construct') {
105
+ const producer = producers.get(operation.callee.value);
106
+ if (operation.callee.representation.kind !== 'optional' && producer !== undefined && rules.directConstructor(producer)) {
107
+ // An ordinary `new C()` publishes C as both [[Construct]]'s callee and
108
+ // its newTarget. The named constructor path spells neither carrier;
109
+ // filtering by value drops both roles when they are that same value,
110
+ // while a distinct Reflect.construct newTarget remains a real read.
111
+ return operands.filter((operand) => operand.value !== operation.callee.value);
112
+ }
113
+ return operands;
114
+ }
115
+ if (operation.kind !== 'call')
116
+ return operands;
117
+ const producer = producers.get(operation.callee.value);
118
+ const ignored = new Set();
119
+ // The callee is read unless the body is reached by name. Guarded on the
120
+ // operand being the callee itself: `f?.()` unwraps an `Optional` first, and
121
+ // the call site spells THAT value, not the one the producer published.
122
+ // A producer may name a body directly while a later conversion exposes it
123
+ // as a boxed dynamic callable. That call necessarily reads the box through
124
+ // `callAsFunction`; deleting the producer under the direct-body rule leaves
125
+ // the emitter with a real callee use and no definition. The callable's
126
+ // carrier at THIS call site decides whether the value is spelled.
127
+ if (operation.callee.representation.kind !== 'optional' &&
128
+ operation.callee.representation.kind !== 'dynamic' &&
129
+ producer !== undefined &&
130
+ rules.directCallee(producer))
131
+ ignored.add(operation.callee);
132
+ if (operation.receiver !== null && rules.ignoresReceiver(producer))
133
+ ignored.add(operation.receiver);
134
+ if (ignored.size === 0)
135
+ return operands;
136
+ return operands.filter((operand) => !ignored.has(operand));
137
+ };
138
+ for (const block of body.blocks.values()) {
139
+ for (const operation of block.operations) {
140
+ const result = resultOfIrOperation(operation);
141
+ if (result !== null)
142
+ producers.set(result.id, operation);
143
+ }
144
+ }
145
+ for (const block of body.blocks.values()) {
146
+ for (const operation of block.operations)
147
+ for (const operand of readsOf(operation))
148
+ count(operand.value, 1);
149
+ for (const operand of operandsOfIrOperation(block.terminator))
150
+ count(operand.value, 1);
151
+ }
152
+ for (const region of body.iteratorCloseRegions ?? [])
153
+ count(region.iterator.value, 1);
154
+ const strings = stringConstantsOf(body);
155
+ const keyTextOf = (operand) => strings.get(operand.value) ?? null;
156
+ const pure = (value) => {
157
+ const producer = producers.get(value);
158
+ return producer !== undefined && isEffectFree(producer, rules, keyTextOf);
159
+ };
160
+ const dead = new Set();
161
+ const pending = [...producers.keys()].filter((value) => (readers.get(value) ?? 0) === 0 && pure(value));
162
+ while (pending.length > 0) {
163
+ const value = pending.pop();
164
+ if (value === undefined || dead.has(value))
165
+ continue;
166
+ dead.add(value);
167
+ const producer = producers.get(value);
168
+ if (producer === undefined)
169
+ continue;
170
+ for (const operand of readsOf(producer)) {
171
+ // A direct class-method read is deleted as a materialized callable, but
172
+ // its receiver is retained beside the result for the later direct call.
173
+ // The call therefore still reads this operand even though it does not
174
+ // read the method carrier. Decrementing it here can delete the receiver
175
+ // and leave the direct call naming an SSA value with no definition.
176
+ if (producer.kind === 'get' && rules.directCallee(producer) && operand === producer.receiver)
177
+ continue;
178
+ count(operand.value, -1);
179
+ if (readers.get(operand.value) === 0 && pure(operand.value))
180
+ pending.push(operand.value);
181
+ }
182
+ }
183
+ return dead;
184
+ };
@@ -0,0 +1,99 @@
1
+ import type { DeclarationId, IrValueId } from '../identity/ids.js';
2
+ import type { BindingReadOperation, BindingWriteOperation, CallOperation, ConstructOperation, GetOperation, IrBody, IrOperand, ReturnOperation, SetOperation } from './model.js';
3
+ /**
4
+ * The consumers a forwarded call may land in. Every one of them is audited to
5
+ * spell the forwarded operand ONCE per executed path -- an operand a renderer
6
+ * spells twice would run the call twice -- and the target's policy narrows
7
+ * each further to the renderings it can vouch for (`ForwardingPolicy`).
8
+ */
9
+ export type CallSink = CallOperation | ConstructOperation | SetOperation | BindingWriteOperation | ReturnOperation;
10
+ /**
11
+ * What only the target can answer about a forwarding: which of its renderers
12
+ * spell an operand exactly once, and which cells are private enough to lose.
13
+ */
14
+ export interface ForwardingPolicy {
15
+ /**
16
+ * Whether the target's rendering of `consumer` spells `value` exactly once
17
+ * on every path, with no conversion that could spell it again. The census
18
+ * has already established that `value` is the consumer's argument, stored
19
+ * element, written value or returned value, that nothing sits between the
20
+ * two, and -- for an Array element store -- that the element carrier is the
21
+ * value's own.
22
+ */
23
+ readonly forwardsCallInto: (consumer: CallSink, value: IrOperand) => boolean;
24
+ /**
25
+ * Whether `write`'s cell is a private local of this body -- unboxed,
26
+ * captured by nothing, holding exactly the carrier both the write and
27
+ * `read` carry -- so that the one write may render nothing and the one
28
+ * read may spell the written value. Integer-narrowed and type-query cells
29
+ * are excluded by the census itself, which owns both of those facts.
30
+ */
31
+ readonly forwardsBinding: (write: BindingWriteOperation, read: BindingReadOperation) => boolean;
32
+ }
33
+ export declare const noForwarding: ForwardingPolicy;
34
+ /** A cell whose one write renders nothing and whose one read spells `value` instead: see `deferrableValuesOf`. */
35
+ export interface ForwardedBinding {
36
+ readonly value: IrOperand;
37
+ readonly read: IrValueId;
38
+ }
39
+ /**
40
+ * Which values may render at their single use instead of into a temporary of
41
+ * their own.
42
+ *
43
+ * The IR is three-address form, and for a `double` that costs nothing: the C++
44
+ * compiler propagates the copy away. For a `std::shared_ptr` it is an atomic
45
+ * increment and a matching decrement, and for a `std::string` it is a heap
46
+ * allocation -- neither of which any optimizer may remove, because both are
47
+ * observable through the refcount and the allocator. An array indexed in a
48
+ * loop was paying one atomic pair per iteration purely to name the array the
49
+ * cell was already holding.
50
+ *
51
+ * Four conditions, and each one is load-bearing. Compound sum conversions
52
+ * additionally retain their named result to bound composition of projections:
53
+ *
54
+ * 1. exactly one use, so the expression is not evaluated twice;
55
+ * 2. that use in the same block, so no `goto` can reach the use without
56
+ * passing the definition;
57
+ * 3. the defining operation side-effect-free (`isDeferrableOperation`); and
58
+ * 4. every operation between the two also deferred.
59
+ *
60
+ * (4) is what makes (3) sufficient. Everything between the definition and the
61
+ * use emitted no statement of its own, so the window contains no write at all
62
+ * -- which is why the order these reads end up in inside the use's own
63
+ * expression, which C++ leaves unspecified for most operators, cannot be
64
+ * observed by the program.
65
+ *
66
+ * Two forwardings ride on the same census, each with a narrower proof:
67
+ *
68
+ * - a `call`, `construct` or `allocate-callable` result whose single reader
69
+ * is the IMMEDIATELY following operation (`forwardableProducerKinds`,
70
+ * `callSinkOf`): no window, so nothing is crossed, and the producer keeps
71
+ * bounding everyone else's windows;
72
+ * - a cell written once and read once in one block, the read itself
73
+ * deferrable, every operation between the two effect-free, and the read
74
+ * consumed where it is copied or called rather than borrowed
75
+ * (`forwardedReadPositionAllowed`): the write renders nothing and the read
76
+ * spells the written value (`forwardedBindings`).
77
+ *
78
+ * The target's `ForwardingPolicy` has the last word on both, because both
79
+ * depend on how a renderer spells its operand and on whose storage a cell is.
80
+ *
81
+ * A use recorded for a merge (`phi`) belongs to the PREDECESSOR block at the
82
+ * position `emitBody` writes merges at -- after that block's operations and
83
+ * before its terminator -- not to the block the phi is written in. Recording
84
+ * it where the phi sits would let a value move across the whole block.
85
+ */
86
+ /**
87
+ * `pureGet` widens the `get` rule past Arrays and strings to whatever the
88
+ * emitter can prove is a plain field load (`emit-properties.ts`'s
89
+ * `isPlainMemberRead`): `v20 = gea_this->cities; if (b0 < v20->length())`
90
+ * is a `Ref` copy -- an atomic pair -- made only to name the field once, and
91
+ * with the read deferred the comparison spells the field itself. The default
92
+ * refuses every such read, which is the answer the census gave before it was
93
+ * asked.
94
+ */
95
+ export declare const deferrableValuesOf: (body: IrBody, pureGet?: (operation: GetOperation) => boolean, forwarding?: ForwardingPolicy) => {
96
+ readonly values: Set<IrValueId>;
97
+ readonly consumedByCall: Set<IrValueId>;
98
+ readonly forwardedBindings: Map<DeclarationId, ForwardedBinding>;
99
+ };