@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,409 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ import { operandsOfIrOperation, resultOfIrOperation } from './queries.js';
3
+ /**
4
+ * Which values render at their use instead of into a temporary of their own.
5
+ *
6
+ * A value with exactly one use, produced by an operation whose whole emitted
7
+ * form is one side-effect-free expression, does not need storage: the text can
8
+ * stand where the use stands. It lives here, beside the loop censuses, because
9
+ * it is a question about the IR -- what an operation reads and how many places
10
+ * read its result -- and not about C++.
11
+ */
12
+ /**
13
+ * The operation kinds whose emitted statement is a side-effect-free
14
+ * expression.
15
+ *
16
+ * Not "cheap" and not "small": the question is whether moving the statement
17
+ * later, past other statements this census has also withheld, could be
18
+ * observed. A read of a cell, a formal, a literal, an arithmetic result, a
19
+ * conversion and a fresh Array are all answers about state nothing in the
20
+ * window changes. Every kind that writes -- `binding-write`, `set`,
21
+ * `define-own-property`, `delete` -- and every kind that can run a program's
22
+ * own code -- `call`, `construct`, `await`, `yield`, the iterator protocol,
23
+ * the JSX element builders -- is absent, so no deferred read is ever moved
24
+ * across an effect.
25
+ *
26
+ * `get` is the one kind decided per operation rather than by name, because it
27
+ * spells two different things: an index or `length` read off an Array or a
28
+ * string is a pure load, and a member read off anything else may reach a
29
+ * program-defined accessor. The narrow answer is the conservative one -- a
30
+ * receiver this census cannot prove pure simply keeps its temporary, which
31
+ * costs a copy and never correctness.
32
+ */
33
+ const deferrableOperationKinds = new Set([
34
+ 'constant',
35
+ 'binding-read',
36
+ 'parameter',
37
+ 'receiver',
38
+ 'compute',
39
+ 'test',
40
+ 'convert',
41
+ 'has-property',
42
+ 'allocate-array-object'
43
+ ]);
44
+ /**
45
+ * The producers WITH effects whose result may still render inside the one
46
+ * operation that immediately consumes it.
47
+ *
48
+ * A call's result is an SSA temporary like any other, and where its single
49
+ * reader is the very next operation there is no window at all: nothing is
50
+ * crossed, so the call runs exactly where the IR placed it and only the
51
+ * temporary disappears. That temporary is not free the way a `double` is.
52
+ * `fns[slot] = makeKind(i % 4, i)` built a 32-byte `CallableObject` into a
53
+ * function-scope local, then copied it into the array cell -- two retains,
54
+ * two releases, and a store-forwarding stall on the 16-byte reload of what
55
+ * two 8-byte stores had just written. Rendered as the store's right-hand side
56
+ * the value is move-assigned straight from the call's return slot: the
57
+ * `closure` fixture went from 104 to 63 instructions per iteration.
58
+ *
59
+ * Unlike a pure deferral the producer is NOT marked withheld, so it goes on
60
+ * bounding every other value's window: a read defined before the call and
61
+ * used after it keeps its temporary, exactly as it does today, and C++'s
62
+ * unspecified operand order inside the consumer can never reorder it across
63
+ * the call.
64
+ */
65
+ const forwardableProducerKinds = new Set(['call', 'construct', 'allocate-callable']);
66
+ export const noForwarding = { forwardsCallInto: () => false, forwardsBinding: () => false };
67
+ /**
68
+ * The positions a forwarded call result may occupy in its consumer, decided
69
+ * from the IR alone. An Array element store is admitted only for a stored
70
+ * value already carried as the element's own type: the renderer aligns any
71
+ * other value to the element first, and an alignment is a conversion whose
72
+ * spelling this census does not see.
73
+ */
74
+ const callSinkOf = (consumer, value) => {
75
+ switch (consumer.kind) {
76
+ case 'call':
77
+ case 'construct': {
78
+ const operand = consumer.arguments.find((argument) => argument.value === value);
79
+ return operand === undefined ? null : { sink: consumer, operand };
80
+ }
81
+ case 'set': {
82
+ if (consumer.value.value !== value || consumer.typedComputedWrite !== undefined)
83
+ return null;
84
+ const receiver = consumer.receiver.representation;
85
+ if (receiver.kind !== 'array-object' || consumer.key.representation.kind !== 'scalar')
86
+ return null;
87
+ if (representationKey(receiver.element) !== representationKey(consumer.value.representation))
88
+ return null;
89
+ return { sink: consumer, operand: consumer.value };
90
+ }
91
+ case 'binding-write':
92
+ return consumer.value.value === value ? { sink: consumer, operand: consumer.value } : null;
93
+ case 'return':
94
+ return consumer.value !== null && consumer.value.value === value ? { sink: consumer, operand: consumer.value } : null;
95
+ default:
96
+ return null;
97
+ }
98
+ };
99
+ /** The carriers `gea::CallableObject` physically holds, whose every call path retains the environment it runs. */
100
+ const callableObjectCarrierKinds = new Set([
101
+ 'function',
102
+ 'function-value-dispatch',
103
+ 'function-and-constructor'
104
+ ]);
105
+ /**
106
+ * Where a forwarded binding's one read may be consumed.
107
+ *
108
+ * The read no longer copies out of a cell that holds its own count, so a
109
+ * consumer that BORROWS the value for the duration of a call -- a receiver
110
+ * or argument passed by reference -- would borrow the array slot or field the
111
+ * written expression names, and the callee may overwrite that slot while the
112
+ * reference is live. Every admitted position either copies the value (a
113
+ * store, a return, a cell write), reads it before anything else runs (an
114
+ * arithmetic operand, a plain member load) or is the CALLEE of a call, where
115
+ * `CallableObject::call` retains the environment it is about to run for
116
+ * exactly this reason.
117
+ */
118
+ const forwardedReadPositionAllowed = (consumer, read, representation, pureGet) => {
119
+ switch (consumer.kind) {
120
+ case 'call':
121
+ return consumer.callee.value === read && callableObjectCarrierKinds.has(representation.kind);
122
+ case 'compute':
123
+ case 'test':
124
+ case 'binding-write':
125
+ case 'return':
126
+ return true;
127
+ case 'get': {
128
+ if (consumer.key.value === read)
129
+ return true;
130
+ if (consumer.receiver.value !== read)
131
+ return false;
132
+ const receiver = consumer.receiver.representation.kind;
133
+ return receiver === 'array-object' || receiver === 'string' || pureGet(consumer);
134
+ }
135
+ case 'set':
136
+ return consumer.key.value === read || consumer.value.value === read;
137
+ default:
138
+ return false;
139
+ }
140
+ };
141
+ /** A conversion over alternatives can inspect its input once per arm. */
142
+ const carriesAlternatives = (representation) => {
143
+ if (representation.kind === 'optional')
144
+ return carriesAlternatives(representation.payload);
145
+ if (representation.kind === 'borrowed-ref')
146
+ return carriesAlternatives(representation.referent);
147
+ return representation.kind === 'tagged-union';
148
+ };
149
+ const isDeferrableOperation = (operation, pureGet) => {
150
+ // One IR consumer is not necessarily one rendered evaluation. Sum
151
+ // projections may inspect several tags and rebuild a different set of
152
+ // alternatives; substituting one into another multiplies their expression
153
+ // trees. Preserve the SSA temporary at these boundaries, rather than making
154
+ // the target rediscover an expression-size limit after expanding the text.
155
+ if (operation.kind === 'convert' &&
156
+ (carriesAlternatives(operation.source.representation) || carriesAlternatives(operation.result.representation)))
157
+ return false;
158
+ if (operation.kind === 'get') {
159
+ const receiver = operation.receiver.representation.kind;
160
+ return receiver === 'array-object' || receiver === 'string' || pureGet(operation);
161
+ }
162
+ return deferrableOperationKinds.has(operation.kind);
163
+ };
164
+ /**
165
+ * Which values may render at their single use instead of into a temporary of
166
+ * their own.
167
+ *
168
+ * The IR is three-address form, and for a `double` that costs nothing: the C++
169
+ * compiler propagates the copy away. For a `std::shared_ptr` it is an atomic
170
+ * increment and a matching decrement, and for a `std::string` it is a heap
171
+ * allocation -- neither of which any optimizer may remove, because both are
172
+ * observable through the refcount and the allocator. An array indexed in a
173
+ * loop was paying one atomic pair per iteration purely to name the array the
174
+ * cell was already holding.
175
+ *
176
+ * Four conditions, and each one is load-bearing. Compound sum conversions
177
+ * additionally retain their named result to bound composition of projections:
178
+ *
179
+ * 1. exactly one use, so the expression is not evaluated twice;
180
+ * 2. that use in the same block, so no `goto` can reach the use without
181
+ * passing the definition;
182
+ * 3. the defining operation side-effect-free (`isDeferrableOperation`); and
183
+ * 4. every operation between the two also deferred.
184
+ *
185
+ * (4) is what makes (3) sufficient. Everything between the definition and the
186
+ * use emitted no statement of its own, so the window contains no write at all
187
+ * -- which is why the order these reads end up in inside the use's own
188
+ * expression, which C++ leaves unspecified for most operators, cannot be
189
+ * observed by the program.
190
+ *
191
+ * Two forwardings ride on the same census, each with a narrower proof:
192
+ *
193
+ * - a `call`, `construct` or `allocate-callable` result whose single reader
194
+ * is the IMMEDIATELY following operation (`forwardableProducerKinds`,
195
+ * `callSinkOf`): no window, so nothing is crossed, and the producer keeps
196
+ * bounding everyone else's windows;
197
+ * - a cell written once and read once in one block, the read itself
198
+ * deferrable, every operation between the two effect-free, and the read
199
+ * consumed where it is copied or called rather than borrowed
200
+ * (`forwardedReadPositionAllowed`): the write renders nothing and the read
201
+ * spells the written value (`forwardedBindings`).
202
+ *
203
+ * The target's `ForwardingPolicy` has the last word on both, because both
204
+ * depend on how a renderer spells its operand and on whose storage a cell is.
205
+ *
206
+ * A use recorded for a merge (`phi`) belongs to the PREDECESSOR block at the
207
+ * position `emitBody` writes merges at -- after that block's operations and
208
+ * before its terminator -- not to the block the phi is written in. Recording
209
+ * it where the phi sits would let a value move across the whole block.
210
+ */
211
+ /**
212
+ * `pureGet` widens the `get` rule past Arrays and strings to whatever the
213
+ * emitter can prove is a plain field load (`emit-properties.ts`'s
214
+ * `isPlainMemberRead`): `v20 = gea_this->cities; if (b0 < v20->length())`
215
+ * is a `Ref` copy -- an atomic pair -- made only to name the field once, and
216
+ * with the read deferred the comparison spells the field itself. The default
217
+ * refuses every such read, which is the answer the census gave before it was
218
+ * asked.
219
+ */
220
+ export const deferrableValuesOf = (body, pureGet = () => false, forwarding = noForwarding) => {
221
+ const uses = new Map();
222
+ const record = (value, block, index) => {
223
+ const sites = uses.get(value);
224
+ if (sites)
225
+ sites.push({ block, index });
226
+ else
227
+ uses.set(value, [{ block, index }]);
228
+ };
229
+ // A block that writes merges renders statements between its last operation
230
+ // and its terminator, so a call there is not adjacent to a `return` after it.
231
+ const mergeBlocks = new Set();
232
+ const producers = new Map();
233
+ const bindingWriteCounts = new Map();
234
+ const bindingReads = new Map();
235
+ for (const blockId of body.blockOrder) {
236
+ const block = body.blocks.get(blockId);
237
+ if (!block)
238
+ continue;
239
+ block.operations.forEach((operation, index) => {
240
+ if (operation.kind === 'phi') {
241
+ for (const edge of operation.incoming) {
242
+ mergeBlocks.add(edge.block);
243
+ record(edge.value.value, edge.block, body.blocks.get(edge.block)?.operations.length ?? 0);
244
+ }
245
+ return;
246
+ }
247
+ const result = resultOfIrOperation(operation);
248
+ if (result !== null)
249
+ producers.set(result.id, operation);
250
+ if (operation.kind === 'binding-write')
251
+ bindingWriteCounts.set(operation.declaration, (bindingWriteCounts.get(operation.declaration) ?? 0) + 1);
252
+ if (operation.kind === 'binding-read') {
253
+ const reads = bindingReads.get(operation.declaration);
254
+ const site = { block: blockId, index, operation };
255
+ if (reads)
256
+ reads.push(site);
257
+ else
258
+ bindingReads.set(operation.declaration, [site]);
259
+ }
260
+ for (const operand of operandsOfIrOperation(operation))
261
+ record(operand.value, blockId, index);
262
+ });
263
+ for (const operand of operandsOfIrOperation(block.terminator))
264
+ record(operand.value, blockId, block.operations.length + 1);
265
+ }
266
+ for (const region of body.iteratorCloseRegions ?? [])
267
+ record(region.iterator.value, region.entry, 0);
268
+ const deferrable = new Set();
269
+ const forwardedBindings = new Map();
270
+ // A candidate is complete only once the whole body is censused: whether the
271
+ // written value itself defers is decided at its producer, which the
272
+ // descending walk reaches AFTER the write that reads it.
273
+ const bindingCandidates = [];
274
+ // Which withheld values a CALL is the single reader of. An array literal
275
+ // withheld whole has no statement to move -- it materializes from its own
276
+ // elements wherever its text lands (`EmitContext.pendingPacks`) -- so a
277
+ // renderer that spells one operand twice would build two objects where the
278
+ // program wrote one. Every renderer that does spell an operand twice spells
279
+ // its RECEIVER, and a call argument is never that, so restricting the
280
+ // withholding to call arguments is what makes the one-object rule hold
281
+ // without asking each renderer to promise it.
282
+ const consumedByCall = new Set();
283
+ for (const blockId of body.blockOrder) {
284
+ const block = body.blocks.get(blockId);
285
+ if (!block)
286
+ continue;
287
+ // Descending, because whether an operation may be deferred depends on
288
+ // whether every LATER operation up to its use already was.
289
+ const withheld = new Set();
290
+ for (let index = block.operations.length - 1; index >= 0; index -= 1) {
291
+ const operation = block.operations[index];
292
+ if (!operation)
293
+ continue;
294
+ // A merge publishes its name before any block renders and emits no
295
+ // statement where it is written, so it never breaks a window.
296
+ if (operation.kind === 'phi') {
297
+ withheld.add(index);
298
+ continue;
299
+ }
300
+ if (forwardableProducerKinds.has(operation.kind)) {
301
+ const result = resultOfIrOperation(operation);
302
+ const sites = result === null ? undefined : uses.get(result.id);
303
+ const site = sites?.length === 1 ? sites[0] : undefined;
304
+ if (result === null || !site || site.block !== blockId)
305
+ continue;
306
+ // Adjacent means the next operation, or the terminator of a block
307
+ // that writes no merges in front of it.
308
+ const consumer = site.index === index + 1 && site.index < block.operations.length
309
+ ? block.operations[site.index]
310
+ : index === block.operations.length - 1 && site.index === block.operations.length + 1 && !mergeBlocks.has(blockId)
311
+ ? block.terminator
312
+ : undefined;
313
+ if (consumer === undefined)
314
+ continue;
315
+ const sink = callSinkOf(consumer, result.id);
316
+ if (sink === null || !forwarding.forwardsCallInto(sink.sink, sink.operand))
317
+ continue;
318
+ deferrable.add(result.id);
319
+ continue;
320
+ }
321
+ if (operation.kind === 'binding-write') {
322
+ if (bindingWriteCounts.get(operation.declaration) !== 1)
323
+ continue;
324
+ const reads = bindingReads.get(operation.declaration);
325
+ const read = reads?.length === 1 ? reads[0] : undefined;
326
+ if (!read || read.block !== blockId || read.index <= index || !deferrable.has(read.operation.result.id))
327
+ continue;
328
+ const readSites = uses.get(read.operation.result.id);
329
+ const readSite = readSites?.length === 1 ? readSites[0] : undefined;
330
+ if (!readSite || readSite.block !== blockId)
331
+ continue;
332
+ const consumer = readSite.index < block.operations.length
333
+ ? block.operations[readSite.index]
334
+ : readSite.index === block.operations.length + 1
335
+ ? block.terminator
336
+ : undefined;
337
+ if (consumer === undefined)
338
+ continue;
339
+ if (!forwardedReadPositionAllowed(consumer, read.operation.result.id, read.operation.result.representation, pureGet))
340
+ continue;
341
+ // Effect-free is the condition here, not withheld: a pure read that
342
+ // kept its temporary because ITS use lies past some later call still
343
+ // writes nothing, and the written expression only has to reach the
344
+ // read without anything changing what it names. From the read to its
345
+ // use the read's own deferral has already proved the window clear.
346
+ let clear = true;
347
+ for (let between = index + 1; between < read.index; between += 1) {
348
+ const crossed = block.operations[between];
349
+ if (!crossed || (crossed.kind !== 'phi' && !isDeferrableOperation(crossed, pureGet)))
350
+ clear = false;
351
+ }
352
+ if (!clear)
353
+ continue;
354
+ if (!forwarding.forwardsBinding(operation, read.operation))
355
+ continue;
356
+ bindingCandidates.push({
357
+ declaration: operation.declaration,
358
+ value: operation.value,
359
+ read: read.operation.result.id,
360
+ write: index,
361
+ readAt: read.index,
362
+ use: readSite.index
363
+ });
364
+ continue;
365
+ }
366
+ if (!isDeferrableOperation(operation, pureGet))
367
+ continue;
368
+ const result = resultOfIrOperation(operation);
369
+ if (result === null)
370
+ continue;
371
+ const sites = uses.get(result.id);
372
+ const site = sites?.length === 1 ? sites[0] : undefined;
373
+ if (!site || site.block !== blockId || site.index <= index)
374
+ continue;
375
+ const limit = Math.min(site.index, block.operations.length);
376
+ let clear = true;
377
+ for (let between = index + 1; between < limit; between += 1)
378
+ if (!withheld.has(between))
379
+ clear = false;
380
+ if (!clear)
381
+ continue;
382
+ withheld.add(index);
383
+ deferrable.add(result.id);
384
+ const reader = block.operations[site.index];
385
+ if (reader && (reader.kind === 'call' || reader.kind === 'construct' || reader.kind === 'super-initialize')) {
386
+ if (!reader.arguments.some((argument) => argument.value === result.id))
387
+ continue;
388
+ consumedByCall.add(result.id);
389
+ }
390
+ }
391
+ }
392
+ for (const candidate of bindingCandidates) {
393
+ if (!deferrable.has(candidate.value.value))
394
+ continue;
395
+ const producer = producers.get(candidate.value.value);
396
+ // A formal reaches its reads by name already (`emit-bindings.ts`'s
397
+ // `collectFormalCells`), and that decision stays where it is.
398
+ if (producer === undefined || producer.kind === 'parameter' || producer.kind === 'receiver')
399
+ continue;
400
+ // A forwarded CALL moves to the read's use, so it may cross nothing at all
401
+ // -- not even a withheld read, whose place inside the use's expression C++
402
+ // orders however it likes.
403
+ if (forwardableProducerKinds.has(producer.kind) &&
404
+ !(candidate.readAt === candidate.write + 1 && candidate.use === candidate.readAt + 1))
405
+ continue;
406
+ forwardedBindings.set(candidate.declaration, { value: candidate.value, read: candidate.read });
407
+ }
408
+ return { values: deferrable, consumedByCall, forwardedBindings };
409
+ };
@@ -0,0 +1,230 @@
1
+ import type { DeclarationId, IrValueId } from '../identity/ids.js';
2
+ import type { Representation, TypedArrayElementDomain } from '../representation/model.js';
3
+ import type { IrBlockId, IrBody, IrNonTerminatorOperation, IrOperand } from './model.js';
4
+ /**
5
+ * Loops whose Array accesses can run against a raw element pointer, and the
6
+ * one loop-invariant condition that makes that sound.
7
+ *
8
+ * `c[i * N + j] += a_ik * b_kj` compiles to a load and a store through
9
+ * `ArrayObject`, and both of them can GROW the array -- a store past the end
10
+ * appends, which is what `a[a.length] = x` means in JavaScript. clang has to
11
+ * assume the storage may be reallocated on every iteration, so it reloads the
12
+ * base pointer each time and cannot vectorize anything. Measured on
13
+ * `bench/comparison`'s matrix_multiply: 35.5 ms, against 4.9 ms for the
14
+ * hand-written C++ that indexes a `std::vector` it knows nobody resizes.
15
+ *
16
+ * Hoisting the base pointer alone does not fix it, and neither does a
17
+ * per-access bounds check -- both measured 35 ms, because the branch that
18
+ * could still reallocate is inside the loop either way. What does fix it is a
19
+ * condition computed ONCE, before the loop:
20
+ *
21
+ * geaFast = arr->holes.empty() && lower >= 0 && upper <= arr->size()
22
+ *
23
+ * and an access written `geaFast ? base[i].value : <the general form>`. The
24
+ * flag is loop-invariant, so clang's own loop unswitching produces the two
25
+ * loop bodies, and in the fast one nothing can resize: 7.9 ms, same answer.
26
+ * That is why this is a flag rather than a duplicated block -- the versioning
27
+ * already exists in the backend, and it only needed something invariant to
28
+ * version on.
29
+ *
30
+ * The proof this computes is that the loop's own test bounds every index:
31
+ *
32
+ * - the loop is ascending (`i < B` / `i <= B`) with the counter on the left,
33
+ * and the counter advances by a loop-invariant step, so inside the body
34
+ * `i` never exceeds `B`;
35
+ * - every index is the counter, or a loop-invariant base plus the counter,
36
+ * so the highest index the loop can reach is `base + B`;
37
+ * - and every use of the array inside the loop is one of those accesses --
38
+ * one `push`, one call taking the array, one write of the cell, and the
39
+ * window is no longer a window.
40
+ *
41
+ * The bound itself, the base and the counter's seed are all read at the
42
+ * preheader and checked there. Nothing here assumes a length.
43
+ */
44
+ export interface DenseArray {
45
+ /** Distinguishes this window's pointer name within one body. */
46
+ readonly ordinal: number;
47
+ /** The loop this window belongs to. One flag per loop, not per array: two invariant flags would ask the backend for four loop versions where one condition covers every window. */
48
+ readonly group: number;
49
+ /** The array, as the emitter already knows how to spell it. */
50
+ readonly reference: DenseReference;
51
+ /** The element carrier, for the pointer's own type. */
52
+ readonly element: Representation;
53
+ /** Typed-array storage has no Cell wrapper or holes. */
54
+ readonly typed: TypedArrayElementDomain | null;
55
+ /** The block the flag and the pointer are computed in. */
56
+ readonly preheader: IrBlockId;
57
+ /** Every invariant addend used by an access, with `null` for the bare counter. All ranges must fit before any access is unchecked. */
58
+ readonly bases: readonly (IrOperand | null)[];
59
+ /** The counter cell, read at the preheader for the lowest index the loop can touch. */
60
+ readonly counter: DeclarationId;
61
+ /** The loop's own bound. */
62
+ readonly bound: IrOperand;
63
+ /** Whether the test admits the bound itself (`<=`), so the window is one wider. */
64
+ readonly inclusive: boolean;
65
+ /** The counter's step, checked non-negative at the preheader. */
66
+ readonly step: IrOperand | null;
67
+ /**
68
+ * Whether this window's indices are REMAINDERS by the array's own length
69
+ * rather than the loop's counter -- `ring[i % ring.length]`, the shape every
70
+ * ring buffer and hash bucket is written in.
71
+ *
72
+ * A different proof, and a simpler one: `x % n` lies in `[0, n)` for every
73
+ * dividend whenever `n > 0`, so the window needs no bound, no base and no
74
+ * counter -- only that the array is non-empty and has no holes, which is what
75
+ * the preheader checks. `bases`, `bound`, `inclusive`, `step` and `widened`
76
+ * carry no meaning for one of these.
77
+ *
78
+ * Worth its own shape because the ordinary bounds test is not cheap enough to
79
+ * leave in the loop. Measured on `bench/comparison/fixtures/object_create.ts`:
80
+ * 11.3ms as emitted, 11.8ms with a per-access `key < size()` guard (no better
81
+ * than doing nothing at all), 10.1ms with an unsigned integer one, and 7.9ms
82
+ * with the bound gone. A per-access size read is what stops clang keeping the
83
+ * base pointer in a register, so the bound has to leave the loop entirely.
84
+ */
85
+ readonly wrapped: boolean;
86
+ /**
87
+ * What a wrapped window's indices are taken modulo: `null` for the array's
88
+ * own `length`, a positive integer for a CONSTANT divisor.
89
+ *
90
+ * `x % n` lies in `[0, n)` either way, so the proof is the same one; what
91
+ * differs is what the preheader has to check. The array's own length needs
92
+ * only `size() > 0`, because an index below the length is inside the storage
93
+ * by definition. A constant needs `size() >= n`, because nothing ties the two
94
+ * together -- and that check is what makes `table[i % 16]` a window, which is
95
+ * how every fixed-capacity ring buffer, hash bucket and dispatch table is
96
+ * written.
97
+ *
98
+ * Meaningless when `wrapped` is false.
99
+ */
100
+ readonly modulus: number | null;
101
+ /**
102
+ * Whether an access can see the counter AFTER this turn's advance.
103
+ *
104
+ * The loop's test bounds the counter at the top of the body; a body that
105
+ * advances the counter and THEN reads reaches one step further, and the
106
+ * window has to be that much wider. A latch that advances and jumps straight
107
+ * back to the header -- which is what every `for` loop compiles to -- reaches
108
+ * nothing, and widening it there would cost the window outright: an array of
109
+ * exactly `bound` elements would fail `bound + 1 <= size` on every turn.
110
+ */
111
+ readonly widened: boolean;
112
+ }
113
+ export type DenseReference = {
114
+ readonly kind: 'cell';
115
+ readonly declaration: DeclarationId;
116
+ readonly representation: Representation;
117
+ } | {
118
+ readonly kind: 'value';
119
+ readonly operand: IrOperand;
120
+ readonly storage: Representation;
121
+ }
122
+ /**
123
+ * A ROW of another array: `grid[i]` read inside the `j` loop.
124
+ *
125
+ * The receiver of `grid[i][j]` is loop-invariant and yet defined inside the
126
+ * loop -- the row load is one of the loop's own operations -- so neither of
127
+ * the two references above names it. `holder` is the array the row comes out
128
+ * of and `key` the invariant index; the emitter re-reads the row at the
129
+ * preheader, behind the condition that says the read is in range, and takes
130
+ * the pointer from there. `operand` is the row value itself, whose every
131
+ * other use inside the loop the window still has to account for.
132
+ */
133
+ | {
134
+ readonly kind: 'element';
135
+ readonly holder: DenseReference;
136
+ readonly key: IrOperand;
137
+ readonly operand: IrOperand;
138
+ };
139
+ /**
140
+ * One loop's condition.
141
+ *
142
+ * The flag is per LOOP and CUMULATIVE -- it ands its enclosing loop's flag --
143
+ * because the backend's loop unswitching is what turns the ternary into two
144
+ * loop bodies, and it versions on one invariant condition, not on several. An
145
+ * inner body that named three flags measured 62 ms against 7.9 for the same
146
+ * body behind one (`bench/comparison`'s matrix_multiply): clang gave up rather
147
+ * than emit eight versions. Anding outward is also what lets an access reached
148
+ * inside a nested loop cite the innermost flag -- the only one that loop's own
149
+ * unswitching can see -- and still stand for its own window's proof.
150
+ */
151
+ export interface DenseGroup {
152
+ readonly ordinal: number;
153
+ /** The enclosing loop's group, whose flag this one ands. */
154
+ readonly parent: number | null;
155
+ readonly preheader: IrBlockId;
156
+ }
157
+ export interface DenseAccess {
158
+ /** The window whose pointer this access indexes. */
159
+ readonly array: number;
160
+ /** The flag it renders behind: the innermost enclosing loop's, which implies the window's own. */
161
+ readonly flag: number;
162
+ }
163
+ export interface DenseLoopPlan {
164
+ readonly arrays: readonly DenseArray[];
165
+ readonly groups: readonly DenseGroup[];
166
+ /** Which window each access renders against. */
167
+ readonly accesses: ReadonlyMap<IrNonTerminatorOperation, DenseAccess>;
168
+ /**
169
+ * Every read of a WRAPPED window's own `length`, and the window it belongs to.
170
+ *
171
+ * The divisor of `i % ring.length` is loop-invariant by the same admission
172
+ * that made the window dense -- nothing in the loop resizes the array -- but
173
+ * clang will not hoist the load: the element stores go through a pointer it
174
+ * cannot prove disjoint from the vector's own header, so the length is
175
+ * re-read on every turn and the base pointer never stays in a register.
176
+ * Measured on `object_create.ts`: 11.5ms as emitted, 10.3ms with only the
177
+ * length hoisted, 10.1ms with only the guard branch gone, 8.1ms with both.
178
+ */
179
+ readonly lengths: ReadonlyMap<IrValueId, number>;
180
+ }
181
+ export declare const emptyDenseLoopPlan: DenseLoopPlan;
182
+ /**
183
+ * The plan a body can actually RENDER, once the target has answered the one
184
+ * question that is genuinely about its own storage.
185
+ *
186
+ * `denseLoopsOf` states what the loop's own control flow proves; it cannot
187
+ * say whether THIS backend already has a plain name for a window's array or
188
+ * counter cell to dereference through -- a local this body owns outright,
189
+ * unboxed, or a global -- because that is the target's own placement, capture
190
+ * and boxing decision, not a fact of the program. `admitsCell` is that one
191
+ * hook (`emit-arrays.ts`'s `denseCellName` is its sole implementation).
192
+ */
193
+ export type DenseCellPolicy = (declaration: DeclarationId) => boolean;
194
+ /** The windows a body ends up able to render, once `admittedDenseLoopPlanOf` has trimmed the raw plan. */
195
+ export interface AdmittedDenseLoopPlan {
196
+ readonly arrays: readonly DenseArray[];
197
+ readonly groups: ReadonlyMap<number, DenseGroup>;
198
+ readonly accesses: ReadonlyMap<IrNonTerminatorOperation, DenseAccess>;
199
+ readonly lengths: ReadonlyMap<IrValueId, number>;
200
+ }
201
+ /**
202
+ * Narrows `denseLoopsOf`'s raw plan to the windows this body may actually
203
+ * render.
204
+ *
205
+ * A window not admitted here is never a refusal: the array still renders
206
+ * through the ordinary indexed path, which is always correct, and this only
207
+ * decides which windows get the additional fast one. Three things a plan
208
+ * built from the IR alone cannot settle are decided here, and only the first
209
+ * is about this backend's own storage rather than about the program:
210
+ *
211
+ * - whether this body already has a plain name for the cells a window
212
+ * reaches through (`admitsCell`);
213
+ * - whether the integer census narrowed every index a window's accesses
214
+ * read -- an un-narrowed `number` key is not an element access at all --
215
+ * except a WRAPPED window, which is exempt: its own admission already
216
+ * proves the array non-empty and hole-free (`DenseArray.wrapped`), so a
217
+ * remainder by that length or by a literal modulus needs no narrowed index
218
+ * to be a real one; one un-narrowed access anywhere in an ordinary window
219
+ * takes the WHOLE window down, since every access shares the one pointer
220
+ * the narrowing proof is about;
221
+ * - and, once the two above have dropped some accesses, whether anything is
222
+ * left of a window at all: an array with no surviving access has no
223
+ * pointer worth materializing, and a flag chain with no claimed window
224
+ * below it has nothing to compute either -- a flag ands its enclosing
225
+ * loop's, so every group on a claimed window's chain has to exist even
226
+ * when nothing indexes anything in that loop, and no group outside that
227
+ * chain is needed at all.
228
+ */
229
+ export declare const admittedDenseLoopPlanOf: (plan: DenseLoopPlan, integerValues: ReadonlySet<IrValueId>, admitsCell: DenseCellPolicy) => AdmittedDenseLoopPlan;
230
+ export declare const denseLoopsOf: (body: IrBody) => DenseLoopPlan;