@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,838 @@
1
+ import ts from 'typescript';
2
+ import { isClassSpelledSourceClass, isConstructorFunction } from './model.js';
3
+ import { ownedClassReceiverInventoryOf } from './owned-class-receivers.js';
4
+ import { isSourceInstanceMethod } from './source-prototype-method-identity.js';
5
+ import { deferredIntrinsicProtocolLedgerOf } from '../deferred-intrinsic-protocols.js';
6
+ import { objectPrototypeMemberNames } from '../../../representation/record-fields.js';
7
+ import { accessorPassthroughAliasOf } from '../structural-declarations.js';
8
+ import { isGlobalObjectConstructor, isStandardGlobalValue, isUnusableEvidence } from '../derived-expression-type.js';
9
+ import { unwrapNaming } from './targets.js';
10
+ /**
11
+ * The declaration-only spelling `define-property-source-transform.ts` emits for
12
+ * a `this`-receiver `Object.defineProperties` data descriptor: a bare
13
+ * `/** @type {...} *\/ this.key;` access standing as its own statement.
14
+ *
15
+ * It is the DECLARATION of a data member and executes nothing -- the property
16
+ * is created by the definition call the transform keeps beside it, with that
17
+ * call's own attributes. TypeScript's JS class inference reads it as a member
18
+ * declaration and hands it back as the property's declaration node, so a proof
19
+ * that accepts `this.key = value` and refuses this one is refusing the same
20
+ * fact written in the spelling this compiler itself chose. Three's `LOD`
21
+ * declares `levels` that way, and reading it was the terminal of 35 escapes.
22
+ */
23
+ export const declaredDataMemberAccess = (declaration) => (ts.isPropertyAccessExpression(declaration) || ts.isElementAccessExpression(declaration)) &&
24
+ ts.isExpressionStatement(declaration.parent) &&
25
+ declaration.parent.expression === declaration;
26
+ /** A source member declaration that creates a plain data property. */
27
+ const isSourceDataDeclaration = (declaration) => !declaration.getSourceFile().isDeclarationFile &&
28
+ (ts.isPropertyDeclaration(declaration) ||
29
+ ts.isParameterPropertyDeclaration(declaration, declaration.parent) ||
30
+ declaredDataMemberAccess(declaration) ||
31
+ (ts.isBinaryExpression(declaration) &&
32
+ declaration.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
33
+ (ts.isPropertyAccessExpression(declaration.left) || ts.isElementAccessExpression(declaration.left))));
34
+ const carriesTypeParameter = (type) => (type.flags & ts.TypeFlags.TypeParameter) !== 0 || (type.isUnionOrIntersection() && type.types.some(carriesTypeParameter));
35
+ /**
36
+ * The plain data member a get/set accessor PAIR does nothing but forward to,
37
+ * on one particular owner class -- or `null` when this owner does not prove
38
+ * it. `isSourceDataDeclaration` above is right to refuse an accessor by
39
+ * itself: an accessor runs code, and its own declaration says nothing about
40
+ * what that code does. This asks the narrower, additional question of
41
+ * whether the code it runs is PROVABLY nothing but forwarding to a real data
42
+ * member, so that a read through the accessor can be answered from the same
43
+ * authority that answers for the member it forwards to -- three's
44
+ * `Texture.image` (`get image() { return this.source.data } set image(v) {
45
+ * this.source.data = v }`) is the motivating case: every read of it across
46
+ * `WebGLTextures.js` is a `Source.data` read wearing a different name.
47
+ *
48
+ * Every one of these must hold, on THIS owner, for the answer to be anything
49
+ * but `null`:
50
+ *
51
+ * - the pair is syntactically a passthrough of one access, both halves
52
+ * agreeing (`accessorPassthroughAliasOf`, `structural-declarations.ts`);
53
+ * - the receiver the access reads off -- `this` itself, or `this.<field>` --
54
+ * resolves on this owner's declared type to a class-or-interface type, so
55
+ * there really is a further object to ask;
56
+ * - the member the access names on THAT type is itself proven a plain data
57
+ * declaration by `isSourceDataDeclaration` -- the SAME guard, asked again,
58
+ * never a looser one, so a target that is itself an accessor (a chain of
59
+ * proxies) refuses rather than being assumed transparent;
60
+ * - the target's own checker type is not vacuous (`any`, `unknown`, or an
61
+ * unsubstituted type parameter) -- an alias to nothing is not evidence.
62
+ *
63
+ * Callers enumerate the outer owner's family. A forwarded receiver field
64
+ * has its own family, which must also exclude accessor overrides.
65
+ */
66
+ const accessorPassthroughDataMemberOf = (checker, flow, owner, member) => {
67
+ const declarations = member.declarations ?? [];
68
+ if (declarations.length !== 2)
69
+ return null;
70
+ const getter = declarations.find(ts.isGetAccessorDeclaration);
71
+ const setter = declarations.find(ts.isSetAccessorDeclaration);
72
+ if (!getter || !setter)
73
+ return null;
74
+ const alias = accessorPassthroughAliasOf(getter, setter);
75
+ if (!alias)
76
+ return null;
77
+ let receiverType;
78
+ if (alias.receiverField === null)
79
+ receiverType = owner;
80
+ else {
81
+ const receiverSymbol = checker.getPropertyOfType(owner, alias.receiverField);
82
+ if (!receiverSymbol?.declarations?.length || !receiverSymbol.declarations.every(isSourceDataDeclaration))
83
+ return null;
84
+ const receiverDeclaration = receiverSymbol.valueDeclaration ?? receiverSymbol.declarations?.[0];
85
+ if (!receiverDeclaration)
86
+ return null;
87
+ receiverType = checker.getTypeOfSymbolAtLocation(receiverSymbol, receiverDeclaration);
88
+ }
89
+ if (!receiverType.isClassOrInterface())
90
+ return null;
91
+ const target = checker.getPropertyOfType(receiverType, alias.key);
92
+ if (!target?.declarations?.length || !target.declarations.every(isSourceDataDeclaration))
93
+ return null;
94
+ if (alias.receiverField !== null) {
95
+ // The outer owner's family does not establish the nested receiver's
96
+ // family. A Source subclass may replace data with an accessor too.
97
+ const source = receiverType.getSymbol()?.valueDeclaration;
98
+ if (!source || (!ts.isClassDeclaration(source) && !ts.isClassExpression(source)))
99
+ return null;
100
+ const inventory = ownedClassReceiverInventoryOf(checker, flow, new Set([source]));
101
+ if (!inventory)
102
+ return null;
103
+ for (const candidate of inventory.classes) {
104
+ const type = declaredClassTypeOf(checker, candidate);
105
+ const member = type && checker.getPropertyOfType(type, alias.key);
106
+ if (!member?.declarations?.length || !member.declarations.every(isSourceDataDeclaration))
107
+ return null;
108
+ }
109
+ }
110
+ const targetDeclaration = target.valueDeclaration ?? target.declarations[0];
111
+ const targetType = checker.getTypeOfSymbolAtLocation(target, targetDeclaration);
112
+ if (isUnusableEvidence(targetType) || (targetType.flags & ts.TypeFlags.Unknown) !== 0 || carriesTypeParameter(targetType))
113
+ return null;
114
+ return { declaration: targetDeclaration, type: targetType };
115
+ };
116
+ /**
117
+ * `this`/`super`, or a local binding that is provably nothing else: its only
118
+ * whole-slot write is its own initializer, and that initializer is `this`/
119
+ * `super`. TypeScript's own JS constructor-function member inference scans
120
+ * only a LITERAL `this.<name> = ...`; three's `WebGLRenderer` instead writes
121
+ * most of its instance data through exactly this alias, often from inside a
122
+ * nested helper (`WebGLRenderer.js`: `const _this = this; ... function
123
+ * initGLContext() { ... _this.shadowMap = shadowMap; ... }`). The checker's
124
+ * inferred type for `WebGLRenderer` then has no `shadowMap` member at all --
125
+ * not a wrong answer, an absent one, because the checker never looked. The
126
+ * value-flow index already proves an alias like this exact for other
127
+ * purposes (`callable-reach.ts`'s `thisFamilyAt`, walking straight through
128
+ * `const _this = this`); a member-declaration authority that recognises only
129
+ * the bare keyword was refusing a fact the flow graph had already settled.
130
+ */
131
+ const thisReceiverOf = (flow, expression) => {
132
+ const value = unwrapNaming(expression);
133
+ if (value.kind === ts.SyntaxKind.ThisKeyword || value.kind === ts.SyntaxKind.SuperKeyword)
134
+ return value;
135
+ if (!ts.isIdentifier(value))
136
+ return null;
137
+ const declaration = flow.targetOf(value)?.declaration;
138
+ if (!declaration || !ts.isVariableDeclaration(declaration))
139
+ return null;
140
+ const writes = flow.writesToDeclaration(declaration).filter((write) => write.slot === 'whole');
141
+ const write = writes.length === 1 ? writes[0] : undefined;
142
+ if (!write || write.edge !== 'declaration-initializer' || write.value === null)
143
+ return null;
144
+ const initial = unwrapNaming(write.value);
145
+ return initial.kind === ts.SyntaxKind.ThisKeyword || initial.kind === ts.SyntaxKind.SuperKeyword ? initial : null;
146
+ };
147
+ /**
148
+ * `owner.<key>` assignments `checker.getPropertyOfType` cannot see: `this.
149
+ * <key> = value` written through a `thisReceiverOf` alias, from directly
150
+ * inside a CONSTRUCTOR FUNCTION's own body or a real class's own
151
+ * `constructor(...)` method. A sibling of `callable-reach.ts`'s
152
+ * `instanceMemberWritesOf`, kept as its own small walk rather than shared:
153
+ * that inventory is keyed to a literal `this`/`super` receiver on purpose,
154
+ * for an unrelated inheritance question multiple other consumers already
155
+ * depend on, and widening it there would change what every one of them
156
+ * sees. This one exists only to hand the checker-backed member/read/data
157
+ * plans below a fallback for the specific keys the checker's own inference
158
+ * never learns -- scoped to a constructor's own frame exactly the way a
159
+ * real class's inferred type is scoped to its own declared members.
160
+ *
161
+ * `owner` is the whole class/function declaration, but `flow.receiverOwnerOf`
162
+ * answers with the innermost enclosing FUNCTION-LIKE node -- for a
163
+ * constructor-function `owner` that IS `owner` itself, but for a real
164
+ * `class Owner { constructor() { ... } }` it is the `constructor` method,
165
+ * never the class node. Three's `WebGLRenderer` is the real-file case: an
166
+ * ES6 class whose constructor keeps a `const _this = this` alias and installs
167
+ * `properties`/`textures`/... through it from a nested `initGLContext`
168
+ * helper, same shape as a constructor function's own alias writes -- so the
169
+ * comparison frame must be the constructor method, not the class.
170
+ */
171
+ /**
172
+ * Every alias-installed key at once, grouped -- rather than one key at a time
173
+ * -- because the struct-field-layout census (`structural.ts`'s
174
+ * `classInstanceBodyOf`) does not know in advance WHICH keys the checker's
175
+ * `type.getProperties()` is missing; it has to enumerate the whole extra set
176
+ * to append it to the shape. The per-key `constructorInstalledMemberWritesOf`
177
+ * below is now a thin filter over this, so the member-plan/key-read-plan
178
+ * call sites (which DO already know the one key they are asking about) keep
179
+ * their existing shape.
180
+ */
181
+ // This is a pure function of (flow, owner): the alias-installed write scan
182
+ // consults no proof assumption park, only the whole-program write inventory
183
+ // and the owner's own frame. But the member-plan/key-read-plan call sites
184
+ // below reach it once per VALUE query (`sourceClassDataMemberPlanOf`'s outer
185
+ // cache is proof-local and deliberately bypassed for those -- see
186
+ // `cachedByAnchorAndKey`'s `proofLocal` branch), which is once per re-ask
187
+ // inside the escape proof's coinductive cycle -- millions of times on
188
+ // the three.js app. Recomputing an O(allWrites) scan that many times turned a single
189
+ // full-program pass into the dominant cost; cache it by (flow, owner) here,
190
+ // independent of that proof-local machinery, the same way every other
191
+ // checker-stable answer in this module is held in a WeakMap off `flow`.
192
+ const constructorInstalledMemberDeclarationCache = new WeakMap();
193
+ export const constructorInstalledMemberDeclarationsOf = (flow, owner) => {
194
+ let byOwner = constructorInstalledMemberDeclarationCache.get(flow);
195
+ if (!byOwner)
196
+ constructorInstalledMemberDeclarationCache.set(flow, (byOwner = new WeakMap()));
197
+ const cached = byOwner.get(owner);
198
+ if (cached)
199
+ return cached;
200
+ const computed = constructorInstalledMemberDeclarationsUncachedOf(flow, owner);
201
+ byOwner.set(owner, computed);
202
+ return computed;
203
+ };
204
+ const constructorInstalledMemberDeclarationsUncachedOf = (flow, owner) => {
205
+ const ownerFrame = isConstructorFunction(owner)
206
+ ? owner
207
+ : isClassSpelledSourceClass(owner)
208
+ ? owner.members.find((member) => ts.isConstructorDeclaration(member) && member.body !== undefined)
209
+ : undefined;
210
+ if (!ownerFrame)
211
+ return new Map();
212
+ const found = new Map();
213
+ for (const write of flow.allWrites) {
214
+ if (write.slot !== 'whole')
215
+ continue;
216
+ const access = write.naming;
217
+ if (!access || (!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)))
218
+ continue;
219
+ const writtenKey = ts.isPropertyAccessExpression(access)
220
+ ? access.name.text
221
+ : ts.isStringLiteralLike(access.argumentExpression)
222
+ ? access.argumentExpression.text
223
+ : null;
224
+ if (writtenKey === null)
225
+ continue;
226
+ const receiver = thisReceiverOf(flow, access.expression);
227
+ if (!receiver || flow.receiverOwnerOf(receiver) !== ownerFrame)
228
+ continue;
229
+ const declaration = access.parent;
230
+ if (ts.isBinaryExpression(declaration) && declaration.left === access && declaration.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
231
+ let declarations = found.get(writtenKey);
232
+ if (!declarations)
233
+ found.set(writtenKey, (declarations = []));
234
+ if (!declarations.includes(declaration))
235
+ declarations.push(declaration);
236
+ }
237
+ }
238
+ return found;
239
+ };
240
+ const constructorInstalledMemberWritesOf = (flow, owner, key) => constructorInstalledMemberDeclarationsOf(flow, owner).get(key) ?? [];
241
+ /** Exact origins may narrow a descriptor family. Otherwise proving every member
242
+ * of the declared family is conservative; it does not certify allocation origins. */
243
+ const familyRootsOf = (checker, query) => {
244
+ const roots = new Set();
245
+ const seen = new Set();
246
+ const collect = (type) => {
247
+ if (seen.has(type))
248
+ return false;
249
+ seen.add(type);
250
+ if ((type.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)) !== 0)
251
+ return true;
252
+ if (type.isUnion())
253
+ return type.types.every(collect);
254
+ if ((type.flags & ts.TypeFlags.TypeParameter) !== 0) {
255
+ const constraint = checker.getBaseConstraintOfType(type);
256
+ return constraint !== undefined && constraint !== type && collect(constraint);
257
+ }
258
+ const classType = type.isClassOrInterface() ||
259
+ ((type.flags & ts.TypeFlags.Object) !== 0 &&
260
+ (type.objectFlags & ts.ObjectFlags.Reference) !== 0 &&
261
+ type.target.isClassOrInterface());
262
+ if (!classType)
263
+ return false;
264
+ const declaration = type.getSymbol()?.valueDeclaration;
265
+ if (!declaration ||
266
+ (!ts.isClassDeclaration(declaration) && !ts.isClassExpression(declaration) && !isConstructorFunction(declaration)) ||
267
+ declaration.getSourceFile().isDeclarationFile)
268
+ return false;
269
+ roots.add(declaration);
270
+ return true;
271
+ };
272
+ const exact = query.kind === 'value' ? query.originsOf(query.expression) : null;
273
+ if (exact)
274
+ for (const owner of exact.classes)
275
+ roots.add(owner);
276
+ else if (!collect(query.receiver))
277
+ return null;
278
+ // TEMPORARY diagnostic for root A's real-WebGLRenderer probe -- names which
279
+ // arm of this function supplied `roots` and how many it found, since a
280
+ // truthy-but-EMPTY `exact` short-circuits the `collect()` fallback and
281
+ // silently produces zero roots. Remove once the real-file refusal is found.
282
+ const watchedFamilyRoots = process.env['GEA_FAMILY_ROOTS_DEBUG'];
283
+ if (watchedFamilyRoots !== undefined &&
284
+ query.kind === 'value' &&
285
+ (watchedFamilyRoots === '*' || query.expression.getText().includes(watchedFamilyRoots))) {
286
+ const file = query.expression.getSourceFile();
287
+ const line = file.getLineAndCharacterOfPosition(query.expression.getStart()).line + 1;
288
+ console.error(`[FAMILY-ROOTS] ${file.fileName.split('/').pop()}#${line} [${query.expression.getText().slice(0, 40)}] arm=${exact ? 'exact' : 'collect'} exactClasses=${exact ? exact.classes.size : '-'} roots=${[...roots].map((r) => r.name?.text ?? '(anonymous)').join(',')}`);
289
+ }
290
+ return roots;
291
+ };
292
+ const declaredClassTypeOf = (checker, owner) => {
293
+ const symbol = owner.name ? checker.getSymbolAtLocation(owner.name) : checker.getTypeAtLocation(owner).getSymbol();
294
+ const type = symbol && checker.getDeclaredTypeOfSymbol(symbol);
295
+ return type?.isClassOrInterface() ? type : null;
296
+ };
297
+ /** A source family's inherited constructor slot, with no own override or recorded replacement. */
298
+ export const sourceClassConstructorSlotIsOriginal = (checker, flow, query) => {
299
+ const roots = familyRootsOf(checker, query);
300
+ const inventory = roots && ownedClassReceiverInventoryOf(checker, flow, roots);
301
+ if (!inventory)
302
+ return false;
303
+ for (const owner of inventory.classes)
304
+ if (!classConstructorSlotIsOriginal(checker, flow, owner))
305
+ return false;
306
+ return true;
307
+ };
308
+ /** One class's `constructor` slot is still `Object.prototype.constructor`: no own member, no recorded write. */
309
+ /**
310
+ * Whether this class still has the `constructor` slot `Object` gave it.
311
+ *
312
+ * Memoized because the question is asked inside two `for` loops -- once per
313
+ * member of a receiver family and once per class of an inventory -- while the
314
+ * answer depends only on the flow index and the class: two checker calls, a
315
+ * write-set lookup, and a `getSourceFile()` parent walk per declaration, all
316
+ * of which give the same result every time. A live three.js profile put it at
317
+ * 7.4% of self time once the proof memo stopped dominating.
318
+ */
319
+ const constructorSlotOriginal = new WeakMap();
320
+ export const classConstructorSlotIsOriginal = (checker, flow, owner) => {
321
+ let byOwner = constructorSlotOriginal.get(flow);
322
+ if (!byOwner)
323
+ constructorSlotOriginal.set(flow, (byOwner = new WeakMap()));
324
+ const known = byOwner.get(owner);
325
+ if (known !== undefined)
326
+ return known;
327
+ const answer = classConstructorSlotIsOriginalUncached(checker, flow, owner);
328
+ byOwner.set(owner, answer);
329
+ return answer;
330
+ };
331
+ const classConstructorSlotIsOriginalUncached = (checker, flow, owner) => {
332
+ const type = declaredClassTypeOf(checker, owner);
333
+ const slot = type && checker.getPropertyOfType(type, 'constructor');
334
+ return (!!slot?.declarations?.length &&
335
+ flow.writesToSymbol(slot).length === 0 &&
336
+ slot.declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib &&
337
+ ts.isPropertySignature(declaration) &&
338
+ ts.isInterfaceDeclaration(declaration.parent) &&
339
+ declaration.parent.name.text === 'Object'));
340
+ };
341
+ const dataMemberPlans = new WeakMap();
342
+ const callableMemberPlans = new WeakMap();
343
+ const keyReadPlans = new WeakMap();
344
+ // Read once at load: `process.env` is a native interceptor, and the member
345
+ // plan below runs once per uncached (anchor, receiver, key) question -- and
346
+ // once per VALUE query outright, since those are proof-local -- so a per-call
347
+ // read was a measurable slice of the three.js app's frontend for a value that cannot
348
+ // change mid-process.
349
+ const watchedOwnedClass = process.env['GEA_OWNED_CLASS_DEBUG'];
350
+ const cachedByAnchorAndKey = (store, flow, anchor, receiver, key, proofLocal, compute) => {
351
+ if (proofLocal)
352
+ return compute();
353
+ let byAnchor = store.get(flow);
354
+ if (!byAnchor)
355
+ store.set(flow, (byAnchor = new WeakMap()));
356
+ let byType = byAnchor.get(anchor);
357
+ if (!byType)
358
+ byAnchor.set(anchor, (byType = new WeakMap()));
359
+ let byKey = byType.get(receiver);
360
+ if (!byKey)
361
+ byType.set(receiver, (byKey = new Map()));
362
+ const ledger = deferredIntrinsicProtocolLedgerOf(flow);
363
+ let answer = byKey.get(key);
364
+ if (!answer) {
365
+ answer = ledger ? ledger.capture(compute) : { value: compute(), requirements: [] };
366
+ byKey.set(key, answer);
367
+ }
368
+ // A cache hit owes exactly the obligations that justified the first read.
369
+ // Without an enclosing capture, compute again so the original fail-closed
370
+ // requirement cannot be bypassed by an earlier successful query.
371
+ if (answer.requirements.length > 0 && ledger?.include(answer.requirements) !== true)
372
+ return compute();
373
+ return answer.value;
374
+ };
375
+ /** A descriptor-family proof, not a receiver-origin or escape proof. The
376
+ * caller already follows a particular source owner through its aliases.
377
+ * Unrelated function constructors with checker type `any` must not become
378
+ * members of that owner's family merely through structural assignability.
379
+ */
380
+ export const sourceClassDataMemberPlanOf = (checker, flow, query, key) => cachedByAnchorAndKey(dataMemberPlans, flow, query.kind === 'value' ? query.expression : query.receiver, query.receiver, key, query.kind === 'value', () => sourceClassDataMemberPlanUncached(checker, flow, query, key));
381
+ const sourceClassDataMemberPlanUncached = (checker, flow, query, key) => {
382
+ if (key === '__proto__' || key === 'constructor')
383
+ return null;
384
+ const roots = familyRootsOf(checker, query);
385
+ if (!roots)
386
+ return null;
387
+ const watched = watchedOwnedClass;
388
+ const watching = watched !== undefined && [...roots].some((root) => (root.name?.text ?? '') === watched);
389
+ const refuse = (reason, detail) => {
390
+ if (watching)
391
+ console.error(`[SOURCE-CLASS-DATA] ${watched}.${key} ${reason}${detail ? ` ${detail}` : ''}`);
392
+ return null;
393
+ };
394
+ if (roots.size === 0)
395
+ return null;
396
+ const inventory = ownedClassReceiverInventoryOf(checker, flow, roots);
397
+ if (!inventory)
398
+ return refuse('no-inventory');
399
+ const declarations = new Set();
400
+ for (const owner of inventory.classes) {
401
+ const symbol = owner.name ? checker.getSymbolAtLocation(owner.name) : checker.getTypeAtLocation(owner).getSymbol();
402
+ if (!symbol)
403
+ return refuse('unnamed-owner');
404
+ const ownerType = checker.getDeclaredTypeOfSymbol(symbol);
405
+ const member = checker.getPropertyOfType(ownerType, key);
406
+ if (!member?.declarations?.length) {
407
+ const installed = constructorInstalledMemberWritesOf(flow, owner, key);
408
+ if (installed.length === 0)
409
+ return refuse('member-absent-on-owner', owner.name?.text);
410
+ for (const declaration of installed)
411
+ declarations.add(declaration);
412
+ continue;
413
+ }
414
+ if (!member.declarations.every(isSourceDataDeclaration)) {
415
+ const passthrough = accessorPassthroughDataMemberOf(checker, flow, ownerType, member);
416
+ if (!passthrough)
417
+ return refuse('member-not-data-on-owner', owner.name?.text);
418
+ declarations.add(passthrough.declaration);
419
+ continue;
420
+ }
421
+ declarations.add(member.valueDeclaration ?? member.declarations[0]);
422
+ }
423
+ return { declarations: [...declarations] };
424
+ };
425
+ export const sourceClassDataMemberOf = (checker, flow, receiver, key) => sourceClassDataMemberPlanOf(checker, flow, { kind: 'declared', receiver }, key) !== null;
426
+ /**
427
+ * The source method bodies a key resolves to on this class family.
428
+ *
429
+ * A sibling of `sourceClassDataMemberPlanOf`, deliberately not a widening of
430
+ * it. They answer different questions -- "what plain data does this key hold"
431
+ * and "which bodies does this key dispatch to" -- and a consumer asking the
432
+ * first must keep getting `null` for a method, so they get separate caches as
433
+ * well as separate names.
434
+ *
435
+ * **Slot integrity is not proven here, and that separation is the point.**
436
+ * `ownedClassReceiverInventoryOf` admits a family only when
437
+ * `classConstructorKeepsInstanceOf` holds for every class in it, and that
438
+ * inventory refuses any constructor or prototype reference it cannot explain,
439
+ * `C.prototype.m = other` included. What remains -- an instance-side `a.m = f`
440
+ * -- belongs to whoever holds the construction: the value graph's slot transfer
441
+ * enumerates every write to this key on that allocation and refuses the ones it
442
+ * cannot model. This function answers only which declarations the key names,
443
+ * which is §4's distinction between a virtual callable slot and prototype-slot
444
+ * integrity, kept apart on purpose.
445
+ */
446
+ export const sourceClassCallableMemberPlanOf = (checker, flow, query, key) => cachedByAnchorAndKey(callableMemberPlans, flow, query.kind === 'value' ? query.expression : query.receiver, query.receiver, key, query.kind === 'value', () => sourceClassCallableMemberPlanUncached(checker, flow, query, key));
447
+ const sourceClassCallableMemberPlanUncached = (checker, flow, query, key) => {
448
+ if (key === '__proto__' || key === 'constructor')
449
+ return null;
450
+ const roots = familyRootsOf(checker, query);
451
+ if (!roots || roots.size === 0)
452
+ return null;
453
+ const watched = watchedOwnedClass;
454
+ const watching = watched !== undefined && [...roots].some((root) => (root.name?.text ?? '') === watched);
455
+ const refuse = (reason, detail) => {
456
+ if (watching)
457
+ console.error(`[SOURCE-CLASS-CALLABLE] ${watched}.${key} ${reason}${detail ? ` ${detail}` : ''}`);
458
+ return null;
459
+ };
460
+ const inventory = ownedClassReceiverInventoryOf(checker, flow, roots);
461
+ if (!inventory)
462
+ return refuse('no-inventory');
463
+ const declarations = new Set();
464
+ for (const owner of inventory.classes) {
465
+ const symbol = owner.name ? checker.getSymbolAtLocation(owner.name) : checker.getTypeAtLocation(owner).getSymbol();
466
+ if (!symbol)
467
+ return refuse('unnamed-owner');
468
+ const member = checker.getPropertyOfType(checker.getDeclaredTypeOfSymbol(symbol), key);
469
+ if (!member?.declarations?.length)
470
+ return refuse('member-absent-on-owner', owner.name?.text);
471
+ // Every declaration, on every class the receiver can be: one override that
472
+ // is an accessor, a bodiless overload or an ambient member makes the whole
473
+ // family's answer unknown rather than partly known.
474
+ if (!member.declarations.every(isSourceInstanceMethod))
475
+ return refuse('member-not-a-source-method', owner.name?.text);
476
+ for (const declaration of member.declarations)
477
+ declarations.add(declaration);
478
+ }
479
+ return { declarations: [...declarations] };
480
+ };
481
+ const PRIMITIVE_FLAGS = ts.TypeFlags.StringLike |
482
+ ts.TypeFlags.NumberLike |
483
+ ts.TypeFlags.BooleanLike |
484
+ ts.TypeFlags.BigIntLike |
485
+ ts.TypeFlags.ESSymbolLike |
486
+ ts.TypeFlags.Null |
487
+ ts.TypeFlags.Undefined |
488
+ ts.TypeFlags.Void;
489
+ const primitiveType = (type) => (type.isUnion() ? type.types.every(primitiveType) : (type.flags & PRIMITIVE_FLAGS) !== 0);
490
+ /**
491
+ * A read of `key` through a receiver of this source class family, classified
492
+ * per class -- including keys the receiver's own class never declares.
493
+ *
494
+ * Three's renderer asks every drawable `object.isInstancedMesh` and
495
+ * `object.isSkinnedMesh` (`WebGLRenderLists.js`, `WebGLObjects.js`,
496
+ * `WebGLPrograms.js`, ...). Only `InstancedMesh`/`SkinnedMesh` declare them,
497
+ * and neither is in the three.js app's import graph, so on a `Mesh` the read is simply
498
+ * absent. The read runs no code exactly when no class in the family -- nor
499
+ * any class on its prototype chain up to `Object.prototype` -- has a method
500
+ * or accessor for the key. An absent key further needs the key not to be an
501
+ * `Object.prototype` member and the intrinsic Object prototype intact (the
502
+ * same ledger obligation a record's missing slot pays).
503
+ *
504
+ * `carriers`/`primitive` let a caller that follows the receiver require that
505
+ * the read can never yield the receiver back (`this.self = this`) or a
506
+ * function that captures it. "Absent" states that no class DECLARES the key;
507
+ * an expando store onto an instance is a store the caller's own publication
508
+ * tracking must see. Like the data plan, this assumes a receiver typed as a
509
+ * family class really holds a family instance.
510
+ */
511
+ export const sourceClassKeyReadPlanOf = (checker, flow, query, key) => cachedByAnchorAndKey(keyReadPlans, flow, query.kind === 'value' ? query.expression : query.receiver, query.receiver, key, query.kind === 'value', () => sourceClassKeyReadPlanUncached(checker, flow, query, key));
512
+ const sourceClassKeyReadPlanUncached = (checker, flow, query, key) => {
513
+ // `toString`, `hasOwnProperty`, `__proto__`, `constructor`: every instance
514
+ // reaches the intrinsic member, and a family class may also shadow it.
515
+ if (objectPrototypeMemberNames.has(key))
516
+ return null;
517
+ const roots = familyRootsOf(checker, query);
518
+ if (!roots || roots.size === 0)
519
+ return null;
520
+ const inventory = ownedClassReceiverInventoryOf(checker, flow, roots);
521
+ if (!inventory)
522
+ return null;
523
+ const interfaceOf = (type) => {
524
+ if (type.isClassOrInterface())
525
+ return type;
526
+ if ((type.flags & ts.TypeFlags.Object) !== 0 && (type.objectFlags & ts.ObjectFlags.Reference) !== 0) {
527
+ const target = type.target;
528
+ return target.isClassOrInterface() ? target : null;
529
+ }
530
+ return null;
531
+ };
532
+ // Every link must be a source class: a declaration-file base states
533
+ // accessors and data properties in the same spelling, so it cannot say
534
+ // which one a read would reach.
535
+ const chainOf = (type, seen) => {
536
+ if (seen.has(type))
537
+ return [];
538
+ seen.add(type);
539
+ const chain = [type];
540
+ for (const base of checker.getBaseTypes(type)) {
541
+ const declared = interfaceOf(base);
542
+ const declaration = base.getSymbol()?.valueDeclaration;
543
+ if (!declared ||
544
+ !declaration ||
545
+ (!ts.isClassDeclaration(declaration) && !ts.isClassExpression(declaration)) ||
546
+ declaration.getSourceFile().isDeclarationFile)
547
+ return null;
548
+ const rest = chainOf(declared, seen);
549
+ if (!rest)
550
+ return null;
551
+ chain.push(base, ...rest);
552
+ }
553
+ return chain;
554
+ };
555
+ const classes = new Map();
556
+ const carriers = [];
557
+ let codeFree = true;
558
+ let primitive = true;
559
+ let absent = false;
560
+ const writeBodies = new Set();
561
+ let writesKnown = true;
562
+ const readBodies = new Set();
563
+ let readsKnown = true;
564
+ for (const owner of inventory.classes) {
565
+ const type = declaredClassTypeOf(checker, owner);
566
+ const chain = type ? chainOf(type, new Set()) : null;
567
+ if (!type || !chain)
568
+ return null;
569
+ let verdict = 'absent';
570
+ for (const link of chain) {
571
+ const member = checker.getPropertyOfType(link, key);
572
+ if (!member)
573
+ continue;
574
+ if (!member.declarations?.length || !member.declarations.every(isSourceDataDeclaration)) {
575
+ // Reading and assigning the same key invoke different code. A source
576
+ // setter can be inspected even when its getter is not transparent.
577
+ // A getter-only property throws (or ignores a sloppy assignment), so
578
+ // that write contributes no receiver publication either.
579
+ if (member.declarations?.length &&
580
+ member.declarations.every((declaration) => !declaration.getSourceFile().isDeclarationFile && ts.isMethodDeclaration(declaration)) &&
581
+ member.declarations.some((declaration) => ts.isMethodDeclaration(declaration) && declaration.body !== undefined)) {
582
+ // Source methods install ordinary writable data descriptors. A
583
+ // store shadows that method on the instance without invoking the
584
+ // old or new callable. Reading/calling it remains a separate proof.
585
+ readsKnown = false;
586
+ }
587
+ else if (member.declarations?.length &&
588
+ member.declarations.every((declaration) => !declaration.getSourceFile().isDeclarationFile &&
589
+ (ts.isGetAccessorDeclaration(declaration) || ts.isSetAccessorDeclaration(declaration)))) {
590
+ for (const declaration of member.declarations) {
591
+ if (ts.isSetAccessorDeclaration(declaration)) {
592
+ if (declaration.body)
593
+ writeBodies.add(declaration);
594
+ else
595
+ writesKnown = false;
596
+ }
597
+ else if (ts.isGetAccessorDeclaration(declaration)) {
598
+ if (declaration.body)
599
+ readBodies.add(declaration);
600
+ else
601
+ readsKnown = false;
602
+ }
603
+ }
604
+ }
605
+ else {
606
+ writesKnown = false;
607
+ readsKnown = false;
608
+ }
609
+ // Not a plain data declaration on this link -- still `data` when it
610
+ // is instead an accessor pair provably forwarding to one; see
611
+ // `accessorPassthroughDataMemberOf`'s header for why this cannot
612
+ // widen the read past what a real data member would have permitted.
613
+ if (member.declarations?.length && accessorPassthroughDataMemberOf(checker, flow, link, member)) {
614
+ verdict = 'data';
615
+ continue;
616
+ }
617
+ verdict = 'other';
618
+ break;
619
+ }
620
+ verdict = 'data';
621
+ }
622
+ // No link on the checker's own chain declares the key at all -- which is
623
+ // exactly what a constructor function writing it only through a `this`
624
+ // alias looks like, since the checker's inference never saw that write
625
+ // either. Fall back to the flow-index's own record of it before reading
626
+ // this as a genuine absence and requiring the intrinsic Object prototype
627
+ // to stay clean for a key the program plainly does assign.
628
+ if (verdict === 'absent') {
629
+ const installed = constructorInstalledMemberWritesOf(flow, owner, key);
630
+ if (installed.length > 0) {
631
+ for (const declaration of installed) {
632
+ const carrier = checker.getTypeAtLocation(declaration.right);
633
+ carriers.push({ owner, declaration, type: carrier });
634
+ primitive &&= primitiveType(carrier);
635
+ }
636
+ classes.set(owner, 'data');
637
+ continue;
638
+ }
639
+ }
640
+ if (verdict === 'data') {
641
+ const member = checker.getPropertyOfType(type, key);
642
+ const passthrough = member.declarations?.length && !member.declarations.every(isSourceDataDeclaration)
643
+ ? accessorPassthroughDataMemberOf(checker, flow, type, member)
644
+ : null;
645
+ const declaration = passthrough ? passthrough.declaration : (member.valueDeclaration ?? member.declarations[0]);
646
+ const carrier = passthrough ? passthrough.type : checker.getTypeOfSymbolAtLocation(member, declaration);
647
+ carriers.push({ owner, declaration, type: carrier });
648
+ primitive &&= primitiveType(carrier);
649
+ }
650
+ else if (verdict === 'other')
651
+ codeFree = false;
652
+ else
653
+ absent = true;
654
+ classes.set(owner, verdict);
655
+ }
656
+ if (absent) {
657
+ if (objectPrototypeMemberNames.has(key))
658
+ return null;
659
+ const location = query.kind === 'value' ? query.expression : roots.values().next().value;
660
+ // The read falls through to Object.prototype for exactly this key, so the
661
+ // obligation is that key's absence there -- not the whole prototype, which
662
+ // any unattributed write anywhere in the program fails.
663
+ if (deferredIntrinsicProtocolLedgerOf(flow)?.requirePrototypeKeys('Object', { names: [key] }, location) !== true)
664
+ return null;
665
+ }
666
+ return {
667
+ classes,
668
+ carriers,
669
+ codeFree,
670
+ primitive,
671
+ needsDefaultPrototype: absent,
672
+ writeBodies: writesKnown ? [...writeBodies] : null,
673
+ readBodies: readsKnown ? [...readBodies] : null
674
+ };
675
+ };
676
+ /** `Object.<method>`/`Reflect.<method>` calls, and the legacy per-instance
677
+ * pair, whose effect is INSTALLING an accessor under some key -- as opposed
678
+ * to `Object.assign`/`Reflect.set`, which only ever write THROUGH an
679
+ * existing accessor (or create a plain data property) rather than install a
680
+ * new one. `setPrototypeOf` is here because a replaced prototype can bring
681
+ * any accessor with it, under any key. */
682
+ const REFLECTIVE_ACCESSOR_INSTALLERS = new Set(['defineProperty', 'defineProperties', 'setPrototypeOf']);
683
+ /** A mention of the global `Object`/`Reflect` value that cannot hand one of
684
+ * its mutators out: a member read (the member's own symbol is then scanned
685
+ * separately), a call or construction of it, or an identity/`instanceof`
686
+ * comparison. Mirrors `class-family-member-read.ts`'s `globalValueUseIsInert`,
687
+ * kept as its own small copy rather than imported -- see
688
+ * `reflectiveDefinitionMayInstallGetterOf`'s header for why. */
689
+ const globalValueUseIsInert = (reference) => {
690
+ let node = reference;
691
+ while (ts.isParenthesizedExpression(node.parent))
692
+ node = node.parent;
693
+ const parent = node.parent;
694
+ if (ts.isPropertyAccessExpression(parent))
695
+ return parent.expression === node;
696
+ if (ts.isCallExpression(parent) || ts.isNewExpression(parent))
697
+ return parent.expression === node;
698
+ return (ts.isBinaryExpression(parent) &&
699
+ (parent.operatorToken.kind === ts.SyntaxKind.EqualsEqualsEqualsToken ||
700
+ parent.operatorToken.kind === ts.SyntaxKind.ExclamationEqualsEqualsToken ||
701
+ parent.operatorToken.kind === ts.SyntaxKind.EqualsEqualsToken ||
702
+ parent.operatorToken.kind === ts.SyntaxKind.ExclamationEqualsToken ||
703
+ parent.operatorToken.kind === ts.SyntaxKind.InstanceOfKeyword));
704
+ };
705
+ /** Whether an object-literal descriptor MAP (`defineProperties`'s second
706
+ * argument, or a `__defineGetter__`-style name argument) can be ruled out
707
+ * from naming `key` -- conservatively `true` (may name) for anything that is
708
+ * not a spread-free literal with every property name spelled out. */
709
+ const literalMayNameKey = (expression, key) => {
710
+ if (!expression)
711
+ return true;
712
+ if (ts.isParenthesizedExpression(expression))
713
+ return literalMayNameKey(expression.expression, key);
714
+ if (!ts.isObjectLiteralExpression(expression))
715
+ return true;
716
+ return expression.properties.some((property) => {
717
+ if (ts.isSpreadAssignment(property))
718
+ return true;
719
+ const propertyName = property.name;
720
+ if (!propertyName)
721
+ return true;
722
+ if (ts.isComputedPropertyName(propertyName))
723
+ return true;
724
+ if (ts.isIdentifier(propertyName) || ts.isStringLiteralLike(propertyName) || ts.isNumericLiteral(propertyName))
725
+ return propertyName.text === key;
726
+ return true;
727
+ });
728
+ };
729
+ /** Whether a single NAME argument (`defineProperty`'s key, `__defineGetter__`'s
730
+ * name) can be ruled out from naming `key` -- conservatively `true` for
731
+ * anything but a matching string/numeric literal. */
732
+ const namedArgumentMayNameKey = (argument, key) => {
733
+ if (!argument)
734
+ return true;
735
+ if (ts.isParenthesizedExpression(argument))
736
+ return namedArgumentMayNameKey(argument.expression, key);
737
+ if (ts.isSpreadElement(argument))
738
+ return true;
739
+ if (ts.isStringLiteralLike(argument) || ts.isNumericLiteral(argument))
740
+ return argument.text === key;
741
+ return true;
742
+ };
743
+ const reflectiveDefinitions = new WeakMap();
744
+ /**
745
+ * Whether any reflective definition anywhere in the program -- `Object.defineProperty`/
746
+ * `defineProperties`, `Reflect.defineProperty`, `x.__defineGetter__`/`__defineSetter__`,
747
+ * a prototype swap, or an unaccounted-for alias of one of the `Object`/`Reflect`
748
+ * mutators -- could install a GETTER under `key` on some object.
749
+ *
750
+ * `sourceClassKeyReadPlanOf` classifies a key from the checker's own STATIC
751
+ * declared members; it has no way to see an accessor a reflective call
752
+ * installs on one instance at runtime, on a class the checker still types as
753
+ * plain data. A member-read proof built on that plan must refuse whenever
754
+ * this holds, however data-only the plan itself says the family is.
755
+ *
756
+ * Deliberately conservative and receiver-blind: it does not try to prove the
757
+ * reflective call's TARGET cannot be one of this proof's family instances --
758
+ * that precision is `class-family-member-read.ts`'s own (unexported)
759
+ * `reflectionMayCreate`, not reused here because importing it would cycle
760
+ * back through `callable-reach.ts`, which `class-family-member-read.ts`
761
+ * itself imports (`closedCallableAuthorityOf`). Over-refusing is always
762
+ * sound: this can only ever make a read refuse, never accept one it should
763
+ * not have. `Object.assign`/`Reflect.set` are deliberately excluded -- both
764
+ * write through [[Set]], which invokes an EXISTING accessor or creates a
765
+ * plain data property, but installs no new one.
766
+ */
767
+ export const reflectiveDefinitionMayInstallGetterOf = (checker, flow, key) => {
768
+ let byKey = reflectiveDefinitions.get(flow);
769
+ if (!byKey)
770
+ reflectiveDefinitions.set(flow, (byKey = new Map()));
771
+ const held = byKey.get(key);
772
+ if (held !== undefined)
773
+ return held;
774
+ const answer = computeReflectiveDefinitionMayInstallGetter(checker, flow, key);
775
+ byKey.set(key, answer);
776
+ return answer;
777
+ };
778
+ const computeReflectiveDefinitionMayInstallGetter = (checker, flow, key) => {
779
+ const directCallees = new Set();
780
+ for (const { call } of flow.calls) {
781
+ if (!ts.isCallExpression(call))
782
+ continue;
783
+ const callee = call.expression;
784
+ if (!ts.isPropertyAccessExpression(callee))
785
+ continue;
786
+ // `x.__defineGetter__( 'key', fn )` / `x.__defineSetter__( ... )`: a
787
+ // direct per-instance call, on any receiver -- conservatively not
788
+ // narrowed to whether `x` could be a family instance, same as the rest
789
+ // of this scan.
790
+ if (callee.name.text === '__defineGetter__' || callee.name.text === '__defineSetter__') {
791
+ if (namedArgumentMayNameKey(call.arguments[0], key))
792
+ return true;
793
+ continue;
794
+ }
795
+ if (!ts.isIdentifier(callee.expression))
796
+ continue;
797
+ const method = callee.name.text;
798
+ if (!REFLECTIVE_ACCESSOR_INSTALLERS.has(method))
799
+ continue;
800
+ const owner = callee.expression;
801
+ const isObject = isGlobalObjectConstructor(checker, owner, checker.getTypeAtLocation(owner));
802
+ const isReflect = !isObject && isStandardGlobalValue(checker, owner, 'Reflect');
803
+ if (!isObject && !isReflect)
804
+ continue;
805
+ directCallees.add(callee.name);
806
+ if (method === 'setPrototypeOf')
807
+ return true;
808
+ if (method === 'defineProperty') {
809
+ if (namedArgumentMayNameKey(call.arguments[1], key))
810
+ return true;
811
+ }
812
+ else if (literalMayNameKey(call.arguments[1], key))
813
+ return true;
814
+ }
815
+ // An unaccounted mention of `Object`/`Reflect` -- passed along, destructured,
816
+ // read for a member other than as a recorded direct callee -- hands its
817
+ // mutators out unnamed; nothing here can then rule them out.
818
+ for (const global of ['Object', 'Reflect']) {
819
+ let value = checker.resolveName(global, undefined, ts.SymbolFlags.Value, false);
820
+ if (value && (value.flags & ts.SymbolFlags.Alias) !== 0)
821
+ value = checker.getAliasedSymbol(value);
822
+ if (!value)
823
+ continue;
824
+ for (const reference of flow.memberReferencesToSymbol(value))
825
+ if (!globalValueUseIsInert(reference))
826
+ return true;
827
+ const valueType = checker.getTypeOfSymbol(value);
828
+ for (const method of REFLECTIVE_ACCESSOR_INSTALLERS) {
829
+ const member = checker.getPropertyOfType(valueType, method);
830
+ if (!member)
831
+ continue;
832
+ for (const reference of flow.memberReferencesToSymbol(member))
833
+ if (!directCallees.has(reference))
834
+ return true;
835
+ }
836
+ }
837
+ return false;
838
+ };