@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,252 @@
1
+ import ts from 'typescript';
2
+ import { outermostErasureOf, unwrapErasedExpression } from '../producers/erasure.js';
3
+ import { deferredIntrinsicProtocolLedgerOf } from '../deferred-intrinsic-protocols.js';
4
+ import { isModuleExportedDeclaration, isTypePositionReference, resolveFlowSymbolAlias } from './targets.js';
5
+ /** One protocol is shared by every instance. A local map alone cannot prove
6
+ * its methods immutable: a sibling may expose that same prototype. */
7
+ const buildNativeCollectionProtocolPlan = (checker, flow, publication, family, constructions, arrayAnchor) => {
8
+ const deferred = deferredIntrinsicProtocolLedgerOf(flow) !== null;
9
+ const original = unwrapErasedExpression;
10
+ const roots = new Set(arrayAnchor ? flow.arrayLiterals : []);
11
+ const exported = (declaration) => isModuleExportedDeclaration(checker, declaration, checker.getSymbolAtLocation(declaration.name) ?? null);
12
+ // Exposing the original constructor also exposes its prototype. A property
13
+ // assignment through it or an opaque consumer invalidates native get/set.
14
+ const constructorSymbols = new Set([...constructions].map((construction) => resolveFlowSymbolAlias(checker, checker.getSymbolAtLocation(original(construction.expression)))));
15
+ if (arrayAnchor)
16
+ constructorSymbols.add(resolveFlowSymbolAlias(checker, checker.resolveName('Array', arrayAnchor, ts.SymbolFlags.Value, false)));
17
+ for (const constructor of constructorSymbols) {
18
+ if (!constructor?.valueDeclaration?.getSourceFile().isDeclarationFile)
19
+ return null;
20
+ for (const reference of flow.referencesToSymbol(constructor)) {
21
+ const positioned = outermostErasureOf(reference);
22
+ const parent = positioned.parent;
23
+ if (isTypePositionReference(reference))
24
+ continue;
25
+ if ((ts.isNewExpression(parent) || (arrayAnchor && ts.isCallExpression(parent))) && parent.expression === positioned) {
26
+ roots.add(parent);
27
+ continue;
28
+ }
29
+ if (arrayAnchor && ts.isPropertyAccessExpression(parent) && parent.expression === positioned) {
30
+ const member = checker.getSymbolAtLocation(parent.name);
31
+ const declared = checker.getPropertyOfType(checker.getTypeOfSymbolAtLocation(constructor, arrayAnchor), parent.name.text);
32
+ const called = outermostErasureOf(parent).parent;
33
+ if (member &&
34
+ declared &&
35
+ member.declarations?.some((declaration) => declared.declarations?.includes(declaration)) &&
36
+ ts.isCallExpression(called) &&
37
+ outermostErasureOf(parent) === called.expression &&
38
+ ['isArray', 'from', 'of'].includes(parent.name.text)) {
39
+ if (parent.name.text !== 'isArray')
40
+ roots.add(called);
41
+ continue;
42
+ }
43
+ }
44
+ if (!deferred)
45
+ return null;
46
+ }
47
+ }
48
+ if (arrayAnchor) {
49
+ for (const site of flow.calls) {
50
+ const type = checker.getTypeAtLocation(site.call);
51
+ if (checker.isArrayType(type) || checker.isTupleType(type))
52
+ roots.add(site.call);
53
+ }
54
+ }
55
+ const global = checker.resolveName('globalThis', publication, ts.SymbolFlags.Value | ts.SymbolFlags.Namespace, false);
56
+ const globalSeen = new Set();
57
+ const globalUse = (reference) => {
58
+ if (globalSeen.has(reference))
59
+ return true;
60
+ globalSeen.add(reference);
61
+ const parent = reference.parent;
62
+ if (ts.isParenthesizedExpression(parent) || ts.isAsExpression(parent) || ts.isTypeAssertionExpression(parent))
63
+ return globalUse(parent);
64
+ if (ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name)) {
65
+ if (exported(parent))
66
+ return false;
67
+ if (parent.name === reference)
68
+ return true;
69
+ return parent.initializer === reference && flow.referencesToDeclaration(parent).every(globalUse);
70
+ }
71
+ if (ts.isPropertyAccessExpression(parent) && parent.expression === reference) {
72
+ if (parent.name.text === family || parent.name.text === 'globalThis')
73
+ return false;
74
+ const type = checker.getTypeAtLocation(parent);
75
+ const primitive = (item) => item.isUnion()
76
+ ? item.types.every(primitive)
77
+ : (item.flags &
78
+ (ts.TypeFlags.StringLike |
79
+ ts.TypeFlags.NumberLike |
80
+ ts.TypeFlags.BooleanLike |
81
+ ts.TypeFlags.Null |
82
+ ts.TypeFlags.Undefined)) !==
83
+ 0;
84
+ return primitive(type);
85
+ }
86
+ return ts.isTypeOfExpression(parent);
87
+ };
88
+ if (!deferred && global && !flow.referencesToSymbol(global).every(globalUse))
89
+ return null;
90
+ const anchor = arrayAnchor ?? constructions.values().next().value;
91
+ if (!anchor)
92
+ return null;
93
+ const nativeType = checker.getTypeAtLocation(anchor);
94
+ const members = new Set(checker.getPropertiesOfType(nativeType).flatMap((symbol) => symbol.declarations ?? []));
95
+ const terminalUse = (reference) => {
96
+ const positioned = outermostErasureOf(reference);
97
+ const parent = positioned.parent;
98
+ if (family === 'Array') {
99
+ if ((ts.isForOfStatement(parent) && parent.expression === positioned) ||
100
+ (ts.isSpreadElement(parent) && parent.expression === positioned))
101
+ return true;
102
+ if (ts.isElementAccessExpression(parent) && parent.expression === positioned) {
103
+ const key = checker.getTypeAtLocation(parent.argumentExpression);
104
+ if ((key.flags & ts.TypeFlags.NumberLike) === 0)
105
+ return false;
106
+ const use = outermostErasureOf(parent).parent;
107
+ if (ts.isDeleteExpression(use) || (ts.isBinaryExpression(use) && use.left === outermostErasureOf(parent)))
108
+ return true;
109
+ const value = checker.getTypeAtLocation(parent);
110
+ // Object-valued elements may contain this array itself; the shared
111
+ // value graph needs to follow those aliases before admitting a read.
112
+ return ((value.flags &
113
+ (ts.TypeFlags.StringLike |
114
+ ts.TypeFlags.NumberLike |
115
+ ts.TypeFlags.BooleanLike |
116
+ ts.TypeFlags.BigIntLike |
117
+ ts.TypeFlags.ESSymbolLike |
118
+ ts.TypeFlags.Null |
119
+ ts.TypeFlags.Undefined)) !==
120
+ 0);
121
+ }
122
+ }
123
+ if (family === 'Map' &&
124
+ ((ts.isForOfStatement(parent) && parent.expression === positioned) ||
125
+ (ts.isSpreadElement(parent) && parent.expression === positioned)))
126
+ return true;
127
+ if (!ts.isPropertyAccessExpression(parent) || parent.expression !== positioned)
128
+ return null;
129
+ const symbol = checker.getSymbolAtLocation(parent.name);
130
+ if (!symbol?.declarations?.length || !symbol.declarations.every((declaration) => members.has(declaration)))
131
+ return false;
132
+ const key = parent.name.text;
133
+ if (key === 'size' || (family === 'Array' && key === 'length')) {
134
+ const positionedAccess = outermostErasureOf(parent);
135
+ const use = positionedAccess.parent;
136
+ return ((family === 'Map' || family === 'Array') &&
137
+ !ts.isDeleteExpression(use) &&
138
+ !ts.isPrefixUnaryExpression(use) &&
139
+ !ts.isPostfixUnaryExpression(use) &&
140
+ !(ts.isBinaryExpression(use) &&
141
+ use.left === positionedAccess &&
142
+ use.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
143
+ use.operatorToken.kind <= ts.SyntaxKind.LastAssignment));
144
+ }
145
+ const callPosition = outermostErasureOf(parent);
146
+ const call = callPosition.parent;
147
+ if (!ts.isCallExpression(call) || call.expression !== callPosition || call.arguments.some(ts.isSpreadElement))
148
+ return false;
149
+ if (family === 'Array') {
150
+ if ([
151
+ 'slice',
152
+ 'concat',
153
+ 'splice',
154
+ 'push',
155
+ 'pop',
156
+ 'shift',
157
+ 'unshift',
158
+ 'indexOf',
159
+ 'lastIndexOf',
160
+ 'includes',
161
+ 'join',
162
+ 'toString',
163
+ 'at',
164
+ 'keys',
165
+ 'values',
166
+ 'entries'
167
+ ].includes(key))
168
+ return true;
169
+ if (['reverse', 'sort', 'fill', 'copyWithin'].includes(key))
170
+ return ts.isExpressionStatement(call.parent);
171
+ // Callback-bearing methods pass the receiver as an ordinary callback
172
+ // argument. Without its complete callback frame this is an exposure.
173
+ return false;
174
+ }
175
+ // `set` returns its receiver; the shared engine must follow that result.
176
+ if (key === 'set')
177
+ return ts.isExpressionStatement(call.parent) ? true : null;
178
+ if (key === 'get' || key === 'has' || key === 'delete')
179
+ return true;
180
+ if (family === 'Map' && (key === 'clear' || key === 'keys' || key === 'values' || key === 'entries'))
181
+ return true;
182
+ // forEach's third argument, method extraction and reflection can hand out
183
+ // the map itself. They need explicit continuations, never an inert answer.
184
+ return false;
185
+ };
186
+ return { intrinsic: family, location: publication, deferred, prototypeKeys: prototypeKeysOf(family), roots: [...roots], terminalUse };
187
+ };
188
+ const arrayMethods = [
189
+ 'slice',
190
+ 'concat',
191
+ 'splice',
192
+ 'push',
193
+ 'pop',
194
+ 'shift',
195
+ 'unshift',
196
+ 'indexOf',
197
+ 'lastIndexOf',
198
+ 'includes',
199
+ 'join',
200
+ 'toString',
201
+ 'at',
202
+ 'keys',
203
+ 'values',
204
+ 'entries',
205
+ 'reverse',
206
+ 'sort',
207
+ 'fill',
208
+ 'copyWithin'
209
+ ];
210
+ const mapMethods = ['get', 'set', 'has', 'delete', 'clear', 'keys', 'values', 'entries', 'size'];
211
+ /**
212
+ * The prototype keys a plan's admitted uses read. `next` is the iterator
213
+ * prototype's method (a write to it can only come through a receiver the
214
+ * census cannot name, which it records against every surface), `@@`-names
215
+ * are symbol keys, and `constructor` is read by species creation
216
+ * (`slice`/`concat`/`splice`).
217
+ */
218
+ const prototypeKeysOf = (family) => family === 'Array'
219
+ ? { names: [...arrayMethods, 'constructor', 'next', '@@iterator', '@@species', '@@isConcatSpreadable'], arrayIndices: true }
220
+ : { names: [...mapMethods, 'next', '@@iterator'] };
221
+ const plans = new WeakMap();
222
+ export const nativeCollectionProtocolPlanOf = (checker, flow, publication, family, constructions) => {
223
+ const anchor = constructions.values().next().value;
224
+ if (!anchor)
225
+ return null;
226
+ const constructor = resolveFlowSymbolAlias(checker, checker.getSymbolAtLocation(unwrapErasedExpression(anchor.expression)));
227
+ if (!constructor)
228
+ return null;
229
+ let cache = plans.get(flow);
230
+ if (!cache)
231
+ plans.set(flow, (cache = new Map()));
232
+ if (cache.has(constructor))
233
+ return cache.get(constructor);
234
+ const plan = buildNativeCollectionProtocolPlan(checker, flow, publication, family, constructions);
235
+ cache.set(constructor, plan);
236
+ return plan;
237
+ };
238
+ const arrayPlans = new WeakMap();
239
+ export const nativeArrayProtocolPlanOf = (checker, flow, array) => {
240
+ // The plan is one per program -- every array shares the intrinsic
241
+ // protocol -- but whether THIS expression is an array is a question about
242
+ // it, and answering from the cache first let any expression through once
243
+ // one array had been asked about.
244
+ const type = checker.getTypeAtLocation(array);
245
+ if (!checker.isArrayType(type) && !checker.isTupleType(type))
246
+ return null;
247
+ if (arrayPlans.has(flow))
248
+ return arrayPlans.get(flow);
249
+ const plan = buildNativeCollectionProtocolPlan(checker, flow, array, 'Array', new Set(), array);
250
+ arrayPlans.set(flow, plan);
251
+ return plan;
252
+ };
@@ -0,0 +1,3 @@
1
+ import ts from 'typescript';
2
+ export declare const nodePathToken: (node: ts.Node) => string;
3
+ export declare const nodeSetToken: (nodes: readonly ts.Node[]) => string;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A short, stable id for a node -- the spelling of "which syntax is this" that
3
+ * content-keyed proof identities are built from.
4
+ *
5
+ * It is interned rather than spelled out for two measured reasons, both from
6
+ * live three.js profiles. Spelling it as `<file>#<pos>` called
7
+ * `getSourceFile()`, which walks parent pointers up to the file, on EVERY ask;
8
+ * that walk (`getSourceFileOfNode`) reached 17.6% of self time. And the
9
+ * resulting key carried a full absolute path per root, so every memo lookup
10
+ * hashed a string hundreds of characters long -- `sharedAnswerOf` itself then
11
+ * reached 17.6% of self time, almost all of it in key construction and Map
12
+ * hashing rather than in the answers.
13
+ *
14
+ * A counter is enough: the memo keys only need the id to be unique per node
15
+ * and stable for the life of the compile, which the WeakMap guarantees. The
16
+ * ids are never parsed, printed to a user, or compared for order -- callers
17
+ * sort them only to make a multi-root key canonical.
18
+ */
19
+ const nodePathTokens = new WeakMap();
20
+ let nextNodePathToken = 0;
21
+ export const nodePathToken = (node) => {
22
+ let token = nodePathTokens.get(node);
23
+ if (token === undefined)
24
+ nodePathTokens.set(node, (token = `n${(nextNodePathToken++).toString(36)}`));
25
+ return token;
26
+ };
27
+ /**
28
+ * The canonical token list for a set of nodes, memoized on the array itself.
29
+ *
30
+ * A proof identity spells this on EVERY ask, and 99% of asks are memo HITS --
31
+ * so the map, the sort and the join were pure allocation on the fast path,
32
+ * feeding the garbage collector that a live three.js profile put at 20.3% of
33
+ * self time, the largest single cost once the walk and the long keys were
34
+ * gone. The array object memoizes that work whenever a caller holds onto its
35
+ * array, which the tokens it holds cannot invalidate.
36
+ *
37
+ * The array memo is not enough on its own, because a caller is free to mint a
38
+ * fresh array per ask and several do. A ONE-root set needs no array work in
39
+ * the first place, and that is not a rare shape: every question the three.js app asks
40
+ * millions of times names a single root, so the canonical spelling of the set
41
+ * is just that root's own token. Taking it before the WeakMap skips the
42
+ * lookup, both intermediate arrays and the join on the path that dominates.
43
+ */
44
+ const nodeSetTokens = new WeakMap();
45
+ export const nodeSetToken = (nodes) => {
46
+ const sole = nodes.length === 1 ? nodes[0] : undefined;
47
+ if (sole !== undefined)
48
+ return nodePathToken(sole);
49
+ let token = nodeSetTokens.get(nodes);
50
+ if (token === undefined)
51
+ nodeSetTokens.set(nodes, (token = nodes.map(nodePathToken).sort().join(',')));
52
+ return token;
53
+ };
@@ -0,0 +1,11 @@
1
+ import ts from 'typescript';
2
+ import type { ValueFlowIndex } from './model.js';
3
+ export interface ObjectBindingRead {
4
+ readonly key: string;
5
+ readonly binding: ts.BindingElement;
6
+ }
7
+ /** Named object-binding reads already enumerated by the shared flow index.
8
+ * This states the selected fields, not whether a receiver field is data or
9
+ * whether the resulting binding escapes; consumers retain those proofs.
10
+ */
11
+ export declare const objectBindingReadsOf: (flow: ValueFlowIndex, source: ts.Expression) => readonly ObjectBindingRead[] | null;
@@ -0,0 +1,42 @@
1
+ import ts from 'typescript';
2
+ const reads = new WeakMap();
3
+ /** Named object-binding reads already enumerated by the shared flow index.
4
+ * This states the selected fields, not whether a receiver field is data or
5
+ * whether the resulting binding escapes; consumers retain those proofs.
6
+ */
7
+ export const objectBindingReadsOf = (flow, source) => {
8
+ const parent = source.parent;
9
+ if (!ts.isVariableDeclaration(parent) || parent.initializer !== source || !ts.isObjectBindingPattern(parent.name))
10
+ return null;
11
+ let inventory = reads.get(flow);
12
+ if (!inventory) {
13
+ const collected = new Map();
14
+ for (const write of flow.allWrites) {
15
+ if (write.edge !== 'destructuring' ||
16
+ write.slot !== 'member' ||
17
+ !write.naming ||
18
+ write.member === null ||
19
+ !ts.isBindingElement(write.site))
20
+ continue;
21
+ let entries = collected.get(write.naming);
22
+ if (!entries)
23
+ collected.set(write.naming, (entries = new Map()));
24
+ entries.set(write.site, write.member);
25
+ }
26
+ inventory = collected;
27
+ reads.set(flow, inventory);
28
+ }
29
+ const selected = inventory.get(source);
30
+ const result = [];
31
+ for (const binding of parent.name.elements) {
32
+ if (binding.dotDotDotToken || binding.initializer || !ts.isIdentifier(binding.name))
33
+ return null;
34
+ const key = selected?.get(binding);
35
+ if (key === undefined)
36
+ return null;
37
+ if (!flow.writesToDeclaration(binding).some((write) => write.edge === 'destructuring' && write.slot === 'whole' && write.site === binding))
38
+ return null;
39
+ result.push({ key, binding });
40
+ }
41
+ return result;
42
+ };
@@ -0,0 +1,56 @@
1
+ import ts from 'typescript';
2
+ import type { NativeCollectionProtocolPlan } from './native-collection-protocol.js';
3
+ import type { ClosedCallableAuthority } from './callable-array-origins.js';
4
+ import type { SourceInvocationFact } from './invocation-facts.js';
5
+ import type { IntrinsicProtocolRequirement } from '../deferred-intrinsic-protocols.js';
6
+ /** A provenance answer computed under the deferred-protocol ledger's capture. */
7
+ export interface SharedProvenanceAnswer<T> {
8
+ readonly value: T | null;
9
+ readonly requirements: readonly IntrinsicProtocolRequirement[];
10
+ }
11
+ /** @semanticCategory generic-primitive */
12
+ export interface SourceRecordOriginAuthority {
13
+ /** Complete inbound frame, including defaults and writes; partial callers are not evidence. */
14
+ readonly parameterValuesOf: (parameter: ts.ParameterDeclaration) => readonly ts.Expression[] | null;
15
+ readonly checker: ts.TypeChecker;
16
+ readonly protocolClosed: (plan: NativeCollectionProtocolPlan) => boolean;
17
+ /** Index keys the checker cannot type as numbers; see `arrayStoredValuesOf`. */
18
+ readonly numericKey: (key: ts.Expression) => boolean;
19
+ /** Whole-program proof for record slots the local alias walk cannot follow. */
20
+ readonly recordSlotClosed: (receiver: ts.Expression, key: string, roots: readonly ts.ObjectLiteralExpression[]) => boolean;
21
+ /** The complete values a slot read yields, from the joint value graph, or
22
+ * null where it refuses: `renderer.state` filled by `_this.state = state`
23
+ * in a constructor, which no record-literal plan can see through. */
24
+ readonly slotValuesOf?: (access: ts.PropertyAccessExpression | ts.ElementAccessExpression) => readonly ts.Expression[] | null;
25
+ /** The complete values any expression holds, from the joint value graph, or null where it refuses. */
26
+ readonly graphValuesOf?: (expression: ts.Expression) => readonly ts.Expression[] | null;
27
+ }
28
+ /** @semanticCategory generic-primitive */
29
+ export interface OriginAuthority extends SourceRecordOriginAuthority, ClosedCallableAuthority {
30
+ readonly receiverValuesOf: NonNullable<ClosedCallableAuthority['receiverValuesOf']>;
31
+ readonly closedCallerSitesOf: NonNullable<ClosedCallableAuthority['closedCallerSitesOf']>;
32
+ readonly arrayElementTargetsOf: NonNullable<ClosedCallableAuthority['arrayElementTargetsOf']>;
33
+ readonly explicitInvocationIsIntact: NonNullable<ClosedCallableAuthority['explicitInvocationIsIntact']>;
34
+ readonly invocationFactOf: (call: ts.CallExpression) => SourceInvocationFact | null;
35
+ readonly bindingValuesOf: (declaration: ts.VariableDeclaration) => readonly ts.Expression[] | null;
36
+ /** Direct integrity check when available; otherwise obligations enter the deferred ledger. */
37
+ readonly intrinsicIntact?: (intrinsic: 'Object' | 'Array', member: string | undefined, location: ts.Node) => boolean;
38
+ /** Publish a positive memo only after its enclosing coinductive proof settles. */
39
+ readonly whenSettled: (publish: () => void) => void;
40
+ /**
41
+ * Compute a provenance answer once for every proof that holds the same
42
+ * coinductive parks. A record plan or an array inventory depends on the
43
+ * authority only through its parks (the members, families, record and
44
+ * value proofs assumed open up the stack) and its two key functions, not on
45
+ * which proof happened to ask -- yet the caller-identity caches above are
46
+ * keyed on the authority OBJECT, which every proof mints afresh, so the three.js app
47
+ * rebuilt the same origin solvers 115 million times. The authority records
48
+ * which parks the computation leaned on and replays the answer wherever
49
+ * those same parks are in force; `shareable` withholds an answer -- refusal
50
+ * or not -- that the caller knows was computed from an incomplete view (a
51
+ * re-entered inventory), which is the one thing the trail cannot see.
52
+ */
53
+ readonly sharedAnswerOf?: <T>(identity: string, compute: () => T | null, shareable?: (value: T | null) => boolean) => SharedProvenanceAnswer<T>;
54
+ }
55
+ /** Structural cache identity is the complete caller authority object itself. */
56
+ export declare const originAuthorityIdentity: (authority: OriginAuthority) => object;
@@ -0,0 +1,2 @@
1
+ /** Structural cache identity is the complete caller authority object itself. */
2
+ export const originAuthorityIdentity = (authority) => authority;
@@ -0,0 +1,35 @@
1
+ import ts from 'typescript';
2
+ import { type ReceiverReference, type SourceClass, type ValueFlowIndex } from './model.js';
3
+ import { type SourceConstructionFact } from './member-call-forwarding.js';
4
+ export interface OwnedClassConstruction extends SourceConstructionFact {
5
+ /** The authenticated constructor alternatives that belong to this inventory's exact receiver family. */
6
+ readonly familyProjection: readonly SourceClass[];
7
+ }
8
+ export interface OwnedClassReceiverInventory {
9
+ readonly classes: ReadonlySet<SourceClass>;
10
+ readonly initializers: readonly {
11
+ readonly owner: SourceClass;
12
+ /**
13
+ * The declaration whose body or initializer runs with the receiver.
14
+ *
15
+ * A constructor function IS its own constructor -- there is no separate
16
+ * `ConstructorDeclaration` to name, and its field initializers are the
17
+ * `this.<key> = ...` statements in that same body -- so the function
18
+ * declaration stands for both, once.
19
+ */
20
+ readonly member: ts.ConstructorDeclaration | ts.PropertyDeclaration | ts.FunctionDeclaration | ts.FunctionExpression;
21
+ readonly references: readonly ReceiverReference[];
22
+ }[];
23
+ /** Source construction alternatives are retained with their exact-family projection. */
24
+ readonly constructionFacts: readonly OwnedClassConstruction[];
25
+ }
26
+ /**
27
+ * Every source class in the program whose ancestry reaches one of `roots`,
28
+ * the roots included, each with its declared type; null when a root is not a
29
+ * class the checker types. This is the whole "family" the receiver inventory
30
+ * below walks, and the family `new this.constructor()` allocates from
31
+ * (`thisConstructorFamilyOf`): heritage alone, read from the checker, so it
32
+ * can be asked while that inventory is itself being built.
33
+ */
34
+ export declare const sourceClassFamilyOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, roots: ReadonlySet<SourceClass>) => ReadonlyMap<SourceClass, ts.InterfaceType> | null;
35
+ export declare const ownedClassReceiverInventoryOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, roots: ReadonlySet<SourceClass>) => OwnedClassReceiverInventory | null;
@@ -0,0 +1,191 @@
1
+ import ts from 'typescript';
2
+ import { heritageClassOrInterfaceOf, isClassSpelledSourceClass, isConstructorFunction } from './model.js';
3
+ import { classConstructorKeepsInstanceOf, exactSourceConstructionOf, sourceConstructorSelectionsOf } from './member-call-forwarding.js';
4
+ const declaredTypeOf = (checker, declaration) => {
5
+ const symbol = declaration.name ? checker.getSymbolAtLocation(declaration.name) : checker.getTypeAtLocation(declaration).getSymbol();
6
+ const type = symbol && checker.getDeclaredTypeOfSymbol(symbol);
7
+ return type?.isClassOrInterface() ? type : null;
8
+ };
9
+ const classDeclarationOf = (type) => {
10
+ const declaration = type.getSymbol()?.valueDeclaration;
11
+ return declaration && (ts.isClassDeclaration(declaration) || ts.isClassExpression(declaration) || isConstructorFunction(declaration))
12
+ ? declaration
13
+ : null;
14
+ };
15
+ const ancestryOf = (checker, type, seen = new Set()) => {
16
+ if (seen.has(type))
17
+ return [];
18
+ seen.add(type);
19
+ const own = classDeclarationOf(type);
20
+ return [
21
+ ...(own ? [own] : []),
22
+ ...checker.getBaseTypes(type).flatMap((base) => {
23
+ const declared = heritageClassOrInterfaceOf(base);
24
+ return declared === null ? [] : ancestryOf(checker, declared, seen);
25
+ })
26
+ ];
27
+ };
28
+ /**
29
+ * Every source class in the program whose ancestry reaches one of `roots`,
30
+ * the roots included, each with its declared type; null when a root is not a
31
+ * class the checker types. This is the whole "family" the receiver inventory
32
+ * below walks, and the family `new this.constructor()` allocates from
33
+ * (`thisConstructorFamilyOf`): heritage alone, read from the checker, so it
34
+ * can be asked while that inventory is itself being built.
35
+ */
36
+ export const sourceClassFamilyOf = (checker, flow, roots) => {
37
+ const family = new Map();
38
+ for (const declaration of flow.classDeclarations) {
39
+ const type = declaredTypeOf(checker, declaration);
40
+ if (type && ancestryOf(checker, type).some((ancestor) => roots.has(ancestor)))
41
+ family.set(declaration, type);
42
+ }
43
+ return [...roots].some((root) => !family.has(root)) ? null : family;
44
+ };
45
+ /** Constructor/field receiver uses exist even when no code names a method on
46
+ * the constructed object. Enumerate them and every construction that can
47
+ * select a class in the source family before a caller tries to prove that a
48
+ * sibling field cannot publish its owner. A mixed source choice retains all
49
+ * alternatives beside the family projection; this is an inventory, not an
50
+ * escape proof, so callers must still explain every receiver mention and
51
+ * construction result.
52
+ */
53
+ const collectOwnedClassReceiverInventory = (checker, flow, roots) => {
54
+ if (roots.size === 0)
55
+ return null;
56
+ const watched = process.env.GEA_OWNED_CLASS_DEBUG;
57
+ const named = (declaration) => declaration.name?.text ?? '(anonymous)';
58
+ const watching = watched !== undefined && [...roots].some((root) => named(root) === watched);
59
+ const refuse = (reason, detail) => {
60
+ if (watching)
61
+ console.error(`[OWNED-CLASS] ${[...roots].map(named).join(',')} ${reason}${detail ? ` ${detail}` : ''}`);
62
+ return null;
63
+ };
64
+ const declarationOf = classDeclarationOf;
65
+ const ancestry = (type) => ancestryOf(checker, type);
66
+ const family = sourceClassFamilyOf(checker, flow, roots);
67
+ if (!family)
68
+ return refuse('root-outside-family');
69
+ const owners = new Set();
70
+ for (const type of family.values()) {
71
+ // In particular this rejects a subclass handed to unknown code even if
72
+ // the program never spells `new Subclass`: that code can construct one.
73
+ if (!classConstructorKeepsInstanceOf(checker, flow, type))
74
+ return refuse('constructor-does-not-keep-instance', named(declarationOf(type)));
75
+ for (const owner of ancestry(type))
76
+ owners.add(owner);
77
+ }
78
+ const constructionFacts = [];
79
+ for (const { call } of flow.calls) {
80
+ if (!ts.isNewExpression(call))
81
+ continue;
82
+ const selections = sourceConstructorSelectionsOf(checker, flow, call.expression);
83
+ if (selections) {
84
+ const familyProjection = selections.filter((owner) => family.has(owner));
85
+ if (familyProjection.length === 0)
86
+ continue;
87
+ const construction = exactSourceConstructionOf(checker, flow, call);
88
+ if (!construction ||
89
+ construction.alternatives.length !== selections.length ||
90
+ selections.some((owner) => !construction.alternatives.includes(owner)))
91
+ return refuse('unverified-construction', call.getText().slice(0, 60));
92
+ // The helper admits only complete source selections whose constructors
93
+ // preserve their instance identity. A mixed conditional keeps sibling
94
+ // alternatives attached; classes and familyProjection remain scoped to
95
+ // this exact nominal family.
96
+ constructionFacts.push({ ...construction, familyProjection });
97
+ }
98
+ else {
99
+ const type = checker.getTypeAtLocation(call);
100
+ const alternatives = type.isUnion() ? type.types : [type];
101
+ if (!alternatives.some((value) => value.isClassOrInterface() && family.has(declarationOf(value))))
102
+ continue;
103
+ // An opaque constructor promising this family cannot be silently
104
+ // omitted from its allocation inventory.
105
+ return refuse('opaque-construction', call.getText().slice(0, 60));
106
+ }
107
+ }
108
+ // Zero constructions is a COMPLETE inventory, not an unknown one. Every
109
+ // possibly family-producing construction is either recorded with a nonempty
110
+ // exact projection or an opaque family promise has refused above, and
111
+ // `classConstructorKeepsInstanceOf` accounts for every mention of every
112
+ // class binding in the family. Reaching here empty means the program creates
113
+ // no instance of this family at all, so there is no receiver for a caller to
114
+ // explain. Refusing it instead made three's `SpotLight` (never constructed
115
+ // by the renderer under measurement) the terminal of 32 escapes, among them
116
+ // `WebGLState`'s whole colour/depth/stencil buffer family.
117
+ const initializers = [];
118
+ for (const owner of owners) {
119
+ if (!isClassSpelledSourceClass(owner)) {
120
+ initializers.push({ owner, member: owner, references: flow.receiverReferencesToDeclaration(owner) });
121
+ continue;
122
+ }
123
+ for (const member of owner.members) {
124
+ if (!ts.isConstructorDeclaration(member) && !ts.isPropertyDeclaration(member))
125
+ continue;
126
+ if ((ts.getCombinedModifierFlags(member) & ts.ModifierFlags.Static) !== 0)
127
+ continue;
128
+ initializers.push({ owner, member, references: flow.receiverReferencesToDeclaration(member) });
129
+ }
130
+ }
131
+ return { classes: new Set(family.keys()), initializers, constructionFacts };
132
+ };
133
+ const inventories = new WeakMap();
134
+ /**
135
+ * A multi-class family (a union receiver, or several exact allocation
136
+ * origins) asks the identical question every time the SAME set of roots is
137
+ * handed back -- measured on the three.js app at 23.3 s of self time in
138
+ * `collectOwnedClassReceiverInventory` alone, because the singleton fast path
139
+ * below only ever covered `roots.size === 1` and every larger family fell
140
+ * through to the uncached walk on every call, including every one of a
141
+ * class's several members asking about the same family in the same round.
142
+ *
143
+ * Keyed by a canonical, ORDER-INDEPENDENT spelling of the root set rather than
144
+ * the `Set` object identity, because `familyRootsOf` mints a fresh `Set` per
145
+ * call even when its contents are the same roots as the last call. Ordinals
146
+ * are minted once per `SourceClass` node (stable for the process, harmless to
147
+ * share across flows) purely so two sets with the same members always sort to
148
+ * the same key regardless of which order they were built in.
149
+ */
150
+ const classOrdinals = new WeakMap();
151
+ let nextClassOrdinal = 0;
152
+ const ordinalOf = (node) => {
153
+ let id = classOrdinals.get(node);
154
+ if (id === undefined) {
155
+ id = nextClassOrdinal++;
156
+ classOrdinals.set(node, id);
157
+ }
158
+ return id;
159
+ };
160
+ const rootsKey = (roots) => [...roots]
161
+ .map(ordinalOf)
162
+ .sort((a, b) => a - b)
163
+ .join(',');
164
+ const multiRootInventories = new WeakMap();
165
+ export const ownedClassReceiverInventoryOf = (checker, flow, roots) => {
166
+ // Every method of one class asks for the same source inventory. Cache the
167
+ // inventory, never the caller's escape decision; a rebuilt flow index starts
168
+ // a new inference round and cannot reuse facts from the previous one.
169
+ if (roots.size === 0)
170
+ return collectOwnedClassReceiverInventory(checker, flow, roots);
171
+ if (roots.size === 1) {
172
+ const root = roots.values().next().value;
173
+ let entries = inventories.get(flow);
174
+ if (!entries)
175
+ inventories.set(flow, (entries = new Map()));
176
+ if (entries.has(root))
177
+ return entries.get(root);
178
+ const inventory = collectOwnedClassReceiverInventory(checker, flow, roots);
179
+ entries.set(root, inventory);
180
+ return inventory;
181
+ }
182
+ let held = multiRootInventories.get(flow);
183
+ if (!held)
184
+ multiRootInventories.set(flow, (held = new Map()));
185
+ const key = rootsKey(roots);
186
+ if (held.has(key))
187
+ return held.get(key);
188
+ const inventory = collectOwnedClassReceiverInventory(checker, flow, roots);
189
+ held.set(key, inventory);
190
+ return inventory;
191
+ };