@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,648 @@
1
+ import { componentId, withoutFunctionSpecialization } from '../identity/ids.js';
2
+ import { callableOriginsOf, callableOwnPropertyWritesOf, unknownCallableOwnProperty } from '../semantics/callable-origins.js';
3
+ import { partitionAuthorityComponents } from '../semantics/model/graph.js';
4
+ import { operandOf } from '../semantics/model/operands.js';
5
+ import { createRepresentationDeriver, defaultDateDeclarationPolicy, defaultHostBindingPolicy, defaultHostNamespaceRootPolicy, defaultKeyedCollectionPolicy, defaultOwnershipPolicy, defaultPromiseDeclarationPolicy, defaultGeneratorDeclarationPolicy, defaultInterfaceImplementorPolicy, defaultRegExpDeclarationPolicy, defaultStandardBufferPolicy, defaultStringObjectDeclarationPolicy, defaultErrorDeclarationPolicy, defaultFunctionDeclarationPolicy, defaultClassHeritagePolicy, defaultTypedArrayElementPolicy, defaultValueRecordPolicy } from './derive.js';
6
+ import { isArrayPatternCapable, representationKey, soleArrayPatternCapableArm } from './model.js';
7
+ import { literalDestinationsOf } from './literal-destination.js';
8
+ import { createRepresentationPlanBuilder } from './plan.js';
9
+ import { verifyRepresentationPlan } from './verify.js';
10
+ const resultsOfComponent = (graph, members) => members.flatMap((member) => {
11
+ const operation = graph.operations.get(member);
12
+ return operation ? operation.results.map((result) => result.id) : [];
13
+ });
14
+ /**
15
+ * The element type a minted iterator record declares it will yield, read back
16
+ * out of the record's own interned shape.
17
+ *
18
+ * `producers/protocol.ts`'s `iteratorMethodAndRecordTypes` builds that shape
19
+ * from ONE element type: `{ next(): { value: E, done: boolean } }`. So `E` is
20
+ * recoverable from the record, and recovering it is not a second derivation --
21
+ * it is reading back the exact id the producer already committed to, which is
22
+ * also the id the matching `next` step's own `value` result carries. That
23
+ * matters for the `Map` case below: a pair's carrier is a RECORD keyed by its
24
+ * shape id, and a shape id minted here rather than read back would name a
25
+ * different C++ struct from the one the loop variable is destructured out of.
26
+ *
27
+ * `null` when the record is not that shape -- an `async-iterator`'s record is
28
+ * interned `unresolved` on purpose, and a caller that cannot read an element
29
+ * type must publish no cursor rather than guess one.
30
+ */
31
+ const iteratorRecordElementTypeOf = (structuralTypes, recordType) => {
32
+ const record = structuralTypes.get(recordType)?.shape;
33
+ if (record?.kind !== 'object')
34
+ return null;
35
+ const next = record.members.find((member) => member.key.kind === 'string' && member.key.value === 'next');
36
+ if (!next)
37
+ return null;
38
+ const signature = structuralTypes.get(next.type)?.shape;
39
+ if (signature?.kind !== 'signature')
40
+ return null;
41
+ const call = signature.call[0];
42
+ if (!call)
43
+ return null;
44
+ const step = structuralTypes.get(call.result)?.shape;
45
+ if (step?.kind !== 'object')
46
+ return null;
47
+ return step.members.find((member) => member.key.kind === 'string' && member.key.value === 'value')?.type ?? null;
48
+ };
49
+ /**
50
+ * The `[K, V]` pair carrier a `Map`'s cursor yields, or `null` when this
51
+ * compiler cannot lay that pair out.
52
+ *
53
+ * Strict on purpose, and stricter than the census side that lets a `Map`
54
+ * source skip the `@@iterator` lookup (`producers/shared.ts`'s
55
+ * `isNativeIterableMapType`): the pair must derive to a RECORD whose fields
56
+ * are exactly "0" and "1", carrying the collection's own key and value
57
+ * carriers. Anything else -- a `Map` whose value carrier is `unresolved`, an
58
+ * element type the checker answered as something other than the pair -- means
59
+ * the cursor and the destructuring that reads it would disagree about the
60
+ * struct, so no cursor is published and the program refuses at preflight on
61
+ * the unclaimed `protocol:iterator:next:record` instead.
62
+ */
63
+ /**
64
+ * The cursor carrier for one of the four fixed-storage walks (`Array`/`Set`/
65
+ * `string`/`Map`) or the `for`-`in` enumerator/static-tuple walk -- every
66
+ * `iterator(E)` this file publishes except the generator's own (`derive.ts`'s
67
+ * `GeneratorDeclarationPolicy`). None of them ever resumes with a value or
68
+ * completes with one (`%ArrayIteratorPrototype%` and its siblings define no
69
+ * `.return`/`.throw` at all, ECMA-262 27.1.2), so `resume`/`completion` are
70
+ * always the cursor's own "stores nothing" carrier and `source` always says
71
+ * so -- see the `iterator` kind's own doc comment (`model.ts`) for why that
72
+ * tag exists and what reads it.
73
+ */
74
+ const sequenceIterator = (element) => ({
75
+ kind: 'iterator',
76
+ element,
77
+ resume: { kind: 'undefined' },
78
+ completion: { kind: 'undefined' },
79
+ source: 'sequence'
80
+ });
81
+ const mapPairCursorElementOf = (structuralTypes, operation, result, source, deriver) => {
82
+ if (source.family !== 'map' || source.value === null)
83
+ return null;
84
+ const elementType = iteratorRecordElementTypeOf(structuralTypes, result.type);
85
+ if (elementType === null)
86
+ return null;
87
+ const pair = deriver.derive(elementType);
88
+ if (pair.kind !== 'record' || pair.fields.length !== 2)
89
+ return null;
90
+ const [first, second] = pair.fields;
91
+ if (!first || !second || first.key !== '0' || second.key !== '1')
92
+ return null;
93
+ if (representationKey(first.value) !== representationKey(source.key))
94
+ return null;
95
+ if (representationKey(second.value) !== representationKey(source.value))
96
+ return null;
97
+ // `operation` is unread beyond the caller's own family/step check; naming it
98
+ // keeps this helper's signature the same shape as its sibling above.
99
+ void operation;
100
+ return pair;
101
+ };
102
+ /**
103
+ * The native carrier a protocol producer's private iterator-record gets. A
104
+ * `for`-`in` record is always a string-key cursor; `for`-`of` (including
105
+ * spread/`yield*`) gets one when its source's iteration is settled before the
106
+ * program runs -- the fast path `contributeForOfIn`/`mintIteratorSteps`
107
+ * (control.ts, protocol.ts) exist for.
108
+ *
109
+ * `derive.ts` cannot answer this on its own: an `IteratorRecord` is a
110
+ * spec-level bookkeeping value with no TypeScript type at all, so its own
111
+ * structural type is (correctly) `unresolved`, and `deriveShape`'s "one shape,
112
+ * one carrier" rule has nothing to derive from. What decides the carrier here
113
+ * is not the record's *own* shape but the *operation* that produces it: a
114
+ * `get-iterator` step. Enumeration decides that from the protocol itself.
115
+ * Ordinary iteration decides it from an `array-object`, `string`, `Set<T>` or
116
+ * `Map<K, V>` source -- ECMA-262 23.1.5, 22.1.3.36, 24.2.3.10 and 24.1.5.1
117
+ * are each a fixed walk over storage already in hand. Every other ordinary
118
+ * iterator source is left alone: the result keeps its honest unresolved or
119
+ * structural carrier and the program is refused at preflight, never boxed.
120
+ */
121
+ const nativeCursorIteratorOf = (structuralTypes, operation, result, deriver) => {
122
+ if (!operation || operation.family !== 'protocol')
123
+ return null;
124
+ if (operation.step !== 'get-iterator' || result.role !== 'iterator-record')
125
+ return null;
126
+ const target = operandOf(operation, 'target');
127
+ if (!target)
128
+ return null;
129
+ // `for`-`in` never produces the synthetic `{ next }` method record used by
130
+ // the general iterator protocol. Its producer has no get-method step at all:
131
+ // `get-iterator` is the backend's own key-snapshot operation and `next`
132
+ // advances that snapshot. Therefore the result contract is always the one
133
+ // native `gea::Iterator<string>` cursor, even when the receiver itself is
134
+ // unsupported and its get-iterator obligation correctly refuses emission.
135
+ //
136
+ // Keeping this independent of the receiver carrier is load-bearing for an
137
+ // optional receiver: a possibly-absent TABLE walks its keys or, absent, an
138
+ // empty cursor (`emit-iterator.ts`'s `enumerateIfPresent` -- ECMA-262
139
+ // 14.7.5.5 runs the loop zero times), while an optional record such as
140
+ // Fastify's `schema.properties` stays honestly keyed `optional(record)`
141
+ // at its get-iterator site, and neither's paired next step fabricates the
142
+ // unreachable `protocol:enumerate:next:record` obligation. The target key,
143
+ // not a false result carrier, is the fail-closed boundary.
144
+ if (operation.protocol === 'enumerate') {
145
+ return sequenceIterator({ kind: 'string' });
146
+ }
147
+ if (operation.protocol !== 'iterator')
148
+ return null;
149
+ const derived = deriver.derive(target.type);
150
+ // An ABSENT source keeps its payload's cursor. Iterating `undefined` is a
151
+ // runtime `TypeError` (ECMA-262 7.4.2 `GetIterator` calls `GetMethod` on it),
152
+ // not a static impossibility, so `T[] | undefined` walks exactly the storage
153
+ // `T[]` walks and the absence is one separate presence assertion the backend
154
+ // spells in front of the cursor (`targets/cpp/emit-iterator.ts`). Unwrapped
155
+ // HERE, once, ahead of the whole dispatch, so every payload shape below --
156
+ // array, string, generator, tuple record, `Set`, `Map` -- inherits it for
157
+ // free rather than each growing an absent-shaped twin.
158
+ //
159
+ // `producers/shared.ts`'s `presentIterationArm` is the same fact asked of
160
+ // the structural type, which is what decides that the loop takes the fast
161
+ // path at all; the two must agree, and they agree because `optionalOf`
162
+ // builds this wrapper for exactly the unions that helper admits (and
163
+ // COLLAPSES it for the three carriers that hold their own absence, so a
164
+ // `class-ref`, a `native-handle` and the box never arrive wrapped).
165
+ const source = derived.kind === 'optional' ? derived.payload : derived;
166
+ if (source.kind === 'array-object')
167
+ return sequenceIterator(source.element);
168
+ // A `string`'s own iteration (ECMA-262 22.1.3.36) is the third fixed walk
169
+ // with no `@@iterator` lookup behind it, and the one whose snapshot is
170
+ // EXACT rather than approximate: a String is an immutable primitive, so the
171
+ // step sequence cannot change under the loop. Each step yields one code
172
+ // point, which is itself a string -- hence `iterator(string)`, an element
173
+ // carrier equal to the source's own.
174
+ if (source.kind === 'string')
175
+ return sequenceIterator({ kind: 'string' });
176
+ // A source that is ALREADY a cursor -- a `Generator<T, ...>`, which
177
+ // `derive.ts`'s `GeneratorDeclarationPolicy` carries as `iterator(T)` -- is
178
+ // its own iterator record: ECMA-262 27.5.1.2 defines
179
+ // `%GeneratorPrototype%[@@iterator]` as returning `this`, so `GetIterator`
180
+ // over one publishes the source's own carrier and `emit-iterator.ts` renders
181
+ // the step as the copy that is.
182
+ if (source.kind === 'iterator')
183
+ return source;
184
+ // A `Set<T>`'s own iteration (ECMA-262 24.2.3.10) is the same fixed walk
185
+ // over the collection's own entries -- no `@@iterator` lookup, no dynamic
186
+ // method call -- so it publishes the same cursor over the set's own key
187
+ // carrier. The four keyed-collection families are not one: neither WEAK
188
+ // family iterates at all (24.3/24.4), a `Set` yields its key, and a `Map`
189
+ // yields a `[K, V]` PAIR whose record carrier is read back out of the
190
+ // iterator record's own declared element type (`mapPairCursorElementOf`)
191
+ // rather than assembled here, so the cursor and the destructuring that reads
192
+ // it name one struct.
193
+ // A fixed-arity tuple, whose storage is a positional struct rather than any
194
+ // container with a walk of its own. It belongs beside the four sources above
195
+ // for the same reason they belong to each other -- the step sequence is
196
+ // settled before the program runs, here more completely than for any of
197
+ // them, because the LENGTH is a compile-time fact -- and
198
+ // `targets/cpp/emit-iterator.ts`'s `emitStaticTupleIterator` unrolls the
199
+ // positions into the cursor's own reader.
200
+ //
201
+ // Gated on the absence of a `method` operand rather than on the record's
202
+ // shape alone: that operand is exactly the signal that
203
+ // `producers/shared.ts`'s `hasNativeIterationCursor` did NOT take this
204
+ // source down the fast path, and a record reaching a general-protocol
205
+ // `get-iterator` has a real `[Symbol.iterator]` to call -- publishing a
206
+ // cursor over it would replace that call with a walk of the struct's own
207
+ // fields, which is a different program.
208
+ //
209
+ // The element carrier comes from the iterator record's own declared element
210
+ // type, not from the fields, so the cursor and the `next` value it yields
211
+ // are one answer rather than two; the emitter re-checks that every position
212
+ // really does carry it and refuses rather than publishing a cursor whose
213
+ // element type is not the type of what it reads.
214
+ if (source.kind === 'record' && !operandOf(operation, 'method')) {
215
+ const positional = source.fields.length > 0 && source.fields.every((field, position) => field.key === String(position) && field.required);
216
+ if (!positional)
217
+ return null;
218
+ const elementType = iteratorRecordElementTypeOf(structuralTypes, result.type);
219
+ return elementType === null ? null : sequenceIterator(deriver.derive(elementType));
220
+ }
221
+ if (source.kind !== 'keyed-collection')
222
+ return null;
223
+ if (source.family === 'set')
224
+ return sequenceIterator(source.key);
225
+ const pair = mapPairCursorElementOf(structuralTypes, operation, result, source, deriver);
226
+ return pair ? sequenceIterator(pair) : null;
227
+ };
228
+ /**
229
+ * The carrier an ARRAY BINDING PATTERN's own source step gets when its base is
230
+ * a `Set<T>` or a `string`.
231
+ *
232
+ * `const [a, b] = set` is not a cursor walk in this backend: the pattern reads
233
+ * its source BY POSITION (`ir/lower-destructuring.ts` reads element `n` and
234
+ * range-copies a rest), which needs random access a cursor does not offer. So
235
+ * the source step publishes an `array-object` of the source's own element
236
+ * carrier and the lowering materializes exactly that -- the same snapshot
237
+ * `[...set]`/`[...str]` already build, through the same `appendSetRange`/
238
+ * `appendCodePointRange` range copy.
239
+ *
240
+ * That snapshot is where this backend and ECMA-262 7.4 differ, and the
241
+ * difference is stated rather than hidden: the specification's
242
+ * `ArrayBindingPattern` drains only as many steps as the pattern binds (plus
243
+ * one `IteratorClose`), while this materializes the whole source first. It is
244
+ * unobservable for these two sources -- a String is immutable, and neither a
245
+ * Set walk nor a String walk can run user code that could observe the extra
246
+ * steps -- and it is exactly why this is scoped to them. A `Map` is NOT
247
+ * included even though its own `for`-`of` cursor is: a pattern's source step
248
+ * publishes the PATTERN's type, not a minted iterator record, so there is no
249
+ * `[K, V]` pair shape id to read back here (`mapPairCursorElementOf` above
250
+ * needs one), and publishing a snapshot whose element carrier this cannot name
251
+ * would be the disagreement the whole override exists to avoid.
252
+ */
253
+ const patternSourceSnapshotOf = (structuralTypes, regexp, operation, result, deriver) => {
254
+ if (!operation || operation.family !== 'destructuring')
255
+ return null;
256
+ if (operation.form !== 'array-pattern' || result.role !== 'iterator-record')
257
+ return null;
258
+ const base = operandOf(operation, 'base');
259
+ if (!base)
260
+ return null;
261
+ const source = deriver.derive(base.type);
262
+ if (source.kind === 'string')
263
+ return { kind: 'array-object', element: { kind: 'string' }, ownership: 'shared-refcount', extension: null };
264
+ // A `RegExpExecArray` (`const [, major, minor = '0'] = re.exec(text)`,
265
+ // tsc's semver.ts) is the third source the same argument admits: its
266
+ // capture slots are storage the runtime already holds, and a snapshot of
267
+ // them can run no user code. The element is `optional(string)` and not the
268
+ // `string` the interface's `extends Array<string>` claims, because ECMA-262
269
+ // 22.2.7.2 puts `undefined` in a non-participating group's slot and the
270
+ // pattern's defaults are written to fire on exactly that -- the same
271
+ // honesty `emit-prototype-regexp.ts`'s `capturedOrAbsent` keeps for an
272
+ // indexed read. A `RegExpMatchArray` is not admitted: its global-flag
273
+ // answer is a list of whole matches with no capture slots at all.
274
+ const shape = structuralTypes.get(base.type)?.shape;
275
+ if (shape?.kind === 'declared' && regexp.forDeclaration(shape.declaration)?.kind === 'exec-result') {
276
+ const element = { kind: 'optional', payload: { kind: 'string' }, absence: 'undefined' };
277
+ return { kind: 'array-object', element, ownership: 'shared-refcount', extension: null };
278
+ }
279
+ if (source.kind !== 'keyed-collection' || source.family !== 'set')
280
+ return null;
281
+ return { kind: 'array-object', element: source.key, ownership: 'shared-refcount', extension: null };
282
+ };
283
+ /**
284
+ * An array pattern's own shared source step, published as the PAYLOAD it
285
+ * actually reads positionally -- unwrapping `optional` (a position past a
286
+ * plain array's own length, or fed by an enclosing pattern's own absent-
287
+ * capable element read) and, once unwrapped, picking `soleArrayPatternCapableArm`
288
+ * of whatever tagged union remains (`number | number[]`, a plain array's
289
+ * element that is itself a union, only one arm of which supports positional
290
+ * reads at all).
291
+ *
292
+ * Without this, a nested array-assignment pattern reading such a position
293
+ * (`[a, [b, c]] = row` for `row: (number | number[])[]`) publishes its own
294
+ * shared source step as the wrapped `optional(tagged-union(...))` itself --
295
+ * a carrier the array/tuple fast path in `ir/lower-destructuring.ts` does not
296
+ * read at all, so the position's own runtime-helper obligation censused
297
+ * "missing" no matter how faithfully the rest of the pipeline modeled the
298
+ * read. Publishing the picked payload here is what lets `lowerArrayPatternSource`
299
+ * render the two runtime facts an `optional(tagged-union(...))` source
300
+ * actually carries -- the value may be absent (ECMA-262 7.4.2 `GetIterator`
301
+ * throws on `undefined`/`null`), and the union's OTHER arm is a real value
302
+ * this pattern cannot iterate (the same clause throws on a non-iterable) --
303
+ * as two explicit runtime checks in front of the SAME positional fast path
304
+ * every other array-pattern source already takes, rather than inventing a
305
+ * second, unclaimed carrier for the manifest to refuse.
306
+ *
307
+ * A plain, non-union `optional(array-object)`/`optional(record)` source (no
308
+ * arm to pick, only a presence check to run) is unwrapped by the identical
309
+ * path: `soleArrayPatternCapableArm` answers `null` for a non-tagged-union
310
+ * payload, and `isArrayPatternCapable` already being true for it is what
311
+ * publishes the bare payload outright.
312
+ */
313
+ const patternSourceArmOf = (operation, result, deriver) => {
314
+ if (!operation || operation.family !== 'destructuring')
315
+ return null;
316
+ if (operation.form !== 'array-pattern' || result.role !== 'iterator-record')
317
+ return null;
318
+ const base = operandOf(operation, 'base');
319
+ if (!base)
320
+ return null;
321
+ const source = deriver.derive(base.type);
322
+ const isOptional = source.kind === 'optional';
323
+ const unwrapped = isOptional ? source.payload : source;
324
+ if (isArrayPatternCapable(unwrapped)) {
325
+ // Already directly capable once unwrapped -- only a genuine CHANGE
326
+ // (dropping the `optional` wrapper) counts as an override; a source that
327
+ // was already bare (array-object/record/uniform tuple-union, no
328
+ // wrapping at all) is left to the ordinary structural derivation, which
329
+ // already agrees, rather than restating an identical answer as one.
330
+ return isOptional ? unwrapped : null;
331
+ }
332
+ const sole = soleArrayPatternCapableArm(unwrapped);
333
+ return sole ? sole.arm : null;
334
+ };
335
+ /** Method values read dynamically retain their runtime call frame, including this and rest arguments. */
336
+ const dynamicCallableReadOf = (operation, result, deriver, callableOrigins, dynamicCallables) => {
337
+ if (!deriver.dynamicFallback || operation?.family !== 'property' || operation.internalMethod !== 'get')
338
+ return null;
339
+ const receiver = operandOf(operation, 'receiver');
340
+ const receiverOrigin = receiver?.source.kind === 'result' ? callableOrigins.get(receiver.source.result) : undefined;
341
+ const receiverIsExactDynamicCallable = receiverOrigin !== undefined && dynamicCallables.has(withoutFunctionSpecialization(receiverOrigin));
342
+ if (!receiver || (!receiverIsExactDynamicCallable && deriver.derive(receiver.type).kind !== 'dynamic'))
343
+ return null;
344
+ const carrier = deriver.derive(result.type);
345
+ if (carrier.kind === 'function' ||
346
+ carrier.kind === 'function-family' ||
347
+ carrier.kind === 'function-value-family' ||
348
+ carrier.kind === 'function-value-dispatch')
349
+ return { kind: 'dynamic', reason: 'opt-in-fallback' };
350
+ return null;
351
+ };
352
+ /**
353
+ * A read of a Function member the program itself overwrote on that object.
354
+ *
355
+ * `direct.call = replacement` installs an own `call`; every later
356
+ * `direct.call(...)` finds THAT, not `Function.prototype.call`, but the
357
+ * checker keeps typing the read as the builtin (or, for the three shapes
358
+ * TypeScript recognizes as assignment declarations, as the installed
359
+ * function's own signature) -- either way a convention the emitted read does
360
+ * not produce, because `callableBuiltinRecipeKey` already routes exactly this
361
+ * read through `callableDynamicGet` and a `gea::Value`.
362
+ *
363
+ * `callableOwnPropertyWritesOf` is the plan-free half of the one mutation
364
+ * census; the certify stage asks the fuller `callableBuiltinResolution` of the
365
+ * same scan. A write whose target object the graph cannot name is absent here
366
+ * and present there, so this override is a strict SUBSET: it never boxes a
367
+ * read the renderer would have spelled statically.
368
+ */
369
+ const shadowedCallableBuiltinReadOf = (graph, operation, callableOrigins) => {
370
+ if (operation?.family !== 'property' || operation.internalMethod !== 'get' || operation.keyIsComputed)
371
+ return null;
372
+ const key = operandOf(operation, 'key');
373
+ if (key?.source.kind !== 'constant' || key.source.literal !== 'string')
374
+ return null;
375
+ const member = key.source.text;
376
+ if (member !== 'call' && member !== 'apply' && member !== 'bind')
377
+ return null;
378
+ const receiver = operandOf(operation, 'receiver');
379
+ if (receiver?.source.kind !== 'result')
380
+ return null;
381
+ const origin = callableOrigins.get(receiver.source.result);
382
+ if (origin === undefined)
383
+ return null;
384
+ const own = callableOwnPropertyWritesOf(graph, callableOrigins).get(withoutFunctionSpecialization(origin));
385
+ if (!own || (!own.has(member) && !own.has(unknownCallableOwnProperty)))
386
+ return null;
387
+ return { kind: 'dynamic', reason: 'shadowed-callable-builtin' };
388
+ };
389
+ /** A semantic value proven to be one exact Function object selected for fallback storage. */
390
+ const dynamicCallableValueOf = (result, callableOrigins, dynamicCallables) => {
391
+ const origin = callableOrigins.get(result.id);
392
+ return origin !== undefined && dynamicCallables.has(withoutFunctionSpecialization(origin))
393
+ ? { kind: 'dynamic', reason: 'opt-in-fallback' }
394
+ : null;
395
+ };
396
+ /**
397
+ * CommonJS module records are the one explicitly dynamic host boundary here.
398
+ * The checker authenticated the wrapper declaration and normalization carried
399
+ * that fact onto the operation; no arbitrary typed value reaches this route.
400
+ */
401
+ const commonJsBoundaryOf = (graph, operation) => {
402
+ if (operation?.family === 'invocation' && operation.commonJsRequire !== undefined && operation.commonJsRequire.nativeRecord !== true)
403
+ return { kind: 'dynamic', reason: 'commonjs-module-boundary' };
404
+ if (operation?.family === 'binding' &&
405
+ operation.commonJs !== undefined &&
406
+ (operation.commonJs.global !== 'module' || operation.commonJs.nativeRecord !== true))
407
+ return { kind: 'dynamic', reason: 'commonjs-module-boundary' };
408
+ // `module.exports` is a wrapper-cell read, not an ordinary read from the
409
+ // declared shape of `module`. Follow its normalized receiver edge instead
410
+ // of asking the checker again: the only admitted route is the authenticated
411
+ // `module` binding above and the literal property key the property operation
412
+ // already carries. A user object that merely has an `exports` field cannot
413
+ // satisfy both facts and stays on its normal typed representation path.
414
+ // A write THROUGH the wrapper cell publishes its result from the receiver it
415
+ // wrote into (`lower-property.ts`'s `set`, rendered as the cell after
416
+ // `reflectSet`), so the result crosses the same boundary the receiver did.
417
+ // Derived structurally it was `module`'s declared `{ exports }` record, and
418
+ // `module.exports = { ... }` emitted `gea::Ref<record> = gea::Value`.
419
+ if (operation?.family === 'property' && operation.internalMethod === 'set') {
420
+ const receiver = operandOf(operation, 'receiver');
421
+ if (receiver?.source.kind === 'result') {
422
+ const producerId = graph.results.get(receiver.source.result);
423
+ const producer = producerId === undefined ? undefined : graph.operations.get(producerId);
424
+ if (producer?.family === 'binding' &&
425
+ producer.commonJs !== undefined &&
426
+ (producer.commonJs.global !== 'module' || producer.commonJs.nativeRecord !== true))
427
+ return { kind: 'dynamic', reason: 'commonjs-module-boundary' };
428
+ }
429
+ }
430
+ if (operation?.family === 'property' && operation.internalMethod === 'get') {
431
+ const receiver = operandOf(operation, 'receiver');
432
+ const key = operandOf(operation, 'key');
433
+ if (receiver?.source.kind === 'result' &&
434
+ key?.source.kind === 'constant' &&
435
+ key.source.literal === 'string' &&
436
+ key.source.text === 'exports') {
437
+ const producerId = graph.results.get(receiver.source.result);
438
+ const producer = producerId === undefined ? undefined : graph.operations.get(producerId);
439
+ if (producer?.family === 'binding' && producer.commonJs?.global === 'module' && producer.commonJs.nativeRecord !== true)
440
+ return { kind: 'dynamic', reason: 'commonjs-module-boundary' };
441
+ }
442
+ }
443
+ return null;
444
+ };
445
+ export const publishRepresentations = (graph, ownership = defaultOwnershipPolicy,
446
+ // Which declared types are host handles rather than program-defined records.
447
+ // It reaches the deriver and nothing else: a binding changes what a carrier
448
+ // *is*, never how a carrier is selected or committed, so no other stage here
449
+ // needs to know one exists.
450
+ binding = defaultHostBindingPolicy,
451
+ // Which declared types are typed-array views rather than program-defined
452
+ // records -- the same shape of policy as `binding`, kept a separate
453
+ // parameter because a typed array is not a host protocol (nothing installs
454
+ // it) and answers a different question than "which protocol".
455
+ elements = defaultTypedArrayElementPolicy,
456
+ // Which declared type is the standard library's own `Promise<T>` --
457
+ // narrower than `elements` (one declaration, not eight), kept as its own
458
+ // parameter for the same reason: it answers "is this THE ambient
459
+ // `Promise`", not "which protocol/which width".
460
+ promise = defaultPromiseDeclarationPolicy,
461
+ // Which declared types are the standard `Map`/`Set`/`WeakMap`/`WeakSet`
462
+ // interfaces -- the same shape of policy as `elements`, and separate for the
463
+ // same reason: a keyed collection is not a host protocol and not a typed
464
+ // array, it is its own core-ECMAScript carrier family.
465
+ collections = defaultKeyedCollectionPolicy,
466
+ // Which declared types are the standard `ArrayBuffer`/`DataView` -- the same
467
+ // shape of policy as `collections`, separate for the same reason, and
468
+ // consulted at the same point. See `StandardBufferPolicy` (policies.ts).
469
+ buffers = defaultStandardBufferPolicy,
470
+ // What carries a host NAMESPACE ROOT -- the one policy here keyed by
471
+ // structural type rather than by declaration, because a root's value type is
472
+ // routinely an intersection or an anonymous shape with no declaration to key
473
+ // by. See `HostNamespaceRootPolicy` (policies.ts).
474
+ namespaceRoots = defaultHostNamespaceRootPolicy,
475
+ // Which declared type is the standard library's own `Date`, and the C++ type
476
+ // one is carried in -- core ECMAScript with a compiler-owned native layout,
477
+ // the same category as `promise` above. See `DateDeclarationPolicy`.
478
+ date = defaultDateDeclarationPolicy,
479
+ // Which declared type is the standard `Generator<T, TReturn, TNext>` -- one
480
+ // declaration, its own parameter for the same reason `promise` is one. See
481
+ // `GeneratorDeclarationPolicy` (policies.ts).
482
+ generator = defaultGeneratorDeclarationPolicy,
483
+ // Which declared types are the standard `RegExp`/`RegExpExecArray`/
484
+ // `RegExpMatchArray`, and the target's spelling for each -- separate from
485
+ // `binding` for the reason stated on `RegExpDeclarationPolicy`: a regular
486
+ // expression is core ECMAScript with a compiler-owned native layout, in the
487
+ // same category as `promise` and `collections` above, not something a host
488
+ // installs.
489
+ regexp = defaultRegExpDeclarationPolicy,
490
+ // Which declared type is the standard library's own `String` WRAPPER-OBJECT
491
+ // interface -- one declaration, its own parameter for the same reason
492
+ // `date` is one. See `StringObjectDeclarationPolicy` (policies.ts).
493
+ stringObject = defaultStringObjectDeclarationPolicy,
494
+ // Which declared type is the bare `Function` interface -- one declaration,
495
+ // its own parameter for the same reason `generator` is one. See
496
+ // `FunctionDeclarationPolicy` (policies.ts).
497
+ functionType = defaultFunctionDeclarationPolicy,
498
+ // Which classes each class inherits from, transitively -- read by the
499
+ // deriver's intersection reduction. See `ClassHeritagePolicy` (policies.ts).
500
+ heritage = defaultClassHeritagePolicy,
501
+ // Which object types may be carried BY VALUE -- see
502
+ // `representation/value-records.ts`. Like `binding`, it reaches the deriver
503
+ // and nothing else: it changes what a carrier IS, never how one is selected.
504
+ valueRecords = defaultValueRecordPolicy,
505
+ // The one class a program declares as an interface's implementation -- see
506
+ // `InterfaceImplementorPolicy` (policies.ts). Like `heritage`, it reaches
507
+ // the deriver and nothing else.
508
+ implementors = defaultInterfaceImplementorPolicy, errors = defaultErrorDeclarationPolicy, dynamicFallback = false, dynamicFallbackTypes = new Set(), dynamicFallbackCallables = new Set(), dynamicWrittenTypes = new Set(),
509
+ // The copies of every generic class whose copies can differ in layout; see
510
+ // `ClassCopyPolicy` (policies.ts) and the deriver's `physicalClassDeclarationOf`.
511
+ classCopies) => {
512
+ const callableOrigins = callableOriginsOf(graph);
513
+ // The deriver may recover a boxed callable's declaration-owned frame only
514
+ // from this exact semantic allocation index. A StructuralTypeId is not an
515
+ // identity: unrelated same-signature functions intentionally share one.
516
+ const dynamicCallableShapes = new Map();
517
+ const conflictingCallableShapes = new Set();
518
+ for (const operation of graph.operations.values()) {
519
+ if (operation.family !== 'allocation' || operation.allocated !== 'function-object' || operation.callable === null)
520
+ continue;
521
+ // Every function-object allocation under fallback, not only the ones
522
+ // `dynamicFallbackCallables` names. That set decides which callable VALUES
523
+ // are boxed and must stay exactly as narrow as it is; this map answers a
524
+ // different question -- what frame a body binds when it runs -- and the
525
+ // answer is a fact about the DECLARATION whichever carrier the value ended
526
+ // up in (`projection/abi.ts` says so where it reads this back). A function
527
+ // handed to `new Proxy(fn, ...)` is boxed for a reason that has nothing to
528
+ // do with a mutated `.prototype`, and its body was refused a calling
529
+ // convention it had stated perfectly well in its own parameter list.
530
+ if (!dynamicFallback)
531
+ continue;
532
+ const previous = dynamicCallableShapes.get(operation.callable);
533
+ if (previous !== undefined && previous !== operation.shape) {
534
+ conflictingCallableShapes.add(operation.callable);
535
+ dynamicCallableShapes.delete(operation.callable);
536
+ continue;
537
+ }
538
+ if (!conflictingCallableShapes.has(operation.callable))
539
+ dynamicCallableShapes.set(operation.callable, operation.shape);
540
+ }
541
+ const deriver = createRepresentationDeriver(graph.structuralTypes, ownership, binding, elements, promise, collections, buffers, namespaceRoots, date, generator, regexp, stringObject, functionType, heritage, valueRecords, implementors, errors, dynamicFallback, dynamicFallbackTypes, dynamicCallableShapes, dynamicWrittenTypes, classCopies);
542
+ const builder = createRepresentationPlanBuilder();
543
+ // A fresh object literal whose one consumer is a declared cell is minted as
544
+ // that cell's record (`literal-destination.ts`).
545
+ const literalDestinations = literalDestinationsOf(graph, deriver);
546
+ // Evidence for every published result, including the ones that derive to
547
+ // `unresolved`. Withholding those would leave the guards with nothing to fire
548
+ // on, and a missing row reads downstream as "not reached" rather than "not
549
+ // selected" -- the two failures need to stay distinguishable.
550
+ for (const [resultId, operationId] of graph.results) {
551
+ const operation = graph.operations.get(operationId);
552
+ const result = operation?.results.find((candidate) => candidate.id === resultId);
553
+ if (!result)
554
+ continue;
555
+ // A result the array fast path claims gets an `exact` override below; the
556
+ // structural-derivation row for that same coordinate is published at
557
+ // `conservative` strength instead of `exact` so the two do not read as a
558
+ // conflict (`plan.ts`'s `selectFrom`: two `exact` rows that disagree are a
559
+ // conflict, one `exact` plus one `conservative` is simply an override).
560
+ // Every other result is completely unaffected -- `override` is `null` for
561
+ // all of them, and this degrades to exactly the unconditional `exact`
562
+ // publish this loop always did.
563
+ const override = commonJsBoundaryOf(graph, operation) ??
564
+ shadowedCallableBuiltinReadOf(graph, operation, callableOrigins) ??
565
+ dynamicCallableValueOf(result, callableOrigins, dynamicFallbackCallables) ??
566
+ dynamicCallableReadOf(operation, result, deriver, callableOrigins, dynamicFallbackCallables) ??
567
+ nativeCursorIteratorOf(graph.structuralTypes, operation, result, deriver) ??
568
+ patternSourceSnapshotOf(graph.structuralTypes, regexp, operation, result, deriver) ??
569
+ patternSourceArmOf(operation, result, deriver) ??
570
+ literalDestinations.get(resultId) ??
571
+ null;
572
+ // A `binding` operation's result is not a transient expression value --
573
+ // it *is* the cell (`initialize`/`declare` introduce it, `read`/`write`
574
+ // observe or mutate it), which is exactly the "value is actually kept"
575
+ // case `primitives.ts`'s `storedCarrier` doc names alongside a record
576
+ // field or array element. `deriveStored` already gets applied to every
577
+ // *other* stored position (`abiOf`'s parameter slots, record fields,
578
+ // array elements, all via this file's `deriver.deriveStored`) -- a
579
+ // binding cell was the one stored position this generic loop still ran
580
+ // through bare `derive`, so a `void`-typed cell (including a `never`-typed
581
+ // one, which derives the same carrier) kept `{kind:'void'}` here while
582
+ // the ABI computed for the very same declared type used `undefined`,
583
+ // producing a spurious "bound as void but the ABI declares undefined"
584
+ // blocker for a cell that never disagreed about anything -- only this
585
+ // loop's own two call sites did.
586
+ //
587
+ // A `property` operation's result is the same kind of stored read: `.foo`
588
+ // and `[i]` (census.ts assigns this one family to both node kinds) name a
589
+ // field or element that is already sitting in a record/array, not a
590
+ // completion this expression produces fresh. The checker can still type
591
+ // that read bare `void` -- an unnarrowed `IteratorResult<T, void>.value`
592
+ // narrows to exactly `void` once a preceding `done === true` check in the
593
+ // same `&&`/`if` discriminates the arm, per ordinary control-flow
594
+ // narrowing -- and bare `derive` handed that a `{kind:'void'}` carrier no
595
+ // emitter can define storage for, because nothing about a *read* position
596
+ // is discardable the way a bare statement's own value is. `deriveStored`
597
+ // collapses it to `{kind:'undefined'}`, the same answer this same field
598
+ // gets from every arm where the checker did not narrow it away.
599
+ builder.publish({
600
+ result: resultId,
601
+ representation: operation?.family === 'binding' || operation?.family === 'property'
602
+ ? deriver.deriveStored(result.type)
603
+ : deriver.derive(result.type),
604
+ strength: override ? 'conservative' : 'exact',
605
+ producer: 'structural-derivation',
606
+ // Structural derivation answers from one shape, so it never produces the
607
+ // two co-equal answers a closed family is there to reconcile.
608
+ joinsClosedFamily: false
609
+ });
610
+ if (override) {
611
+ builder.publish({
612
+ result: resultId,
613
+ representation: override,
614
+ strength: 'exact',
615
+ producer: override === literalDestinations.get(resultId)
616
+ ? 'literal-destination'
617
+ : commonJsBoundaryOf(graph, operation)
618
+ ? 'commonjs-module-boundary'
619
+ : shadowedCallableBuiltinReadOf(graph, operation, callableOrigins)
620
+ ? 'shadowed-callable-builtin'
621
+ : dynamicCallableValueOf(result, callableOrigins, dynamicFallbackCallables)
622
+ ? 'dynamic-callable-identity'
623
+ : dynamicCallableReadOf(operation, result, deriver, callableOrigins, dynamicFallbackCallables)
624
+ ? 'dynamic-call-frame'
625
+ : 'protocol-array-fast-path',
626
+ joinsClosedFamily: false
627
+ });
628
+ }
629
+ }
630
+ const committed = [];
631
+ const blocked = [];
632
+ const conflicts = [];
633
+ for (const members of partitionAuthorityComponents(graph)) {
634
+ const representative = members[0];
635
+ if (!representative)
636
+ continue;
637
+ const id = componentId(representative);
638
+ const found = builder.commitComponent(id, resultsOfComponent(graph, members));
639
+ if (found.length > 0) {
640
+ blocked.push(id);
641
+ conflicts.push(...found);
642
+ continue;
643
+ }
644
+ committed.push(id);
645
+ }
646
+ const plan = builder.seal();
647
+ return { plan, committed, blocked, conflicts, violations: verifyRepresentationPlan(plan), deriver };
648
+ };