@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,695 @@
1
+ import ts from 'typescript';
2
+ import { operationId, semanticResultId } from '../../../identity/ids.js';
3
+ import { pureEffects, throwingCompletion } from '../../model/operands.js';
4
+ import { blocked, mintOperationId, mintResult, operand } from './mint.js';
5
+ import { isArgumentsObjectIdentifier } from './bindings.js';
6
+ import { resolveExpressionOperand } from './boundary.js';
7
+ import { hasNativeIterationCursor, iterationPayloadArm, isGeneratorType, isNativeIterableSetType, isNativeIterableStringType, staticSpreadMembersOf, valueEdgesInto } from './shared.js';
8
+ import { iteratorMethodSymbolOf, iteratorRecordTypesOf, iteratorYieldStructuralType } from './iteration-yield.js';
9
+ import { closedTupleElementTypesOf } from './tuple-spread.js';
10
+ import { symbolPropertyKeyText } from '../../model/structural-types.js';
11
+ import { symbolKeyDeclarationOf } from '../structural-leaves.js';
12
+ /**
13
+ * Iterator/enumerate/spread protocols.
14
+ *
15
+ * `f(...xs)`, `[...xs]`, and `{...o}` all read as "spread" in surface syntax,
16
+ * but they are three different runtime protocols and this file must never let
17
+ * one stand in for another:
18
+ *
19
+ * - argument spread and array-literal spread both drive the sync iterator
20
+ * protocol (`GetIterator` / `IteratorNext`) over their operand -- the census
21
+ * assigns both to the single `SpreadElement` syntax kind, and the protocol
22
+ * they imply does not depend on which of the two contexts holds them;
23
+ * - object spread (`SpreadAssignment`) is `CopyDataProperties`: own enumerable
24
+ * string+symbol keys copied directly, with no method lookup and no iterator
25
+ * at all -- it is `protocol: 'spread'` here, never `'iterator'`.
26
+ *
27
+ * `for`-`of`/`for`-`in` need this same sync-iterator/enumerate machinery, but
28
+ * `census.ts` classifies those as `'control'`, not `'protocol'`, so
29
+ * `control.ts` calls `mintIteratorSteps` below directly rather than this file
30
+ * minting operations for a candidate it was never handed.
31
+ */
32
+ const unresolvedType = (context, reason) => context.table.intern({ kind: 'unresolved', reason });
33
+ /**
34
+ * `any`/`unknown` is the one iteration source whose `@@iterator` lookup must
35
+ * stay in the dynamic runtime. It is deliberately narrower than "not a
36
+ * native cursor": a typed class or a typed structural iterable still owns a
37
+ * concrete method carrier, and routing either through `Value` would box a
38
+ * statically represented value merely to iterate it.
39
+ */
40
+ export const isDynamicIterationSource = (context, type) => {
41
+ const shape = context.table.get(type).shape;
42
+ return shape.kind === 'primitive' && (shape.primitive === 'any' || shape.primitive === 'unknown');
43
+ };
44
+ /** Which well-known-symbol chain an operation's protocol follows -- `iteration-yield.ts`'s question, asked in this file's own vocabulary. */
45
+ const iterationProtocolOf = (protocol) => protocol === 'async-iterator' ? 'async' : 'sync';
46
+ /**
47
+ * The element type an iteration step yields.
48
+ *
49
+ * An array or tuple source is answered from the already-interned shape: those
50
+ * two are the shapes this layer itself gave the source, so re-asking the
51
+ * checker for them would be a second authority over an answer already held.
52
+ *
53
+ * Every other iterable is answered by `iteration-yield.ts`, which walks the
54
+ * checker's own declared `@@iterator`/`next`/`IteratorResult` chain. That walk
55
+ * used to be absent, and the gap was not small: a `for`-`of` over a `Map`, a
56
+ * `Set` or any program-defined iterable got `unresolved` here, which then
57
+ * propagated into the loop variable's carrier, the iterator record's carrier
58
+ * and every value read out of the loop -- one missing derivation reported as
59
+ * dozens of unrelated-looking carrier failures. `unresolved` is now reached
60
+ * only when the source genuinely declares no protocol to follow, which is a
61
+ * statement about the program rather than about this compiler.
62
+ */
63
+ const iterationElementType = (context, protocol, sourceType, iterated, rawIterated = null) => {
64
+ if (protocol === 'enumerate') {
65
+ // `for`-`in` yields only own+inherited *string* keys -- never symbols --
66
+ // which is a guarantee of the enumerate protocol itself, not a fact about
67
+ // any particular source, so it is safe to state outright.
68
+ return context.table.intern({ kind: 'primitive', primitive: 'string' });
69
+ }
70
+ // `T | undefined` reaching here as the TOP-LEVEL shape -- exactly what
71
+ // `subclass-member-overlay-transform.ts`'s own sound over-approximation
72
+ // produces for a reference-typed member, and an ordinary pattern on its
73
+ // own merits besides (an optional field checked truthy, then iterated) --
74
+ // is peeled to its one real arm before any of the shape checks below run:
75
+ // none of them recognize `union` at all, so a genuinely iterable single
76
+ // arm buried under `| undefined` fell straight through to the checker
77
+ // walk, which resolves `iterated`'s type from scratch and can disagree
78
+ // with what this layer's own census already settled (an unannotated
79
+ // parameter's call-site-inferred type, `parameter-bindings.ts`, is exactly
80
+ // where the two diverge: the census resolves a concrete member type for
81
+ // the RECEIVER, but the checker's per-expression walk has no memory of
82
+ // that inference and answers plain `any`). Two or more non-nullish arms
83
+ // stays unpeeled -- which arm's element type would even apply is a real
84
+ // question this is not the layer to guess at, and the checker walk below,
85
+ // or the final refusal, still answers it exactly as before.
86
+ // Asked of `shared.ts`'s `iterationPayloadArm`, never re-derived here: this
87
+ // peel and the one `hasNativeIterationCursor` performs are the same question
88
+ // about the same type, and a third inline copy of it is what made the cursor
89
+ // and the element type disagree (see that function's own comment for the
90
+ // union-of-one-interned-id case it answers and this copy did not).
91
+ const nonNullish = iterationPayloadArm(context, sourceType);
92
+ const effectiveType = nonNullish ?? sourceType;
93
+ const shape = context.table.get(effectiveType).shape;
94
+ if (shape.kind === 'array')
95
+ return shape.element;
96
+ if (shape.kind === 'tuple')
97
+ return context.table.intern({ kind: 'union', members: shape.elements.map((element) => element.type) });
98
+ if (shape.kind === 'unresolved')
99
+ return effectiveType;
100
+ // A string yields STRINGS -- one code point per step (ECMA-262 22.1.3.36),
101
+ // and a code point is itself a String value. Answered here rather than by
102
+ // the checker walk below for the same reason an array's is: this layer
103
+ // already knows the shape, and lib.es2015's `String` declares its own
104
+ // `[Symbol.iterator](): IterableIterator<string>`, so asking would be a
105
+ // second authority over an answer already held. It matters that the two
106
+ // agree exactly: `publish.ts` publishes the cursor as `iterator(string)`
107
+ // off the source's own carrier, and a `next` value typed anything else
108
+ // would make the cursor and the value it yields disagree.
109
+ if (isNativeIterableStringType(context, effectiveType))
110
+ return context.table.intern({ kind: 'primitive', primitive: 'string' });
111
+ // A native `Set<T>` yields T directly (ECMA-262 24.2.3.10
112
+ // `%SetPrototype%[Symbol.iterator]` delegates to
113
+ // `%SetIteratorPrototype%.next`, whose `value` is the element itself) --
114
+ // answered here, from the structural shape's own recorded type argument,
115
+ // for the identical reason the array/tuple/string cases above are: this
116
+ // layer already knows Set's own generic parameter
117
+ // (`isNativeIterableSetType`/`context.keyedCollections`, the same
118
+ // structural census `hasNativeIterationCursor` already consults to decide
119
+ // this loop needs no dynamic `Symbol.iterator` lookup at all), so asking
120
+ // the checker again below -- through `iterated`'s own PER-EXPRESSION type --
121
+ // would be a second, less informed authority over an answer this layer
122
+ // already holds: an unannotated parameter's call-site-inferred type
123
+ // (`parameter-bindings.ts`) is exactly the case where the two can
124
+ // genuinely disagree, since the checker's own per-expression walk has no
125
+ // memory of that inference and answers `any` for the receiver where the
126
+ // structural census already resolved a concrete `Set`. A `Set` JSDoc-typed
127
+ // with no explicit type argument (three.js's own `new Set()` idiom, this
128
+ // module's `subclass-member-overlay-transform.ts`) instantiates its one
129
+ // parameter at `any`, which is exactly the honest answer -- an untyped
130
+ // Set's elements are `any`, not a refusal.
131
+ if (shape.kind === 'declared' && isNativeIterableSetType(context, effectiveType)) {
132
+ return shape.typeArguments[0] ?? context.table.intern({ kind: 'primitive', primitive: 'any' });
133
+ }
134
+ // A source the program itself declared `any`/`unknown` is the one other
135
+ // case this is not a gap for: every element an `any`-typed iterable yields
136
+ // is `any` too, by the same rule that indexing an `any` value yields `any`
137
+ // -- restating the source's own carrier is not a guess about a shape the
138
+ // checker did not state, it is citing the shape the checker DID state.
139
+ if (shape.kind === 'primitive' && (shape.primitive === 'any' || shape.primitive === 'unknown'))
140
+ return effectiveType;
141
+ // HOLDS, census-aware: the exact disagreement this function's own comment
142
+ // above warns about (an unannotated parameter's census-inferred receiver
143
+ // vs. the checker's memory-less per-expression walk) applies here just as
144
+ // much as it does to the union-peeling step above -- `context.types.
145
+ // rawTypeAt` is the raw-`ts.Type` form of the same answer `source.type`
146
+ // (this function's own `sourceType` parameter, from `resolveExpressionOperand`'s
147
+ // `context.types.typeAt`) was already built from, so this fallback walk
148
+ // stays in agreement with it instead of re-deriving a second, less informed
149
+ // answer from the bare checker. A caller with no expression to offer (there
150
+ // is none today) falls through to the same honest refusal as before rather
151
+ // than getting a guess.
152
+ const yielded = iterated
153
+ ? iteratorYieldStructuralType(context, rawIterated ?? context.types.rawTypeAt(iterated), iterated, iterationProtocolOf(protocol))
154
+ : null;
155
+ if (yielded !== null)
156
+ return yielded;
157
+ return unresolvedType(context, 'the source declares no @@iterator/next/IteratorResult chain this can read an element type from');
158
+ };
159
+ /**
160
+ * The `{ value, done }` result `IteratorNext` produces, and the method/record
161
+ * pair that wraps it -- built once the element type is known, so the two are
162
+ * never asked to name a shape independently and disagree about what each
163
+ * other's `next()` returns.
164
+ *
165
+ * This is not a guess at "the" iterator protocol object: `[Symbol.iterator]`
166
+ * is a niladic function returning a record with (at least) a `next` method,
167
+ * and `next` is a niladic function returning `{value, done}` -- that is the
168
+ * complete, load-bearing iteration shape. The general typed `for`-`of` path
169
+ * now keeps the concrete declared record instead so its optional `return`
170
+ * member remains available to IteratorClose. Every concrete iterator a
171
+ * program can name -- an array's own, a
172
+ * `Map`'s, a class's hand-written `[Symbol.iterator]()` -- satisfies this
173
+ * exact structural record, so stating it is citing a fact the language
174
+ * guarantees, not inventing a layout the source never declared. Scoped to
175
+ * `iterator`/`enumerate`; `async-iterator`'s `next()` returns a `Promise` of
176
+ * this record instead, a different shape this does not yet build.
177
+ */
178
+ const iteratorMethodAndRecordTypes = (context, elementType,
179
+ // The REAL structural type `receiver[Symbol.iterator]()` returns, when
180
+ // `generatorRecordTypeOf` (below) has already proven it is the standard
181
+ // `Generator<T, TReturn, TNext>` -- in which case that real type IS the
182
+ // record, and the synthetic ECMA-262 simulation below would only publish a
183
+ // second, disagreeing shape for the identical call. `null` for every other
184
+ // source, which is the overwhelming common case and keeps this function's
185
+ // synthetic branch exactly as it always was.
186
+ generatorRecordType) => {
187
+ const recordType = generatorRecordType ??
188
+ (() => {
189
+ const boolType = context.table.intern({ kind: 'primitive', primitive: 'boolean' });
190
+ const nextResultType = context.table.intern({
191
+ kind: 'object',
192
+ members: [
193
+ { key: { kind: 'string', value: 'value' }, type: elementType, optional: false, readonly: true, accessor: null },
194
+ { key: { kind: 'string', value: 'done' }, type: boolType, optional: false, readonly: true, accessor: null }
195
+ ],
196
+ index: [],
197
+ membersDropped: false
198
+ });
199
+ const nextMethodType = context.table.intern({
200
+ kind: 'signature',
201
+ call: [{ parameters: [], minimumArity: 0, thisParameter: null, result: nextResultType }],
202
+ construct: []
203
+ });
204
+ return context.table.intern({
205
+ kind: 'object',
206
+ members: [{ key: { kind: 'string', value: 'next' }, type: nextMethodType, optional: false, readonly: true, accessor: null }],
207
+ index: [],
208
+ membersDropped: false
209
+ });
210
+ })();
211
+ const methodType = context.table.intern({
212
+ kind: 'signature',
213
+ call: [{ parameters: [], minimumArity: 0, thisParameter: null, result: recordType }],
214
+ construct: []
215
+ });
216
+ return { methodType, recordType };
217
+ };
218
+ /**
219
+ * The REAL structural type `receiver[Symbol.iterator]()` returns, when that
220
+ * return is -- itself, not the receiver -- the standard `Generator<T,
221
+ * TReturn, TNext>`: the one shape `representation/derive.ts`'s
222
+ * `GeneratorDeclarationPolicy` carries as the native `gea::Iterator<T>`
223
+ * cursor rather than a record. `null` otherwise -- including when `iterated`
224
+ * resolves to more than one iterator record (a union receiver whose arms
225
+ * declare different `[Symbol.iterator]`s) -- in which case
226
+ * `iteratorMethodAndRecordTypes`'s synthetic ECMA-262 `{ next(): { value,
227
+ * done } }` shape is exactly right and stays unchanged: it is what this
228
+ * compiler still has to state generically for every OTHER concrete iterator a
229
+ * program can name (a hand-written object literal, `Map`'s or `Set`'s own
230
+ * iterator, a union of sources, etc.).
231
+ *
232
+ * `receiver[Symbol.iterator]` genuinely returning a `Generator<T>` happens
233
+ * when the source declares the member as a GENERATOR method
234
+ * (`*[Symbol.iterator]() { yield ... }`) rather than an ordinary method that
235
+ * builds and returns an object literal. The receiver's own type is NOT
236
+ * itself a Generator in this case -- `hasNativeIterationCursor`'s
237
+ * `isGeneratorType` check, consulted before this producer ever mints a
238
+ * `get-method` step, already routes a directly-Generator-typed receiver
239
+ * around the whole dance -- but CALLING its `[Symbol.iterator]()` produces
240
+ * one, and the call result needs the identical `iterator(T)` carrier a
241
+ * directly-Generator-typed receiver gets: one runtime value, `gea::
242
+ * Iterator<T>`, whether it arrived by being iterated directly or by being
243
+ * handed back from a method call. `iteratorMethodKeyTextOf`, just below,
244
+ * resolves the SAME method symbol this reads the return type of, so the
245
+ * `get-method` step's own key and this record type can never name two
246
+ * different members.
247
+ */
248
+ const generatorRecordTypeOf = (context, iterated, protocol, rawIterated = null) => {
249
+ if (!iterated)
250
+ return null;
251
+ // HOLDS, census-aware -- kept in agreement with `iterationElementType`'s
252
+ // own fallback walk over the SAME `iterated` expression (both must resolve
253
+ // to the same receiver type, or this and that step could name two
254
+ // different iterator records for one source).
255
+ const sourceType = rawIterated ?? context.types.rawTypeAt(iterated);
256
+ const iterators = iteratorRecordTypesOf(context, sourceType, iterated, protocol);
257
+ if (!iterators || iterators.length !== 1)
258
+ return null;
259
+ const [only] = iterators;
260
+ if (only === undefined)
261
+ return null;
262
+ const recordType = context.types.typeOf(only);
263
+ return isGeneratorType(context, recordType) ? recordType : null;
264
+ };
265
+ /**
266
+ * The concrete method/record pair declared by a statically typed iterable.
267
+ * Keeping the real record is required for IteratorClose: unlike the minimal
268
+ * synthetic `{ next }` protocol view, it retains an optional `return` method
269
+ * without widening the iterator into the dynamic carrier.
270
+ */
271
+ const declaredIteratorMethodAndRecordTypes = (context, iterated, protocol, rawIterated = null) => {
272
+ if (!iterated)
273
+ return null;
274
+ const sourceType = rawIterated ?? context.types.rawTypeAt(iterated);
275
+ const method = iteratorMethodSymbolOf(sourceType, protocol);
276
+ const records = iteratorRecordTypesOf(context, sourceType, iterated, protocol);
277
+ if (!method || !records || records.length !== 1)
278
+ return null;
279
+ const record = records[0];
280
+ if (!record)
281
+ return null;
282
+ const declaredMethodType = context.checker.getTypeOfSymbolAtLocation(method, iterated);
283
+ // The method's declared type and the record it returns are ONE fact, and the
284
+ // member symbol is only an authority on it while the two agree. For an
285
+ // overloaded generator member they do not: TypeScript shows the bodiless
286
+ // `[Symbol.iterator](): IterableIterator<T>` here and never the
287
+ // `*[Symbol.iterator](): Generator<T>` that physically runs, so the `get`
288
+ // step published `() -> native-record-ref` for a body whose convention
289
+ // returns the native `iterator` cursor -- `emit-class-properties.ts`'s
290
+ // 'method "..." body convention cannot fill its published bound-method
291
+ // convention'. `iteratorRecordTypesOf` already resolved the physical answer
292
+ // (`physicalGeneratorOverloadReturnOf`), so the method type is rebuilt around
293
+ // it rather than re-derived: same parameters, same receiver, the record this
294
+ // pair has already settled on.
295
+ //
296
+ // Only when they DISAGREE. An ordinary iterable's `record` IS this
297
+ // signature's own return type, object-identical, and rebuilding it there
298
+ // would re-intern one unchanged shape through a second path for nothing.
299
+ const only = declaredMethodType.getCallSignatures().length === 1 ? declaredMethodType.getCallSignatures()[0] : undefined;
300
+ const rebuilt = only && context.checker.getReturnTypeOfSignature(only) !== record ? context.types.resolvedSignatureTypeOf(only, 'call', record) : null;
301
+ const answer = { methodType: rebuilt ?? context.types.typeOf(declaredMethodType), recordType: context.types.typeOf(record) };
302
+ // Opt-in, because this is the pair that has now disagreed twice and the
303
+ // disagreement is invisible in the refusal: the emitter reports the METHOD
304
+ // convention and names neither which of these two produced it nor what the
305
+ // other said.
306
+ if (process.env['GEA_DEBUG_ITERATOR']) {
307
+ process.stderr.write(`[ITERATOR] ${method.getName()} declared=${context.checker.typeToString(declaredMethodType)} ` +
308
+ `record=${context.checker.typeToString(record)} rebuilt=${rebuilt !== null} ` +
309
+ `methodType=${answer.methodType} recordType=${answer.recordType}\n`);
310
+ }
311
+ return answer;
312
+ };
313
+ /**
314
+ * The static property-key text `receiver[Symbol.iterator]` names, or `null`
315
+ * when `iterated` is absent or its type declares no such member.
316
+ *
317
+ * This is `producers/shared.ts`'s `symbolMemberKeyOf` in spirit -- a
318
+ * `unique symbol` member's canonical key text, so a computed read and a
319
+ * computed definition of the same well-known symbol resolve one identity --
320
+ * but reached from the OTHER direction: `symbolMemberKeyOf` starts from a
321
+ * key EXPRESSION already in the source and asks whether the receiver
322
+ * declares a matching member, while the general iterator protocol has no
323
+ * `Symbol.iterator` expression to start from at all (`for (const x of xs)`
324
+ * writes no `[Symbol.iterator]` anywhere) and has to start from the
325
+ * RECEIVER's own type instead. `iteratorMethodSymbolOf` is the one lookup
326
+ * both `iterationElementType`'s checker walk (above) and this reuse: the step
327
+ * that types what the source yields and the step that names the member to
328
+ * call can never resolve to two different members of the same type.
329
+ *
330
+ * `symbolKeyDeclarationOf` resolves the member's COMPUTED name back to the
331
+ * `const`/property the symbol was bound to (`Symbol.iterator` itself, for the
332
+ * well-known case) -- the same anchor `representation/object-shape.ts`'s
333
+ * `recordFieldKeyOf` spells a record's own symbol-keyed FIELD by
334
+ * (`symbolPropertyKeyText`), so a class's or a record's `[Symbol.iterator]`
335
+ * member and this producer's `get-method` key agree on one text without
336
+ * either side re-deriving it. The `declarationOfSymbol` fallback covers a
337
+ * member declared directly on the type rather than through a computed name
338
+ * pointing at an aliasable `const` -- the same fallback `keyOfSymbol`
339
+ * (`structural-leaves.ts`) takes for an ordinary interned symbol-keyed
340
+ * member.
341
+ */
342
+ const iteratorMethodKeyTextOf = (context, iterated, protocol, rawIterated = null) => {
343
+ if (!iterated)
344
+ return null;
345
+ // HOLDS, census-aware -- the same `iterated` receiver `iterationElementType`
346
+ // and `generatorRecordTypeOf` resolve, kept in agreement with both for the
347
+ // reason this function's own doc states: the step that types what the
348
+ // source yields and the step that names the member to call must resolve to
349
+ // the same member of the same type.
350
+ const type = rawIterated ?? context.types.rawTypeAt(iterated);
351
+ const method = iteratorMethodSymbolOf(type, protocol);
352
+ if (!method)
353
+ return null;
354
+ const declaration = symbolKeyDeclarationOf(context.checker, context.identities, method) ?? context.identities.declarationOfSymbol(method);
355
+ return declaration ? symbolPropertyKeyText(context.identities.declarationIdOf(declaration)) : null;
356
+ };
357
+ /**
358
+ * Mints the sync/async-iterator or enumerate protocol steps for one source
359
+ * expression, sharing one implementation between this file's own spread
360
+ * handling and `control.ts`'s `for`-`of`/`for`-`in`/`yield*` handling so both
361
+ * always agree on the shape of "the iteration protocol" instead of drifting
362
+ * into two independently-evolving copies.
363
+ *
364
+ * The four possible steps reserve fixed ordinals -- 0 `get-method`, 1
365
+ * `get-iterator`, 2 `next`, 3 `close` -- by drawing from the counter in that
366
+ * order even when a step is skipped for this `protocol` (`for`-`in` never has
367
+ * a `get-method`; plain spread never has a `close`). Without that, `next`
368
+ * would land at ordinal 1 for `for`-`in` but ordinal 2 for `for`-`of`, and any
369
+ * other producer that needs to cite "the per-iteration value" for a loop node
370
+ * -- the binding producer initializing the loop variable -- would have no
371
+ * fixed identity to build without first knowing which loop variant produced
372
+ * it. Reserving the ordinal even when unused keeps `next` at ordinal 2
373
+ * regardless of variant.
374
+ */
375
+ export const mintIteratorSteps = (context, candidate, protocol, source, options) => {
376
+ const operations = [];
377
+ const edges = [];
378
+ // The element type is needed to state the record's own `next()` shape, so
379
+ // it is derived first here rather than where `next`'s result is minted
380
+ // below -- the record and the value it eventually yields must agree on one
381
+ // element type, not derive it twice.
382
+ const rawIterated = source.rawIterated ?? null;
383
+ const elementType = iterationElementType(context, protocol, source.type, source.iterated, rawIterated);
384
+ const dynamicSource = isDynamicIterationSource(context, source.type);
385
+ // `enumerate` is the one protocol with no method at all: `for`-`in` reads
386
+ // the object directly and never resolves a `[Symbol.iterator]`, so there is
387
+ // no return type to check. Sync and ASYNC iteration are one question here --
388
+ // `iterationProtocolOf` picks which well-known symbol the walk follows, and
389
+ // everything downstream of that answer is identical, because under this
390
+ // runtime's settled-promise model an async generator is exactly a
391
+ // synchronous cursor (see `producers/control.ts`'s yield comment).
392
+ const generatorRecordType = protocol === 'enumerate' ? null : generatorRecordTypeOf(context, source.iterated, iterationProtocolOf(protocol), rawIterated);
393
+ const declaredRecord = options.includeGetMethod && protocol !== 'enumerate'
394
+ ? declaredIteratorMethodAndRecordTypes(context, source.iterated, iterationProtocolOf(protocol), rawIterated)
395
+ : null;
396
+ const { methodType, recordType } = declaredRecord ?? iteratorMethodAndRecordTypes(context, elementType, generatorRecordType);
397
+ // A dynamic source carries both the iterator record and every yielded value
398
+ // as the source's authorized dynamic carrier. The synthetic `{ next }`
399
+ // record is for a statically known protocol member; publishing it here would
400
+ // invent a native layout for a runtime object and strand the dynamic lookup
401
+ // at lowering.
402
+ const iteratorRecordType = dynamicSource ? source.type : recordType;
403
+ const getMethodId = mintOperationId(context.ordinals, candidate.id, 'protocol');
404
+ const getIteratorId = mintOperationId(context.ordinals, candidate.id, 'protocol');
405
+ const nextId = mintOperationId(context.ordinals, candidate.id, 'protocol');
406
+ const closeId = mintOperationId(context.ordinals, candidate.id, 'protocol');
407
+ let methodResult = null;
408
+ if (options.includeGetMethod) {
409
+ // A "key" operand naming the exact member `[Symbol.iterator]` (or
410
+ // `[Symbol.asyncIterator]`) resolves to, when the source's own type
411
+ // declares one this producer can find and this backend's lowering can
412
+ // therefore route as an ordinary `[[Get]]` (`ir/lower-protocol.ts`'s
413
+ // `get-method` case) rather than the still-unbuilt fully dynamic method
414
+ // lookup. Async iteration is out of scope for now -- `iterationElementType`
415
+ // already leaves `methodType`/`recordType` unresolved for it above, so a
416
+ // key here would name a member this backend has nowhere to route it to.
417
+ const methodKeyText = protocol === 'enumerate' ? null : iteratorMethodKeyTextOf(context, source.iterated, iterationProtocolOf(protocol), rawIterated);
418
+ const getMethodOperands = methodKeyText
419
+ ? [
420
+ operand('target', 0, source.source, source.type),
421
+ operand('key', 0, { kind: 'constant', text: methodKeyText, literal: 'string' }, context.table.intern({ kind: 'primitive', primitive: 'string' }))
422
+ ]
423
+ : [operand('target', 0, source.source, source.type)];
424
+ const getMethod = {
425
+ family: 'protocol',
426
+ id: getMethodId,
427
+ protocol,
428
+ step: 'get-method',
429
+ caller: candidate.caller,
430
+ operands: getMethodOperands,
431
+ results: [mintResult(getMethodId, 'value', methodType)],
432
+ // `GetMethod` throws when the property holds a non-callable, non-nullish
433
+ // value; a missing/undefined method is not an error here; `get-iterator`
434
+ // is where a missing iterator method becomes a `TypeError`.
435
+ completion: throwingCompletion,
436
+ effects: pureEffects,
437
+ evaluationOrdinal: candidate.evaluationOrdinal
438
+ };
439
+ operations.push(getMethod);
440
+ methodResult = semanticResultId(getMethodId, 'value');
441
+ }
442
+ const getIteratorOperands = methodResult
443
+ ? [operand('target', 0, source.source, source.type), operand('method', 0, { kind: 'result', result: methodResult }, methodType)]
444
+ : [operand('target', 0, source.source, source.type)];
445
+ const getIterator = {
446
+ family: 'protocol',
447
+ id: getIteratorId,
448
+ protocol,
449
+ step: 'get-iterator',
450
+ caller: candidate.caller,
451
+ operands: getIteratorOperands,
452
+ results: [mintResult(getIteratorId, 'iterator-record', iteratorRecordType)],
453
+ completion: throwingCompletion,
454
+ effects: { ...pureEffects, callsUserCode: true },
455
+ evaluationOrdinal: candidate.evaluationOrdinal
456
+ };
457
+ operations.push(getIterator);
458
+ if (methodResult)
459
+ edges.push({ kind: 'evaluation', from: getMethodId, to: getIteratorId });
460
+ const iteratorRecord = semanticResultId(getIteratorId, 'iterator-record');
461
+ const boolType = context.table.intern({ kind: 'primitive', primitive: 'boolean' });
462
+ const next = {
463
+ family: 'protocol',
464
+ id: nextId,
465
+ protocol,
466
+ step: 'next',
467
+ caller: candidate.caller,
468
+ operands: [operand('iterator-record', 0, { kind: 'result', result: iteratorRecord }, iteratorRecordType)],
469
+ // `IteratorResult` is `{ value, done }`; publishing `done` under the
470
+ // `completion` role (always boolean, never `elementType`) is what lets a
471
+ // consumer gate "run the loop body" without re-deriving the flag itself.
472
+ results: [mintResult(nextId, 'value', elementType), mintResult(nextId, 'completion', boolType)],
473
+ completion: { ...throwingCompletion, canSuspend: protocol === 'async-iterator' },
474
+ effects: { ...pureEffects, callsUserCode: true },
475
+ evaluationOrdinal: candidate.evaluationOrdinal
476
+ };
477
+ if (options.includeNext !== false) {
478
+ operations.push(next);
479
+ edges.push({ kind: 'evaluation', from: getIteratorId, to: nextId });
480
+ }
481
+ const nextValue = semanticResultId(nextId, 'value');
482
+ let closeOperationId = null;
483
+ if (options.includeClose) {
484
+ const voidType = context.table.intern({ kind: 'primitive', primitive: 'void' });
485
+ const close = {
486
+ family: 'protocol',
487
+ id: closeId,
488
+ protocol,
489
+ step: 'close',
490
+ caller: candidate.caller,
491
+ operands: [operand('iterator-record', 0, { kind: 'result', result: iteratorRecord }, iteratorRecordType)],
492
+ // IteratorClose produces no JavaScript value, but it still needs one
493
+ // semantic anchor for IR provenance and its runtime-helper obligation.
494
+ // A void completion is that anchor without inventing readable storage.
495
+ results: [mintResult(closeId, 'completion', voidType)],
496
+ completion: throwingCompletion,
497
+ effects: { ...pureEffects, callsUserCode: true },
498
+ evaluationOrdinal: candidate.evaluationOrdinal
499
+ };
500
+ operations.push(close);
501
+ // `IteratorClose` only runs on an abrupt exit from the loop body, and the
502
+ // operations that can cause one (a `break`, a `return`, a throwing
503
+ // statement inside the body) belong to other producers this single
504
+ // candidate's contribution cannot see. Recording `close` as reachable in
505
+ // program order from `next` states what is proven -- the step exists and
506
+ // is part of this protocol -- without fabricating the precise trigger
507
+ // edge; wiring that exactly needs a cross-producer operation index this
508
+ // tree does not yet have.
509
+ edges.push({ kind: 'evaluation', from: nextId, to: closeId });
510
+ closeOperationId = closeId;
511
+ }
512
+ return { operations, edges, iteratorRecord, recordType: iteratorRecordType, nextValue, nextOperationId: nextId, closeOperationId };
513
+ };
514
+ /**
515
+ * Object spread's `CopyDataProperties`: own enumerable string+symbol keys
516
+ * copied directly into the destination. There is no method lookup and no
517
+ * iterator record, so this mints one operation, not a step sequence.
518
+ *
519
+ * `ProtocolOperation.step` is closed and shaped for iterator-style protocols
520
+ * (`get-method`/`get-iterator`/`next`/`close`/`return`/`throw`); none of those
521
+ * names is what `CopyDataProperties` does. `'next'` is reused here only as
522
+ * "the single step this protocol performs" -- not as a claim that object
523
+ * spread advances an iterator, which it never does.
524
+ *
525
+ * `receiver` names WHERE the copy writes -- `producers/allocations.ts`'s
526
+ * `spreadCopyOf` defers this exact member to this exact operation (predicting
527
+ * this same id, never re-minting it) whenever the source's own-property set
528
+ * is not statically known, and `ir/lower-protocol.ts` needs the destination to
529
+ * lower the copy at all. It is the SAME identity `allocations.ts`'s own
530
+ * `AllocationOperation` for this literal already publishes -- the ordinal is 0
531
+ * because the census gives an `ObjectLiteralExpression` the allocation family
532
+ * exactly once, exactly as `methodValueOf` (allocations.ts) predicts a
533
+ * sibling id the identical way -- so citing it here can never mint a second,
534
+ * disagreeing identity for the one object this literal allocates.
535
+ */
536
+ const contributeObjectSpread = (context, candidate, node) => {
537
+ // A source whose own-property set is statically known takes no protocol step
538
+ // at all: `producers/allocations.ts` copies its members field by field, so a
539
+ // `spread` operation here would be a step nothing lowers, published for a
540
+ // copy that already happened. Exactly the bypass an array-literal spread of a
541
+ // plain array takes below, decided by the same shared predicate both halves
542
+ // read (`shared.ts`'s `staticSpreadMembersOf`) so the two can never disagree
543
+ // about which sources it covers.
544
+ if (!('blocked' in staticSpreadMembersOf(context, context.types.typeAt(node.expression)))) {
545
+ return { kind: 'operations', operations: [], edges: [] };
546
+ }
547
+ const source = resolveExpressionOperand(context, node.expression);
548
+ if (!source) {
549
+ return {
550
+ kind: 'blocked',
551
+ blocker: blocked(candidate.id, 'protocol', 'no normalized operation identifies the object-spread source expression value', null)
552
+ };
553
+ }
554
+ const literal = node.parent;
555
+ if (!ts.isObjectLiteralExpression(literal)) {
556
+ // Grammar-guaranteed: a `SpreadAssignment` is only ever a property of an
557
+ // object literal. Refused by name rather than assumed, on the same
558
+ // fail-closed footing as every other refusal here.
559
+ return {
560
+ kind: 'blocked',
561
+ blocker: blocked(candidate.id, 'protocol', "an object spread's own parent is not the object literal it copies into", null)
562
+ };
563
+ }
564
+ const receiverType = context.types.typeAt(literal);
565
+ const receiverAllocationId = operationId(context.identities.nodeIdOf(literal), 'allocation', 0);
566
+ const receiverOperand = operand('receiver', 0, { kind: 'result', result: semanticResultId(receiverAllocationId, 'value') }, receiverType, { kind: 'provenance' });
567
+ const id = mintOperationId(context.ordinals, candidate.id, 'protocol');
568
+ const operands = [operand('source', 0, source.source, source.type), receiverOperand];
569
+ const operation = {
570
+ family: 'protocol',
571
+ id,
572
+ protocol: 'spread',
573
+ step: 'next',
574
+ caller: candidate.caller,
575
+ operands,
576
+ // `CopyDataProperties` returns nothing a JS consumer ever reads, but the
577
+ // IR layer still needs a citable anchor for this operation's own lineage
578
+ // (`ir/lower-operands.ts`'s `requireLineage`/`anchorResultOf` finds none
579
+ // in an empty `results`) -- the same reason `producers/allocations.ts`'s
580
+ // own property-install operations publish the RECEIVER as their result
581
+ // even though nothing reads it either.
582
+ results: [mintResult(id, 'value', receiverType)],
583
+ // Unlike iterator/enumerate spread, `CopyDataProperties` on a null/undefined
584
+ // source is a defined no-op, not a `TypeError` -- but reading an own
585
+ // property can still invoke a getter that throws, so this stays throwing.
586
+ completion: throwingCompletion,
587
+ effects: { readsMutableState: true, writesMutableState: true, allocates: false, callsUserCode: true },
588
+ evaluationOrdinal: candidate.evaluationOrdinal
589
+ };
590
+ return { kind: 'operations', operations: [operation], edges: valueEdgesInto(id, operands) };
591
+ };
592
+ const contributeIterationSpread = (context, candidate, node) => {
593
+ // `...arguments` in an invocation is sourced by the CONSUMER, not here.
594
+ // `resolveExpressionOperand` resolves an identifier's value through its
595
+ // declaration, and the magic `arguments` binding has none, so this producer
596
+ // reaches the `!source` refusal below and takes the whole enclosing function
597
+ // with it -- for a spread `spread-arguments.ts` already knows how to read
598
+ // (it calls `argumentsObjectValueAt` directly, minting the phantom rest
599
+ // slot's own read against the invocation's candidate).
600
+ //
601
+ // Scoped to exactly the two parents that consumer serves: `invocations.ts`
602
+ // routes both call and construct through `buildArgumentOperands`. An array
603
+ // literal is deliberately NOT included -- `allocations.ts` has no
604
+ // `arguments` case, so yielding no steps there would elide the iteration and
605
+ // put nothing in its place, which is the same fail-closed reason the JSX
606
+ // child spread is excluded below.
607
+ const consumerSourcesArguments = ts.isCallExpression(node.parent) || ts.isNewExpression(node.parent);
608
+ if (consumerSourcesArguments && isArgumentsObjectIdentifier(node.expression, context.checker)) {
609
+ return { kind: 'operations', operations: [], edges: [] };
610
+ }
611
+ const source = resolveExpressionOperand(context, node.expression);
612
+ if (!source) {
613
+ return {
614
+ kind: 'blocked',
615
+ blocker: blocked(candidate.id, 'protocol', 'no normalized operation identifies the spread source expression value', null)
616
+ };
617
+ }
618
+ // The two source shapes whose iteration is settled before the program runs,
619
+ // in the two contexts that consume them without an iterator:
620
+ //
621
+ // - a plain `T[]`/`Array<T>` RANGE-COPIED: `[...xs, 1]` reads this exact
622
+ // spread element's own operand (role `spread`, `allocations.ts`) and
623
+ // `f(a, ...xs)` reads it under role `spread-argument`
624
+ // (`spread-arguments.ts`), and both end at the same `appendRange` into a
625
+ // freshly built array (`emit-arrays.ts`).
626
+ // - a CLOSED TUPLE expanded positionally: `tuple-spread.ts` mints one
627
+ // `[[Get]]` per position and the consuming producer cites those reads
628
+ // directly.
629
+ //
630
+ // Minting iterator steps for either would publish a `get-iterator`/`next`
631
+ // pair nobody cites, demand the iterator runtime helpers of a program that
632
+ // performs no iteration, and -- for a tuple -- hand every position the UNION
633
+ // of the tuple's element types, since `iterationElementType` has no
634
+ // per-step answer to give. It measurably emitted exactly that: before the
635
+ // call-argument half of this bypass existed, `sumRest(1, ...xs)` emitted a
636
+ // live `gea::Iterator<double>` plus one `arrayNext()`/`done()` pair
637
+ // alongside the `appendRange` that actually performed the spread.
638
+ //
639
+ // Scoped to the three parents that consume it: a JSX spread child
640
+ // (`<div>{...kids}</div>`) is refused by `producers/jsx.ts` and has no
641
+ // operand of its own to cite, so a bypass there would elide the steps and
642
+ // put nothing in their place.
643
+ const consumedWithoutIterator = ts.isArrayLiteralExpression(node.parent) || ts.isCallExpression(node.parent) || ts.isNewExpression(node.parent);
644
+ if (consumedWithoutIterator &&
645
+ (hasNativeIterationCursor(context, source.type) || closedTupleElementTypesOf(context, source.type) !== null)) {
646
+ return { kind: 'operations', operations: [], edges: [] };
647
+ }
648
+ // Everything else keeps its steps. When the source is a provably plain
649
+ // `T[]` reaching here (a context none of the three above), those steps need
650
+ // no dynamic `Symbol.iterator` lookup any more than a `for`-`of` over the
651
+ // same array would (`control.ts`'s `contributeForOfIn` makes the identical
652
+ // call): `get-method` is skipped and `get-iterator` takes the array-native
653
+ // fast path.
654
+ const arrayFastPath = hasNativeIterationCursor(context, source.type);
655
+ const dynamicSource = isDynamicIterationSource(context, source.type);
656
+ const steps = mintIteratorSteps(context, candidate, 'iterator', { ...source, iterated: node.expression }, {
657
+ // A genuinely dynamic source resolves and calls @@iterator in the
658
+ // runtime helper. Keeping a synthetic `get-method` operation here
659
+ // would require a static symbol-key operand that this source does not
660
+ // have, then incorrectly ask `lower-protocol` to emit a native get.
661
+ includeGetMethod: !arrayFastPath && !dynamicSource,
662
+ // A spread element always drains its iterator to completion; there is no
663
+ // `break` inside a spread that would trigger `IteratorClose`.
664
+ includeClose: false,
665
+ // The allocation/invocation consumer drains this record through its
666
+ // gather operation. A speculative `next()` here would skip one value.
667
+ // An ARRAY LITERAL drains whatever record this mints, through its own
668
+ // gather step -- for a typed custom iterable (`[...new Range(1, 4)]`)
669
+ // exactly as for a dynamic one. A speculative `next()` here would eat
670
+ // the first value before the gather ever ran.
671
+ includeNext: !(consumedWithoutIterator && (dynamicSource || ts.isArrayLiteralExpression(node.parent)))
672
+ });
673
+ return { kind: 'operations', operations: steps.operations, edges: steps.edges };
674
+ };
675
+ /**
676
+ * `SpreadElement` covers both `f(...xs)` and `[...xs]` -- the census assigns
677
+ * one syntax kind to both contexts, and this producer treats them identically
678
+ * because the iteration protocol they invoke does not differ by context.
679
+ * `SpreadAssignment` is object-literal spread and is the only candidate routed
680
+ * to `contributeObjectSpread`.
681
+ */
682
+ export const createProtocolProducer = (context) => {
683
+ const contribute = (candidate) => {
684
+ const node = candidate.node;
685
+ if (ts.isSpreadElement(node))
686
+ return contributeIterationSpread(context, candidate, node);
687
+ if (ts.isSpreadAssignment(node))
688
+ return contributeObjectSpread(context, candidate, node);
689
+ return {
690
+ kind: 'blocked',
691
+ blocker: blocked(candidate.id, 'protocol', 'protocol census produced a syntax kind this producer does not model', null)
692
+ };
693
+ };
694
+ return { family: 'protocol', contribute };
695
+ };