@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,677 @@
1
+ import ts from 'typescript';
2
+ import { censusRefusal } from './census-refusal.js';
3
+ import { disjointUnionTypeOf, joinOfWrites, widestOf } from './derived-expression-type.js';
4
+ import { emptyParameterBindingCensus } from './parameter-bindings.js';
5
+ import { forEachReachableStatement } from './reachability.js';
6
+ /** A census that binds nothing, for callers that state no program. */
7
+ export const emptyCollectionBindingCensus = {
8
+ typeArgumentsAt: () => null,
9
+ boundCount: 0,
10
+ refusals: [],
11
+ refusalOf: () => null,
12
+ arrayElementAt: () => null,
13
+ arrayRefusalOf: () => null,
14
+ arrayElementForRead: () => null,
15
+ arrayElementForOwner: () => null,
16
+ arrayRefusalForOwner: () => null,
17
+ arrayRefusalForRead: () => null,
18
+ typeArgumentsForOwner: () => null,
19
+ typeArgumentsForRead: () => null
20
+ };
21
+ /**
22
+ * The four standard collection constructor names, to the family each is --
23
+ * hardcoded for the same reason `host-protocols.ts`'s `keyedCollectionFamilies`
24
+ * is: these are core ECMAScript (`lib.es2015.collection.d.ts`), not something
25
+ * a host installs, so there is no table to read them from.
26
+ */
27
+ const CONSTRUCTOR_NAMES = new Map([
28
+ ['Map', 'map'],
29
+ ['Set', 'set'],
30
+ ['WeakMap', 'weak-map'],
31
+ ['WeakSet', 'weak-set']
32
+ ]);
33
+ const isUnusableEvidence = (type) => (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Void | ts.TypeFlags.Never)) !== 0;
34
+ /**
35
+ * Whole-program census of every bare collection constructor's inferred type
36
+ * arguments, once every call site that reads/writes it agrees.
37
+ *
38
+ * `parameters` is the already-settled, composed census (parameter+return,
39
+ * optionally +local) -- asked at every observed argument exactly the way
40
+ * `local-bindings.ts` asks it at every write, so this module never reopens
41
+ * that fixpoint and never duplicates its resolution logic.
42
+ */
43
+ export const censusCollectionBindings = (checker, files, reachable, parameters = emptyParameterBindingCensus,
44
+ /**
45
+ * The whole-program value-flow index -- the ONE walk that states where every
46
+ * write is. This module's own four collection passes read their edges from
47
+ * it rather than re-deriving them; see `flow/model.ts`.
48
+ */
49
+ flow) => {
50
+ const anchor = files[0];
51
+ if (!anchor)
52
+ return emptyCollectionBindingCensus;
53
+ // The real global constructor VALUE symbols, resolved once -- comparing
54
+ // AGAINST these (never against the spelling `X` in `new X()`) is what keeps
55
+ // a program's own `class WeakMap` untouched: its constructor symbol is a
56
+ // different symbol than the one `resolveName` finds at global scope.
57
+ const constructorSymbols = new Map();
58
+ for (const [name, family] of CONSTRUCTOR_NAMES) {
59
+ const symbol = checker.resolveName(name, anchor, ts.SymbolFlags.Value, false);
60
+ if (symbol)
61
+ constructorSymbols.set(family, symbol);
62
+ }
63
+ /** The family this expression constructs, if it is genuinely the standard-library constructor -- `null` otherwise. */
64
+ const realConstructorFamily = (node) => {
65
+ if (!ts.isIdentifier(node.expression))
66
+ return null;
67
+ const family = CONSTRUCTOR_NAMES.get(node.expression.text);
68
+ if (!family)
69
+ return null;
70
+ const expected = constructorSymbols.get(family);
71
+ if (!expected)
72
+ return null;
73
+ return checker.getSymbolAtLocation(node.expression) === expected ? family : null;
74
+ };
75
+ /** A bare `new X()`: no explicit type arguments, no constructor argument -- the program stated nothing for this module to override. */
76
+ const bareConstruction = (node) => (node.typeArguments === undefined || node.typeArguments.length === 0) && (node.arguments === undefined || node.arguments.length === 0);
77
+ // Declaration-node identity is the stable key for EVERY owner this module
78
+ // tracks -- a variable, a class field, or a property -- not just the array
79
+ // case below: a property symbol is late-bound per lookup (`checker.
80
+ // getSymbolAtLocation` on a property name returns a DIFFERENT `ts.Symbol`
81
+ // object at its declaration than at each later access), but its
82
+ // declaration node is the same object every time. Keying `Map`/`Set`
83
+ // ownership by symbol (as this module used to) meant `this.m = new Map()`
84
+ // could never be tracked at all: a `BinaryExpression` whose LEFT is a
85
+ // `PropertyAccessExpression` was rejected outright (`owner-not-tracked`),
86
+ // and even resolving that symbol once would not have matched the DIFFERENT
87
+ // symbol object `this.m.set(...)` resolves to later. Declaration-node
88
+ // keying is what already lets the array census below track `state.probe`;
89
+ // extending it to `Map`/`Set` closes both problems with the same key.
90
+ const declNodeOf = (symbol) => symbol?.getDeclarations()?.[0] ?? null;
91
+ /** The declaration node backing a plain identifier or `x.prop` property access -- `null` for anything else. */
92
+ const ownerDeclOfExpr = (expr) => {
93
+ if (ts.isIdentifier(expr))
94
+ return declNodeOf(checker.getSymbolAtLocation(expr));
95
+ if (ts.isPropertyAccessExpression(expr))
96
+ return declNodeOf(checker.getSymbolAtLocation(expr.name));
97
+ return null;
98
+ };
99
+ /**
100
+ * The declaration this construction is bound to -- a variable's own name,
101
+ * a class field's own initializer, or the target of a plain `x = new
102
+ * WeakMap()` / `this.m = new WeakMap()` reassignment (identifier OR
103
+ * property access, via `ownerDeclOfExpr`). `null` for anything else
104
+ * (destructuring, an argument passed inline, ...): this module tracks USE
105
+ * SITES by declaration, so a construction with no trackable owner has
106
+ * nothing for a later `.get`/`.set` to be found against, and refuses
107
+ * rather than guessing at one.
108
+ */
109
+ const ownerDeclOf = (node) => {
110
+ const parent = node.parent;
111
+ if (ts.isVariableDeclaration(parent) && parent.initializer === node && ts.isIdentifier(parent.name)) {
112
+ return declNodeOf(checker.getSymbolAtLocation(parent.name));
113
+ }
114
+ if (ts.isPropertyDeclaration(parent) && parent.initializer === node && ts.isIdentifier(parent.name)) {
115
+ return declNodeOf(checker.getSymbolAtLocation(parent.name));
116
+ }
117
+ if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken && parent.right === node) {
118
+ return ownerDeclOfExpr(parent.left);
119
+ }
120
+ return null;
121
+ };
122
+ /**
123
+ * Every declaration this owner's value is ALIASED into by direct identity
124
+ * -- `const b = a`, `b = a`, `o.p = a`, or `a` passed as a call argument
125
+ * reaching a callee's parameter slot -- so a write reaching the SAME
126
+ * reference through a different name is evidence for this owner too, not a
127
+ * different, unrelated cell.
128
+ *
129
+ * Follows exactly the edges that carry a value's whole identity (`flow`'s
130
+ * `whole`-slot writes only -- never the paired `member` write
131
+ * `property-assignment`/`index-assignment` also record for the RECEIVER,
132
+ * which states something about one of the receiver's members, not that the
133
+ * receiver itself became this reference), transitively, via
134
+ * `flowsFromDeclaration` -- the reverse edge `flow` already states for
135
+ * every write, so this is a graph walk over data the shared index already
136
+ * computed, not a second walk of the program.
137
+ */
138
+ const ALIAS_EDGES = new Set([
139
+ 'declaration-initializer',
140
+ 'identifier-assignment',
141
+ 'property-assignment',
142
+ 'index-assignment',
143
+ 'call-argument'
144
+ ]);
145
+ const aliasClosureOf = (owner) => {
146
+ const seen = new Set([owner]);
147
+ const queue = [owner];
148
+ while (queue.length > 0) {
149
+ const current = queue.shift();
150
+ for (const write of flow.flowsFromDeclaration(current)) {
151
+ if (write.slot !== 'whole' || !ALIAS_EDGES.has(write.edge))
152
+ continue;
153
+ const target = write.target.declaration;
154
+ if (target && !seen.has(target)) {
155
+ seen.add(target);
156
+ queue.push(target);
157
+ }
158
+ }
159
+ }
160
+ return seen;
161
+ };
162
+ /**
163
+ * Render a refusal's subject -- the declaration or construction site a
164
+ * human (or a later tool) can find and inspect, not a re-derivable index.
165
+ * A tracked owner is always a `VariableDeclaration`/`PropertyDeclaration`/
166
+ * `PropertyAssignment`, all of which name themselves with a plain
167
+ * identifier; anything without one (a bare `new X()` this module could not
168
+ * attach to a declaration at all) falls back to its own source text.
169
+ */
170
+ const describeOwner = (node) => {
171
+ const sourceFile = node.getSourceFile();
172
+ const line = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;
173
+ const name = node.name;
174
+ const label = name && (ts.isIdentifier(name) || ts.isPrivateIdentifier(name)) ? name.text : node.getText(sourceFile);
175
+ return `${label} (${sourceFile.fileName}:${line})`;
176
+ };
177
+ const censusRefusals = [];
178
+ // Pass 1: every candidate `new X()`, grouped by owning declaration.
179
+ const byOwner = new Map();
180
+ const nodeOwner = new Map();
181
+ const nodeRefusal = new Map();
182
+ const collectConstructions = (node) => {
183
+ // Mirrors `value-flow.ts`'s own `visit` guard exactly (same `reachable`,
184
+ // same predicate): a class member reachability has pruned as dead --
185
+ // never dispatched by symbol (a static) or by key (an instance member) in
186
+ // live code -- contributes no write evidence to `flow` at all, by design
187
+ // ("excluded bodies cannot contribute callers or writes to the live
188
+ // program's typing evidence"). Before this guard, THIS walk had no such
189
+ // exclusion: it kept collecting a bare `new Map()`/`new Set()` inside a
190
+ // pruned method as a live candidate needing evidence, while `flow` -- the
191
+ // only source this module reads evidence from -- had already discarded
192
+ // every write inside that same body. The two walks disagreeing about what
193
+ // "the program" contains turned a dead body into a GUARANTEED refusal for
194
+ // every collection literal in it, not a measured one.
195
+ if (reachable.memberIsPruned(node))
196
+ return;
197
+ if (ts.isNewExpression(node)) {
198
+ const family = realConstructorFamily(node);
199
+ if (family && bareConstruction(node)) {
200
+ const owner = ownerDeclOf(node);
201
+ if (!owner) {
202
+ nodeRefusal.set(node, 'owner-not-tracked');
203
+ censusRefusals.push(censusRefusal('collection', 'owner-not-tracked', `bare \`new ${node.expression.getText(node.getSourceFile())}()\` is not bound to a trackable declaration -- not a plain variable/field initializer, and not a reassignment through one`, describeOwner(node)));
204
+ }
205
+ else {
206
+ nodeOwner.set(node, owner);
207
+ const existing = byOwner.get(owner);
208
+ if (!existing)
209
+ byOwner.set(owner, { family, nodes: [node] });
210
+ else if (existing.family !== family) {
211
+ nodeRefusal.set(node, 'family-disagreement');
212
+ censusRefusals.push(censusRefusal('collection', 'family-disagreement', `this declaration already holds a \`${existing.family}\`; this \`new ${node.expression.getText(node.getSourceFile())}()\` assigns a disagreeing \`${family}\` to the same declaration`, describeOwner(owner)));
213
+ }
214
+ else
215
+ existing.nodes.push(node);
216
+ }
217
+ }
218
+ }
219
+ ts.forEachChild(node, collectConstructions);
220
+ };
221
+ for (const file of files)
222
+ forEachReachableStatement(reachable, file, collectConstructions);
223
+ /** The checker's own answer, falling back to the composed parameter census -- the SAME `known ?? resolve` rule every other census here applies. */
224
+ const argumentType = (expr) => {
225
+ const own = checker.getTypeAtLocation(expr);
226
+ return isUnusableEvidence(own) ? parameters.typeAt(expr) : own;
227
+ };
228
+ // Pass 2: every `.get`/`.set`/`.has`/`.delete`/`.add` KEY/VALUE write that
229
+ // reaches one of the tracked collections above OR any cell in its alias
230
+ // closure -- read from `flow` rather than re-walked, so a receiver spelled
231
+ // `this.cache.set(...)`, `a.b.set(...)`, or reached only through a
232
+ // parameter the collection was passed to is evidence exactly like
233
+ // `m.set(...)` is: `flow`'s own `collection-key`/`collection-value` edges
234
+ // never restricted themselves to an identifier receiver in the first
235
+ // place, only this module's old re-derivation did.
236
+ const boundKey = new Map();
237
+ const boundValue = new Map();
238
+ const ownerRefusal = new Map();
239
+ const valueRefusal = new Map();
240
+ /** The `.set` value arguments of a collection refused `value-unresolved`, for `CollectionTypeArguments.valueEvidence`. */
241
+ const unresolvedValueArgs = new Map();
242
+ for (const [owner, entry] of byOwner) {
243
+ if (entry.nodes.some((node) => nodeRefusal.has(node))) {
244
+ ownerRefusal.set(owner, 'family-disagreement');
245
+ censusRefusals.push(censusRefusal('collection', 'family-disagreement', `at least one \`new\` assigned to this declaration disagreed on collection family with another (\`${entry.family}\` vs. a differing family)`, describeOwner(owner)));
246
+ continue;
247
+ }
248
+ const keyArgs = [];
249
+ const valueArgs = [];
250
+ for (const decl of aliasClosureOf(owner)) {
251
+ for (const write of flow.writesToDeclaration(decl)) {
252
+ if (write.edge === 'collection-key' && write.value)
253
+ keyArgs.push(write.value);
254
+ else if (write.edge === 'collection-value' && write.value)
255
+ valueArgs.push(write.value);
256
+ }
257
+ }
258
+ // K and V are INDEPENDENT questions about one storage, and a `continue`
259
+ // here answered neither because the first had no answer. three's
260
+ // `WebGLProperties` is the case that costs: `properties.set( object, map )`
261
+ // keys a `WeakMap` by an untyped parameter, so K is `key-unresolved` --
262
+ // while V is the 47-member bag the whole renderer reads back out of it,
263
+ // fully determined by that very same call. Every refusal below is a
264
+ // statement about K alone, and the checker's own (defaulted, workable) key
265
+ // argument survives each one exactly as it did when the whole collection
266
+ // was refused: `overriddenCollectionShape` keeps `typeArguments[0]`
267
+ // untouched when this census binds no key.
268
+ const key = (() => {
269
+ if (keyArgs.length === 0) {
270
+ ownerRefusal.set(owner, 'no-key-uses');
271
+ censusRefusals.push(censusRefusal('collection', 'no-key-uses', 'no `.get`/`.set`/`.has`/`.delete`/`.add` call with a key argument was observed reaching this collection (or any of its aliases)', describeOwner(owner)));
272
+ return null;
273
+ }
274
+ const keyTypes = [];
275
+ for (const arg of keyArgs) {
276
+ const type = argumentType(arg);
277
+ if (!type) {
278
+ ownerRefusal.set(owner, 'key-unresolved');
279
+ censusRefusals.push(censusRefusal('collection', 'key-unresolved', `the key argument \`${arg.getText(arg.getSourceFile())}\` could not be typed (the checker's own answer was unusable and the composed parameter census had nothing to add)`, describeOwner(owner)));
280
+ return null;
281
+ }
282
+ keyTypes.push(type);
283
+ }
284
+ const joined = widestOf(checker, keyTypes);
285
+ if (!joined) {
286
+ ownerRefusal.set(owner, 'keys-disagree');
287
+ censusRefusals.push(censusRefusal('collection', 'keys-disagree', `the key arguments observed across this collection's calls do not join to one type: ${keyTypes.map((type) => checker.typeToString(type)).join(', ')}`, describeOwner(owner)));
288
+ return null;
289
+ }
290
+ // A `WeakMap`/`WeakSet` key must stay a REFERENCE -- ECMA-262 24.3/24.4
291
+ // admit only objects (and unregistered symbols) as weak keys, and
292
+ // `representation/collections.ts`'s `deriveKeyedCollection` refuses a
293
+ // weak key that lacks one, by design (a `WeakMap<number, T>` has no
294
+ // correct lowering, ever). Joining evidence across every `.set`/`.get`
295
+ // call the ordinary `widestOf` way is correct for `map`/`set` -- pure
296
+ // structural equality never asks about pointers -- but for the weak
297
+ // families it can join two or more UNRELATED class keys into a `T1 | T2`
298
+ // union, or widen a nullable receiver into `T | null`: both are still
299
+ // perfectly good TypeScript types, and both lower to a carrier
300
+ // (`tagged-union`, `optional(...)`) with no single pointer to compare,
301
+ // which the checker in `collections.ts` then refuses outright -- turning
302
+ // a WORKING (boxed, dynamically-keyed) WeakMap into a hard `unresolved`
303
+ // refusal. `WeakMap<object, V>`'s own DEFAULT (bound to nothing) already
304
+ // compiles today via `dynamic`'s admitted reference identity
305
+ // (`hasReferenceIdentity`'s own comment) -- this module must not narrow
306
+ // that into something WORSE than what it is replacing. `isUnion()` is the
307
+ // cheap, correct proxy at this layer for "does not reduce to one
308
+ // reference-bearing shape": every case this census has actually observed
309
+ // failing downstream (a tagged union of classes, an `optional(T, null)`)
310
+ // is a TS union, and a single class/interface/object type -- the only
311
+ // shape this runtime's weak families can pointer-compare -- never is one.
312
+ if ((entry.family === 'weak-map' || entry.family === 'weak-set') && joined.isUnion()) {
313
+ ownerRefusal.set(owner, 'weak-key-not-reference');
314
+ censusRefusals.push(censusRefusal('collection', 'weak-key-not-reference', `the joined key type \`${checker.typeToString(joined)}\` does not reduce to one reference-bearing shape, but a \`${entry.family}\` key must stay an object (ECMA-262 24.3/24.4)`, describeOwner(owner)));
315
+ return null;
316
+ }
317
+ return joined;
318
+ })();
319
+ if (key)
320
+ boundKey.set(owner, key);
321
+ if (entry.family !== 'map' && entry.family !== 'weak-map')
322
+ continue;
323
+ if (valueArgs.length === 0) {
324
+ valueRefusal.set(owner, 'no-value-uses');
325
+ censusRefusals.push(censusRefusal('collection', 'no-value-uses', 'no `.set` call with a value argument was observed reaching this collection (or any of its aliases)', describeOwner(owner)));
326
+ continue;
327
+ }
328
+ const valueTypes = [];
329
+ let everyValue = true;
330
+ for (const arg of valueArgs) {
331
+ const type = argumentType(arg);
332
+ if (!type) {
333
+ everyValue = false;
334
+ break;
335
+ }
336
+ valueTypes.push(type);
337
+ }
338
+ if (!everyValue) {
339
+ valueRefusal.set(owner, 'value-unresolved');
340
+ // The one refusal a later layer can lift -- see `valueEvidence`. The
341
+ // expressions are published whole rather than the ones that failed,
342
+ // because the resolver downstream must agree about ALL of them or
343
+ // answer nothing: a value slot half-derived from this census and half
344
+ // from the checker would be a second authority over one storage.
345
+ unresolvedValueArgs.set(owner, valueArgs);
346
+ censusRefusals.push(censusRefusal('collection', 'value-unresolved', "at least one `.set` value argument on this collection could not be typed (the checker's own answer was unusable and the composed parameter census had nothing to add) -- left open for structural-array-element.ts's bag resolution", describeOwner(owner)));
347
+ continue;
348
+ }
349
+ const value = widestOf(checker, valueTypes);
350
+ if (!value) {
351
+ valueRefusal.set(owner, 'values-disagree');
352
+ censusRefusals.push(censusRefusal('collection', 'values-disagree', `the \`.set\` value arguments observed do not join to one type: ${valueTypes.map((type) => checker.typeToString(type)).join(', ')}`, describeOwner(owner)));
353
+ continue;
354
+ }
355
+ boundValue.set(owner, value);
356
+ }
357
+ // --- Array element census -------------------------------------------
358
+ //
359
+ // An empty array literal with no contextual type is `never[]` -- TypeScript
360
+ // states nothing about what it will hold, correctly, because nothing in
361
+ // the literal itself says. For a plain `let`/`const` binding
362
+ // (`structural-layout-type.ts`'s `settleEvolving`/`boundSymbolOf`), the
363
+ // checker's OWN flow analysis settles this by re-asking at the binding's
364
+ // last reachable reference in the same file -- `let arr = []; ...
365
+ // arr.push(x); return arr` answers `number[]` there, and that is a BETTER
366
+ // answer than anything this module could derive, because it is
367
+ // flow-sensitive within the function. This module must not fight that: a
368
+ // candidate whose parent is exactly that shape (a `VariableDeclaration`
369
+ // with a plain identifier name, initialized directly by the literal) is
370
+ // left alone entirely, uncounted, so as never to second-guess an answer
371
+ // TypeScript already gets right.
372
+ //
373
+ // What TypeScript's evolving-array machinery does NOT reach is a literal
374
+ // that is not itself a variable's own initializer -- most concretely, a
375
+ // property of an object literal (`const state = { probe: [] }`). A
376
+ // property has no flow node of its own; `state.probe` is a
377
+ // `PropertyAccessExpression` at every read, never the plain identifier
378
+ // reference evolving-array settling requires, so the checker reports
379
+ // `never[]` at `state.probe.push(...)` forever, even though the property
380
+ // holds nine real `Vector3` instances by the time any of that code runs.
381
+ // That mismatched `never` is not inert: a downstream rule reasoning about
382
+ // reachability from a `never`-typed operand can and did treat code that
383
+ // runs every frame as dead (see the module-level history this fix
384
+ // responds to). Removing the false `never` at its source is the only fix
385
+ // that cannot be undone by some future consumer trusting the certificate.
386
+ //
387
+ // The tracking problem is harder than the `Map`/`Set` case above: a
388
+ // property is not held by one persistent variable `ownerSymbolOf` can
389
+ // resolve identically at every reference. Empirically (verified against
390
+ // this exact `WebGLLights.js` shape before writing this), `checker.
391
+ // getSymbolAtLocation` on a property name returns a DIFFERENT `ts.Symbol`
392
+ // object at the declaration than at each later `.prop` access -- late-bound
393
+ // per lookup, not one persistent identity the way a variable's symbol is.
394
+ // What IS stable across all of them is the symbol's OWN declaration node:
395
+ // `sym.getDeclarations()?.[0]` returns the same `PropertyAssignment` AST
396
+ // node (`probe: []` itself) every time, at the declaration and at every
397
+ // later `.probe` access. So ownership here is tracked by DECLARATION NODE,
398
+ // not by symbol object identity -- a strictly more general key that would
399
+ // also work for the variable case, but the variable case already has its
400
+ // own proven-working, declaration-keyed tracking above (`declNodeOf`/
401
+ // `ownerDeclOfExpr`, defined once, near the top of this function, and
402
+ // reused here) and is left untouched.
403
+ const isUnstatedEmptyArrayLiteral = (node) => {
404
+ if (!ts.isArrayLiteralExpression(node) || node.elements.length > 0)
405
+ return false;
406
+ const type = checker.getTypeAtLocation(node);
407
+ if (!checker.isArrayType(type))
408
+ return false;
409
+ const [element] = checker.getTypeArguments(type);
410
+ if (element === undefined || (element.flags & (ts.TypeFlags.Never | ts.TypeFlags.Any)) === 0)
411
+ return false;
412
+ // A contextual array type is a statement made by the surrounding
413
+ // annotation/signature. In particular, an explicit `any[]` remains a
414
+ // genuine dynamic boundary; only the checker-created never/any fallback
415
+ // of an uncontextualized `[]` is evidence-free storage this census may
416
+ // replace from its writes.
417
+ return checker.getContextualType(node) === undefined;
418
+ };
419
+ /**
420
+ * The owning declaration node for a candidate empty array literal, or `null`
421
+ * when it is not trackable at all.
422
+ *
423
+ * A plain variable's own initializer USED to be excluded here and left
424
+ * entirely to `settleEvolving` -- TypeScript's own flow-sensitive narrowing
425
+ * of an unannotated `let`/`const arr = []`. That measurement (binds 130 more
426
+ * arrays, boxed count unchanged) was taken against a gate that only counted
427
+ * a TOP-LEVEL `dynamic` carrier: `array-object{element: dynamic}` was
428
+ * invisible to it, so "unchanged" meant nothing about whether the element
429
+ * type was actually right.
430
+ *
431
+ * It is not always right. `settleEvolving`'s narrowing is flow-sensitive
432
+ * WITHIN one function; when the only pushes/writes to the array happen
433
+ * inside a NESTED function that closes over the binding (three.js's
434
+ * `PolyhedronGeometry` builds `const vertexBuffer = []` in a constructor and
435
+ * fills it only from a sibling nested `function subdivideFace(...)` it
436
+ * calls), the checker cannot narrow across that boundary and every outer
437
+ * read widens to `any[]` -- worse than `never[]`, because
438
+ * `structural-array-element.ts`'s own read guard used to only fire for a
439
+ * `never` element, so an `any[]`-widened read fell straight through to the
440
+ * `dynamic` element this whole census exists to avoid.
441
+ *
442
+ * Admission is based on the allocation stating no element type. Once its
443
+ * complete write set is known, every alias must use that storage element,
444
+ * including an earlier checker read narrowed before publication elsewhere.
445
+ */
446
+ const arrayOwnerDeclOf = (node) => {
447
+ const parent = node.parent;
448
+ if (ts.isVariableDeclaration(parent) && parent.initializer === node && ts.isIdentifier(parent.name)) {
449
+ return declNodeOf(checker.getSymbolAtLocation(parent.name));
450
+ }
451
+ if (ts.isPropertyAssignment(parent) && parent.initializer === node && ts.isIdentifier(parent.name)) {
452
+ return declNodeOf(checker.getSymbolAtLocation(parent.name));
453
+ }
454
+ if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken && parent.right === node) {
455
+ return ownerDeclOfExpr(parent.left);
456
+ }
457
+ return null;
458
+ };
459
+ // Pass 3: every candidate empty array literal, grouped by owning declaration node.
460
+ const arraysByOwner = new Map();
461
+ const arrayNodeOwner = new Map();
462
+ const arrayNodeRefusal = new Map();
463
+ const collectArrayLiterals = (node) => {
464
+ // See the identical guard in `collectConstructions` above: this walk and
465
+ // `flow`'s own must agree on what counts as live code, or a member
466
+ // reachability has pruned as dead becomes a GUARANTEED `array:no-writes`
467
+ // for every empty-array candidate inside it -- not because the array is
468
+ // genuinely never written, but because the one place this census reads
469
+ // writes from (`flow`) was never asked to look inside a body it had
470
+ // already excluded. MEASURED on the three.js app: `AnimationClip.js`'s `parse`,
471
+ // `toJSON`, `CreateFromMorphTargetSequence` (named by symbol, never
472
+ // dispatched under that exact name anywhere reachable) and `clone`
473
+ // (opened by key, but not by this program's own `.clone()` call shapes)
474
+ // each push into a local array this way -- four false `no-writes`
475
+ // refusals from one missing exclusion, not four different defects.
476
+ if (reachable.memberIsPruned(node))
477
+ return;
478
+ if (isUnstatedEmptyArrayLiteral(node)) {
479
+ const owner = arrayOwnerDeclOf(node);
480
+ if (owner) {
481
+ arrayNodeOwner.set(node, owner);
482
+ const existing = arraysByOwner.get(owner);
483
+ if (existing)
484
+ existing.push(node);
485
+ else
486
+ arraysByOwner.set(owner, [node]);
487
+ }
488
+ // No `else` refusal here for the `settleEvolving`-owned or genuinely
489
+ // untrackable shapes: those are not this module's candidates at all,
490
+ // the same way a `new WeakMap()` passed inline as a call argument
491
+ // (rather than bound to a name) is invisible to the census above
492
+ // rather than counted as a refusal.
493
+ }
494
+ ts.forEachChild(node, collectArrayLiterals);
495
+ };
496
+ for (const file of files)
497
+ forEachReachableStatement(reachable, file, collectArrayLiterals);
498
+ // Pass 4: every `.push`/`.unshift`/`.fill` call and every genuine INDEX
499
+ // (non-literal-key) assignment reaching one of the tracked array literals
500
+ // above OR any cell in its alias closure -- read from `flow`'s
501
+ // `array-append`/`array-fill`/`index-assignment` edges rather than
502
+ // re-walked. This is what closes the alias case for arrays: `const helper
503
+ // = []; fill(helper)` where `fill`'s own body does `arr.push(x)` on its
504
+ // PARAMETER now composes, because `aliasClosureOf` follows the
505
+ // `call-argument` edge from `helper`'s declaration to that parameter's,
506
+ // and `flow` already recorded the parameter's own `array-append` writes.
507
+ // All three edge kinds feed the SAME join: this module does not prefer one
508
+ // kind of evidence over another, it requires every observed element value
509
+ // to agree, exactly as the key-argument census above does for
510
+ // `Map`/`Set`/`WeakMap`/`WeakSet`.
511
+ const boundElement = new Map();
512
+ const ownerArrayRefusal = new Map();
513
+ // Two allocations that reach the same held reference slot also share its
514
+ // physical element ABI. Join their whole alias component, rather than
515
+ // publishing incompatible answers according to which owner was visited last.
516
+ const arrayRoots = new Map();
517
+ const rootOf = (node) => {
518
+ const parent = arrayRoots.get(node);
519
+ if (!parent || parent === node)
520
+ return node;
521
+ const root = rootOf(parent);
522
+ arrayRoots.set(node, root);
523
+ return root;
524
+ };
525
+ for (const owner of arraysByOwner.keys()) {
526
+ for (const alias of aliasClosureOf(owner)) {
527
+ const ownerRoot = rootOf(owner);
528
+ arrayRoots.set(rootOf(alias), ownerRoot);
529
+ if (!arrayRoots.has(ownerRoot))
530
+ arrayRoots.set(ownerRoot, ownerRoot);
531
+ }
532
+ }
533
+ const arrayComponents = new Map();
534
+ for (const alias of arrayRoots.keys()) {
535
+ const root = rootOf(alias);
536
+ const component = arrayComponents.get(root) ?? new Set();
537
+ component.add(alias);
538
+ arrayComponents.set(root, component);
539
+ }
540
+ for (const [owner, aliases] of arrayComponents) {
541
+ const evidence = [];
542
+ for (const decl of aliases) {
543
+ for (const write of flow.writesToDeclaration(decl)) {
544
+ if ((write.edge === 'array-append' || write.edge === 'array-fill') && write.value)
545
+ evidence.push(write.value);
546
+ else if (write.edge === 'index-assignment' && write.slot === 'element' && write.value)
547
+ evidence.push(write.value);
548
+ }
549
+ }
550
+ if (evidence.length === 0) {
551
+ for (const alias of aliases)
552
+ ownerArrayRefusal.set(alias, 'array:no-writes');
553
+ censusRefusals.push(censusRefusal('collection', 'array-no-writes', 'no `.push`/`.unshift`/`.fill` call or index-assignment was observed writing an element into this empty array literal (or any of its aliases)', describeOwner(owner)));
554
+ continue;
555
+ }
556
+ const elementTypes = [];
557
+ // The refusal below names the OFFENDING WRITE, the same way the
558
+ // key-argument refusal above names its argument. A refusal that says only
559
+ // "at least one element" sends the reader back to re-derive which one of
560
+ // forty-eight `array.push(...)` sites it was -- and three's
561
+ // `getProgramCacheKey` has exactly that many, spread across three
562
+ // functions and reached through an alias closure, so the owner line alone
563
+ // does not locate it.
564
+ let unresolved = null;
565
+ for (const expr of evidence) {
566
+ const type = argumentType(expr);
567
+ if (!type) {
568
+ unresolved = expr;
569
+ break;
570
+ }
571
+ elementTypes.push(type);
572
+ }
573
+ if (unresolved) {
574
+ for (const alias of aliases)
575
+ ownerArrayRefusal.set(alias, 'array:element-unresolved');
576
+ const site = unresolved.getSourceFile();
577
+ censusRefusals.push(censusRefusal('collection', 'array-element-unresolved', `the element write \`${unresolved.getText(site)}\` (${site.fileName}:${site.getLineAndCharacterOfPosition(unresolved.getStart(site)).line + 1}) ` +
578
+ "could not be typed (the checker's own answer was unusable and the composed parameter census had nothing to add)", describeOwner(owner)));
579
+ continue;
580
+ }
581
+ // `joinOfWrites`, not bare `widestOf`: THE SAME WRITE-SET JOIN a cell's
582
+ // writes get, and for the same reason. `normals.push( 0, 0, 1 )` in
583
+ // three's `PlaneGeometry`/`CircleGeometry`/`RingGeometry` states three
584
+ // LITERAL types, none of which covers another, so `widestOf` alone
585
+ // refused `array:elements-disagree` -- while the array's READS were
586
+ // typed `number[]` by TypeScript's own evolving-array widening. Two
587
+ // authorities over one storage, surfacing as an unsatisfiable
588
+ // `binding-read-conversion:array-object(undefined)->array-object(scalar(
589
+ // number))` at every read. A literal argument's type is a fact about the
590
+ // CALL, not about the storage it lands in -- the same rule
591
+ // `parameter-bindings.ts` states at its own call sites and
592
+ // `local-bindings.ts`/`field-bindings.ts` get from this very function.
593
+ //
594
+ // And when no single type covers the writes, the SAME second question
595
+ // every sibling census asks: is the disagreement itself the answer?
596
+ // `var xs = []; xs.push(1); xs.push('a')` holds a `string | number`, and
597
+ // the checker's own evolving-array widening says so at every reference it
598
+ // can settle -- while this census alone refused `array:elements-disagree`,
599
+ // which sent the storage AND every `push` slot to the box for a program
600
+ // that declared nothing dynamic. `disjointUnionTypeOf` is that question
601
+ // answered as the `ts.Type` this census's contract carries, built to be
602
+ // the checker's own settled union object (see its comment for why the
603
+ // two must be identical rather than merely alike).
604
+ const element = joinOfWrites(checker, elementTypes) ?? disjointUnionTypeOf(checker, elementTypes);
605
+ if (!element) {
606
+ for (const alias of aliases)
607
+ ownerArrayRefusal.set(alias, 'array:elements-disagree');
608
+ censusRefusals.push(censusRefusal('collection', 'array-elements-disagree', `the element values written to this array do not join to one type and are not a sound disjoint union: ${elementTypes.map((type) => checker.typeToString(type)).join(', ')}`, describeOwner(owner)));
609
+ continue;
610
+ }
611
+ for (const alias of aliases)
612
+ boundElement.set(alias, element);
613
+ }
614
+ for (const [node, owner] of arrayNodeOwner) {
615
+ const reason = ownerArrayRefusal.get(owner);
616
+ if (reason)
617
+ arrayNodeRefusal.set(node, reason);
618
+ }
619
+ /**
620
+ * One owner's answer, or `null` when this census learned nothing about it.
621
+ *
622
+ * Shared by all three accessors so they cannot drift: an owner whose KEY was
623
+ * refused but whose VALUE resolved is still an answer, and it was three
624
+ * separate `if (!key) return null`s that made it look like nothing.
625
+ */
626
+ const boundArgumentsFor = (owner) => {
627
+ const key = boundKey.get(owner) ?? null;
628
+ const value = boundValue.get(owner) ?? null;
629
+ const valueEvidence = unresolvedValueArgs.get(owner) ?? [];
630
+ if (key === null && value === null && valueEvidence.length === 0)
631
+ return null;
632
+ return { key, value, valueEvidence };
633
+ };
634
+ return {
635
+ typeArgumentsAt: (node) => {
636
+ const owner = nodeOwner.get(node);
637
+ if (!owner)
638
+ return null;
639
+ return boundArgumentsFor(owner);
640
+ },
641
+ boundCount: boundKey.size,
642
+ refusals: censusRefusals,
643
+ refusalOf: (node) => {
644
+ const direct = nodeRefusal.get(node);
645
+ if (direct)
646
+ return direct;
647
+ const owner = nodeOwner.get(node);
648
+ return owner ? (ownerRefusal.get(owner) ?? null) : null;
649
+ },
650
+ arrayElementAt: (node) => {
651
+ const owner = arrayNodeOwner.get(node);
652
+ if (!owner)
653
+ return null;
654
+ return boundElement.get(owner) ?? null;
655
+ },
656
+ arrayRefusalOf: (node) => arrayNodeRefusal.get(node) ?? null,
657
+ arrayElementForRead: (expression) => {
658
+ const owner = ownerDeclOfExpr(expression);
659
+ return owner ? (boundElement.get(owner) ?? null) : null;
660
+ },
661
+ arrayElementForOwner: (declaration) => boundElement.get(declaration) ?? null,
662
+ arrayRefusalForOwner: (declaration) => ownerArrayRefusal.get(declaration) ?? null,
663
+ arrayRefusalForRead: (expression) => {
664
+ const owner = ownerDeclOfExpr(expression);
665
+ return owner ? (ownerArrayRefusal.get(owner) ?? null) : null;
666
+ },
667
+ typeArgumentsForOwner: (declaration) => {
668
+ return boundArgumentsFor(declaration);
669
+ },
670
+ typeArgumentsForRead: (expression) => {
671
+ const owner = ownerDeclOfExpr(expression);
672
+ if (!owner)
673
+ return null;
674
+ return boundArgumentsFor(owner);
675
+ }
676
+ };
677
+ };