@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,118 @@
1
+ import { stringConstantsOf } from './dead-values.js';
2
+ /**
3
+ * Whether ANYTHING in the program can make a native object's own data
4
+ * properties non-writable or the object itself non-extensible.
5
+ *
6
+ * Every native field store guards against exactly that -- `Object.freeze(o)`
7
+ * followed by `o.x = 1` must throw -- and the guard is a presence bit, an
8
+ * attribute bit, the process-wide restriction counter and, when that counter
9
+ * is nonzero, a registry lookup in a call the C++ compiler has to assume can
10
+ * write anything. In a loop that is the difference between a field living in
11
+ * a register and a field living in memory: `method_calls` reloaded
12
+ * `this.value` through the guard on every turn, 25.6 ms against 18.6 for the
13
+ * same loop with the field in a register.
14
+ *
15
+ * So the emitter asks the whole unit first. Integrity is restricted only by
16
+ * `Object.freeze` / `seal` / `preventExtensions` and by a descriptor
17
+ * definition (`defineProperty`, `defineProperties`, their `Reflect` twins),
18
+ * every one of which is a member read the IR shows -- through a host method
19
+ * binding, or as a constant key on whatever receiver -- plus two implicit
20
+ * sources: a tagged template's strings object is born frozen, and an IR
21
+ * `define-own-property` with a non-default attribute states a restriction of
22
+ * its own (an object literal's definitions all carry the defaults). Nothing
23
+ * else in the runtime freezes a user object.
24
+ *
25
+ * Fail-closed on the shapes this cannot see through: a computed key read off
26
+ * a dynamic, host or unresolved receiver could name any of those members
27
+ * (`(Object as any)[name]`), and so counts as restricting. A program whose
28
+ * typed code never touches integrity keeps the fast stores; a program that
29
+ * reaches for it anywhere -- or that reads computed members off `any` --
30
+ * keeps every guard.
31
+ */
32
+ export const integrityRestrictionsOf = (bodies) => {
33
+ for (const body of bodies) {
34
+ const keys = stringConstantsOf(body);
35
+ for (const block of body.blocks.values()) {
36
+ for (const operation of block.operations) {
37
+ if (operation.kind === 'allocate-template-object')
38
+ return true;
39
+ // An object literal defines each of its properties this way, with the
40
+ // three attributes at their defaults; only a definition that turns one
41
+ // OFF restricts anything.
42
+ if (operation.kind === 'define-own-property') {
43
+ const { writable, enumerable, configurable } = operation.attributes;
44
+ if (!writable || !enumerable || !configurable)
45
+ return true;
46
+ continue;
47
+ }
48
+ if (operation.kind !== 'get')
49
+ continue;
50
+ if (operation.hostMethod !== undefined && restrictingMembers.has(operation.hostMethod.member))
51
+ return true;
52
+ const key = keys.get(operation.key.value);
53
+ if (key !== undefined) {
54
+ if (restrictingMembers.has(key))
55
+ return true;
56
+ continue;
57
+ }
58
+ const receiver = operation.receiver.representation;
59
+ if (receiver.kind === 'dynamic' || receiver.kind === 'unresolved' || receiver.kind === 'native-handle')
60
+ return true;
61
+ }
62
+ }
63
+ }
64
+ return false;
65
+ };
66
+ /**
67
+ * `eval` is here because evaluated source can do all of the above out of the
68
+ * compiler's sight; `Function` for the same reason.
69
+ */
70
+ const restrictingMembers = new Set([
71
+ 'freeze',
72
+ 'seal',
73
+ 'preventExtensions',
74
+ 'defineProperty',
75
+ 'defineProperties',
76
+ 'eval',
77
+ 'Function'
78
+ ]);
79
+ /**
80
+ * Whether ANYTHING in the program can delete a declared field of a generated
81
+ * struct.
82
+ *
83
+ * A required field's presence bit starts `true` and only `delete` ever clears
84
+ * it; an attribute triple only the integrity operations above ever change. So
85
+ * when neither can happen, both are program-wide constants for every struct,
86
+ * and `records.ts` states them once per struct (`static inline` members)
87
+ * instead of once per instance -- on `bench/comparison/fixtures/binary_trees.ts`
88
+ * that is three presence bytes and three attribute bytes off every one of a
89
+ * million nodes whose whole cost is cache misses.
90
+ *
91
+ * Fail-closed the same way `integrityRestrictionsOf` is: a `delete` whose
92
+ * receiver is anything but a dictionary (the one carrier with no fixed
93
+ * fields) counts, so does `Reflect.deleteProperty`, and a receiver the
94
+ * program only knows dynamically counts because it could be any struct.
95
+ */
96
+ export const fixedFieldDeletionsOf = (bodies) => {
97
+ for (const body of bodies) {
98
+ const keys = stringConstantsOf(body);
99
+ for (const block of body.blocks.values()) {
100
+ for (const operation of block.operations) {
101
+ if (operation.kind === 'delete') {
102
+ const receiver = operation.receiver.representation;
103
+ const carrier = receiver.kind === 'optional' ? receiver.payload : receiver;
104
+ if (carrier.kind !== 'dictionary')
105
+ return true;
106
+ continue;
107
+ }
108
+ if (operation.kind !== 'get')
109
+ continue;
110
+ if (operation.hostMethod?.member === 'deleteProperty')
111
+ return true;
112
+ if (keys.get(operation.key.value) === 'deleteProperty')
113
+ return true;
114
+ }
115
+ }
116
+ }
117
+ return false;
118
+ };
@@ -0,0 +1,4 @@
1
+ import type { IrValueId } from '../identity/ids.js';
2
+ import { type IrBody } from './model.js';
3
+ /** A private protocol cursor never crosses a carrier/ABI boundary or gets copied. */
4
+ export declare const localIteratorValuesOf: (body: IrBody) => ReadonlySet<IrValueId>;
@@ -0,0 +1,27 @@
1
+ import { allOperationsOf } from './model.js';
2
+ import { operandsOfIrOperation } from './queries.js';
3
+ /** A private protocol cursor never crosses a carrier/ABI boundary or gets copied. */
4
+ export const localIteratorValuesOf = (body) => {
5
+ const candidates = new Set();
6
+ const escapes = new Set();
7
+ for (const block of body.blocks.values()) {
8
+ for (const operation of allOperationsOf(block)) {
9
+ if (operation.kind === 'get-iterator')
10
+ candidates.add(operation.result.id);
11
+ for (const operand of operandsOfIrOperation(operation)) {
12
+ if ((operation.kind === 'iterator-next' || operation.kind === 'iterator-done') &&
13
+ operation.iterator.value === operand.value &&
14
+ (operation.kind !== 'iterator-next' || operation.value === null))
15
+ continue;
16
+ escapes.add(operand.value);
17
+ }
18
+ }
19
+ }
20
+ // A cleanup region names the iterator from a nested C++ scope, so it cannot
21
+ // be an inline local cursor at its get-iterator site.
22
+ for (const region of body.iteratorCloseRegions ?? [])
23
+ candidates.delete(region.iterator.value);
24
+ for (const value of escapes)
25
+ candidates.delete(value);
26
+ return candidates;
27
+ };
@@ -0,0 +1,4 @@
1
+ import type { IrBlockId } from './model.js';
2
+ import type { AllocationOperation } from '../semantics/model/operations.js';
3
+ import { type LoweringContext } from './lower-operands.js';
4
+ export declare const lowerAllocation: (ctx: LoweringContext, block: IrBlockId, operation: AllocationOperation) => void;
@@ -0,0 +1,325 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ import { operandOf } from '../semantics/model/operands.js';
3
+ import { IrLoweringBlockedError } from './lower-graph.js';
4
+ import { orderedOperandsOf, recordLayoutOf, registerResult, requireLineage, requireResultRepresentation, resolveRequiredOperand, enterRequiredOperand } from './lower-operands.js';
5
+ /**
6
+ * Allocation: the operations that mint a new object.
7
+ *
8
+ * Split out of `lower.ts` on the family boundary the semantic model already
9
+ * draws, so the file that dispatches every family does not also carry one
10
+ * family's whole implementation.
11
+ */
12
+ /**
13
+ * `[a, b]` whose type is a tuple, allocated as the record it is.
14
+ *
15
+ * The fields are matched to elements by *position*, because a tuple's key is
16
+ * its position -- the layout's own key for slot `n` is the string `"n"`, and
17
+ * reading it back that way is what keeps this and `cppRecordFieldName` from
18
+ * being two opinions about the same member. A hole has no tuple meaning (the
19
+ * language has no elision in a tuple type) and an element with no field, or a
20
+ * field with no element, means this lowering and the plan disagree about the
21
+ * arity, which is refused rather than padded.
22
+ */
23
+ const lowerTupleLiteral = (ctx, block, operation, operands, tuple, representation) => {
24
+ const lineage = requireLineage(operation);
25
+ const layout = recordLayoutOf(ctx, tuple);
26
+ if (!layout) {
27
+ throw new IrLoweringBlockedError(`an array literal carries "${representationKey(tuple)}", which states no record layout to place its elements into`);
28
+ }
29
+ if (layout.length !== operands.length) {
30
+ throw new IrLoweringBlockedError(`an array literal writes ${operands.length} element(s) into a layout of ${layout.length} field(s); ` +
31
+ 'a tuple carrier and its literal have to agree on arity');
32
+ }
33
+ const fields = layout.map((field, index) => {
34
+ const operand = operands[index];
35
+ if (!operand || operand.source.kind === 'absent') {
36
+ throw new IrLoweringBlockedError(`an array literal leaves position ${index} elided, which a tuple field cannot represent`);
37
+ }
38
+ if (field.key !== String(index)) {
39
+ throw new IrLoweringBlockedError(`an array literal's field ${index} is keyed "${field.key}"; a tuple's key is its position, so this layout is not a tuple's`);
40
+ }
41
+ return { key: field.key, value: enterRequiredOperand(ctx, block, lineage, operation, operand) };
42
+ });
43
+ registerResult(ctx, operation, ctx.builder.allocateRecord(block, lineage, fields, representation));
44
+ };
45
+ /**
46
+ * An array literal's own `element`/`spread` operands, merged back into one
47
+ * source-ordered sequence.
48
+ *
49
+ * `allocations.ts` publishes an ordinary element under role `element` and an
50
+ * admitted plain-Array spread's own source under the distinct role `spread`,
51
+ * both keyed by the position they occupy in the element SEQUENCE the literal
52
+ * builds -- one shared counter, so merging the two roles by ordinal recovers
53
+ * exactly the order the literal was written in, without either role needing to
54
+ * know the other exists. That position is not the syntactic index once a
55
+ * closed-tuple spread has expanded one written element into several
56
+ * (`tuple-spread.ts`), which is why the counter is the producer's and not
57
+ * `forEach`'s.
58
+ */
59
+ const arrayLiteralSlotsOf = (operation) => {
60
+ const elements = orderedOperandsOf(operation, 'element').map((operand) => ({
61
+ ordinal: operand.ordinal,
62
+ kind: 'element',
63
+ operand
64
+ }));
65
+ const spreads = orderedOperandsOf(operation, 'spread').map((operand) => ({ ordinal: operand.ordinal, kind: 'spread', operand }));
66
+ return [...elements, ...spreads].sort((left, right) => left.ordinal - right.ordinal);
67
+ };
68
+ export const lowerAllocation = (ctx, block, operation) => {
69
+ const lineage = requireLineage(operation);
70
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an allocation operation');
71
+ switch (operation.allocated) {
72
+ case 'object-literal': {
73
+ // The carrier decides the machinery. A literal whose type is a record
74
+ // allocates a record: giving it an ordinary object instead would mean
75
+ // laying out a dictionary for a value the plan already proved has a
76
+ // fixed, native shape, and every field access after it would then have
77
+ // to agree with a layout nobody selected. Fields install as their own
78
+ // `define-own-property` operations, so none are supplied here.
79
+ // A `dictionary` carrier is native storage for the same reason a record
80
+ // is -- the plan proved the literal's whole layout is one keyed
81
+ // container -- so it allocates through the same primitive.
82
+ // `record-with-index` is the split layout of the same struct (named
83
+ // fields plus an index-signature sidecar member) -- `cppTypeOf` spells
84
+ // it identically to `record`, and `emitAllocateRecord` already accepts
85
+ // it -- so routing it anywhere but here left every such literal on the
86
+ // unimplemented `OrdinaryObject` path despite a plan that had already
87
+ // proved it native. Only a carrier the plan left as the dynamic object
88
+ // substrate still gets an `OrdinaryObject`.
89
+ const carrier = representation.kind === 'borrowed-ref' ? representation.referent : representation;
90
+ const native = carrier.kind === 'record' ||
91
+ carrier.kind === 'native-record-ref' ||
92
+ carrier.kind === 'dictionary' ||
93
+ carrier.kind === 'record-with-index';
94
+ const allocate = native
95
+ ? ctx.builder.allocateRecord(block, lineage, [], representation)
96
+ : ctx.builder.allocateOrdinaryObject(block, lineage, representation);
97
+ registerResult(ctx, operation, allocate);
98
+ return;
99
+ }
100
+ case 'array-literal': {
101
+ // A tuple is a record whose keys are positions -- there is no separate
102
+ // tuple carrier by design -- so a literal the plan gave a record carrier
103
+ // allocates a record, exactly as an object literal with a record carrier
104
+ // does. Building an Array exotic object for it instead would allocate
105
+ // length, holes and index-key semantics for a value whose layout the
106
+ // plan already proved is a fixed struct. A `spread` operand never
107
+ // reaches this branch: `allocations.ts` publishes that role ONLY for a
108
+ // plain-Array source (a closed-tuple source is expanded into ordinary
109
+ // `element` operands instead, one per position, by `tuple-spread.ts`),
110
+ // and a plain-Array-typed literal never derives to a record carrier --
111
+ // so one arriving here would be a producer/representation disagreement
112
+ // this lowering does not try to paper over. The `element` operands it
113
+ // does read are already the post-expansion run, keyed by their position
114
+ // in the element SEQUENCE rather than in the written syntax, which is
115
+ // exactly the key `lowerTupleLiteral` matches against the layout.
116
+ const tuple = representation.kind === 'borrowed-ref' ? representation.referent : representation;
117
+ if (tuple.kind === 'record' || tuple.kind === 'native-record-ref') {
118
+ lowerTupleLiteral(ctx, block, operation, orderedOperandsOf(operation, 'element'), tuple, representation);
119
+ return;
120
+ }
121
+ const elements = arrayLiteralSlotsOf(operation).map((slot) => {
122
+ if (slot.kind === 'spread') {
123
+ let source = resolveRequiredOperand(ctx, block, lineage, slot.operand);
124
+ // `hasNativeIterationCursor` admits an optional native source through
125
+ // its present payload. ArrayAccumulation still starts by calling
126
+ // GetIterator, so an absent source throws; it is not an empty range.
127
+ // Unwrapping here makes the range-copy lanes below read the same
128
+ // payload carrier the census admitted, rather than handing an
129
+ // Optional<T> to an Array/Set/string cursor that cannot consume it.
130
+ if (source.representation.kind === 'optional') {
131
+ const payload = source.representation.payload;
132
+ const value = ctx.builder.compute(block, lineage, 'require-iterable-present', 'RequireIterablePresent', [source], payload);
133
+ source = { value, representation: payload };
134
+ }
135
+ // Dynamic spread operands cite the already-acquired iterator
136
+ // record. A `Value` does not become an ArrayObject projection just
137
+ // because it is being spread: only the gather primitive may drain
138
+ // it, and only into an explicitly dynamic-element destination.
139
+ if (source.representation.kind === 'dynamic') {
140
+ // A `dynamic` destination cell IS an explicitly dynamic-element
141
+ // one: `emitAllocateArrayObject`'s `representation.kind ===
142
+ // 'dynamic'` branch allocates `ArrayObject<gea::Value>`, drains
143
+ // the iterator through `runtime::iterator::appendGather` and
144
+ // boxes the result, for every reason a cell can be `dynamic` --
145
+ // `opt-in-fallback` (this literal's own declared fallback) and
146
+ // `declared-any-never-narrowed` (`const copied = [...anySource]`
147
+ // with `copied` never subsequently narrowed) alike. `reason`
148
+ // records only WHY the cell is dynamic, not a different runtime
149
+ // representation, so checking one specific reason here refused a
150
+ // capability the emitter grants to every `dynamic` result. Reading
151
+ // the element carrier off the `array-object` spelling alone would
152
+ // separately refuse the one carrier where the element type is
153
+ // fixed by construction, so a capability the target certifies and
154
+ // the emitter renders had no lowering to reach it either way.
155
+ const dynamicDestination = tuple.kind === 'dynamic';
156
+ if (!dynamicDestination && (tuple.kind !== 'array-object' || tuple.element.kind !== 'dynamic')) {
157
+ throw new IrLoweringBlockedError(`an array literal gathers dynamic iterator values into a "${tuple.kind === 'array-object' ? representationKey(tuple.element) : tuple.kind}" element carrier; ` +
158
+ 'per-element dynamic conversion is not installed');
159
+ }
160
+ return { kind: 'gather', iterator: source };
161
+ }
162
+ // The element carrier the source's own range copy will produce, or
163
+ // `null` when this source has no native range copy at all. The four
164
+ // sources here are exactly the four `producers/shared.ts`'s
165
+ // `hasNativeIterationCursor` admits, and the check is a fail-closed
166
+ // re-statement of that admission rather than a second opinion.
167
+ //
168
+ // A `Map` is the one whose element cannot be named from the source's
169
+ // own carrier: it yields a freshly built `[K, V]` PAIR, whose record
170
+ // shape id lives on the DESTINATION's element carrier and nowhere on
171
+ // the collection. So this arm reads the destination's own pair --
172
+ // which `emit-arrays.ts` then re-checks field by field against the
173
+ // collection's key and value before spelling `appendMapRange`.
174
+ const collection = source.representation.kind === 'keyed-collection' ? source.representation : null;
175
+ const destinationElement = tuple.kind === 'array-object' ? tuple.element : null;
176
+ const spreadElement = source.representation.kind === 'array-object'
177
+ ? source.representation.element
178
+ : collection?.family === 'set'
179
+ ? collection.key
180
+ : collection?.family === 'map'
181
+ ? destinationElement
182
+ : source.representation.kind === 'string'
183
+ ? { kind: 'string' }
184
+ : source.representation.kind === 'iterator'
185
+ ? source.representation.element
186
+ : null;
187
+ if (spreadElement === null) {
188
+ throw new IrLoweringBlockedError(`an array literal spreads a "${representationKey(source.representation)}" source; the native range copy only covers an ` +
189
+ '"array-object", a "Set", a "Map", a "string" and a cursor');
190
+ }
191
+ if (tuple.kind !== 'array-object' || representationKey(spreadElement) !== representationKey(tuple.element)) {
192
+ throw new IrLoweringBlockedError(`an array literal spreads a source whose element carrier ("${representationKey(spreadElement)}") does not match ` +
193
+ `this literal's own element carrier ("${tuple.kind === 'array-object' ? representationKey(tuple.element) : tuple.kind}"); a mismatch would need a ` +
194
+ 'per-element conversion into the destination carrier, which this range copy does not perform');
195
+ }
196
+ return { kind: 'spread', value: source, from: 0 };
197
+ }
198
+ return slot.operand.source.kind === 'absent'
199
+ ? { kind: 'hole' }
200
+ : { kind: 'element', value: enterRequiredOperand(ctx, block, lineage, operation, slot.operand) };
201
+ });
202
+ registerResult(ctx, operation, ctx.builder.allocateArrayObject(block, lineage, elements, representation));
203
+ return;
204
+ }
205
+ case 'class-constructor-object': {
206
+ const shape = ctx.graph.structuralTypes.get(operation.shape)?.shape;
207
+ if (!shape || shape.kind !== 'class-constructor') {
208
+ throw new IrLoweringBlockedError('a class-constructor-object allocation has no class-constructor shape to recover its declaration from');
209
+ }
210
+ const captures = orderedOperandsOf(operation, 'capture').map((operand) => resolveRequiredOperand(ctx, block, lineage, operand));
211
+ // The heritage event and this allocation are siblings from one
212
+ // `contributeClass` call, and both name the class through the
213
+ // producer's identities -- which, inside a monomorphized copy of a
214
+ // generic class, carry that copy's specialization (`decl|f80|43@0` for
215
+ // hono's `Hono<E, S, BasePath>`). The structural shape names the class
216
+ // by its unspecialized declaration, which is right for the one C++
217
+ // struct every copy shares but pairs with no event of a generic class:
218
+ // `Hono` was evaluated with no heritage, its method-state owner had no
219
+ // parent, and the first `HonoBase` method read as a value on an instance
220
+ // aborted with "no matching class evaluation". A class expression with
221
+ // no members publishes no `classDeclaration`; the shape is its name.
222
+ const evaluatedClass = operation.classDeclaration ?? shape.declaration;
223
+ const heritageEvent = [...ctx.graph.operations.values()].find((event) => event.family === 'class-lifecycle' && event.event === 'evaluate-heritage' && event.classDeclaration === evaluatedClass);
224
+ const heritageOperand = heritageEvent ? operandOf(heritageEvent, 'heritage') : undefined;
225
+ const heritage = heritageOperand && heritageOperand.source.kind !== 'absent'
226
+ ? resolveRequiredOperand(ctx, block, lineage, heritageOperand)
227
+ : undefined;
228
+ // `GEA_HERITAGE_DEBUG=1`: one stderr row per evaluated class saying
229
+ // whether its `extends` reached this allocation. A derived class
230
+ // evaluated with no heritage operand allocates a method-state owner with
231
+ // no parent, and the first base method read as a VALUE on one of its
232
+ // instances aborts ("no matching class evaluation") with nothing in the
233
+ // message naming the class -- this row is where that gap is visible.
234
+ if (process.env.GEA_HERITAGE_DEBUG !== undefined)
235
+ console.error(`[HERITAGE] class=${String(shape.declaration)} event=${heritageEvent ? 'found' : 'missing'} ` +
236
+ `source=${heritageOperand?.source.kind ?? 'none'} layoutOnly=${String(heritageEvent !== undefined && 'classLayoutOnly' in heritageEvent && heritageEvent.classLayoutOnly === true)} ` +
237
+ `representation=${heritage?.representation.kind ?? 'none'}` +
238
+ (heritageEvent
239
+ ? ''
240
+ : ` heritageEventsInFile=${[...ctx.graph.operations.values()]
241
+ .flatMap((event) => event.family === 'class-lifecycle' &&
242
+ event.event === 'evaluate-heritage' &&
243
+ String(event.classDeclaration).startsWith(String(shape.declaration).split('|').slice(0, 2).join('|'))
244
+ ? [String(event.classDeclaration)]
245
+ : [])
246
+ .join(',')}`));
247
+ // The PHYSICAL class this constructor object constructs -- the carrier's
248
+ // own answer (`constructor-family.members[0]`, derive.ts's
249
+ // `physicalClassDeclarationOf`): the root for a class with one layout,
250
+ // and `decl|f0|36@1` for the second layout of a generic instantiated
251
+ // at two, whose struct and construct thunk are named by exactly that id
252
+ // (`projection/classes.ts`). The shape's own declaration is always the
253
+ // root, which names no struct once there are two.
254
+ const constructed = representation.kind === 'constructor-family' && representation.members[0] !== undefined
255
+ ? representation.members[0]
256
+ : shape.declaration;
257
+ registerResult(ctx, operation, ctx.builder.allocateConstructor(block, lineage, constructed, captures, representation, heritage));
258
+ return;
259
+ }
260
+ case 'function-object': {
261
+ const callable = operation.callable;
262
+ if (!callable) {
263
+ throw new IrLoweringBlockedError('a function-object allocation names no function to allocate a callable for');
264
+ }
265
+ // Captures are the operands the allocation carries; a function that closes
266
+ // over nothing carries none, and that is the whole capture set, not a
267
+ // partial one this layer would have to complete from elsewhere.
268
+ const captures = orderedOperandsOf(operation, 'capture').map((operand) => resolveRequiredOperand(ctx, block, lineage, operand));
269
+ registerResult(ctx, operation, ctx.builder.allocateCallable(block, lineage, callable, captures, representation));
270
+ return;
271
+ }
272
+ case 'template-object': {
273
+ // The texts came off the template literal's own tokens as constants, and
274
+ // they are read back here as constants: `orderedOperandsOf` keeps them in
275
+ // the ordinal order the producer wrote them in, which is segment order.
276
+ // A non-constant operand would mean something computed a segment, which
277
+ // no step of the language does, so it is refused rather than resolved.
278
+ const raw = orderedOperandsOf(operation, 'raw').map((operand) => {
279
+ if (operand.source.kind !== 'constant') {
280
+ throw new IrLoweringBlockedError("a template object's raw segment is not a constant; template segments are source text, never computed values");
281
+ }
282
+ if (operand.source.literal !== 'string') {
283
+ throw new IrLoweringBlockedError("a template object's raw segment is not a string constant; Template Raw Values are always strings");
284
+ }
285
+ return operand.source.text;
286
+ });
287
+ const cooked = orderedOperandsOf(operation, 'cooked').map((operand) => {
288
+ if (operand.source.kind !== 'constant') {
289
+ throw new IrLoweringBlockedError("a template object's cooked segment is not a constant; template segments are source values, never computed values");
290
+ }
291
+ if (operand.source.literal === 'undefined')
292
+ return { kind: 'undefined' };
293
+ if (operand.source.literal === 'string')
294
+ return { kind: 'string', text: operand.source.text };
295
+ throw new IrLoweringBlockedError("a template object's cooked segment is neither a string nor undefined");
296
+ });
297
+ if (cooked.length !== raw.length) {
298
+ throw new IrLoweringBlockedError(`a template object carries ${cooked.length} cooked segment(s) and ${raw.length} raw one(s); GetTemplateObject builds both arrays from the same segment list`);
299
+ }
300
+ registerResult(ctx, operation, ctx.builder.allocateTemplateObject(block, lineage, cooked, raw, representation));
301
+ return;
302
+ }
303
+ case 'regexp-object': {
304
+ // The pattern and its flags came off the literal's own token as
305
+ // constants and are read back here as constants, exactly as a template
306
+ // object's segments are above. A non-constant operand would mean
307
+ // something computed a pattern, which no step of the language does for a
308
+ // LITERAL (`new RegExp(expr)` is an invocation, not this operation), so
309
+ // it is refused rather than resolved.
310
+ const textOf = (role) => {
311
+ const found = operandOf(operation, role);
312
+ if (!found)
313
+ throw new IrLoweringBlockedError(`a regexp allocation carries no ${role} operand; the literal's own token is where both come from`);
314
+ if (found.source.kind !== 'constant') {
315
+ throw new IrLoweringBlockedError(`a regexp allocation's ${role} is not a constant; a literal's pattern and flags are source text, never computed values`);
316
+ }
317
+ return found.source.text;
318
+ };
319
+ registerResult(ctx, operation, ctx.builder.allocateRegExp(block, lineage, textOf('pattern-source'), textOf('pattern-flags'), representation));
320
+ return;
321
+ }
322
+ case 'construction-result':
323
+ throw new IrLoweringBlockedError('a construction-result allocation has no independent IR primitive; the construct operation that follows it produces the instance directly');
324
+ }
325
+ };
@@ -0,0 +1,15 @@
1
+ import type { OperationId } from '../identity/ids.js';
2
+ import type { SemanticGraph } from '../semantics/model/graph.js';
3
+ import type { IrBlockId } from './model.js';
4
+ /**
5
+ * Where a `break` or `continue` lands.
6
+ *
7
+ * The graph states it as a completion edge, so both answers -- which operation
8
+ * the transfer targets, and which block that operation was lowered into -- are
9
+ * read from that one edge rather than re-derived from the syntax the transfer
10
+ * sat in. A forward transfer to an operation this owner has not lowered yet is
11
+ * refused rather than pointed at a block that does not exist.
12
+ */
13
+ /** The operation a `break`/`continue` transfers to, as the graph states it. */
14
+ export declare const completionTargetOf: (graph: SemanticGraph, from: OperationId, completion: "break" | "continue") => OperationId | null;
15
+ export declare const findCompletionTargetBlock: (graph: SemanticGraph, blockStarts: ReadonlyMap<OperationId, IrBlockId>, from: OperationId, completion: "break" | "continue") => IrBlockId;
@@ -0,0 +1,25 @@
1
+ import { IrLoweringBlockedError } from './lower-graph.js';
2
+ /**
3
+ * Where a `break` or `continue` lands.
4
+ *
5
+ * The graph states it as a completion edge, so both answers -- which operation
6
+ * the transfer targets, and which block that operation was lowered into -- are
7
+ * read from that one edge rather than re-derived from the syntax the transfer
8
+ * sat in. A forward transfer to an operation this owner has not lowered yet is
9
+ * refused rather than pointed at a block that does not exist.
10
+ */
11
+ /** The operation a `break`/`continue` transfers to, as the graph states it. */
12
+ export const completionTargetOf = (graph, from, completion) => {
13
+ const edge = graph.edges.find((candidate) => candidate.kind === 'completion' && candidate.from === from && candidate.completion === completion);
14
+ return edge ? edge.to : null;
15
+ };
16
+ export const findCompletionTargetBlock = (graph, blockStarts, from, completion) => {
17
+ const edge = graph.edges.find((candidate) => candidate.kind === 'completion' && candidate.from === from && candidate.completion === completion);
18
+ if (!edge)
19
+ throw new IrLoweringBlockedError(`no completion edge of kind "${completion}" names a target for this control operation`);
20
+ const target = blockStarts.get(edge.to);
21
+ if (!target) {
22
+ throw new IrLoweringBlockedError(`the "${completion}" target has not been lowered to a block yet; a forward transfer to a not-yet-processed operation is not supported`);
23
+ }
24
+ return target;
25
+ };
@@ -0,0 +1,5 @@
1
+ import type { FlowController } from './lower-flow.js';
2
+ import { type LoweringContext } from './lower-operands.js';
3
+ import type { DestructuringOperation } from '../semantics/model/operations.js';
4
+ import type { IrBlockId } from './model.js';
5
+ export declare const lowerDestructuring: (ctx: LoweringContext, flow: FlowController, block: IrBlockId, operation: DestructuringOperation) => void;