@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,823 @@
1
+ import ts from 'typescript';
2
+ import { isGlobalObjectConstructor, isStandardInterfaceType, invocationOperandsOf, literalMemberNameOf } from '../derived-expression-type.js';
3
+ import { typedArrayInstanceInterfaceNames } from '../../host-protocols.js';
4
+ import { heritageClassOrInterfaceOf, isConstructorFunction } from './model.js';
5
+ import { calleeDeclarationOf, callableDeclarationOfExpression, flowTargetOf, isRealCallableDeclaration, runtimeParametersOf, isTypePositionReference, resolveFlowSymbolAlias, returnOwnerOf, unwrapNaming } from './targets.js';
6
+ import { forEachReachableStatement } from '../reachability.js';
7
+ import { isAssignmentPattern, isObjectLiteralPrototypeSetter } from '../assignment-patterns.js';
8
+ /**
9
+ * ONE walk of the program, producing every write edge every census needs.
10
+ *
11
+ * See `model.ts` for why this exists. The rules of the house, in the order
12
+ * they matter:
13
+ *
14
+ * 1. **Edges, never answers.** Checker identities supply the initial edges.
15
+ * Later rounds consume receiver types and call attributions from the
16
+ * preceding census. This index never runs its own inference: it adds the
17
+ * argument and collection edges those answers identify. The frontend's
18
+ * fixed point observes these queries and publishes the index together with
19
+ * the settling round, so consumers cannot mix one round's calls with
20
+ * another round's writes.
21
+ * 2. **A census's answer may change only by seeing MORE writes.** Every edge
22
+ * a consumer already discovered for itself is reported here in exactly the
23
+ * spelling that consumer used, including which of the two property-symbol
24
+ * resolutions it keyed on (see `FlowTarget`), so a conversion is an
25
+ * edge-source swap and never a policy change.
26
+ * 3. **Both directions.** A write is recorded against the cell it fills AND
27
+ * against the cell its VALUE names, so "where does this cell's value go"
28
+ * is one lookup rather than a second walk.
29
+ *
30
+ * What it deliberately does NOT do: decide whether an edge is EVIDENCE. A
31
+ * compound assignment carries no fresh value; a spread carries an
32
+ * unenumerable key set; an `Object.assign` source may or may not be readable.
33
+ * Those are policy, and policy stays in the census that owns the cell --
34
+ * `object-bag-bindings.ts` reads a spread as a refusal, and it is right to.
35
+ */
36
+ const COLLECTION_KEY_METHODS = new Set(['get', 'set', 'has', 'delete', 'add']);
37
+ const APPEND_METHODS = new Set(['push', 'unshift']);
38
+ /**
39
+ * The four standard keyed-collection interface names, resolved by declaration
40
+ * identity (`isStandardInterfaceType`) rather than matched by the call's own
41
+ * method spelling.
42
+ *
43
+ * `COLLECTION_KEY_METHODS`/`APPEND_METHODS`/`'fill'` used to gate on the
44
+ * method name ALONE, against any receiver: a user class declaring its own
45
+ * `get`/`set`/`has`/`delete`/`add` (a Command/Strategy/cache-shaped API is an
46
+ * ordinary reason to) had its calls read as `collection-key`/`collection-value`
47
+ * writes into a cell that was never a `Map`/`Set` at all -- admitting a value
48
+ * into a cell the program never fills that way, which is the one failure mode
49
+ * this whole index exists to avoid rather than merely approximate. See
50
+ * `host-protocols.ts`'s `keyedCollectionDeclarationsOf`, the same four names
51
+ * resolved the same way for the census that reads THEIR identity from the
52
+ * checker directly rather than a Map this layer would have to keep in sync
53
+ * with it.
54
+ */
55
+ const KEYED_COLLECTION_INTERFACES = ['Map', 'Set', 'WeakMap', 'WeakSet'];
56
+ /**
57
+ * Whether `type` -- after resolving a type parameter to its constraint, and
58
+ * a subclass to the base type its own declaration states -- is one of
59
+ * `names`.
60
+ *
61
+ * `isStandardInterfaceType` alone answers this correctly only for a
62
+ * receiver whose OWN symbol is the standard interface's symbol, which is
63
+ * exactly the case that is NOT one symbol per checker: `class Registry
64
+ * extends Map<string, number> {}` has its own distinct `Registry` symbol,
65
+ * and `<T extends Map<string, number>>(cache: T)` has its own distinct
66
+ * per-declaration type-parameter symbol. Both are real writes to a real
67
+ * `Map`, and answering "no" to either is not a false-positive removed --
68
+ * it is a write silently dropped, which types the target cell more
69
+ * narrowly than the program fills it. the value-flow survey calls that strictly
70
+ * worse than the boxing this whole despecialization pass exists to remove.
71
+ *
72
+ * The cure is two checker calls this file already treats as fixed
73
+ * properties of the program rather than of a census's evolving view:
74
+ * `checker.getApparentType` resolves a type parameter to its constraint
75
+ * (an object type's apparent type is itself, so this is free for the
76
+ * ordinary case), and `checker.getBaseTypes` walks a class/interface's
77
+ * declared `extends` clause -- transitively, since a subclass may itself be
78
+ * subclassed. A union answers "no" unless EVERY constituent qualifies: a
79
+ * `Map<string, number> | SomethingElse` receiver is not a single collection
80
+ * kind this layer can state a write for, so it refuses by name (the
81
+ * `COLLECTION_KEY_METHODS`/`APPEND_METHODS` gate above simply does not fire)
82
+ * rather than picking one union arm and guessing.
83
+ */
84
+ const matchesStandardInterfaceTransitively = (checker, anchor, names, type) => {
85
+ const apparent = checker.getApparentType(type);
86
+ if (apparent.isUnion()) {
87
+ return (apparent.types.length > 0 && apparent.types.every((member) => matchesStandardInterfaceTransitively(checker, anchor, names, member)));
88
+ }
89
+ const visited = new Set();
90
+ const visit = (candidate) => {
91
+ if (visited.has(candidate))
92
+ return false;
93
+ visited.add(candidate);
94
+ if (names.some((name) => isStandardInterfaceType(checker, anchor, name, candidate)))
95
+ return true;
96
+ const declared = heritageClassOrInterfaceOf(candidate);
97
+ return declared !== null && checker.getBaseTypes(declared).some(visit);
98
+ };
99
+ return visit(apparent);
100
+ };
101
+ /** Whether `receiver`'s type is, or derives from, one of the four standard keyed-collection interfaces -- see `matchesStandardInterfaceTransitively`. */
102
+ const isKeyedCollectionReceiver = (checker, receiver, type) => matchesStandardInterfaceTransitively(checker, receiver, KEYED_COLLECTION_INTERFACES, type);
103
+ /**
104
+ * Whether `receiver`'s type is a real JS array or tuple -- `checker.isArrayType`
105
+ * (the same authority `structural-array-element.ts`/`field-bindings.ts`/
106
+ * `collection-bindings.ts`/`object-bag-bindings.ts`/`structural.ts` already
107
+ * use for the identical question) plus `checker.isTupleType`, since a tuple
108
+ * (`[number, number]`) is not an array type by that authority's own answer
109
+ * but is exactly as real a receiver for `.push`/`.unshift`/`.fill`. Both are
110
+ * asked of the APPARENT type so `<T extends number[]>(xs: T)` resolves `T`
111
+ * to its constraint first, for the same reason `matchesStandardInterfaceTransitively`
112
+ * does.
113
+ */
114
+ const isArrayReceiver = (checker, type) => {
115
+ const apparent = checker.getApparentType(type);
116
+ return checker.isArrayType(apparent) || checker.isTupleType(apparent);
117
+ };
118
+ /**
119
+ * Whether `receiver`'s type is, or derives from, one of the nine standard
120
+ * TypedArray instance interfaces -- `Int8Array`, ..., `Float64Array` --
121
+ * asked with the same base-chain-aware `matchesStandardInterfaceTransitively`
122
+ * used for the keyed collections above, against the SAME nine names
123
+ * `host-protocols.ts:typedArrayDeclarationsOf` resolves for the census that
124
+ * reads a typed array's element domain. That function itself needs an
125
+ * `IdentityTable`, which does not exist yet when this index is built (see
126
+ * `isStandardInterfaceType`'s own doc comment on why this file resolves
127
+ * standard-library identity by raw `ts.Symbol` rather than `DeclarationId`);
128
+ * `typedArrayInstanceInterfaceNames` is the same nine names exported so this
129
+ * is a second CALLER of one list, not a second, independently-typed list.
130
+ *
131
+ * `.fill` is the only method this file asks of a typed array receiver: a
132
+ * typed array's element write is precisely what the dense-buffer carrier
133
+ * exists to state, and `push`/`unshift` do not type-check against one at
134
+ * all (a typed array has no such methods), so `APPEND_METHODS` never needs
135
+ * this check.
136
+ */
137
+ const isTypedArrayReceiver = (checker, receiver, type) => matchesStandardInterfaceTransitively(checker, receiver, typedArrayInstanceInterfaceNames, type);
138
+ const COMPOUND_TOKENS = new Set([
139
+ ts.SyntaxKind.PlusEqualsToken,
140
+ ts.SyntaxKind.MinusEqualsToken,
141
+ ts.SyntaxKind.AsteriskEqualsToken,
142
+ ts.SyntaxKind.AsteriskAsteriskEqualsToken,
143
+ ts.SyntaxKind.SlashEqualsToken,
144
+ ts.SyntaxKind.PercentEqualsToken,
145
+ ts.SyntaxKind.LessThanLessThanEqualsToken,
146
+ ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,
147
+ ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
148
+ ts.SyntaxKind.AmpersandEqualsToken,
149
+ ts.SyntaxKind.BarEqualsToken,
150
+ ts.SyntaxKind.CaretEqualsToken
151
+ ]);
152
+ const LOGICAL_TOKENS = new Set([
153
+ ts.SyntaxKind.BarBarEqualsToken,
154
+ ts.SyntaxKind.AmpersandAmpersandEqualsToken,
155
+ ts.SyntaxKind.QuestionQuestionEqualsToken
156
+ ]);
157
+ /** Whether this call is `Object.assign(...)` on the real global, resolved by DECLARATION IDENTITY (`isGlobalObjectConstructor`) rather than by the spelling `'ObjectConstructor'`. */
158
+ export const isGlobalObjectAssign = (checker, call) => {
159
+ const callee = call.expression;
160
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== 'assign')
161
+ return false;
162
+ if (!ts.isIdentifier(callee.expression))
163
+ return false;
164
+ return isGlobalObjectConstructor(checker, callee.expression, checker.getTypeAtLocation(callee.expression));
165
+ };
166
+ const push = (table, key, value) => {
167
+ const existing = table.get(key);
168
+ if (existing)
169
+ existing.push(value);
170
+ else
171
+ table.set(key, [value]);
172
+ };
173
+ /**
174
+ * Index every write edge in the program.
175
+ *
176
+ * The initial index uses checker identities. Later rounds add receiver and
177
+ * call facts supplied by the preceding census, retaining the original edges.
178
+ * Call attribution and its argument edges must enter together: publishing a
179
+ * callee without its inputs would hide mutations performed by that body.
180
+ */
181
+ export const indexValueFlow = (checker, files, reachable,
182
+ /**
183
+ * The round's settled census view of an expression's type, for the ONE
184
+ * question this index cannot answer from the checker alone: a receiver the
185
+ * checker types `any`. Absent it (round one, and every caller that has no
186
+ * census yet) this index is byte-identical to the one it replaced.
187
+ *
188
+ * It is what makes rule 1 above conditional rather than absolute: an `any`
189
+ * receiver has no member symbols and no array/collection identity, so
190
+ * `container.seq.push(x)` -- three's `WebGLUniforms.addUniform`, with
191
+ * `container` unannotated -- names no cell and records no append, and the
192
+ * `seq` it fills is refused `array:no-writes` while every element it holds
193
+ * sits at that push. The checker's answer is used whenever it HAS one; the
194
+ * census is consulted only where the checker said `any`, so no edge this
195
+ * index already stated can change.
196
+ */
197
+ censusTypeOf,
198
+ /** Existing call-attribution census, not a new resolver in the flow index. */
199
+ censusCallDeclarationOf, censusCallTargetsOf,
200
+ /** A compiler option, not a type/closure result; retained identically in every round. */
201
+ buildIsStrict = false,
202
+ /** Existing `.call`/`.apply` census, not a new resolver in the flow index -- see `invocationOperandsOf`'s own doc. */
203
+ censusExplicitThisAt) => {
204
+ const calls = [];
205
+ const propertyAccesses = [];
206
+ const bindingPatternReads = [];
207
+ const arrayLiterals = [];
208
+ const accessorNames = new Set();
209
+ let hasComputedAccessorName = false;
210
+ const classDeclarations = [];
211
+ const receiverReferences = new Map();
212
+ const receiverOwners = new Map();
213
+ const indexedCallableBodies = new WeakSet();
214
+ const memberReferences = new Map();
215
+ const state = {
216
+ bySymbol: new Map(),
217
+ byDeclaration: new Map(),
218
+ fromSymbol: new Map(),
219
+ fromDeclaration: new Map(),
220
+ referencesBySymbol: new Map(),
221
+ referencesByDeclaration: new Map(),
222
+ allWrites: [],
223
+ edgeCounts: new Map()
224
+ };
225
+ const effectiveType = (expression) => {
226
+ const stated = checker.getTypeAtLocation(expression);
227
+ if (!censusTypeOf || (stated.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) === 0)
228
+ return stated;
229
+ return censusTypeOf(expression) ?? stated;
230
+ };
231
+ const invocationOperands = new Map();
232
+ const invocationOperandsAt = (call) => {
233
+ const known = invocationOperands.get(call);
234
+ if (known)
235
+ return known;
236
+ // TEMPORARY bisect switch, remove before landing. `GEA_NO_EXPLICIT_THIS_FLOW=1`
237
+ // unthreads the `.call`/`.apply` explicit-this census from the flow index so
238
+ // one build answers whether it is what un-authenticates borrowed builtins.
239
+ const operands = process.env['GEA_NO_EXPLICIT_THIS_FLOW'] === '1'
240
+ ? invocationOperandsOf(checker, call)
241
+ : invocationOperandsOf(checker, call, censusExplicitThisAt);
242
+ invocationOperands.set(call, operands);
243
+ return operands;
244
+ };
245
+ const targetMemo = new Map();
246
+ const targetOf = (expression) => {
247
+ const cached = targetMemo.get(expression);
248
+ if (cached !== undefined)
249
+ return cached;
250
+ const resolved = flowTargetOf(checker, expression);
251
+ targetMemo.set(expression, resolved);
252
+ return resolved;
253
+ };
254
+ const record = (target, edge, slot, member, value, site, naming = null, iterationOrigin, propertyAccess = null) => {
255
+ // A computed receiver or an `any` property can have no checker symbol
256
+ // and still name real heap storage. Keep its write in the shared inventory;
257
+ // symbol-keyed consumers have no entry, while provenance follows `naming`.
258
+ if (!target && !naming)
259
+ return;
260
+ const cell = target ?? { symbol: null, nameSymbol: null, declaration: null };
261
+ const write = {
262
+ edge,
263
+ slot,
264
+ member,
265
+ value,
266
+ site,
267
+ target: cell,
268
+ naming,
269
+ propertyAccess,
270
+ ...(iterationOrigin ? { iterationOrigin } : {})
271
+ };
272
+ state.allWrites.push(write);
273
+ if (cell.symbol)
274
+ push(state.bySymbol, cell.symbol, write);
275
+ if (cell.declaration)
276
+ push(state.byDeclaration, cell.declaration, write);
277
+ state.edgeCounts.set(edge, (state.edgeCounts.get(edge) ?? 0) + 1);
278
+ // The reverse direction, recorded from the same edge: whatever cell the
279
+ // VALUE names has its contents flowing into `target`.
280
+ if (!value)
281
+ return;
282
+ const source = targetOf(value);
283
+ if (!source)
284
+ return;
285
+ if (source.symbol)
286
+ push(state.fromSymbol, source.symbol, write);
287
+ if (source.declaration)
288
+ push(state.fromDeclaration, source.declaration, write);
289
+ };
290
+ /** A cell reached BY NAME: `o.p = v` fills `p`'s own cell whole, and fills a `member` slot of `o`'s. Both are recorded, because different censuses own the two questions. */
291
+ const recordNamedWrite = (access, edge, value, site) => {
292
+ record(targetOf(access), edge, 'whole', null, value, site, access, undefined, access);
293
+ record(targetOf(access.expression), edge, 'member', access.name.text, value, site, access.expression, undefined, access);
294
+ };
295
+ /** `o[k] = v`. A LITERAL `k` is a named member spelled with brackets -- the same partition every reader in this compiler already draws with `literalMemberNameOf`. */
296
+ const recordIndexedWrite = (access, edge, value, site) => {
297
+ const name = literalMemberNameOf(access);
298
+ if (name !== null) {
299
+ record(targetOf(access), edge, 'whole', null, value, site, access, undefined, access);
300
+ record(targetOf(access.expression), edge, 'member', name, value, site, access.expression, undefined, access);
301
+ return;
302
+ }
303
+ record(targetOf(access.expression), edge, 'element', null, value, site, access.expression, undefined, access);
304
+ };
305
+ /** The write target of an assignment-like form, in whichever of the three naming shapes it takes. */
306
+ const recordAssignmentTarget = (left, edge, value, site, iterationOrigin) => {
307
+ const target = unwrapNaming(left);
308
+ if (ts.isPropertyAccessExpression(target))
309
+ recordNamedWrite(target, edge, value, site);
310
+ else if (ts.isElementAccessExpression(target))
311
+ recordIndexedWrite(target, edge, value, site);
312
+ else
313
+ record(targetOf(target), edge, 'whole', null, value, site, target, iterationOrigin);
314
+ };
315
+ /**
316
+ * A binding pattern's elements, each of which is a cell the pattern fills.
317
+ * The pattern's SOURCE is the write's value where the element names one
318
+ * member of it; where it does not (an array pattern, a rest element), the
319
+ * element states only that the cell exists, which is what a `null` value
320
+ * means everywhere in this index.
321
+ */
322
+ const recordBindingPattern = (pattern, source) => {
323
+ for (const element of pattern.elements) {
324
+ if (ts.isOmittedExpression(element))
325
+ continue;
326
+ bindingPatternReads.push(element);
327
+ const cell = ts.isIdentifier(element.name) ? targetOf(element.name) : null;
328
+ const naming = ts.isIdentifier(element.name) ? element.name : null;
329
+ record(cell, 'destructuring', 'whole', null, null, element, naming);
330
+ if (element.initializer)
331
+ record(cell, 'destructuring-default', 'whole', null, element.initializer, element, naming);
332
+ if (ts.isObjectBindingPattern(element.name) || ts.isArrayBindingPattern(element.name))
333
+ recordBindingPattern(element.name, null);
334
+ // The pattern READS a slot of its source, which is the reverse-direction
335
+ // fact a consumer asking "where does this cell's value go" needs.
336
+ if (source && ts.isObjectBindingPattern(pattern) && !element.dotDotDotToken) {
337
+ const key = element.propertyName ?? element.name;
338
+ if (ts.isIdentifier(key))
339
+ record(targetOf(source), 'destructuring', 'member', key.text, null, element, source);
340
+ }
341
+ }
342
+ };
343
+ /** `({ p: o.q } = v)` / `[o.q] = v` -- a destructuring ASSIGNMENT, whose targets are ordinary naming expressions rather than binding elements. */
344
+ const recordAssignmentPattern = (pattern) => {
345
+ if (ts.isArrayLiteralExpression(pattern)) {
346
+ for (const element of pattern.elements) {
347
+ if (ts.isOmittedExpression(element))
348
+ continue;
349
+ const inner = ts.isSpreadElement(element) ? element.expression : element;
350
+ if (ts.isBinaryExpression(inner) && inner.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
351
+ const defaultedTarget = unwrapNaming(inner.left);
352
+ // A nested pattern (`[a, [b]] = [1, [2]]`) names no single cell
353
+ // itself -- `recordAssignmentTarget` on it would resolve to no
354
+ // target and record nothing -- so its OWN elements are this same
355
+ // walk one level deeper, the assignment twin of `recordBindingPattern`'s
356
+ // identical recursion for a nested BINDING pattern above.
357
+ if (ts.isObjectLiteralExpression(defaultedTarget) || ts.isArrayLiteralExpression(defaultedTarget)) {
358
+ recordAssignmentPattern(defaultedTarget);
359
+ }
360
+ else {
361
+ recordAssignmentTarget(inner.left, 'destructuring', null, inner);
362
+ }
363
+ recordAssignmentTarget(inner.left, 'destructuring-default', inner.right, inner);
364
+ continue;
365
+ }
366
+ const target = unwrapNaming(inner);
367
+ if (ts.isObjectLiteralExpression(target) || ts.isArrayLiteralExpression(target)) {
368
+ recordAssignmentPattern(target);
369
+ continue;
370
+ }
371
+ recordAssignmentTarget(inner, 'destructuring', null, element);
372
+ }
373
+ return;
374
+ }
375
+ for (const property of pattern.properties) {
376
+ if (ts.isShorthandPropertyAssignment(property)) {
377
+ record(targetOf(property.name), 'destructuring', 'whole', null, null, property, property.name);
378
+ if (property.objectAssignmentInitializer) {
379
+ record(targetOf(property.name), 'destructuring-default', 'whole', null, property.objectAssignmentInitializer, property, property.name);
380
+ }
381
+ continue;
382
+ }
383
+ if (!ts.isPropertyAssignment(property))
384
+ continue;
385
+ const value = property.initializer;
386
+ if (ts.isBinaryExpression(value) && value.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
387
+ recordAssignmentTarget(value.left, 'destructuring', null, value);
388
+ recordAssignmentTarget(value.left, 'destructuring-default', value.right, value);
389
+ continue;
390
+ }
391
+ recordAssignmentTarget(value, 'destructuring', null, property);
392
+ }
393
+ };
394
+ /** Every argument of a call reaching the parameter slot it lands in -- positionally, and never through a rest slot or a spread, neither of which is one slot. */
395
+ const recordCallArguments = (call, edge) => {
396
+ const original = calleeDeclarationOf(checker, call);
397
+ const inferred = censusCallDeclarationOf?.(call);
398
+ const operands = invocationOperandsAt(call);
399
+ const explicitTarget = operands.explicitThis ? callableDeclarationOfExpression(checker, operands.callee) : null;
400
+ for (const callee of new Set([original, explicitTarget, inferred, ...(censusCallTargetsOf?.(call) ?? [])])) {
401
+ if (!callee || !isRealCallableDeclaration(callee) || callee.getSourceFile().isDeclarationFile)
402
+ continue;
403
+ const args = callee === original && callee !== explicitTarget ? call.arguments : operands.args;
404
+ if (!args || args.length === 0)
405
+ continue;
406
+ // Everything from the rest slot onward lands in the SAME parameter, and
407
+ // `parameters[position]` runs out at the first one past it.
408
+ const parameters = runtimeParametersOf(callee);
409
+ const last = parameters[parameters.length - 1];
410
+ const rest = last && ts.isParameter(last) && last.dotDotDotToken ? last : undefined;
411
+ args.forEach((argument, position) => {
412
+ if (ts.isSpreadElement(argument))
413
+ return;
414
+ const parameter = parameters[position] ?? rest;
415
+ // `ts.isFunctionLike` admits a `JSDocSignature`, whose "parameters" are
416
+ // JSDoc TAGS rather than real `ParameterDeclaration`s and carry no
417
+ // `name` at all -- a shape `ts.isIdentifier` crashes on rather than
418
+ // rejecting. A slot with no name is no slot.
419
+ if (!parameter || !ts.isParameter(parameter) || !ts.isIdentifier(parameter.name))
420
+ return;
421
+ if (parameter.dotDotDotToken)
422
+ record(targetOf(parameter.name), 'rest-argument', 'element', null, argument, argument, parameter.name);
423
+ else
424
+ record(targetOf(parameter.name), edge, 'whole', null, argument, argument, parameter.name);
425
+ });
426
+ }
427
+ };
428
+ const visitCall = (node) => {
429
+ recordCallArguments(node, node.expression.kind === ts.SyntaxKind.SuperKeyword ? 'super-argument' : 'call-argument');
430
+ if (isGlobalObjectAssign(checker, node) && node.arguments.length >= 2) {
431
+ const [target, ...sources] = node.arguments;
432
+ // The key set a merge moves is the SOURCE's, and reading it is the
433
+ // consuming census's own policy (`object-bag-bindings.ts` reads three
434
+ // shapes in order and refuses the rest). This layer states only that a
435
+ // bulk write happened and what it came from.
436
+ if (target)
437
+ for (const source of sources)
438
+ record(targetOf(target), 'object-assign', 'bulk', null, source, node, target);
439
+ }
440
+ const callee = node.expression;
441
+ if (!ts.isPropertyAccessExpression(callee))
442
+ return;
443
+ const method = callee.name.text;
444
+ const receiver = callee.expression;
445
+ if (APPEND_METHODS.has(method)) {
446
+ if (isArrayReceiver(checker, effectiveType(receiver))) {
447
+ for (const argument of node.arguments) {
448
+ if (ts.isSpreadElement(argument))
449
+ continue;
450
+ record(targetOf(receiver), 'array-append', 'element', null, argument, node, receiver);
451
+ }
452
+ }
453
+ return;
454
+ }
455
+ if (method === 'fill') {
456
+ if (isArrayReceiver(checker, effectiveType(receiver)) || isTypedArrayReceiver(checker, receiver, effectiveType(receiver))) {
457
+ const value = node.arguments[0];
458
+ if (value && !ts.isSpreadElement(value))
459
+ record(targetOf(receiver), 'array-fill', 'element', null, value, node, receiver);
460
+ }
461
+ return;
462
+ }
463
+ if (!COLLECTION_KEY_METHODS.has(method) || !isKeyedCollectionReceiver(checker, receiver, effectiveType(receiver)))
464
+ return;
465
+ const key = node.arguments[0];
466
+ if (key && !ts.isSpreadElement(key))
467
+ record(targetOf(receiver), 'collection-key', 'collection-key', null, key, node, receiver);
468
+ if (method !== 'set')
469
+ return;
470
+ const value = node.arguments[1];
471
+ if (value && !ts.isSpreadElement(value))
472
+ record(targetOf(receiver), 'collection-value', 'collection-value', null, value, node, receiver);
473
+ };
474
+ /**
475
+ * Every expression that NAMES a cell, in whatever position it stands.
476
+ *
477
+ * Recorded under all three of a `FlowTarget`'s keys deliberately: a
478
+ * consumer's question here is negative ("is there a mention I cannot
479
+ * explain?"), so a mention filed under one key too many can only make it
480
+ * refuse. Filing one under too FEW is what makes an escape analysis
481
+ * silently claim closure it has not proved -- and the two
482
+ * property-symbol resolutions disagree on 1339 of the three.js app's 22556
483
+ * property accesses, so picking one would do exactly that.
484
+ */
485
+ const recordReference = (expression) => {
486
+ const target = targetOf(expression);
487
+ if (!target)
488
+ return;
489
+ const parent = expression.parent;
490
+ const aliasDeclaration = ts.isNamespaceImport(parent) ||
491
+ ts.isImportSpecifier(parent) ||
492
+ ts.isImportClause(parent) ||
493
+ ts.isImportEqualsDeclaration(parent) ||
494
+ ts.isExportSpecifier(parent);
495
+ if (aliasDeclaration ||
496
+ (((target.symbol?.flags ?? 0) | (target.nameSymbol?.flags ?? 0)) & (ts.SymbolFlags.Alias | ts.SymbolFlags.Module)) === 0) {
497
+ if (target.symbol)
498
+ push(state.referencesBySymbol, target.symbol, expression);
499
+ if (target.nameSymbol && target.nameSymbol !== target.symbol)
500
+ push(state.referencesBySymbol, target.nameSymbol, expression);
501
+ if (target.declaration)
502
+ push(state.referencesByDeclaration, target.declaration, expression);
503
+ return;
504
+ }
505
+ const symbols = new Set();
506
+ const declarations = new Set();
507
+ if (target.declaration)
508
+ declarations.add(target.declaration);
509
+ const addSymbol = (symbol) => {
510
+ if (!symbol || symbols.has(symbol))
511
+ return;
512
+ symbols.add(symbol);
513
+ const canonical = resolveFlowSymbolAlias(checker, symbol);
514
+ if (!canonical)
515
+ return;
516
+ symbols.add(canonical);
517
+ const declaration = canonical.valueDeclaration ?? canonical.declarations?.[0];
518
+ if (declaration)
519
+ declarations.add(declaration);
520
+ };
521
+ addSymbol(target.symbol);
522
+ addSymbol(target.nameSymbol);
523
+ // Keep the import's local cell identity, but also record uses under the
524
+ // declaration it denotes. Otherwise an opaque consumer of an imported
525
+ // constructor disappears from that constructor's escape inventory.
526
+ // A whole namespace publication exposes its exported values as well;
527
+ // selected members have their own references in this same walk.
528
+ const selectedMember = (ts.isPropertyAccessExpression(parent) && parent.expression === expression) ||
529
+ (ts.isElementAccessExpression(parent) && parent.expression === expression && ts.isStringLiteralLike(parent.argumentExpression));
530
+ if (!selectedMember && !isTypePositionReference(expression)) {
531
+ const visited = new Set();
532
+ const exposeNamespace = (symbol) => {
533
+ const canonical = resolveFlowSymbolAlias(checker, symbol);
534
+ if (!canonical || visited.has(canonical))
535
+ return;
536
+ visited.add(canonical);
537
+ if ((canonical.flags & ts.SymbolFlags.Module) === 0 || (canonical.flags & ts.SymbolFlags.Class) !== 0)
538
+ return;
539
+ // Export identities and runtime property visibility answer different
540
+ // questions. The synthetic global namespace exports lexical bindings
541
+ // which globalThis cannot read. Conversely, a JS expando variable has
542
+ // a module flag but its instance type also includes inherited methods;
543
+ // those are receiver uses, not references to exported bindings.
544
+ const runtimeKeys = new Set(checker
545
+ .getTypeOfSymbolAtLocation(canonical, expression)
546
+ .getProperties()
547
+ .map((value) => value.name));
548
+ for (const exported of checker.getExportsOfModule(canonical)) {
549
+ if (!runtimeKeys.has(exported.name))
550
+ continue;
551
+ const value = resolveFlowSymbolAlias(checker, exported);
552
+ if (!value || (value.flags & ts.SymbolFlags.Value) === 0)
553
+ continue;
554
+ addSymbol(value);
555
+ exposeNamespace(value);
556
+ }
557
+ };
558
+ for (const symbol of [...symbols])
559
+ exposeNamespace(symbol);
560
+ }
561
+ for (const symbol of symbols)
562
+ push(state.referencesBySymbol, symbol, expression);
563
+ for (const declaration of declarations)
564
+ push(state.referencesByDeclaration, declaration, expression);
565
+ };
566
+ const visit = (node) => {
567
+ // Use the same member boundary as normalization: excluded bodies cannot
568
+ // contribute callers or writes to the live program's typing evidence.
569
+ if (reachable.memberIsPruned(node))
570
+ return;
571
+ if (ts.isFunctionLike(node) && 'body' in node && node.body)
572
+ indexedCallableBodies.add(node);
573
+ // A pre-ES6 `function F() { this.x = ... }` is a class -- TypeScript types
574
+ // it as one -- and this enumeration is what every family walk means by
575
+ // "the source classes". Widening the type without widening this made the
576
+ // whole change inert: a constructor-function root reached
577
+ // `owned-class-receivers.ts`'s family test, was not in this list, and was
578
+ // refused as `root-outside-family` exactly as before.
579
+ if (ts.isClassDeclaration(node) || ts.isClassExpression(node) || isConstructorFunction(node))
580
+ classDeclarations.push(node);
581
+ if (ts.isArrayLiteralExpression(node) && !isAssignmentPattern(node))
582
+ arrayLiterals.push(node);
583
+ if (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node)) {
584
+ const name = node.name;
585
+ if (ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name))
586
+ accessorNames.add(name.text);
587
+ else
588
+ hasComputedAccessorName = true;
589
+ }
590
+ if (node.kind === ts.SyntaxKind.ThisKeyword || node.kind === ts.SyntaxKind.SuperKeyword) {
591
+ // `super` changes property lookup, not the receiver. Arrows inherit both
592
+ // references from their enclosing frame; ordinary callables, class field
593
+ // initializers and static blocks each introduce their own. Keep the two
594
+ // spellings in one walk so closure consumers cannot miss a receiver edge
595
+ // hidden behind lexical-super dispatch.
596
+ let branch = node;
597
+ for (let owner = node.parent; owner; branch = owner, owner = owner.parent) {
598
+ // A computed class/object member name evaluates in the enclosing
599
+ // frame, before that member's own receiver exists.
600
+ if ((ts.isMethodDeclaration(owner) ||
601
+ ts.isGetAccessorDeclaration(owner) ||
602
+ ts.isSetAccessorDeclaration(owner) ||
603
+ ts.isPropertyDeclaration(owner)) &&
604
+ owner.name === branch)
605
+ continue;
606
+ if ((ts.isFunctionLike(owner) && !ts.isArrowFunction(owner)) ||
607
+ ts.isPropertyDeclaration(owner) ||
608
+ ts.isClassStaticBlockDeclaration(owner)) {
609
+ push(receiverReferences, owner, node);
610
+ receiverOwners.set(node, owner);
611
+ break;
612
+ }
613
+ if (ts.isSourceFile(owner))
614
+ break;
615
+ }
616
+ }
617
+ if (ts.isIdentifier(node) || ts.isPrivateIdentifier(node)) {
618
+ const symbol = checker.getSymbolAtLocation(node);
619
+ if (symbol)
620
+ push(memberReferences, symbol, node);
621
+ }
622
+ if (ts.isCallExpression(node) || ts.isNewExpression(node)) {
623
+ const operands = invocationOperandsAt(node);
624
+ const explicitThis = operands.explicitThis ? { callee: operands.callee, receiver: operands.receiver, args: operands.args } : null;
625
+ const inferredDeclaration = censusCallDeclarationOf?.(node);
626
+ const explicitTarget = explicitThis ? callableDeclarationOfExpression(checker, explicitThis.callee) : null;
627
+ calls.push({
628
+ call: node,
629
+ targets: [...new Set([...(explicitTarget ? [explicitTarget] : []), ...(censusCallTargetsOf?.(node) ?? [])])],
630
+ explicitThis,
631
+ operands,
632
+ ...(inferredDeclaration ? { inferredDeclaration } : {}),
633
+ checkerDeclaration: explicitThis ? null : (checker.getResolvedSignature(node)?.declaration ?? null)
634
+ });
635
+ }
636
+ if ((ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) && !isTypePositionReference(node))
637
+ propertyAccesses.push(node);
638
+ if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node))
639
+ recordReference(node);
640
+ if (ts.isVariableDeclaration(node)) {
641
+ if (ts.isIdentifier(node.name)) {
642
+ if (node.initializer)
643
+ record(targetOf(node.name), 'declaration-initializer', 'whole', null, node.initializer, node, node.name);
644
+ }
645
+ else
646
+ recordBindingPattern(node.name, node.initializer ?? null);
647
+ }
648
+ else if (ts.isParameter(node)) {
649
+ if (ts.isIdentifier(node.name)) {
650
+ if (node.initializer)
651
+ record(targetOf(node.name), 'default-parameter', 'whole', null, node.initializer, node, node.name);
652
+ }
653
+ else
654
+ recordBindingPattern(node.name, null);
655
+ }
656
+ else if (ts.isPropertyDeclaration(node) && node.initializer) {
657
+ record(targetOf(node.name), 'class-field-initializer', 'whole', null, node.initializer, node, node.name);
658
+ }
659
+ else if ((ts.isPropertyAssignment(node) || ts.isShorthandPropertyAssignment(node)) && !isAssignmentPattern(node.parent)) {
660
+ const name = node.name;
661
+ const named = ts.isComputedPropertyName(name) ? name.expression : name;
662
+ if (ts.isPropertyAssignment(node) && isObjectLiteralPrototypeSetter(node)) {
663
+ // This is an observable prototype publication with no ordinary field
664
+ // target. Closure consumers must account for that edge or refuse it.
665
+ record(null, 'prototype-assignment', 'bulk', null, node.initializer, node, node.parent);
666
+ }
667
+ else if ((ts.isIdentifier(named) && !ts.isComputedPropertyName(name)) ||
668
+ ts.isStringLiteralLike(named) ||
669
+ ts.isNumericLiteral(named)) {
670
+ const key = named.text;
671
+ const value = ts.isPropertyAssignment(node) ? node.initializer : node.name;
672
+ // A shorthand's name resolves to its VALUE variable through targetOf;
673
+ // the receiving property has the object type's distinct symbol.
674
+ const property = checker.getTypeAtLocation(node.parent).getProperty(key) ?? null;
675
+ const target = { symbol: property, nameSymbol: property, declaration: property?.declarations?.[0] ?? node };
676
+ record(target, 'property-assignment', 'whole', null, value, node, name);
677
+ const container = node.parent.parent;
678
+ const naming = ts.isVariableDeclaration(container) && container.initializer === node.parent && ts.isIdentifier(container.name)
679
+ ? container.name
680
+ : ts.isBinaryExpression(container) &&
681
+ container.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
682
+ container.right === node.parent
683
+ ? container.left
684
+ : null;
685
+ if (naming)
686
+ record(targetOf(naming), 'property-assignment', 'member', key, value, node, naming);
687
+ }
688
+ }
689
+ else if (ts.isBinaryExpression(node)) {
690
+ const operator = node.operatorToken.kind;
691
+ if (operator === ts.SyntaxKind.EqualsToken) {
692
+ const left = unwrapNaming(node.left);
693
+ if (ts.isObjectLiteralExpression(left) || ts.isArrayLiteralExpression(left))
694
+ recordAssignmentPattern(left);
695
+ else if (ts.isPropertyAccessExpression(left))
696
+ recordNamedWrite(left, 'property-assignment', node.right, node);
697
+ else if (ts.isElementAccessExpression(left))
698
+ recordIndexedWrite(left, 'index-assignment', node.right, node);
699
+ else
700
+ record(targetOf(left), 'identifier-assignment', 'whole', null, node.right, node, left);
701
+ }
702
+ else if (LOGICAL_TOKENS.has(operator)) {
703
+ recordAssignmentTarget(node.left, 'logical-assignment', node.right, node);
704
+ }
705
+ else if (COMPOUND_TOKENS.has(operator)) {
706
+ recordAssignmentTarget(node.left, 'compound-assignment', null, node);
707
+ }
708
+ }
709
+ else if (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) {
710
+ if (node.operator === ts.SyntaxKind.PlusPlusToken || node.operator === ts.SyntaxKind.MinusMinusToken) {
711
+ recordAssignmentTarget(node.operand, 'compound-assignment', null, node);
712
+ }
713
+ }
714
+ else if (ts.isCallExpression(node))
715
+ visitCall(node);
716
+ else if (ts.isNewExpression(node))
717
+ recordCallArguments(node, 'call-argument');
718
+ else if (ts.isReturnStatement(node)) {
719
+ const owner = returnOwnerOf(node);
720
+ if (owner)
721
+ record({ symbol: null, nameSymbol: null, declaration: owner }, 'return', 'whole', null, node.expression ?? null, node);
722
+ }
723
+ else if (ts.isYieldExpression(node) && node.expression) {
724
+ for (let current = node.parent; current; current = current.parent) {
725
+ if (!ts.isFunctionLike(current))
726
+ continue;
727
+ record({ symbol: null, nameSymbol: null, declaration: current }, 'yield', 'whole', null, node.expression, node);
728
+ break;
729
+ }
730
+ }
731
+ else if (ts.isSpreadAssignment(node) || ts.isSpreadElement(node)) {
732
+ record(targetOf(node.expression), 'spread', 'bulk', null, null, node, node.expression);
733
+ }
734
+ else if (ts.isDeleteExpression(node)) {
735
+ const target = unwrapNaming(node.expression);
736
+ if (ts.isPropertyAccessExpression(target))
737
+ recordNamedWrite(target, 'delete', null, node);
738
+ else if (ts.isElementAccessExpression(target))
739
+ recordIndexedWrite(target, 'delete', null, node);
740
+ }
741
+ else if (ts.isCatchClause(node) && node.variableDeclaration) {
742
+ const name = node.variableDeclaration.name;
743
+ if (ts.isIdentifier(name))
744
+ record(targetOf(name), 'catch-binding', 'whole', null, null, node, name);
745
+ else
746
+ recordBindingPattern(name, null);
747
+ }
748
+ else if (ts.isForOfStatement(node) || ts.isForInStatement(node)) {
749
+ const iterationOrigin = {
750
+ source: node.expression,
751
+ mode: ts.isForInStatement(node) ? 'keys' : 'values',
752
+ asynchronous: ts.isForOfStatement(node) && node.awaitModifier !== undefined
753
+ };
754
+ const initializer = node.initializer;
755
+ if (ts.isVariableDeclarationList(initializer)) {
756
+ for (const declaration of initializer.declarations) {
757
+ if (ts.isIdentifier(declaration.name))
758
+ record(targetOf(declaration.name), 'iteration-binding', 'whole', null, null, declaration, declaration.name, iterationOrigin);
759
+ else
760
+ recordBindingPattern(declaration.name, null);
761
+ }
762
+ }
763
+ else if (ts.isObjectLiteralExpression(initializer) || ts.isArrayLiteralExpression(initializer)) {
764
+ // `for ([a, b] of pairs)` / `for ({ x, y } of points)` -- an array/
765
+ // object LITERAL used directly as the loop's own head is a
766
+ // destructuring ASSIGNMENT the same way `[a, b] = pairs` is; the only
767
+ // difference is the value each iteration writes, which has no
768
+ // right-hand-side expression at all (see `local-bindings.ts`'s
769
+ // `forOfPatternElementTypeAt`, the consumer that derives it from the
770
+ // loop's own iterable/key instead of a literal source).
771
+ // `recordAssignmentPattern` already walks nested patterns and
772
+ // per-element defaults identically to the `=` case -- it never looks
773
+ // at what SYNTAX supplied the pattern's value, only at the pattern
774
+ // itself, so this needs no shape of its own.
775
+ recordAssignmentPattern(initializer);
776
+ }
777
+ else if (ts.isIdentifier(initializer)) {
778
+ recordAssignmentTarget(initializer, 'iteration-binding', null, node, iterationOrigin);
779
+ }
780
+ else
781
+ recordAssignmentTarget(initializer, 'iteration-binding', null, node);
782
+ }
783
+ ts.forEachChild(node, visit);
784
+ };
785
+ for (const file of files)
786
+ forEachReachableStatement(reachable, file, visit);
787
+ const NO_WRITES = [];
788
+ const NO_REFERENCES = [];
789
+ const callSites = new Map(calls.map((site) => [site.call, site]));
790
+ const writesBySite = new Map();
791
+ for (const write of state.allWrites) {
792
+ let entries = writesBySite.get(write.site);
793
+ if (!entries)
794
+ writesBySite.set(write.site, (entries = []));
795
+ entries.push(write);
796
+ }
797
+ return {
798
+ buildIsStrict,
799
+ calls,
800
+ callSiteOf: (call) => callSites.get(call),
801
+ writesAtSite: (site) => writesBySite.get(site) ?? NO_WRITES,
802
+ propertyAccesses,
803
+ bindingPatternReads,
804
+ classDeclarations,
805
+ arrayLiterals,
806
+ accessorNames,
807
+ hasComputedAccessorName,
808
+ receiverReferencesToDeclaration: (declaration) => receiverReferences.get(declaration) ?? [],
809
+ receiverOwnerOf: (reference) => receiverOwners.get(reference) ?? null,
810
+ callableBodyIsIndexed: (declaration) => indexedCallableBodies.has(declaration),
811
+ memberReferencesToSymbol: (symbol) => memberReferences.get(symbol) ?? [],
812
+ targetOf,
813
+ writesToSymbol: (symbol) => state.bySymbol.get(symbol) ?? NO_WRITES,
814
+ writesToDeclaration: (declaration) => state.byDeclaration.get(declaration) ?? NO_WRITES,
815
+ flowsFromSymbol: (symbol) => state.fromSymbol.get(symbol) ?? NO_WRITES,
816
+ flowsFromDeclaration: (declaration) => state.fromDeclaration.get(declaration) ?? NO_WRITES,
817
+ referencesToSymbol: (symbol) => state.referencesBySymbol.get(symbol) ?? NO_REFERENCES,
818
+ referencesToDeclaration: (declaration) => state.referencesByDeclaration.get(declaration) ?? NO_REFERENCES,
819
+ allWrites: state.allWrites,
820
+ edgeCounts: state.edgeCounts,
821
+ writeCount: [...state.edgeCounts.values()].reduce((total, count) => total + count, 0)
822
+ };
823
+ };