@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,693 @@
1
+ import { operationOfResult } from '../identity/ids.js';
2
+ import { carriesUndefined, representationKey } from '../representation/model.js';
3
+ import { operandOf } from '../semantics/model/operands.js';
4
+ import { IrLoweringBlockedError } from './lower-graph.js';
5
+ import { mergeIncoming } from './lower-narrow.js';
6
+ import { convertTo, namedOperand, reactiveFieldReadOf, recordLayoutOf, registerResult, requireLineage, requireResultRepresentation, resolveRequiredOperand } from './lower-operands.js';
7
+ /**
8
+ * Destructuring, lowered as the operations it actually is.
9
+ *
10
+ * An object pattern's element is a `[[Get]]` with a static key and nothing
11
+ * else: `const {a} = o` reads `o.a`, and there is no separate extraction step
12
+ * in the language for it to be. Lowering it as a `get` is what lets it share
13
+ * every property recipe, ownership rule, and carrier check an ordinary
14
+ * property read already goes through, instead of acquiring a second spine that
15
+ * would have to be kept in agreement with the first.
16
+ *
17
+ * An array pattern over a plain array source takes the same fast path a
18
+ * spread does: `const [a,b] = xs` reads `xs->elementAt(0)`/`xs->elementAt(1)`
19
+ * directly, and `const [head, ...tail] = xs` range-copies the remainder with
20
+ * `appendRange`, exactly as `lower-allocation.ts`'s spread handling does.
21
+ * `destructuring.ts`'s own semantic model never publishes a numeric index for
22
+ * an element, though -- each bound/elided step only cites the *shared*
23
+ * getIterator step's result as its `iterator` operand -- so the index has to
24
+ * be recovered by walking the `evaluation`-edge chain the census wires
25
+ * between them, which is what `arrayPatternIndexOf` does below. This is sound
26
+ * only because `orderOwnerOperations` (`lower-graph.ts`) already guarantees
27
+ * that chain is visited in the pattern's own written order.
28
+ *
29
+ * An array pattern over a *tuple* source (`record`/`native-record-ref` --
30
+ * `lower-allocation.ts`'s `lowerTupleLiteral` doc comment is the reason there
31
+ * is no separate tuple carrier: a tuple is a record whose keys are its
32
+ * positions) takes a second, sibling fast path: `const [a,b] = pair` reads
33
+ * `pair->gea_slot_0`/`pair->gea_slot_1`, an ordinary record field get keyed by
34
+ * the position's own string, exactly as an object pattern's `[[Get]]` already
35
+ * is. Neither fast path needs the iterator protocol -- a statically-typed
36
+ * tuple's shape is closed at compile time, so GetIterator/next() would answer
37
+ * a question a field lookup already answers directly.
38
+ *
39
+ * A `default-value` is a conditional evaluation whose guard is "the extracted
40
+ * value is `undefined`": the extraction step it is chained after is the guard,
41
+ * `gating.ts` puts the initializer in that guard's absent arm, and this merges
42
+ * the two. An object-pattern rest element over a genuinely dynamic source is
43
+ * still refused: `CopyDataProperties` over a key set computed at runtime has
44
+ * no IR primitive. Over a `record`/`native-record-ref` source, though, the key
45
+ * set is CLOSED -- TypeScript already resolved the rest binding's own type to
46
+ * `Omit<Source, K>` -- so `lowerObjectPatternRest` reads it back as an
47
+ * ordinary field-by-field copy, no different from an object literal's own
48
+ * allocation.
49
+ */
50
+ const chainSuccessorOf = (graph, id) => {
51
+ for (const edge of graph.edges) {
52
+ if (edge.kind === 'evaluation' && edge.from === id)
53
+ return edge.to;
54
+ }
55
+ return null;
56
+ };
57
+ /**
58
+ * The zero-based position of an array-pattern element, recovered by walking
59
+ * the `evaluation` chain from the pattern's own shared getIterator step until
60
+ * `target` is reached. Throws rather than returning `-1` on a broken chain: a
61
+ * `target` this walk never reaches is the semantic graph and this lowering
62
+ * disagreeing about the pattern's own element order, which is a defect to
63
+ * surface, not a position to guess at.
64
+ */
65
+ const arrayPatternIndexOf = (graph, iteratorRecord, target) => {
66
+ let current = operationOfResult(iteratorRecord);
67
+ let index = -1;
68
+ for (;;) {
69
+ const next = chainSuccessorOf(graph, current);
70
+ if (next === null) {
71
+ throw new IrLoweringBlockedError('an array-pattern element was not reachable by following the "evaluation" chain from its own shared getIterator step; ' +
72
+ "the semantic graph and this lowering disagree about the pattern's element order");
73
+ }
74
+ // Only THIS pattern's own element steps hold a position. A defaulted
75
+ // element's `default-value` step sits on the same evaluation chain right
76
+ // after its read, and counting it advanced every later position by one:
77
+ // `const [, a, b = 'B', c = 'C', d] = arr` read `c` from slot 4 and `d`
78
+ // from slot 6. An own element step is the one that names this pattern's
79
+ // iterator record as its "iterator" operand; a nested pattern's steps
80
+ // name their own.
81
+ const step = graph.operations.get(next);
82
+ const iterator = step ? operandOf(step, 'iterator') : undefined;
83
+ const own = iterator?.source.kind === 'result' && iterator.source.result === iteratorRecord;
84
+ if (own)
85
+ index += 1;
86
+ if (next === target) {
87
+ if (!own) {
88
+ throw new IrLoweringBlockedError("an array-pattern element step does not name its own pattern's iterator record; the semantic graph and this lowering disagree about the pattern's element order");
89
+ }
90
+ return index;
91
+ }
92
+ current = next;
93
+ }
94
+ };
95
+ const indexOfArrayPatternElement = (graph, iteratorOperand, target) => {
96
+ if (iteratorOperand.source.kind !== 'result') {
97
+ throw new IrLoweringBlockedError('an array-pattern element\'s own "iterator" operand names no prior result to trace back to its shared getIterator step');
98
+ }
99
+ return arrayPatternIndexOf(graph, iteratorOperand.source.result, target);
100
+ };
101
+ const lowerObjectPatternStep = (ctx, block, operation) => {
102
+ const lineage = requireLineage(operation);
103
+ const receiver = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'base'));
104
+ const keyOperand = namedOperand(operation, 'key');
105
+ const key = resolveRequiredOperand(ctx, block, lineage, keyOperand);
106
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an object destructuring step');
107
+ // `const { count } = this` reads a class field exactly as `this.count` does
108
+ // -- see `GetOperation.reactive` -- and this is the pattern's own `[[Get]]`,
109
+ // not a second read the property path already covered.
110
+ const reactive = keyOperand.source.kind === 'constant'
111
+ ? reactiveFieldReadOf(ctx.program.classes, receiver.representation, keyOperand.source.text, ctx.program.reactiveFields)
112
+ : false;
113
+ registerResult(ctx, operation, ctx.builder.get(block, lineage, receiver, key, representation, undefined, reactive));
114
+ };
115
+ /** Whether a carrier is one of the two record shapes a tuple can be given -- see `lower-allocation.ts`'s `lowerTupleLiteral` for why there is no separate tuple carrier. */
116
+ const isTupleCarrier = (kind) => kind === 'record' || kind === 'native-record-ref';
117
+ /**
118
+ * Whether a source carries a `tagged-union` all of whose arms are themselves
119
+ * tuple carriers -- `[T, ParamIndexMap] | [T, Params]`, hono's own router
120
+ * match result, is exactly this: a fixed-arity 2-tuple in EVERY arm, differing
121
+ * only in one slot's own value type.
122
+ *
123
+ * A tuple's shape is closed and known at compile time, so reading its
124
+ * position never needed the iterator protocol (`lowerTuplePatternRead`'s own
125
+ * doc). That is equally true per arm here: every arm still has the SAME fixed
126
+ * arity at the SAME positions (a tagged union's arms are already required to
127
+ * share the discriminant read that told the two apart in the first place),
128
+ * so the shared source step still has nothing for GetIterator/next() to
129
+ * resolve -- it aliases straight to the base value, one union carrier
130
+ * instead of one record carrier, and each element step reads position `i`
131
+ * off whichever arm is live. `emit-union-properties.ts`'s `taggedUnionGetText`
132
+ * already renders exactly that per-arm dispatch for a STATIC field key -- the
133
+ * identical primitive an ordinary tuple's own `[[Get]]` reaches -- so nothing
134
+ * new is needed on the emit side, only the acceptance here that a tagged
135
+ * union of tuples is as closed-shape as a lone tuple is.
136
+ */
137
+ const isTupleUnionCarrier = (representation) => representation.kind === 'tagged-union' && representation.arms.every((arm) => isTupleCarrier(arm.value.kind));
138
+ /** Whether a carrier is a source this pattern reads by SNAPSHOT rather than in place -- see `lowerArrayPatternSource`. */
139
+ const isSnapshotSource = (kind) => kind === 'string' || kind === 'keyed-collection' || kind === 'native-record-ref';
140
+ /**
141
+ * Whether a carrier is ALREADY the native cursor `gea::Iterator<E>` --
142
+ * `Generator<T>`'s own carrier (`representation/derive.ts`'s
143
+ * `GeneratorDeclarationPolicy`), reached either directly (`var [a] = g()`) or
144
+ * because the resolved `[Symbol.iterator]()` is itself a generator method
145
+ * (`producers/protocol.ts`'s `generatorRecordTypeOf`). `%GeneratorPrototype%
146
+ * [@@iterator]` returns `this` (ECMA-262 27.5.1.2), so the pattern's own
147
+ * "get iterator" step is an alias of the base value here too, exactly like the
148
+ * tuple/array-object fast paths above -- see `lowerArrayPatternSource`'s own
149
+ * widened guard and `lowerArrayPatternIteratorRead`/`lowerArrayPatternIteratorElision`
150
+ * below for the per-position reads this one cursor answers.
151
+ */
152
+ const isCursorCarrier = (kind) => kind === 'iterator';
153
+ /**
154
+ * The pattern's own shared getIterator step.
155
+ *
156
+ * For a plain array and for a tuple this aliases straight to the base value:
157
+ * neither has a separate iterator record to materialize, and every element step
158
+ * reads the base in place, by index or by field.
159
+ *
160
+ * For a `Set<T>` or a `string` it materializes an ARRAY SNAPSHOT instead --
161
+ * the identical range copy `[...set]`/`[...str]` already build -- because the
162
+ * element steps read BY POSITION and neither source offers positional access.
163
+ * The snapshot is not this lowering's own idea: `representation/publish.ts`'s
164
+ * `patternSourceSnapshotOf` is what published the `array-object` carrier this
165
+ * step selected, so the plan and the IR state one answer, and that function's
166
+ * comment carries the ECMA-262 7.4 divergence the snapshot implies. Reaching
167
+ * here with a snapshot-shaped source whose declared carrier is NOT that array
168
+ * means the override declined it (a `Map`, a weak collection), and it is
169
+ * refused rather than materialized against a carrier nothing published.
170
+ */
171
+ const lowerArrayPatternSource = (ctx, block, operation) => {
172
+ const lineage = requireLineage(operation);
173
+ let source = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'base'));
174
+ const declared = requireResultRepresentation(ctx, operation, 'iterator-record', 'an array binding pattern source');
175
+ // A position that may run past a plain array's own length, or fed by an
176
+ // enclosing pattern's own absent-capable element read, reaches here
177
+ // wrapped: `optional(...)`, and -- when the source's own element is itself
178
+ // a union like `number | number[]` -- a `tagged-union` around the payload
179
+ // `declared` resolved to (`representation/publish.ts`'s `patternSourceArmOf`
180
+ // is what resolved `declared` to that payload rather than the wrapper).
181
+ // Both are real runtime facts ECMA-262 7.4.2's `GetIterator` throws over --
182
+ // absence, and a union's non-iterable arm -- so both checks run, in
183
+ // whichever order the value wraps them, before the positional fast path
184
+ // below ever reads a position.
185
+ if (source.representation.kind === 'optional') {
186
+ const payload = source.representation.payload;
187
+ const value = ctx.builder.compute(block, lineage, 'require-iterable-present', 'RequireIterablePresent', [source], payload);
188
+ source = { value, representation: payload };
189
+ }
190
+ if (source.representation.kind === 'tagged-union' && declared.kind !== 'tagged-union') {
191
+ const armIndex = source.representation.arms.findIndex((arm) => representationKey(arm.value) === representationKey(declared));
192
+ if (armIndex < 0) {
193
+ throw new IrLoweringBlockedError(`an array binding pattern's source resolved to a tagged union none of whose arms carry the declared ` +
194
+ `"${representationKey(declared)}" iterator-record shape`);
195
+ }
196
+ const value = ctx.builder.compute(block, lineage, 'require-tagged-union-arm', String(armIndex), [source], declared);
197
+ source = { value, representation: declared };
198
+ }
199
+ if (isSnapshotSource(source.representation.kind) && declared.kind === 'array-object') {
200
+ registerResult(ctx, operation, ctx.builder.allocateArrayObject(block, lineage, [{ kind: 'spread', value: source, from: 0 }], declared));
201
+ return;
202
+ }
203
+ // The true arm of `Array.isArray(dynamicValue)` remains a `gea::Value`, not
204
+ // an `ArrayObject<Value>` projection. The dynamic carrier is the original
205
+ // object identity and its runtime metadata already records the Array exotic
206
+ // operations. Acquire the iterator through the generic protocol so a
207
+ // custom @@iterator is still observed; the runtime falls back to the
208
+ // native Array iterator only when that property is absent. A typed array
209
+ // never reaches this branch: its carrier is `array-object` above.
210
+ if (source.representation.kind === 'dynamic' && declared.kind === 'dynamic') {
211
+ registerResult(ctx, operation, ctx.builder.getIterator(block, lineage, 'iterator', source, null, declared));
212
+ return;
213
+ }
214
+ // A boxed value the program asserts to a tuple or array type
215
+ // (`(res as any)[cacheKey] as InternalCache`) is read out of its box into
216
+ // that carrier first, by the conversion census's own checked load.
217
+ if (source.representation.kind === 'dynamic' &&
218
+ (declared.kind === 'array-object' || isTupleCarrier(declared.kind) || isTupleUnionCarrier(declared))) {
219
+ const unboxed = convertTo(ctx, block, lineage, source, declared, 'array-pattern-source');
220
+ if (unboxed !== null)
221
+ source = unboxed;
222
+ }
223
+ if (source.representation.kind !== 'array-object' &&
224
+ !isTupleCarrier(source.representation.kind) &&
225
+ !isTupleUnionCarrier(source.representation) &&
226
+ !isCursorCarrier(source.representation.kind)) {
227
+ throw new IrLoweringBlockedError(`an array binding pattern's own source carries a "${source.representation.kind}" carrier; the array fast path only reads ` +
228
+ 'an "array-object" source by index, the tuple fast path only reads a "record"/"native-record-ref" source by position, a ' +
229
+ 'tagged-union-of-tuples source reads the same way per live arm, the Set/string snapshot path only covers a source whose ' +
230
+ 'own step published an "array-object", and the native cursor path only covers a source that is ALREADY a "Generator<T>" -- ' +
231
+ 'a general iterable needs the fully dynamic iterator protocol, which is not installed');
232
+ }
233
+ if (representationKey(declared) !== representationKey(source.representation)) {
234
+ throw new IrLoweringBlockedError(`an array binding pattern's source resolved to "${representationKey(source.representation)}", but its own iterator-record result ` +
235
+ `selected "${representationKey(declared)}" -- the two must agree for the fast path's per-element index reads to be sound`);
236
+ }
237
+ registerResult(ctx, operation, source.value);
238
+ };
239
+ /**
240
+ * `const [a, b] = pair` over a tuple source: a record field get keyed by the
241
+ * position's own string, the same field `lowerTupleLiteral` wrote it under.
242
+ * Never the iterator protocol -- a tuple's shape is closed and known at
243
+ * compile time, so there is nothing for GetIterator/next() to resolve that
244
+ * this field lookup does not already answer directly.
245
+ */
246
+ const lowerTuplePatternRead = (ctx, block, lineage, operation, source, index) => {
247
+ const layout = recordLayoutOf(ctx, source.representation);
248
+ if (!layout) {
249
+ throw new IrLoweringBlockedError(`an array-pattern element reads a "${representationKey(source.representation)}" source, which states no record layout to read position ${index} from`);
250
+ }
251
+ const field = layout[index];
252
+ if (!field || field.key !== String(index)) {
253
+ throw new IrLoweringBlockedError(`an array-pattern element reads position ${index} of a "${representationKey(source.representation)}" tuple, whose record layout has no field keyed "${index}"`);
254
+ }
255
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an array-pattern element');
256
+ if (representationKey(representation) !== representationKey(field.value)) {
257
+ throw new IrLoweringBlockedError(`an array-pattern element's own carrier ("${representationKey(representation)}") does not match its tuple source's field ${index} carrier ` +
258
+ `("${representationKey(field.value)}")`);
259
+ }
260
+ const key = {
261
+ value: ctx.builder.constant(block, lineage, String(index), 'string', { kind: 'string' }),
262
+ representation: { kind: 'string' }
263
+ };
264
+ registerResult(ctx, operation, ctx.builder.get(block, lineage, source, key, representation));
265
+ };
266
+ /**
267
+ * `const [a, b] = pair` over a `tagged-union` source whose every arm is a
268
+ * tuple -- the union-of-arms mirror of `lowerTuplePatternRead` immediately
269
+ * above, sharing its own reasoning: position `index` is closed and known at
270
+ * compile time in EVERY arm, so there is nothing for GetIterator/next() to
271
+ * resolve here either.
272
+ *
273
+ * The difference from a lone tuple is the per-arm check: every arm's own
274
+ * record layout must have a field at `index`, and (deliberately as strict as
275
+ * `lowerTuplePatternRead`'s own single-source check, rather than reaching for
276
+ * the C++ backend's `narrowedLoadText` widening) that field's carrier must be
277
+ * the EXACT one this element publishes -- a mismatched arm is refused by name
278
+ * rather than silently routed through a reconciliation this IR layer has no
279
+ * business performing; `emit-union-properties.ts`'s `taggedUnionGetText`
280
+ * still reconciles per arm at emission time for the union's OWN published
281
+ * result, this only has to agree that every arm's raw field is the same
282
+ * shape to begin with.
283
+ */
284
+ const lowerTaggedUnionTuplePatternRead = (ctx, block, lineage, operation, source, index) => {
285
+ const receiver = source.representation;
286
+ if (receiver.kind !== 'tagged-union') {
287
+ throw new IrLoweringBlockedError('an array-pattern element expected a "tagged-union" source to read a tuple-union position from');
288
+ }
289
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an array-pattern element');
290
+ for (const arm of receiver.arms) {
291
+ const layout = recordLayoutOf(ctx, arm.value);
292
+ if (!layout) {
293
+ throw new IrLoweringBlockedError(`an array-pattern element reads position ${index} of a tagged union whose arm is carried as "${representationKey(arm.value)}", which ` +
294
+ 'states no record layout to read that position from');
295
+ }
296
+ const field = layout[index];
297
+ if (!field || field.key !== String(index)) {
298
+ throw new IrLoweringBlockedError(`an array-pattern element reads position ${index} of a tagged union whose arm "${representationKey(arm.value)}" has no field keyed "${index}"`);
299
+ }
300
+ if (representationKey(field.value) !== representationKey(representation)) {
301
+ throw new IrLoweringBlockedError(`an array-pattern element's own carrier ("${representationKey(representation)}") does not match position ${index} of tagged-union ` +
302
+ `arm "${representationKey(arm.value)}", carried as "${representationKey(field.value)}" -- not every arm of this union answers this ` +
303
+ 'position with the same carrier, which is a narrowing the source program should have stated');
304
+ }
305
+ }
306
+ const key = {
307
+ value: ctx.builder.constant(block, lineage, String(index), 'string', { kind: 'string' }),
308
+ representation: { kind: 'string' }
309
+ };
310
+ registerResult(ctx, operation, ctx.builder.get(block, lineage, source, key, representation));
311
+ };
312
+ const lowerArrayPatternRead = (ctx, block, operation) => {
313
+ const lineage = requireLineage(operation);
314
+ const iteratorOperand = namedOperand(operation, 'iterator');
315
+ const source = resolveRequiredOperand(ctx, block, lineage, iteratorOperand);
316
+ const index = indexOfArrayPatternElement(ctx.graph, iteratorOperand, operation.id);
317
+ if (isTupleCarrier(source.representation.kind)) {
318
+ lowerTuplePatternRead(ctx, block, lineage, operation, source, index);
319
+ return;
320
+ }
321
+ if (isTupleUnionCarrier(source.representation)) {
322
+ lowerTaggedUnionTuplePatternRead(ctx, block, lineage, operation, source, index);
323
+ return;
324
+ }
325
+ if (source.representation.kind === 'dynamic') {
326
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an array-pattern element');
327
+ registerResult(ctx, operation, ctx.builder.iteratorNext(block, lineage, source, null, representation));
328
+ return;
329
+ }
330
+ if (source.representation.kind !== 'array-object') {
331
+ throw new IrLoweringBlockedError(`an array-pattern element reads a "${source.representation.kind}" source; the array/string fast path only reads an "array-object" ` +
332
+ 'source by index, and the tuple fast path only reads a "record"/"native-record-ref" source by position');
333
+ }
334
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an array-pattern element');
335
+ // A position the producer typed `undefined` outright lies past every
336
+ // element the source can hold (`[x, y] = []`, a tuple shorter than the
337
+ // pattern): the language's step yields `undefined` there and, over a plain
338
+ // array, observes nothing -- so nothing is read.
339
+ if (representation.kind === 'undefined') {
340
+ registerResult(ctx, operation, ctx.builder.constant(block, lineage, 'undefined', 'undefined', representation));
341
+ return;
342
+ }
343
+ // An array whose ELEMENT is uninhabited (`[]` typed `never[]`, carried as
344
+ // `array-object(undefined)`) holds nothing at any position, so a read
345
+ // published with an absence is that absence, constant -- there is no
346
+ // element carrier to bounds-test a read of.
347
+ const sourceElement = source.representation.element;
348
+ if ((sourceElement.kind === 'undefined' || sourceElement.kind === 'void') &&
349
+ representation.kind === 'optional' &&
350
+ representation.absence === 'undefined') {
351
+ registerResult(ctx, operation, ctx.builder.constant(block, lineage, 'undefined', 'undefined', representation));
352
+ return;
353
+ }
354
+ // The step reads the element WITH its absence -- `optional(E, undefined)`
355
+ // over an array of `E` -- because the pattern may run past the array's
356
+ // length; `emit-carrier-members.ts`'s `absentCapableElementText` is the
357
+ // bounds-tested read that answers exactly that carrier for an indexed get.
358
+ // ... or, for an element that already carries `null`, the same read spelled
359
+ // as the tagged union `undefined | null | E`: an `Optional` of an `Optional`
360
+ // has no primitive (`representation/optional.ts`), so `(number | null)[]`
361
+ // read past its end publishes the three-armed union, and the emitter widens
362
+ // the present element into it (`presentElementText`).
363
+ const absentCapable = (representation.kind === 'optional' &&
364
+ representation.absence === 'undefined' &&
365
+ representationKey(representation.payload) === representationKey(source.representation.element)) ||
366
+ isElementPlusUndefined(representation, source.representation.element);
367
+ if (!absentCapable && representationKey(representation) !== representationKey(source.representation.element)) {
368
+ throw new IrLoweringBlockedError(`an array-pattern element's own carrier ("${representationKey(representation)}") does not match its source's element carrier ` +
369
+ `("${representationKey(source.representation.element)}")`);
370
+ }
371
+ const key = {
372
+ value: ctx.builder.constant(block, lineage, String(index), 'number', { kind: 'scalar', domain: 'number' }),
373
+ representation: { kind: 'scalar', domain: 'number' }
374
+ };
375
+ registerResult(ctx, operation, ctx.builder.get(block, lineage, source, key, representation));
376
+ };
377
+ const lowerArrayPatternRest = (ctx, block, operation) => {
378
+ const lineage = requireLineage(operation);
379
+ const iteratorOperand = namedOperand(operation, 'iterator');
380
+ const source = resolveRequiredOperand(ctx, block, lineage, iteratorOperand);
381
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an array-pattern rest element');
382
+ // A dynamic pattern source has already performed GetIterator once in its
383
+ // shared source step. Gather the remaining values from that record; do not
384
+ // restart from the original value, which would rerun @@iterator and include
385
+ // positions the pattern already consumed.
386
+ if (source.representation.kind === 'dynamic') {
387
+ // Two destinations admit a native gather: an explicit "array of dynamic"
388
+ // carrier, or the destination cell being `dynamic` itself -- `const [a,
389
+ // ...rest] = anyIterable` types `rest` as a boxed `any[]`, exactly the
390
+ // shape `allocation:array-literal:dynamic(dynamic-gather)` already
391
+ // allocates for an array LITERAL's `[...anyIterable]` spread
392
+ // (`lower-allocation.ts`, `emitAllocateArrayObject`'s `representation.kind
393
+ // === 'dynamic'` branch). `reason` records only WHY a cell is dynamic
394
+ // (`opt-in-fallback` for the literal path, ordinarily
395
+ // `declared-any-never-narrowed` for a rest binding never subsequently
396
+ // narrowed) -- it names no different runtime representation, so gating
397
+ // this capability on one specific reason was the identical carrier
398
+ // refusing itself over a label that carries no consequence for how
399
+ // `gea::Value::box` stores the result.
400
+ const dynamicDestination = representation.kind === 'dynamic';
401
+ if (!dynamicDestination && (representation.kind !== 'array-object' || representation.element.kind !== 'dynamic')) {
402
+ throw new IrLoweringBlockedError(`an array-pattern rest gathers dynamic iterator values into a "${representation.kind === 'array-object' ? representationKey(representation.element) : representation.kind}" carrier; ` +
403
+ 'per-element dynamic conversion is not installed');
404
+ }
405
+ registerResult(ctx, operation, ctx.builder.allocateArrayObject(block, lineage, [{ kind: 'gather', iterator: source }], representation));
406
+ return;
407
+ }
408
+ if (source.representation.kind !== 'array-object') {
409
+ throw new IrLoweringBlockedError(`an array-pattern rest element reads a "${source.representation.kind}" source; the array/string fast path only range-copies an "array-object" source`);
410
+ }
411
+ if (representation.kind !== 'array-object' ||
412
+ representationKey(representation.element) !== representationKey(source.representation.element)) {
413
+ throw new IrLoweringBlockedError("an array-pattern rest element's own carrier does not match its source's element carrier; a mismatch would need a per-element " +
414
+ 'conversion into the destination carrier, which the shared range-copy primitive does not perform');
415
+ }
416
+ const index = indexOfArrayPatternElement(ctx.graph, iteratorOperand, operation.id);
417
+ registerResult(ctx, operation, ctx.builder.allocateArrayObject(block, lineage, [{ kind: 'spread', value: source, from: index }], representation));
418
+ };
419
+ /**
420
+ * `const { strict, ...rest } = options` over a source whose shape is CLOSED
421
+ * and known at compile time (`record`/`native-record-ref`) -- never the
422
+ * general "{...rest}" case (`CopyDataProperties` over a key set computed at
423
+ * runtime, still refused above): TypeScript already resolved the rest
424
+ * binding's own type to `Omit<Source, K>`, one field short of the source, so
425
+ * the field set to copy is not runtime state this lowering has to discover --
426
+ * it is the rest binding's own required representation, read back the same
427
+ * way `lowerTuplePatternRead`'s field lookup already is. Each remaining field
428
+ * is an ordinary keyed `[[Get]]` off the source (`ctx.builder.get`, the same
429
+ * primitive an object-pattern element read uses), assembled into a fresh
430
+ * record with `allocateRecord` -- the identical primitive an object literal's
431
+ * own allocation uses. No CopyDataProperties, no runtime key enumeration: the
432
+ * key set is closed, so there is nothing dynamic left to perform.
433
+ */
434
+ const lowerObjectPatternRest = (ctx, block, operation) => {
435
+ const lineage = requireLineage(operation);
436
+ const source = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'base'));
437
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an object-pattern rest element');
438
+ // CopyDataProperties over an open dictionary is a runtime key walk. Reuse
439
+ // object spread's exact dictionary copy primitive, then delete the excluded
440
+ // keys from the new table. Dictionary entries are data properties, so this
441
+ // produces the same key order and values as skipping those keys during the
442
+ // copy, while keeping the source untouched.
443
+ if (source.representation.kind === 'dictionary' && representation.kind === 'dictionary') {
444
+ const value = ctx.builder.allocateRecord(block, lineage, [], representation);
445
+ const target = { value, representation };
446
+ ctx.builder.spreadCopy(block, lineage, target, source);
447
+ const excluded = operation.operands
448
+ .filter((operand) => operand.role === 'excluded-key')
449
+ .sort((left, right) => left.ordinal - right.ordinal);
450
+ for (const operand of excluded) {
451
+ const key = resolveRequiredOperand(ctx, block, lineage, operand);
452
+ // Object-rest's internal CopyDataProperties exclusion is not source
453
+ // `delete` syntax, so its successful bookkeeping erase has no strict
454
+ // Reference Record to propagate.
455
+ ctx.builder.delete(block, lineage, target, key, false, null);
456
+ }
457
+ registerResult(ctx, operation, value);
458
+ return;
459
+ }
460
+ const sourceLayout = recordLayoutOf(ctx, source.representation);
461
+ if (!sourceLayout) {
462
+ throw new IrLoweringBlockedError(`an object-pattern rest element reads a "${representationKey(source.representation)}" source, which states no record layout to copy fields from`);
463
+ }
464
+ const targetLayout = recordLayoutOf(ctx, representation);
465
+ if (!targetLayout) {
466
+ throw new IrLoweringBlockedError(`an object-pattern rest element's own carrier "${representationKey(representation)}" states no record layout to build`);
467
+ }
468
+ const fields = targetLayout.map((field) => {
469
+ const sourceField = sourceLayout.find((candidate) => candidate.key === field.key);
470
+ if (!sourceField || representationKey(sourceField.value) !== representationKey(field.value)) {
471
+ throw new IrLoweringBlockedError(`an object-pattern rest element's own field "${field.key}" has no matching field in its source's record layout, or the two ` +
472
+ 'carry different carriers -- a mismatch would need a per-field conversion this fast path does not perform');
473
+ }
474
+ const key = {
475
+ value: ctx.builder.constant(block, lineage, field.key, 'string', { kind: 'string' }),
476
+ representation: { kind: 'string' }
477
+ };
478
+ return { key: field.key, value: { value: ctx.builder.get(block, lineage, source, key, field.value), representation: field.value } };
479
+ });
480
+ registerResult(ctx, operation, ctx.builder.allocateRecord(block, lineage, fields, representation));
481
+ };
482
+ /**
483
+ * `const [a] = g()`'s own per-element read over a source already resolved to
484
+ * the native `gea::Iterator<E>` cursor -- see `isCursorCarrier`'s own doc for
485
+ * why `lowerArrayPatternSource` aliases such a source rather than building an
486
+ * iterator record for it. Each bound position advances that ONE shared
487
+ * cursor with `arrayNext()`, the identical primitive a `for`-`of` over the
488
+ * same generator already lowers through (`ir/lower-protocol.ts`'s `next`
489
+ * case) -- called once per POSITION here instead of once per loop iteration,
490
+ * which is sound because `orderOwnerOperations` (`lower-graph.ts`) already
491
+ * guarantees the pattern's elements are visited in their own written order,
492
+ * exactly the guarantee `arrayPatternIndexOf`'s own doc relies on above.
493
+ *
494
+ * A position this producer's own typing proves PRESENT reads the bare element
495
+ * carrier; a position the cursor may already be exhausted at
496
+ * (`extractedArrayTypeOf`, producers/destructuring.ts) reads an `optional`
497
+ * one instead, and the carrier check below accepts either -- the merge itself
498
+ * (the done-check and the phi to `undefined`) is not built here: `iteratorNext`
499
+ * mints one IR op regardless of which carrier it is asked for, and
500
+ * `emit-iterator.ts`'s own `next` case is what renders the done-check and
501
+ * wraps the read into the requested carrier. A carrier that is neither the
502
+ * exact element nor an absence-capable widening of it is refused by name
503
+ * rather than approximated, the same fail-closed posture `lowerDefaultValueStep`'s
504
+ * own guard check takes for the identical reason.
505
+ */
506
+ const lowerArrayPatternIteratorRead = (ctx, block, operation) => {
507
+ const lineage = requireLineage(operation);
508
+ const iteratorOperand = namedOperand(operation, 'iterator');
509
+ const iterator = resolveRequiredOperand(ctx, block, lineage, iteratorOperand);
510
+ if (iterator.representation.kind !== 'iterator') {
511
+ throw new IrLoweringBlockedError(`an array-pattern element's own cursor read expected an "iterator" source, but resolved a "${iterator.representation.kind}" one`);
512
+ }
513
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'an array-pattern element');
514
+ // The read is the element itself where the typing proved the position
515
+ // present, and the element-or-absence where it did not: a cursor that is
516
+ // exhausted before this position hands the pattern `undefined` (ECMA-262
517
+ // 8.6.2, IteratorStep returning done), which the `next` step spells as the
518
+ // absence of the result's own carrier (`emit-iterator.ts`).
519
+ if (representationKey(representation) !== representationKey(iterator.representation.element) && !carriesUndefined(representation)) {
520
+ throw new IrLoweringBlockedError(`an array-pattern element's own carrier ("${representationKey(representation)}") does not match its cursor source's element ` +
521
+ `carrier ("${representationKey(iterator.representation.element)}") and holds no absence for an exhausted cursor`);
522
+ }
523
+ registerResult(ctx, operation, ctx.builder.iteratorNext(block, lineage, iterator, null, representation));
524
+ };
525
+ const lowerArrayPatternStep = (ctx, block, operation) => {
526
+ const role = operation.results[0]?.role;
527
+ if (role === 'iterator-record') {
528
+ lowerArrayPatternSource(ctx, block, operation);
529
+ return;
530
+ }
531
+ if (role === undefined) {
532
+ // An elision binds nothing, but over a cursor it still STEPS: ECMA-262
533
+ // 8.6.2 IteratorDestructuringAssignmentEvaluation's `Elision` rule calls
534
+ // `IteratorStep` and discards the result, so `[,] = g()` resumes the
535
+ // generator once -- and a generator that throws on its first resume
536
+ // throws out of the pattern. An array or tuple source reads by position
537
+ // and has nothing to do for a skipped one.
538
+ const elided = operandOf(operation, 'iterator');
539
+ if (!elided || elided.source.kind !== 'result')
540
+ return;
541
+ const lineage = elided.source.result;
542
+ const cursor = resolveRequiredOperand(ctx, block, lineage, elided);
543
+ if (cursor.representation.kind === 'iterator')
544
+ ctx.builder.iteratorNext(block, lineage, cursor, null, cursor.representation.element);
545
+ // A dynamic pattern cursor is the same stateful iterator record as a
546
+ // dynamic for-of cursor. An elision still performs IteratorStep; omitting
547
+ // it would make `[ , value ] = dynamic` read the first item for `value`.
548
+ if (cursor.representation.kind === 'dynamic')
549
+ ctx.builder.iteratorNext(block, lineage, cursor, null, { kind: 'dynamic', reason: 'declared-any-never-narrowed' });
550
+ return;
551
+ }
552
+ const iteratorOperand = operandOf(operation, 'iterator');
553
+ if (iteratorOperand) {
554
+ const lineage = requireLineage(operation);
555
+ const iterator = resolveRequiredOperand(ctx, block, lineage, iteratorOperand);
556
+ if (iterator.representation.kind === 'iterator') {
557
+ lowerArrayPatternIteratorRead(ctx, block, operation);
558
+ return;
559
+ }
560
+ if (iterator.representation.kind === 'dynamic') {
561
+ lowerArrayPatternRead(ctx, block, operation);
562
+ return;
563
+ }
564
+ }
565
+ lowerArrayPatternRead(ctx, block, operation);
566
+ };
567
+ /**
568
+ * A `default-value` step: a merge over a presence guard.
569
+ *
570
+ * The extracted value on the branch where it was proven present, the
571
+ * initializer's own value on the branch where it was `undefined`. The guard has
572
+ * to already exist -- `flow.requireMergeSources` only closes branches
573
+ * `lower-flow.ts`'s `ensureGuardBlocks` opened, which happens only for a result
574
+ * some other pass already gated -- so this is scoped to the one producer that
575
+ * installs one today: a defaulted parameter's raw argument
576
+ * (`semantics/normalize/producers/bindings.ts`'s `contributeDefaultedParameter`).
577
+ * An object or array pattern's own default (`{a = 1}`) has no such guard and is
578
+ * refused by name rather than approximated.
579
+ */
580
+ /** The arms a carrier holds, by key: a tagged union's own, an optional's absence and payload, else the carrier itself. */
581
+ const armKeysOf = (representation) => representation.kind === 'tagged-union'
582
+ ? representation.arms.map((arm) => representationKey(arm.value))
583
+ : representation.kind === 'optional'
584
+ ? [representation.absence, representationKey(representation.payload)]
585
+ : [representationKey(representation)];
586
+ const isElementPlusUndefined = (read, element) => {
587
+ if (read.kind !== 'tagged-union' || !carriesUndefined(read))
588
+ return false;
589
+ const present = armKeysOf(read).filter((key) => key !== 'undefined');
590
+ const held = armKeysOf(element);
591
+ return present.length === held.length && held.every((key) => present.includes(key));
592
+ };
593
+ const lowerDefaultValueStep = (ctx, flow, operation) => {
594
+ const lineage = requireLineage(operation);
595
+ const extracted = namedOperand(operation, 'extracted');
596
+ if (extracted.source.kind !== 'result') {
597
+ throw new IrLoweringBlockedError('a "default-value" destructuring step has no guard result to branch on');
598
+ }
599
+ const guardResult = extracted.source.result;
600
+ const guardOperation = ctx.graph.operations.get(operationOfResult(guardResult));
601
+ // Two producers install a presence-tested guard for their own extraction, and
602
+ // the merge below is the same merge over either. A defaulted PARAMETER tests
603
+ // its raw argument (`reference`/`parameter-value`); a defaulted binding
604
+ // ELEMENT tests what the pattern read out of the source, which is the
605
+ // extraction step this one is chained after. Anything else has no guard, so
606
+ // the arms this merge needs were never opened, and refusing by name is what
607
+ // keeps that from being approximated into a fallback that always runs.
608
+ // An array-pattern step is absence-capable too: its producer types the read
609
+ // `E | undefined` for any source that can be exhausted before the position
610
+ // (`extractedArrayTypeOf`), and the carrier test below is what proves it.
611
+ const extractsFromPattern = guardOperation?.family === 'destructuring' && (guardOperation.form === 'object-pattern' || guardOperation.form === 'array-pattern');
612
+ const bindsAParameter = guardOperation?.family === 'reference' && guardOperation.form === 'parameter-value';
613
+ if (!extractsFromPattern && !bindsAParameter) {
614
+ throw new IrLoweringBlockedError('a "default-value" destructuring step needs a presence-tested guard installed for its own extraction, ' +
615
+ 'which only a defaulted parameter or a defaulted pattern element has');
616
+ }
617
+ // A guard carrier with no `undefined` state answers the definedness test
618
+ // with the constant `true` (`emit-presence.ts`, one rule, shared): the
619
+ // default arm is dead and the present arm reads the value unconditionally.
620
+ // That is the language's own answer for a position the source PROVES --
621
+ // `var [a, b = 5] = [1, 2]` binds 2 and never evaluates `5`, and a
622
+ // parameter pattern every call site fills (`impliedPatternPositionPresent-
623
+ // Everywhere`) is the same fact one census over. Both censuses type such a
624
+ // read without the absence on purpose, so the dead arm here is the proof
625
+ // arriving, not a name's type standing in for the read's.
626
+ const sources = flow.requireMergeSources(guardResult);
627
+ const representation = requireResultRepresentation(ctx, operation, 'value', 'a default-value step');
628
+ // A default's truthy arm is the raw extraction after the `is-defined`
629
+ // guard proved every top-level `undefined` arm dead. Carry that site-local
630
+ // proof into the IR instead of asking the representation-only conversion
631
+ // renderer to rediscover it. `T | null | undefined` -> `T | null` is the
632
+ // important shape: the surviving `null` and `T` arms must be dispatched
633
+ // separately, or stripping the result's optional wrapper first reads the
634
+ // inactive `T` arm when the caller explicitly supplied `null`.
635
+ const extractedIncoming = resolveRequiredOperand(ctx, sources.truthy, lineage, extracted);
636
+ const liveDefinedArms = extractedIncoming.representation.kind === 'tagged-union'
637
+ ? extractedIncoming.representation.arms
638
+ .map((arm, index) => (arm.value.kind === 'undefined' ? -1 : index))
639
+ .filter((index) => index >= 0)
640
+ : [];
641
+ const present = extractedIncoming.representation.kind === 'tagged-union' &&
642
+ liveDefinedArms.length > 0 &&
643
+ liveDefinedArms.length < extractedIncoming.representation.arms.length
644
+ ? {
645
+ value: ctx.builder.mergeLiveArmRebuild(sources.truthy, lineage, extractedIncoming, representation, liveDefinedArms, false, ctx.program.conversions),
646
+ representation
647
+ }
648
+ : mergeIncoming(ctx, sources.truthy, lineage, operation, 'extracted', extracted, representation);
649
+ const fallback = mergeIncoming(ctx, sources.falsy, lineage, operation, 'fallback', namedOperand(operation, 'fallback'), representation);
650
+ registerResult(ctx, operation, ctx.builder.phi(sources.join, lineage, [
651
+ { block: sources.truthy, value: present },
652
+ { block: sources.falsy, value: fallback }
653
+ ], representation));
654
+ };
655
+ export const lowerDestructuring = (ctx, flow, block, operation) => {
656
+ if (operation.form === 'object-source') {
657
+ const lineage = requireLineage(operation);
658
+ const source = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'base'));
659
+ const result = ctx.builder.compute(block, lineage, 'require-object-coercible', 'RequireObjectCoercible', [source], source.representation);
660
+ registerResult(ctx, operation, result);
661
+ return;
662
+ }
663
+ if (operation.form === 'object-pattern') {
664
+ lowerObjectPatternStep(ctx, block, operation);
665
+ return;
666
+ }
667
+ if (operation.form === 'array-pattern-close') {
668
+ const lineage = requireLineage(operation);
669
+ const iterator = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'iterator'));
670
+ if (iterator.representation.kind !== 'dynamic' && iterator.representation.kind !== 'iterator') {
671
+ throw new IrLoweringBlockedError(`a finite array-pattern close expected a dynamic or generator iterator, but resolved a "${iterator.representation.kind}" carrier`);
672
+ }
673
+ const completion = operation.results.find((result) => result.role === 'completion');
674
+ const representation = completion ? requireResultRepresentation(ctx, operation, 'completion', 'a finite array-pattern close') : null;
675
+ const result = ctx.builder.iteratorClose(block, lineage, iterator, representation, true);
676
+ if (completion && result)
677
+ ctx.values.set(completion.id, result);
678
+ return;
679
+ }
680
+ if (operation.form === 'array-pattern') {
681
+ lowerArrayPatternStep(ctx, block, operation);
682
+ return;
683
+ }
684
+ if (operation.form === 'rest-element') {
685
+ if (operandOf(operation, 'iterator', 0)) {
686
+ lowerArrayPatternRest(ctx, block, operation);
687
+ return;
688
+ }
689
+ lowerObjectPatternRest(ctx, block, operation);
690
+ return;
691
+ }
692
+ lowerDefaultValueStep(ctx, flow, operation);
693
+ };