@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,181 @@
1
+ import { booleanConstantsOf, deadValuesOf, unreadValuesOf } from './dead-values.js';
2
+ import { deferrableValuesOf } from './deferral.js';
3
+ import { loopInvariantHoistsOf, loopInvariantValuesOf } from './hoist.js';
4
+ import { narrowableIntegersOf, remainderFormGroups } from './integers.js';
5
+ import { localIteratorValuesOf } from './local-iterators.js';
6
+ import { allOperationsOf } from './model.js';
7
+ import { numericIntrinsicsOf } from './numeric-intrinsics.js';
8
+ import { operandsOfIrOperation, resultOfIrOperation } from './queries.js';
9
+ import { sharedStringLayoutsOf } from './string-layout-reuse.js';
10
+ import { stringLengthReuseOf } from './string-length-reuse.js';
11
+ import { typeQueryResultsOf } from './type-query-results.js';
12
+ export const irBodyCensusOf = (body, policy) => {
13
+ const localIterators = localIteratorValuesOf(body);
14
+ const censused = deferrableValuesOf(body, policy.deferrableMemberRead, policy.forwarding);
15
+ const dead = deadValuesOf(body, policy.deadValues);
16
+ const unread = unreadValuesOf(body);
17
+ const booleanConstants = booleanConstantsOf(body);
18
+ policy.spellConstants();
19
+ // Mutable from here on: the three censuses below each claim values out of the
20
+ // deferral set, and a claimed value must not be deferred by anyone.
21
+ const deferrable = new Set(censused.values);
22
+ const typeQueries = typeQueryResultsOf(body, policy.stringQueryCell);
23
+ // A tag observes the value at the query/read site, even if a later call
24
+ // mutates the input. Do not turn a saved result into a repeated typeof.
25
+ for (const value of typeQueries.values)
26
+ deferrable.delete(value);
27
+ // Which `number` values may be held in a `long long`, before any rendering:
28
+ // storage is decided at a first write. See `ir/integers.ts`.
29
+ const narrowed = narrowableIntegersOf(body, policy.integerStorage);
30
+ const numericIntrinsics = numericIntrinsicsOf(body);
31
+ const remainderForms = new Map();
32
+ for (const [form, values] of remainderFormGroups(narrowed))
33
+ for (const value of values)
34
+ remainderForms.set(value, form);
35
+ // The two cell facts the forwarding census leaves to this sequence: a
36
+ // narrowed cell is `long long` storage and a type-query cell a saved tag,
37
+ // and a read spelled as the written expression would be neither.
38
+ const forwardedBindings = new Map();
39
+ for (const [declaration, forwarded] of censused.forwardedBindings) {
40
+ if (narrowed.bindings.has(declaration) || typeQueries.bindings.has(declaration))
41
+ continue;
42
+ forwardedBindings.set(declaration, forwarded);
43
+ }
44
+ const settled = {
45
+ localIterators,
46
+ deferrable,
47
+ callArgumentOnly: censused.consumedByCall,
48
+ forwardedBindings,
49
+ dead,
50
+ unread,
51
+ booleanConstants,
52
+ typeQueryValues: typeQueries.values,
53
+ typeQueryBindings: typeQueries.bindings,
54
+ typeQueryComparisons: typeQueries.comparisons,
55
+ integerValues: narrowed.values,
56
+ integerBindings: narrowed.bindings,
57
+ remainderForms,
58
+ numericCalls: numericIntrinsics.calls,
59
+ numericCallOnly: numericIntrinsics.callOnly
60
+ };
61
+ const stableFormals = policy.formalStorage(settled);
62
+ const loopInvariantValues = loopInvariantValuesOf(body);
63
+ const hoists = loopInvariantHoistsOf(body);
64
+ const sharedStringLayouts = sharedStringLayoutsOf(body, hoists, dead);
65
+ // A relocated value leaves the deferral census: a deferred value renders at
66
+ // its use -- the place inside the loop the move exists to get it out of.
67
+ const hoistedResults = new Set();
68
+ for (const value of hoists.relocated) {
69
+ deferrable.delete(value);
70
+ hoistedResults.add(value);
71
+ }
72
+ const reusedStringLengths = stringLengthReuseOf(body, stableFormals, new Set([...dead, ...hoists.relocated]));
73
+ // A reused result must be stored at its dominating definition, even if its
74
+ // original single consumer would otherwise defer that computation.
75
+ for (const prior of reusedStringLengths.values())
76
+ deferrable.delete(prior.value);
77
+ // Every census above that claimed a value out of `deferrable` may have taken
78
+ // a forwarding's written value or read with it; a forwarding whose halves no
79
+ // longer both defer would spell a value that now has storage of its own at
80
+ // a place that storage is not written yet.
81
+ for (const [declaration, forwarded] of forwardedBindings) {
82
+ if (!deferrable.has(forwarded.value.value) || !deferrable.has(forwarded.read))
83
+ forwardedBindings.delete(declaration);
84
+ }
85
+ return { ...settled, loopInvariantValues, hoists, hoistedResults, sharedStringLayouts, reusedStringLengths };
86
+ };
87
+ export const bodyValueOriginsOf = (body) => {
88
+ const computeOrigins = new Map();
89
+ const propertyReadOrigins = new Map();
90
+ const bindingReadDeclarations = new Map();
91
+ const conversionSources = new Map();
92
+ const callCallees = new Map();
93
+ const recordFieldSources = new Map();
94
+ const thunkValues = new Map();
95
+ const staticKeyTexts = new Map();
96
+ const reads = new Map();
97
+ const calleeReads = new Map();
98
+ for (const block of body.blocks.values()) {
99
+ for (const operation of allOperationsOf(block)) {
100
+ for (const operand of operandsOfIrOperation(operation)) {
101
+ reads.set(operand.value, (reads.get(operand.value) ?? 0) + 1);
102
+ if (operation.kind === 'call' && operand === operation.callee)
103
+ calleeReads.set(operand.value, (calleeReads.get(operand.value) ?? 0) + 1);
104
+ }
105
+ if (operation.kind === 'compute')
106
+ computeOrigins.set(operation.result.id, operation);
107
+ else if (operation.kind === 'get')
108
+ propertyReadOrigins.set(operation.result.id, operation);
109
+ else if (operation.kind === 'binding-read')
110
+ bindingReadDeclarations.set(operation.result.id, operation.declaration);
111
+ else if (operation.kind === 'convert')
112
+ conversionSources.set(operation.result.id, operation.source);
113
+ else if (operation.kind === 'constant')
114
+ staticKeyTexts.set(operation.result.id, operation.text);
115
+ else if (operation.kind === 'call') {
116
+ if (operation.result)
117
+ callCallees.set(operation.result.id, operation.callee.value);
118
+ }
119
+ else if (operation.kind === 'allocate-callable') {
120
+ const carrier = operation.result.representation;
121
+ const payload = carrier.kind === 'optional' ? carrier.payload : carrier;
122
+ if (payload.kind === 'function-value-dispatch' && payload.abi.parameters.length === 0 && payload.abi.receiver === null) {
123
+ thunkValues.set(operation.result.id, operation.functionId);
124
+ }
125
+ }
126
+ else if (operation.kind === 'allocate-record') {
127
+ recordFieldSources.set(operation.result.id, new Map(operation.fields.map((field) => [field.key, field.value])));
128
+ }
129
+ else if (operation.kind === 'set' || operation.kind === 'define-own-property') {
130
+ const storedKey = staticKeyTexts.get(operation.key.value);
131
+ if (storedKey !== undefined) {
132
+ const sources = new Map(recordFieldSources.get(operation.receiver.value) ?? []);
133
+ sources.set(storedKey, operation.value);
134
+ recordFieldSources.set(operation.receiver.value, sources);
135
+ if (operation.result)
136
+ recordFieldSources.set(operation.result.id, sources);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ // The transitive closure needs its own fixed point: a value's read set is
142
+ // its own binding-read declaration (if any) unioned with every operand's
143
+ // already-settled read set, iterated until nothing grows.
144
+ const valueCellReads = new Map();
145
+ let changed = true;
146
+ while (changed) {
147
+ changed = false;
148
+ for (const block of body.blocks.values()) {
149
+ for (const operation of allOperationsOf(block)) {
150
+ const result = resultOfIrOperation(operation);
151
+ if (result === null)
152
+ continue;
153
+ const current = valueCellReads.get(result.id);
154
+ const next = new Set(current ?? []);
155
+ const ownDeclaration = bindingReadDeclarations.get(result.id);
156
+ if (ownDeclaration !== undefined)
157
+ next.add(ownDeclaration);
158
+ for (const operand of operandsOfIrOperation(operation)) {
159
+ for (const declaration of valueCellReads.get(operand.value) ?? [])
160
+ next.add(declaration);
161
+ }
162
+ if (current !== undefined && current.size === next.size)
163
+ continue;
164
+ valueCellReads.set(result.id, next);
165
+ changed = true;
166
+ }
167
+ }
168
+ }
169
+ return {
170
+ computeOrigins,
171
+ propertyReadOrigins,
172
+ staticKeyTexts,
173
+ bindingReadDeclarations,
174
+ conversionSources,
175
+ callCallees,
176
+ calleeOnlyValues: new Set([...calleeReads].filter(([value, count]) => reads.get(value) === count).map(([value]) => value)),
177
+ recordFieldSources,
178
+ thunkValues,
179
+ valueCellReads
180
+ };
181
+ };
@@ -0,0 +1,19 @@
1
+ import type { ConversionNodeId } from '../conversion/algebra.js';
2
+ import type { ConversionCensus } from '../conversion/nodes.js';
3
+ import type { DeclarationId } from '../identity/ids.js';
4
+ import type { ClassLayout } from '../projection/classes.js';
5
+ import type { RepresentationDeriver } from '../representation/derive.js';
6
+ import { type RecordField, type Representation } from '../representation/model.js';
7
+ import type { IrOperand } from './model.js';
8
+ /** The descriptor's value and attribute reads are native fixed slots, not an unknown function invocation. */
9
+ export interface FixedDataDefinitionRecipe {
10
+ readonly nativeFieldProtocol: 'unused' | 'required';
11
+ readonly target: string;
12
+ readonly descriptor: string;
13
+ readonly field: RecordField;
14
+ readonly held: Representation;
15
+ readonly value: RecordField;
16
+ readonly conversion: ConversionNodeId;
17
+ readonly attributes: readonly RecordField[];
18
+ }
19
+ export declare const fixedDataDefinitionRecipeOf: (args: readonly IrOperand[], key: string, result: Representation, deriver: RepresentationDeriver, classes: ReadonlyMap<DeclarationId, ClassLayout>, conversions: ConversionCensus, authenticated: boolean) => FixedDataDefinitionRecipe | null;
@@ -0,0 +1,49 @@
1
+ import { declaredFieldRepresentationOf, recordFieldsOfShape, nativeBaseFieldOf } from '../projection/fields.js';
2
+ import { representationKey } from '../representation/model.js';
3
+ export const fixedDataDefinitionRecipeOf = (args, key, result, deriver, classes, conversions, authenticated) => {
4
+ const target = args[0]?.representation;
5
+ const descriptor = args[2]?.representation;
6
+ if (!target || args.length !== 3 || descriptor?.kind !== 'record' || descriptor.accessors.length > 0)
7
+ return null;
8
+ if (representationKey(result) !== representationKey(target))
9
+ return null;
10
+ const fields = target.kind === 'record' || target.kind === 'record-with-index'
11
+ ? target.fields
12
+ : target.kind === 'class-ref' || (target.kind === 'native-record-ref' && target.native === null)
13
+ ? recordFieldsOfShape(deriver, target.shapeId)
14
+ : null;
15
+ const field = fields?.find((candidate) => candidate.key === key);
16
+ if (!field || nativeBaseFieldOf(deriver, target, key, classes))
17
+ return null;
18
+ const value = descriptor.fields.find((candidate) => candidate.key === 'value');
19
+ if (!value?.required)
20
+ return null;
21
+ const attributes = descriptor.fields.filter((candidate) => candidate.key !== 'value');
22
+ if (attributes.some((attribute) => !['writable', 'enumerable', 'configurable'].includes(attribute.key) ||
23
+ !attribute.required ||
24
+ attribute.value.kind !== 'scalar' ||
25
+ attribute.value.domain !== 'boolean'))
26
+ return null;
27
+ const held = declaredFieldRepresentationOf(deriver, target, key, classes);
28
+ if (!held)
29
+ return null;
30
+ const conversion = conversions.nodeFor(value.value, held);
31
+ // Dynamic adapters can publish the stored object's native protocol. They
32
+ // cannot support the closed effect claimed by this recipe.
33
+ if (conversion.capability.kind === 'never')
34
+ return null;
35
+ const closed = authenticated &&
36
+ (conversion.capability.kind === 'identity' ||
37
+ ((conversion.capability.kind === 'atom' || conversion.capability.kind === 'static') &&
38
+ conversion.capability.materializer.nativeFieldProtocol === 'unused'));
39
+ return {
40
+ nativeFieldProtocol: closed ? 'unused' : 'required',
41
+ target: representationKey(target),
42
+ descriptor: representationKey(descriptor),
43
+ field,
44
+ held,
45
+ value,
46
+ conversion: conversion.id,
47
+ attributes
48
+ };
49
+ };
@@ -0,0 +1,38 @@
1
+ import type { DeclarationId, PhysicalBodyId } from '../identity/ids.js';
2
+ import type { BindingPlacement } from '../projection/bindings.js';
3
+ import { type IrBody } from './model.js';
4
+ /**
5
+ * Carves every generator body `ir/lower.ts` marked with a
6
+ * `generatorPrologueBoundary` into an ordinary OUTER function (the body's own
7
+ * declared signature, running `FunctionDeclarationInstantiation`'s prefix)
8
+ * that tail-calls a private INNER coroutine holding the rest.
9
+ *
10
+ * A C++20 coroutine cannot express the ECMA-262 split within one function
11
+ * (10.2.1 step 8 runs before 15.5.2's `GeneratorStart` ever suspends the
12
+ * body), so this stage physically splits one `IrBody` into two -- reusing
13
+ * the ordinary allocate-callable/call/return primitives so the split reads,
14
+ * to every later stage, exactly like an ordinary nested closure a body
15
+ * allocates and immediately invokes. Every declaration bound by the
16
+ * prologue that the rest of the body still needs gets its own, freshly
17
+ * minted, inner-owned copy -- see `bridgedDeclarationsOf` -- fed from the
18
+ * inner coroutine's own new ABI parameters rather than shared cell
19
+ * identity, which is exactly right: the two halves are different physical
20
+ * frames, and the value merely started out equal.
21
+ *
22
+ * Run once, after `lowerToIr` and before `shakeProgram`/`renderTranslationUnit`
23
+ * (`compiler.ts`), because it needs `placements` -- unavailable inside
24
+ * `lowerToIr` itself -- to give each bridged cell's inner copy an identity.
25
+ *
26
+ * Every step here is deliberately conservative: any shape this module is not
27
+ * certain it carves correctly (a try region straddling the cut, a value
28
+ * crossing the boundary some other way than through a bridged declaration, a
29
+ * hand-built body that fails IR verification) refuses the split for that one
30
+ * owner and leaves its original, unsplit body exactly as `lowerToIr` produced
31
+ * it -- a body that still miscompiles the ECMA-262 timing this module exists
32
+ * to fix, never one that compiles to something silently wrong.
33
+ */
34
+ export interface GeneratorSplitResult {
35
+ readonly bodies: ReadonlyMap<PhysicalBodyId, IrBody>;
36
+ readonly placements: ReadonlyMap<DeclarationId, BindingPlacement>;
37
+ }
38
+ export declare const splitGeneratorBodies: (bodies: ReadonlyMap<PhysicalBodyId, IrBody>, placements: ReadonlyMap<DeclarationId, BindingPlacement>) => GeneratorSplitResult;
@@ -0,0 +1,329 @@
1
+ import { irValueId, physicalBodyId } from '../identity/ids.js';
2
+ import { passingOf } from '../representation/model.js';
3
+ import { defaultOwnershipPolicy } from '../representation/policies.js';
4
+ import { allOperationsOf, irBlockId } from './model.js';
5
+ import { operandsOfIrOperation, resultOfIrOperation } from './queries.js';
6
+ import { verifyIrBody } from './verify.js';
7
+ export const splitGeneratorBodies = (bodies, placements) => {
8
+ const nextBodies = new Map(bodies);
9
+ let nextPlacements = placements;
10
+ for (const body of bodies.values()) {
11
+ const boundary = body.generatorPrologueBoundary;
12
+ if (!boundary)
13
+ continue;
14
+ const split = splitOneGeneratorBody(body, boundary, nextPlacements);
15
+ if (!split)
16
+ continue;
17
+ nextBodies.set(split.outer.owner, split.outer);
18
+ nextBodies.set(split.inner.owner, split.inner);
19
+ nextPlacements = split.placements;
20
+ }
21
+ return { bodies: nextBodies, placements: nextPlacements };
22
+ };
23
+ /** Every `DeclarationId` a `binding-read`/`binding-write` operation names, across a set of operations. */
24
+ const declarationsTouchedBy = (operations) => {
25
+ const found = new Set();
26
+ for (const operation of operations) {
27
+ if (operation.kind === 'binding-read' || operation.kind === 'binding-write')
28
+ found.add(operation.declaration);
29
+ }
30
+ return found;
31
+ };
32
+ /** A `binding-read`/`binding-write` operation with its declaration swapped for the inner coroutine's own copy; every other kind is returned unchanged (terminators never name a declaration directly). */
33
+ const rewriteDeclaration = (operation, remap) => {
34
+ if (operation.kind !== 'binding-read' && operation.kind !== 'binding-write')
35
+ return operation;
36
+ const to = remap.get(operation.declaration);
37
+ return to === undefined ? operation : { ...operation, declaration: to };
38
+ };
39
+ const valuesIndexOf = (blocks) => {
40
+ const values = new Map();
41
+ for (const block of blocks) {
42
+ for (const operation of allOperationsOf(block)) {
43
+ const result = resultOfIrOperation(operation);
44
+ if (result)
45
+ values.set(result.id, result.representation);
46
+ }
47
+ }
48
+ return values;
49
+ };
50
+ /** Whether every operand any of `operations` reads is defined by one of `operations` itself -- the generic guard against a value crossing the cut some way other than through a bridged declaration (a cached `receiver`, or any other reuse this module did not anticipate). */
51
+ const isSelfContained = (blocks, iteratorCloseRegions) => {
52
+ const defined = new Set();
53
+ for (const block of blocks)
54
+ for (const operation of allOperationsOf(block)) {
55
+ const result = resultOfIrOperation(operation);
56
+ if (result)
57
+ defined.add(result.id);
58
+ }
59
+ for (const block of blocks) {
60
+ for (const operation of allOperationsOf(block)) {
61
+ for (const operand of operandsOfIrOperation(operation))
62
+ if (!defined.has(operand.value))
63
+ return false;
64
+ }
65
+ }
66
+ for (const region of iteratorCloseRegions)
67
+ if (!defined.has(region.iterator.value))
68
+ return false;
69
+ return true;
70
+ };
71
+ const splitOneGeneratorBody = (body, boundary, placements) => {
72
+ const abi = body.abi;
73
+ // Void is impossible for a real generator (it always hands back an
74
+ // Iterator), and `construct` never applies to one (`new` on a generator
75
+ // function throws) -- both are defensive refusals for a shape this body
76
+ // cannot actually have, not a case this module means to support.
77
+ if (!abi || abi.result.kind === 'void' || body.construct)
78
+ return null;
79
+ const cutBlock = body.blocks.get(boundary.block);
80
+ if (!cutBlock)
81
+ return null;
82
+ // A try/catch/finally cannot lexically wrap a parameter list, so every
83
+ // region belongs entirely to the rest of the body -- UNLESS the try
84
+ // statement is the very first thing after the parameters and its own
85
+ // entry was scheduled into the same block the last default's merge lands
86
+ // in, in which case this module cannot tell "outer" and "inner" apart for
87
+ // that one block by original id alone. Refuse rather than guess.
88
+ const boundaryTouchesRegion = body.tryRegions.some((region) => region.tryEntry === boundary.block ||
89
+ region.catchEntry === boundary.block ||
90
+ region.finallyEntry === boundary.block ||
91
+ region.finallyExit === boundary.block ||
92
+ region.join === boundary.block);
93
+ if (boundaryTouchesRegion)
94
+ return null;
95
+ // IteratorClose regions are lexical C++ scopes too. A region whose block
96
+ // interval touches the split block cannot be divided at an operation index
97
+ // without also splitting its guard lifetime, so refuse that optimization
98
+ // rather than silently dropping or widening cleanup. Regions wholly on one
99
+ // side are preserved below with their original block identities.
100
+ const boundaryTouchesIteratorCloseRegion = (body.iteratorCloseRegions ?? []).some((region) => region.entry === boundary.block || region.blocks.includes(boundary.block) || region.dismissTargets.includes(boundary.block));
101
+ if (boundaryTouchesIteratorCloseRegion)
102
+ return null;
103
+ const headOperations = cutBlock.operations.slice(0, boundary.operationIndex);
104
+ const tailOperations = cutBlock.operations.slice(boundary.operationIndex);
105
+ const restBlockIds = body.blockOrder.filter((id) => !boundary.outerBlocks.has(id));
106
+ const restBlockIdSet = new Set(restBlockIds);
107
+ const outerRegions = [];
108
+ const innerRegions = [];
109
+ for (const region of body.tryRegions) {
110
+ const refs = [region.tryEntry, region.catchEntry, region.finallyEntry, region.finallyExit, region.join].filter((ref) => ref !== null);
111
+ const allOuter = refs.every((ref) => boundary.outerBlocks.has(ref));
112
+ const allInner = refs.every((ref) => restBlockIdSet.has(ref));
113
+ if (allOuter)
114
+ outerRegions.push(region);
115
+ else if (allInner)
116
+ innerRegions.push(region);
117
+ else
118
+ return null;
119
+ }
120
+ const outerIteratorCloseRegions = [];
121
+ const innerIteratorCloseRegions = [];
122
+ for (const region of body.iteratorCloseRegions ?? []) {
123
+ const refs = [region.entry, ...region.blocks, ...region.dismissTargets];
124
+ const allOuter = refs.every((ref) => boundary.outerBlocks.has(ref));
125
+ const allInner = refs.every((ref) => restBlockIdSet.has(ref));
126
+ if (allOuter)
127
+ outerIteratorCloseRegions.push(region);
128
+ else if (allInner)
129
+ innerIteratorCloseRegions.push(region);
130
+ else
131
+ return null;
132
+ }
133
+ // Every declaration the prologue's own outer half writes, that the rest of
134
+ // the body still reads or writes: the cells the inner coroutine needs its
135
+ // own copy of. A declaration outer writes but rest never touches is purely
136
+ // internal to the prologue (a default's own guard test, say) and needs no
137
+ // bridge; one rest introduces itself (`var it = ...`) is already its own,
138
+ // ordinary inner-owned local and needs no bridge either.
139
+ const outerWritten = new Set();
140
+ for (const id of boundary.outerBlocks) {
141
+ if (id === boundary.block)
142
+ continue;
143
+ const block = body.blocks.get(id);
144
+ if (block)
145
+ for (const operation of block.operations)
146
+ if (operation.kind === 'binding-write')
147
+ outerWritten.add(operation.declaration);
148
+ }
149
+ for (const operation of headOperations)
150
+ if (operation.kind === 'binding-write')
151
+ outerWritten.add(operation.declaration);
152
+ const restOperationsFlat = [...tailOperations, cutBlock.terminator];
153
+ for (const id of restBlockIds) {
154
+ const block = body.blocks.get(id);
155
+ if (block)
156
+ restOperationsFlat.push(...allOperationsOf(block));
157
+ }
158
+ const restReferenced = declarationsTouchedBy(restOperationsFlat);
159
+ const bridged = [...outerWritten].filter((id) => restReferenced.has(id));
160
+ const bridgedRepresentations = new Map();
161
+ for (const id of bridged) {
162
+ const representation = placements.get(id)?.representation;
163
+ if (!representation || representation.kind === 'unresolved')
164
+ return null;
165
+ bridgedRepresentations.set(id, representation);
166
+ }
167
+ const needsReceiver = restOperationsFlat.some((operation) => operation.kind === 'receiver');
168
+ // A `receiver` operation with no receiver of THIS body's own ABI is a
169
+ // relayed, captured `this` from an enclosing frame -- a real shape, but not
170
+ // one this module bridges (see the file comment): refuse rather than drop
171
+ // the read silently.
172
+ if (needsReceiver && abi.receiver === null)
173
+ return null;
174
+ const innerOwnerId = `${body.sourceOwner}#generator-inner`;
175
+ const innerPhysicalBodyId = physicalBodyId(innerOwnerId, 'default');
176
+ const innerDeclarationOf = new Map(bridged.map((id) => [id, `${id}@generator-inner`]));
177
+ // Every other ABI in this compiler picks a parameter's passing mode from the
178
+ // representation's OWN ownership (`representation/policies.ts`'s
179
+ // `defaultOwnershipPolicy.forParameter`, the one every real function's ABI
180
+ // is derived with, `representation/derive.ts`'s `abiOf`) -- `owned` is only
181
+ // the fallback for a carrier that states no ownership of its own (a scalar,
182
+ // a string). Hardcoding `owned` here disagreed with that for every
183
+ // refcounted carrier (`array-object`, `record`, `class-ref`, a keyed
184
+ // collection...): the OUTER half still reads the bridged cell as whatever it
185
+ // is actually stored as -- `gea::Ref<gea::ArrayObject<double>>` for a
186
+ // `shared-refcount` array -- and passes that to the call, while this
187
+ // declared the inner coroutine's formal as the bare, unwrapped carrier
188
+ // (`gea::ArrayObject<double>`), a frame mismatch clang reports as "no
189
+ // matching function for call". The call's argument and the declaration it
190
+ // targets must agree on the SAME ownership, exactly as `cppAbiParameterType`
191
+ // assumes everywhere else.
192
+ const innerAbi = {
193
+ parameters: bridged.map((id) => {
194
+ const value = bridgedRepresentations.get(id);
195
+ const parameterOwnership = defaultOwnershipPolicy.forParameter(value);
196
+ return { value, ownership: parameterOwnership, passing: passingOf(value, parameterOwnership) };
197
+ }),
198
+ result: abi.result,
199
+ receiver: needsReceiver ? abi.receiver : null,
200
+ restFrom: null
201
+ };
202
+ const lineage = headOperations[headOperations.length - 1]?.lineage ?? tailOperations[0]?.lineage ?? cutBlock.terminator.lineage;
203
+ if (!lineage)
204
+ return null;
205
+ // The inner coroutine's own entry: one `parameter` + `binding-write` pair
206
+ // per bridged cell, in the SAME order `innerAbi.parameters` declares them,
207
+ // followed by the rest of the body exactly as it was -- reachable rewrites
208
+ // and all.
209
+ let innerOrdinal = 0;
210
+ const innerEntryOperations = [];
211
+ bridged.forEach((id, ordinal) => {
212
+ const representation = bridgedRepresentations.get(id);
213
+ const paramResult = irValueId(innerPhysicalBodyId, innerOrdinal++);
214
+ innerEntryOperations.push({ kind: 'parameter', lineage, ordinal, result: { id: paramResult, representation } });
215
+ innerEntryOperations.push({
216
+ kind: 'binding-write',
217
+ lineage,
218
+ declaration: innerDeclarationOf.get(id),
219
+ value: { value: paramResult, representation }
220
+ });
221
+ });
222
+ for (const operation of tailOperations)
223
+ innerEntryOperations.push(rewriteDeclaration(operation, innerDeclarationOf));
224
+ const innerEntryTerminator = cutBlock.terminator;
225
+ const innerEntryBlockId = irBlockId(innerPhysicalBodyId, 0);
226
+ const innerEntryBlock = { id: innerEntryBlockId, operations: innerEntryOperations, terminator: innerEntryTerminator };
227
+ const innerRestBlocks = restBlockIds.map((id) => {
228
+ const block = body.blocks.get(id);
229
+ if (!block)
230
+ throw new Error(`generator split: body ${body.owner} lists block ${id} in blockOrder but has no matching block`);
231
+ return {
232
+ id,
233
+ operations: block.operations.map((operation) => rewriteDeclaration(operation, innerDeclarationOf)),
234
+ terminator: block.terminator
235
+ };
236
+ });
237
+ const innerBlockOrder = [innerEntryBlockId, ...restBlockIds];
238
+ const innerBlocks = new Map([
239
+ [innerEntryBlockId, innerEntryBlock],
240
+ ...innerRestBlocks.map((block) => [block.id, block])
241
+ ]);
242
+ const allInnerBlocks = [innerEntryBlock, ...innerRestBlocks];
243
+ if (!isSelfContained(allInnerBlocks, innerIteratorCloseRegions))
244
+ return null;
245
+ const inner = {
246
+ owner: innerPhysicalBodyId,
247
+ sourceOwner: innerOwnerId,
248
+ abi: innerAbi,
249
+ construct: null,
250
+ generator: true,
251
+ entry: innerEntryBlockId,
252
+ blocks: innerBlocks,
253
+ blockOrder: innerBlockOrder,
254
+ values: valuesIndexOf(allInnerBlocks),
255
+ tryRegions: innerRegions,
256
+ iteratorCloseRegions: innerIteratorCloseRegions
257
+ };
258
+ // The outer half: the same declared signature, ending where the boundary
259
+ // says to -- an allocation of the inner coroutine (rendered, like any
260
+ // other never-escaping closure allocation, as a direct call -- see
261
+ // `targets/cpp/emit.ts`'s `registerDirectCalleeOfDeadValue`), a read of
262
+ // every bridged cell's CURRENT value, and a call forwarding them, whose
263
+ // result this returns unchanged.
264
+ const outerBlocksList = body.blockOrder.filter((id) => boundary.outerBlocks.has(id));
265
+ let outerOrdinal = 0;
266
+ const nextOuterValue = () => irValueId(body.owner, 1_000_000 + outerOrdinal++);
267
+ const extraOuterOperations = [];
268
+ const calleeRepresentation = { kind: 'function', functionId: innerOwnerId, abi: innerAbi };
269
+ const calleeResult = nextOuterValue();
270
+ extraOuterOperations.push({
271
+ kind: 'allocate-callable',
272
+ lineage,
273
+ functionId: innerOwnerId,
274
+ captures: [],
275
+ result: { id: calleeResult, representation: calleeRepresentation }
276
+ });
277
+ let receiverOperand = null;
278
+ if (needsReceiver && abi.receiver !== null) {
279
+ const receiverRepresentation = abi.receiver;
280
+ const receiverResult = nextOuterValue();
281
+ extraOuterOperations.push({ kind: 'receiver', lineage, result: { id: receiverResult, representation: receiverRepresentation } });
282
+ receiverOperand = { value: receiverResult, representation: receiverRepresentation };
283
+ }
284
+ const argumentOperands = bridged.map((id) => {
285
+ const representation = bridgedRepresentations.get(id);
286
+ const readResult = nextOuterValue();
287
+ extraOuterOperations.push({ kind: 'binding-read', lineage, declaration: id, result: { id: readResult, representation } });
288
+ return { value: readResult, representation };
289
+ });
290
+ const callResult = nextOuterValue();
291
+ extraOuterOperations.push({
292
+ kind: 'call',
293
+ lineage,
294
+ callee: { value: calleeResult, representation: calleeRepresentation },
295
+ receiver: receiverOperand,
296
+ arguments: argumentOperands,
297
+ result: { id: callResult, representation: abi.result }
298
+ });
299
+ const outerCutBlock = {
300
+ id: boundary.block,
301
+ operations: [...headOperations, ...extraOuterOperations],
302
+ terminator: { kind: 'return', lineage: null, value: { value: callResult, representation: abi.result } }
303
+ };
304
+ const outerBlocks = new Map(outerBlocksList.map((id) => [id, id === boundary.block ? outerCutBlock : body.blocks.get(id)]));
305
+ const allOuterBlocks = outerBlocksList.map((id) => outerBlocks.get(id));
306
+ if (!isSelfContained(allOuterBlocks, outerIteratorCloseRegions))
307
+ return null;
308
+ const outer = {
309
+ ...body,
310
+ generator: false,
311
+ generatorPrologueBoundary: null,
312
+ blockOrder: outerBlocksList,
313
+ blocks: outerBlocks,
314
+ values: valuesIndexOf(allOuterBlocks),
315
+ tryRegions: outerRegions,
316
+ iteratorCloseRegions: outerIteratorCloseRegions
317
+ };
318
+ const violations = [...verifyIrBody(outer), ...verifyIrBody(inner)];
319
+ if (violations.length > 0)
320
+ return null;
321
+ const nextPlacements = new Map(placements);
322
+ for (const [originalId, newId] of innerDeclarationOf) {
323
+ nextPlacements.set(newId, {
324
+ storage: { kind: 'local', owner: innerOwnerId },
325
+ representation: bridgedRepresentations.get(originalId) ?? null
326
+ });
327
+ }
328
+ return { outer, inner, placements: nextPlacements };
329
+ };