@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,626 @@
1
+ import ts from 'typescript';
2
+ import { unwrapErasedExpression } from '../producers/erasure.js';
3
+ import { nodePathToken } from './node-path-token.js';
4
+ import { arrayStoredValuesOf } from './array-element-continuation.js';
5
+ import { collectionStoredValuesOf } from './collection-value-continuation.js';
6
+ import { isVacuousOrigin, seededOriginSolver } from './seeded-origins.js';
7
+ import { isStandardInterfaceType } from '../derived-expression-type.js';
8
+ import { objectLiteralEntryKeyOf, recordAllocationAliasesClosed } from './record-alias-closure.js';
9
+ import { callableCompletionValuesOf, constructionYieldsCompletionOf } from './callable-completions.js';
10
+ import { resolveFlowSymbolAlias } from './targets.js';
11
+ import { originAuthorityIdentity } from './origin-authority.js';
12
+ import { enterHypothesisGuard, exitHypothesisGuard, noteHypothesis } from './proof-hypotheses.js';
13
+ import { deferredIntrinsicProtocolLedgerOf } from '../deferred-intrinsic-protocols.js';
14
+ export { callableCompletionValuesOf };
15
+ // `GEA_INVOCATION_REFUSALS` names why `recordMethodCallTargetsOf` and the
16
+ // write-plan it depends on returned null -- the same env var and message
17
+ // shape as `invocationRefusal` in `callable-reach.ts`, so a single run names
18
+ // both the member-dispatch refusal and the record-authority refusal behind
19
+ // it instead of only the outer one. Read once at load for the same reason
20
+ // `callable-reach.ts` reads its own flags once: this runs per uncached query,
21
+ // potentially millions of times on a whole-program run.
22
+ const recordRefusalDebug = process.env['GEA_INVOCATION_REFUSALS'] !== undefined;
23
+ const describeNode = (node) => {
24
+ const file = node.getSourceFile();
25
+ const { line } = file.getLineAndCharacterOfPosition(node.getStart(file));
26
+ return `${file.fileName.split('/').pop()}:${line + 1} ${node.getText(file).replace(/\s+/g, ' ').slice(0, 80)}`;
27
+ };
28
+ /**
29
+ * `reason` is a THUNK because the guard below only reads it when the env var
30
+ * is set, while JavaScript evaluates a plain argument eagerly: every template
31
+ * literal at a call site was being built and thrown away on every refusal.
32
+ * This path refuses on the large majority of asks and runs millions of times
33
+ * in a whole-program compile, so those were millions of discarded strings --
34
+ * a live three.js profile charged `sourceRecordDataWritePlanOf` 28.2% of self
35
+ * time with garbage collection at 16% right behind it.
36
+ */
37
+ const recordRefusal = (node, reason) => {
38
+ if (recordRefusalDebug)
39
+ console.error(`[INVOCATION-REFUSAL] ${reason()} :: ${describeNode(node)}`);
40
+ return null;
41
+ };
42
+ // `GEA_ORIGINS_DEBUG=<text>|'*'` names which arm of the record write-plan's
43
+ // origin walk refuses -- the same flag and shape `member-call-forwarding.ts`
44
+ // and `callable-reach.ts`'s `parameterValuesOf` already read, extended to a
45
+ // third walk over the same question ("what can this cell hold") so a single
46
+ // run explains a refusal that crosses all three rather than stopping at
47
+ // whichever one happened to be instrumented already.
48
+ const watchedRecordOrigins = process.env['GEA_ORIGINS_DEBUG'];
49
+ const refuseWritePlanOrigin = (node, reason) => {
50
+ if (watchedRecordOrigins === undefined)
51
+ return;
52
+ const text = node.getText().slice(0, 60).replace(/\s+/g, ' ');
53
+ if (watchedRecordOrigins !== '*' && !text.includes(watchedRecordOrigins))
54
+ return;
55
+ const file = node.getSourceFile();
56
+ console.error(`[RECORD-PLAN-ORIGINS] ${reason} ${file.fileName.split('/').pop()}:${file.getLineAndCharacterOfPosition(node.getStart()).line + 1} [${text}]`);
57
+ };
58
+ const NATIVE_MAP_INTERFACES = ['Map', 'WeakMap', 'ReadonlyMap'];
59
+ /** A receiver the checker can type as a native map is not only a record,
60
+ * whatever its origins -- asked of the expression and of what it erases to,
61
+ * so `(lists as any).get` still sees a declared `Map` union behind the cast.
62
+ *
63
+ * Memoized on the receiver because it is a pure checker fact, and because it
64
+ * is the FIRST thing every record method-call question asks -- ahead of any
65
+ * cache the walk has. Unmemoized it re-typed the expression and its erasure,
66
+ * took both apparent types, and ran three standard-interface identity checks
67
+ * per union member, once per ask, for questions the three.js app asks millions of
68
+ * times each. */
69
+ const nativeMapReceivers = new WeakMap();
70
+ const mayBeNativeMap = (checker, receiver) => {
71
+ let byReceiver = nativeMapReceivers.get(checker);
72
+ if (!byReceiver)
73
+ nativeMapReceivers.set(checker, (byReceiver = new WeakMap()));
74
+ const known = byReceiver.get(receiver);
75
+ if (known !== undefined)
76
+ return known;
77
+ const check = (type) => type.isUnion() || type.isIntersection()
78
+ ? type.types.some(check)
79
+ : NATIVE_MAP_INTERFACES.some((name) => isStandardInterfaceType(checker, receiver, name, type));
80
+ const answer = [receiver, unwrapErasedExpression(receiver)].some((expression) => {
81
+ const type = checker.getTypeAtLocation(expression);
82
+ return check(type) || check(checker.getApparentType(type));
83
+ });
84
+ byReceiver.set(receiver, answer);
85
+ return answer;
86
+ };
87
+ /** The stable source callable a record entry holds, or null. */
88
+ const slotCallableOf = (checker, flow, entry) => {
89
+ const value = ts.isPropertyAssignment(entry) ? unwrapErasedExpression(entry.initializer) : null;
90
+ let found;
91
+ if (value && (ts.isFunctionExpression(value) || ts.isArrowFunction(value)))
92
+ found = value;
93
+ else {
94
+ const symbol = ts.isShorthandPropertyAssignment(entry)
95
+ ? checker.getShorthandAssignmentValueSymbol(entry)
96
+ : value && ts.isIdentifier(value)
97
+ ? checker.getSymbolAtLocation(value)
98
+ : undefined;
99
+ found = resolveFlowSymbolAlias(checker, symbol)?.valueDeclaration;
100
+ // The literal copies the binding's value when it runs; a reassigned
101
+ // binding can have held another function by then.
102
+ if (!found || !ts.isFunctionDeclaration(found) || calleeBindingIsWritten(flow, found))
103
+ return null;
104
+ }
105
+ if (!ts.isFunctionDeclaration(found) && !ts.isFunctionExpression(found) && !ts.isArrowFunction(found))
106
+ return null;
107
+ return found.body ? found : null;
108
+ };
109
+ /**
110
+ * Any write the flow index files against the entry's own cell, other than the
111
+ * literal publishing it.
112
+ *
113
+ * Memoized because it is a pure source fact and both of its callers sit on the
114
+ * hottest record path: it asks the checker for the root's type and materializes
115
+ * the union of two write sets into a fresh array on EVERY ask, and a live
116
+ * three.js profile charged it 27.2% of self time with the collector behind it.
117
+ * `entry` is one of `root`'s own properties, so the entry alone names the root;
118
+ * nothing but the key is left to vary.
119
+ */
120
+ const slotRewrites = new WeakMap();
121
+ const slotRewritten = (checker, flow, root, entry, key) => {
122
+ let byEntry = slotRewrites.get(flow);
123
+ if (!byEntry)
124
+ slotRewrites.set(flow, (byEntry = new WeakMap()));
125
+ let byKey = byEntry.get(entry);
126
+ if (!byKey)
127
+ byEntry.set(entry, (byKey = new Map()));
128
+ const known = byKey.get(key);
129
+ if (known !== undefined)
130
+ return known;
131
+ const property = checker.getTypeAtLocation(root).getProperty(key);
132
+ const writes = [...flow.writesToDeclaration(entry), ...(property ? flow.writesToSymbol(property) : [])];
133
+ // Mutating a member of the stored object does not replace this slot.
134
+ const answer = writes.some((write) => write.slot === 'whole' && write.site !== entry);
135
+ byKey.set(key, answer);
136
+ return answer;
137
+ };
138
+ const activeMethodCalls = new Set();
139
+ /**
140
+ * Targets this call has already been PROVEN to enter, while its slot-closure
141
+ * question is still open.
142
+ *
143
+ * Target selection and slot closure are two facts, and only the second is
144
+ * pending during the escape proof: the bodies come from the record's own write
145
+ * plan and the `slotRewritten` check, both settled before `recordSlotClosed` is
146
+ * ever asked. The escape proof reaches this same call again (a receiver read in
147
+ * callee position is now classified by `invocationTargetsOf`), and answering
148
+ * that re-entry with `null` published "no target is provable" for a target set
149
+ * this frame had already decided -- so the proof refused, closure failed, and a
150
+ * call's own resolution depended on itself.
151
+ *
152
+ * Publishing the decided half is not an assumption used to prove itself: the
153
+ * escape proof consumes these bodies to ask whether THEY leak the receiver, and
154
+ * a leak still fails closure and still makes this call refuse. Delete this
155
+ * buffer when the record/receiver-escape domain moves into the shared solver
156
+ * and the pair becomes one strongly-connected component.
157
+ */
158
+ const decidedMethodCallTargets = new Map();
159
+ /** Slot reads whose holder plan is being built; a re-entry (`node = node.next`) refuses. */
160
+ const activeSlotReads = new Set();
161
+ /**
162
+ * The closed callables `record.key( ... )` can enter, or null.
163
+ *
164
+ * Three's `WebGLRenderLists` is a factory returning `{ get: get, dispose:
165
+ * dispose }`, and `renderLists.get( scene, depth )` looks a list up in a
166
+ * `WeakMap` inside that `get`. Read as a native `Map.get`, the call named no
167
+ * storage at all and refused; it is a call of the one function the record's
168
+ * `get` slot was created holding.
169
+ *
170
+ * Non-null only when all of these hold:
171
+ * - the checker is present and cannot type the receiver as a native
172
+ * `Map`/`WeakMap`/`ReadonlyMap` (a receiver that may be a real map is not
173
+ * classified as a record, whatever its origins);
174
+ * - the receiver's own record plan (`sourceRecordDataWritePlanOf` for `key`,
175
+ * under the same authority) is complete, and every allocation carries
176
+ * `key` as exactly one own data entry -- no default-prototype lookup;
177
+ * - each entry holds a source function with a body written in place, or names
178
+ * a function declaration whose binding is never reassigned;
179
+ * - no write the flow index names replaces the entry (`r.get = ...`) --
180
+ * regardless of any caller proof;
181
+ * - every allocation's aliases are closed: `recordAllocationAliasesClosed`,
182
+ * or failing that the authority's `recordSlotClosed`.
183
+ *
184
+ * Parameter-position mapping (rest parameters, `arguments`, spreads at the
185
+ * call) is NOT checked here; a caller walking arguments into the target's
186
+ * parameters owns that.
187
+ *
188
+ * A re-entrant query for the same call is answered with the targets this frame
189
+ * has already decided, and refuses only before that point -- see
190
+ * `decidedMethodCallTargets`. The slot-closure half is still pending for such a
191
+ * query, so a re-entrant answer means "these bodies, if this slot closes", and
192
+ * the enclosing frame still returns null when it does not.
193
+ */
194
+ /**
195
+ * Array reads that REMOVE and return an element the array already held. Both
196
+ * are answered by the array's own stored-value inventory; neither can yield a
197
+ * value the array never stored. `at`/`[i]` are the non-removing spelling and
198
+ * are already handled by the element-access branch.
199
+ */
200
+ const arrayRemovingReadNames = new Set(['pop', 'shift']);
201
+ export const recordMethodCallTargetsOf = (flow, call, authority) => {
202
+ const checker = authority.checker;
203
+ const callee = unwrapErasedExpression(call.expression);
204
+ const key = ts.isPropertyAccessExpression(callee)
205
+ ? callee.name.text
206
+ : ts.isElementAccessExpression(callee)
207
+ ? (() => {
208
+ const argument = unwrapErasedExpression(callee.argumentExpression);
209
+ return ts.isStringLiteralLike(argument) || ts.isNumericLiteral(argument) ? argument.text : null;
210
+ })()
211
+ : null;
212
+ if (key === null || key === '__proto__' || key === 'constructor')
213
+ return recordRefusal(call, () => 'record:no-key');
214
+ if (!ts.isPropertyAccessExpression(callee) && !ts.isElementAccessExpression(callee))
215
+ return recordRefusal(call, () => 'record:callee-not-member');
216
+ const receiver = callee.expression;
217
+ if (mayBeNativeMap(checker, receiver))
218
+ return recordRefusal(call, () => 'record:receiver-may-be-map');
219
+ if (activeMethodCalls.has(call)) {
220
+ // Both halves of this re-entry are hypotheses: the decided targets are a
221
+ // partial answer ("these bodies, IF this slot closes") and the refusal is
222
+ // "unknown while I am answering". An enclosing memo may keep either only
223
+ // while this same call is still open.
224
+ noteHypothesis(call);
225
+ const decided = decidedMethodCallTargets.get(call);
226
+ return decided ?? recordRefusal(call, () => 'record:reentrant-no-decision');
227
+ }
228
+ activeMethodCalls.add(call);
229
+ enterHypothesisGuard(call);
230
+ let answered = null;
231
+ let completed = false;
232
+ try {
233
+ answered = (() => {
234
+ const plan = sourceRecordDataWritePlanOf(flow, receiver, key, authority);
235
+ if (plan === null)
236
+ return recordRefusal(call, () => `record:plan-null key=${key}`);
237
+ if (plan.needsDefaultPrototype)
238
+ return recordRefusal(call, () => `record:plan-needs-default-prototype key=${key}`);
239
+ const targets = new Set();
240
+ for (const root of plan.roots) {
241
+ const entries = root.properties.filter((property) => property.name !== undefined && objectLiteralEntryKeyOf(property.name) === key);
242
+ const entry = entries.length === 1 ? entries[0] : undefined;
243
+ if (!entry || (!ts.isPropertyAssignment(entry) && !ts.isShorthandPropertyAssignment(entry)))
244
+ return recordRefusal(root, () => `record:no-single-entry key=${key}`);
245
+ const target = slotCallableOf(checker, flow, entry);
246
+ if (target === null)
247
+ return recordRefusal(entry, () => `record:slot-callable-null key=${key}`);
248
+ if (slotRewritten(checker, flow, root, entry, key))
249
+ return recordRefusal(entry, () => `record:slot-rewritten key=${key}`);
250
+ targets.add(target);
251
+ }
252
+ const decided = [...targets];
253
+ decidedMethodCallTargets.set(call, decided);
254
+ const closed = plan.roots.every((root) => recordAllocationAliasesClosed(checker, flow, root)) ||
255
+ authority.recordSlotClosed(receiver, key, plan.roots);
256
+ return closed ? decided : recordRefusal(call, () => `record:slot-not-closed key=${key}`);
257
+ })();
258
+ completed = true;
259
+ return answered;
260
+ }
261
+ finally {
262
+ // What every re-entry was handed while this ran: a refusal, unless a
263
+ // decision had already been published. So when this call also ends in a
264
+ // refusal and no decision was ever published, every re-entry was handed
265
+ // exactly the answer the question turned out to have -- the hypothesis was
266
+ // the truth, and the answers that leaned on it lost nothing by leaning
267
+ // (`proof-hypotheses.ts`). That is the `settled` argument, and it is what
268
+ // lets an enclosing memo KEEP a refusal instead of re-deriving it.
269
+ //
270
+ // The three ways it is not claimed are each a case where a re-entry was
271
+ // handed something the question did not turn out to have: a decision
272
+ // published partway means early and late re-entries disagree; a non-null
273
+ // answer means the re-entries' refusal was weaker than the truth; and a
274
+ // throw means there is no truth to compare against yet. `confirmed` stays
275
+ // unconditionally true because a pessimistic guard never makes an answer
276
+ // UNSOUND -- that is a different and weaker claim, deliberately kept apart.
277
+ const published = decidedMethodCallTargets.get(call) !== undefined;
278
+ exitHypothesisGuard(call, true, completed && !published && answered === null);
279
+ activeMethodCalls.delete(call);
280
+ decidedMethodCallTargets.delete(call);
281
+ }
282
+ };
283
+ /** Every value `record.key( ... )` can return: the completions of every
284
+ * callable `recordMethodCallTargetsOf` names, or null when any target's
285
+ * normal completion is unsupported. Target admission remains useful when
286
+ * this separate result query refuses. */
287
+ export const recordMethodCallResultsOf = (flow, call, authority) => {
288
+ const targets = recordMethodCallTargetsOf(flow, call, authority);
289
+ if (targets === null)
290
+ return null;
291
+ const results = [];
292
+ for (const target of targets) {
293
+ const values = callableCompletionValuesOf(flow, target);
294
+ if (values === null)
295
+ return null;
296
+ results.push(...values);
297
+ }
298
+ return results;
299
+ };
300
+ /** The origin-graph key standing for a callable's completions: a function
301
+ * declaration or block body is never itself a value origin. */
302
+ const completionKeyOf = (target) => ts.isFunctionDeclaration(target) ? target : ts.isBlock(target.body) ? target.body : unwrapErasedExpression(target.body);
303
+ /** A callee whose binding is reassigned names a different function at each
304
+ * call, so its result is not evidence of any one allocation. */
305
+ const calleeBindingIsWritten = (flow, declaration) => flow
306
+ .writesToDeclaration(declaration)
307
+ .some((write) => write.slot === 'whole' &&
308
+ (write.edge === 'identifier-assignment' || write.edge === 'compound-assignment' || write.edge === 'logical-assignment'));
309
+ const numericType = (checker, expression) => {
310
+ const check = (type) => (type.isUnion() ? type.types.every(check) : (type.flags & ts.TypeFlags.NumberLike) !== 0);
311
+ return check(checker.getTypeAtLocation(expression));
312
+ };
313
+ const REFUSED = { seed: false, admitted: false, dependencies: [] };
314
+ const VACUOUS = { seed: false, admitted: true, dependencies: [] };
315
+ const SEED = { seed: true, admitted: true, dependencies: [] };
316
+ const through = (dependencies) => ({ seed: false, admitted: true, dependencies });
317
+ /** Source allocation evidence for a record write, not descriptor authority.
318
+ * The caller must close all uses of these roots (including deletion and
319
+ * reflective mutation), and discharge the prototype obligation for absent
320
+ * slots. A structural property signature alone establishes neither fact.
321
+ *
322
+ * Origins are solved by strongly connected components (`seeded-origins.ts`)
323
+ * because record storage is reused. Three's `getNextRenderItem`:
324
+ *
325
+ * let renderItem = renderItems[ renderItemsIndex ];
326
+ * if ( renderItem === undefined ) {
327
+ * renderItem = { id: object.id, object: object, ... };
328
+ * renderItems[ renderItemsIndex ] = renderItem;
329
+ * } else { renderItem.object = object; ... }
330
+ *
331
+ * `renderItem`'s origins are the element read and the literal; the element
332
+ * read's origins are everything `renderItems` ever stored, which is
333
+ * `renderItem` again. That cycle is seeded by the literal, so the roots are
334
+ * exactly `[ literal ]`. A cycle no allocation feeds stays refused, and a
335
+ * `null`/`undefined` origin (`let currentRenderList = null`) adds no root
336
+ * while refusing nothing -- nothing can be written through it.
337
+ *
338
+ * The caller supplies one complete origin authority. Storage reads refuse
339
+ * when its protocol, numeric-key, or frame evidence cannot close them.
340
+ */
341
+ /**
342
+ * `sourceRecordDataWritePlanOf` solves a fresh strongly-connected-component
343
+ * origin graph (`seededOriginSolver`) from zero on EVERY call -- and
344
+ * `callable-reach.ts` alone asks it from nine different call sites inside one
345
+ * member proof, several of them (`fieldDeclarationsOf`, `siblingDeclarationsOf`,
346
+ * `constructionDataMemberOf`, shared invocation targets) about the very same
347
+ * (receiver, key) pair reached through different questions. Measured with
348
+ * `expand` alone at ~2 s self time per profile window, repeated across a
349
+ * whole compile's worth of proofs.
350
+ *
351
+ * Keyed on the caller's `authority` object identity, not its content: every
352
+ * caller constructs one `SourceRecordOriginAuthority` per proof (`callable-
353
+ * reach.ts`'s `recordAuthority`, built once per `closedMemberCallableUses`
354
+ * call) and passes the same object to every one of its own call sites, so
355
+ * sharing a cache bucket per authority object shares exactly the calls that
356
+ * are safe to share -- calls from the SAME proof, which close over the SAME
357
+ * `recordSlotClosed` -- and never a different proof's, since that always gets
358
+ * a new object and therefore a new WeakMap bucket. `flow` is keyed too, purely
359
+ * for extra safety: nothing currently reuses one authority object across two
360
+ * flows, but nothing has to promise it either.
361
+ */
362
+ const writePlansByFlow = new WeakMap();
363
+ export const sourceRecordDataWritePlanOf = (flow, receiver, key, authority) => {
364
+ const authorityIdentity = originAuthorityIdentity(authority);
365
+ let byAuthority = writePlansByFlow.get(flow);
366
+ if (!byAuthority)
367
+ writePlansByFlow.set(flow, (byAuthority = new WeakMap()));
368
+ let byReceiver = byAuthority.get(authorityIdentity);
369
+ if (!byReceiver)
370
+ byAuthority.set(authorityIdentity, (byReceiver = new WeakMap()));
371
+ let byKey = byReceiver.get(receiver);
372
+ if (!byKey)
373
+ byReceiver.set(receiver, (byKey = new Map()));
374
+ const ledger = deferredIntrinsicProtocolLedgerOf(flow);
375
+ if (byKey.has(key)) {
376
+ const cached = byKey.get(key);
377
+ if (cached && cached.requirements.length > 0 && ledger?.include(cached.requirements) !== true)
378
+ return recordRefusal(receiver, () => `record-plan:cached-ledger-include-fail key=${key}`);
379
+ return cached;
380
+ }
381
+ const compute = () => sourceRecordDataWritePlanUncached(flow, receiver, key, authority);
382
+ // Shared across proofs where the authority can (see `sharedAnswerOf`); the
383
+ // per-authority bucket above still answers this proof's repeats.
384
+ const captured = authority.sharedAnswerOf
385
+ ? authority.sharedAnswerOf(`record-plan:${key}:${nodePathToken(receiver)}`, compute)
386
+ : ledger
387
+ ? ledger.capture(compute)
388
+ : { value: compute(), requirements: [] };
389
+ const answer = captured.value ? { ...captured.value, requirements: captured.requirements } : null;
390
+ if (!answer)
391
+ return recordRefusal(receiver, () => `record-plan:compute-null key=${key}`);
392
+ if (answer.requirements.length > 0 && ledger?.include(answer.requirements) !== true)
393
+ return recordRefusal(receiver, () => `record-plan:ledger-include-fail key=${key}`);
394
+ const planCache = byKey;
395
+ authority.whenSettled(() => planCache.set(key, answer));
396
+ return answer;
397
+ };
398
+ const sourceRecordDataWritePlanUncached = (flow, receiver, key, authority) => {
399
+ if (key === '__proto__' || key === 'constructor')
400
+ return null;
401
+ const frames = authority;
402
+ const { checker, protocolClosed } = frames;
403
+ const original = unwrapErasedExpression;
404
+ const roots = new Set();
405
+ let needsDefaultPrototype = false;
406
+ const literal = (value) => {
407
+ let ownData = false;
408
+ let nullPrototype = false;
409
+ for (const property of value.properties) {
410
+ if (ts.isSpreadAssignment(property))
411
+ return REFUSED;
412
+ const name = ts.isComputedPropertyName(property.name) ? original(property.name.expression) : property.name;
413
+ const named = ts.isStringLiteralLike(name) || ts.isNumericLiteral(name) || (!ts.isComputedPropertyName(property.name) && ts.isIdentifier(name))
414
+ ? name.text
415
+ : null;
416
+ if (named === null)
417
+ return REFUSED;
418
+ if (named === '__proto__' && ts.isPropertyAssignment(property) && !ts.isComputedPropertyName(property.name)) {
419
+ if (original(property.initializer).kind !== ts.SyntaxKind.NullKeyword)
420
+ return REFUSED;
421
+ nullPrototype = true;
422
+ }
423
+ if (named !== key)
424
+ continue;
425
+ if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property))
426
+ return REFUSED;
427
+ ownData = true;
428
+ }
429
+ roots.add(value);
430
+ needsDefaultPrototype ||= !ownData && !nullPrototype;
431
+ return SEED;
432
+ };
433
+ // A factory's result IS its allocation. Three writes nearly every one of
434
+ // its records that way -- `new ColorBuffer()`, `WebGLState( gl, extensions
435
+ // )`, `WebGLRenderList()` all return an object literal written in place --
436
+ // and reading only the identifier chain stopped at the call, leaving the
437
+ // record with no source allocation at all.
438
+ //
439
+ // Every completion of the callee must yield an origin: each `return`
440
+ // carries one, and the body's last statement is a `return` so control
441
+ // cannot fall off the end into `undefined` (or, under `new`, into `this`).
442
+ // The literals stay the roots, so the caller closes the factory's own uses
443
+ // of them and -- through the return -- the uses at every call site, which
444
+ // is where a record handed to unknown code is caught.
445
+ const factory = (target) => {
446
+ const results = callableCompletionValuesOf(flow, target);
447
+ return results ? through(results) : refuse(target, 'factory:completion-values-refused');
448
+ };
449
+ /** Logs, under `GEA_ORIGINS_DEBUG`, then returns the shared `REFUSED` node --
450
+ * so every arm below stays a one-line early return while still naming itself. */
451
+ const refuse = (node, reason) => {
452
+ refuseWritePlanOrigin(node, reason);
453
+ return REFUSED;
454
+ };
455
+ const expand = (node) => {
456
+ if (ts.isParameter(node)) {
457
+ const values = frames.parameterValuesOf(node);
458
+ return values !== null && values.length > 0 ? through(values.map(original)) : refuse(node, 'parameter:values-refused');
459
+ }
460
+ if (ts.isVariableDeclaration(node)) {
461
+ const writes = flow.writesToDeclaration(node).filter((write) => write.slot === 'whole');
462
+ const closed = writes.length > 0 &&
463
+ writes.every((write) => (write.edge === 'declaration-initializer' || write.edge === 'identifier-assignment') && write.value !== null);
464
+ return closed ? through(writes.map((write) => original(write.value))) : refuse(node, 'variable:writes-not-closed');
465
+ }
466
+ if (ts.isFunctionDeclaration(node))
467
+ return factory(node);
468
+ // A function expression's block body stands for its completions (`completionKeyOf`).
469
+ if (ts.isBlock(node))
470
+ return ts.isFunctionExpression(node.parent) || ts.isArrowFunction(node.parent)
471
+ ? factory(node.parent)
472
+ : refuse(node, 'block:not-a-factory-body');
473
+ const value = node;
474
+ if (isVacuousOrigin(flow, value))
475
+ return VACUOUS;
476
+ if (ts.isConditionalExpression(value))
477
+ return through([original(value.whenTrue), original(value.whenFalse)]);
478
+ if (ts.isObjectLiteralExpression(value))
479
+ return literal(value);
480
+ // `renderItems[ renderItemsIndex ]`: whatever that array ever stored.
481
+ if (ts.isElementAccessExpression(value)) {
482
+ const index = value.argumentExpression;
483
+ if (!numericType(checker, index) && !frames.numericKey(index))
484
+ return refuse(value, 'element-access:non-numeric-key');
485
+ const stored = arrayStoredValuesOf(checker, flow, value.expression, frames);
486
+ return stored ? through(stored.map(original)) : refuse(value, 'element-access:array-stored-values-refused');
487
+ }
488
+ if (ts.isCallExpression(value) || ts.isNewExpression(value)) {
489
+ const callee = original(value.expression);
490
+ if (ts.isCallExpression(value) && (ts.isPropertyAccessExpression(callee) || ts.isElementAccessExpression(callee))) {
491
+ // A record method: whatever the callable its slot holds returns
492
+ // (`recordMethodCallTargetsOf`). Asked first: a receiver whose origins
493
+ // are all record literals, and whose type admits no map, is no map.
494
+ const methods = recordMethodCallTargetsOf(flow, value, frames);
495
+ if (methods)
496
+ return through(methods.map(completionKeyOf));
497
+ if (!ts.isPropertyAccessExpression(callee))
498
+ return refuse(value, 'call:record-method-targets-refused');
499
+ // An array's own removing READ -- `pop`/`shift` -- yields a value that
500
+ // array once stored, exactly as `renderItems[ i ]` does a few lines
501
+ // above. Three keeps its render states on an explicit stack
502
+ // (`renderStateStack.push( currentRenderState )` then
503
+ // `currentRenderState = renderStateStack.pop()`), so refusing this one
504
+ // shape left every `currentRenderState.*` call open even though the
505
+ // record's allocation is right here. `arrayStoredValuesOf` is the same
506
+ // authority the element-access branch already trusts: it returns null
507
+ // unless the array's whole stored set is closed AND every plan it
508
+ // passes through is `protocolClosed`, so the method NAME alone grants
509
+ // nothing -- the receiver still has to prove out as an array this
510
+ // program owns. A miss yields `undefined`, which is the reader's case
511
+ // here just as it is for an element read.
512
+ if (arrayRemovingReadNames.has(callee.name.text)) {
513
+ const elements = arrayStoredValuesOf(checker, flow, callee.expression, frames);
514
+ return elements ? through(elements.map(original)) : refuse(value, 'call:array-stored-values-refused');
515
+ }
516
+ // A native map's `get`: whatever that map ever stored, under any key.
517
+ if (callee.name.text !== 'get')
518
+ return refuse(value, 'call:record-method-targets-refused');
519
+ const stored = collectionStoredValuesOf(checker, flow, value, protocolClosed);
520
+ return stored ? through(stored.map(original)) : refuse(value, 'call:map-get-stored-values-refused');
521
+ }
522
+ if (!ts.isIdentifier(callee))
523
+ return refuse(value, 'call:callee-not-identifier');
524
+ // An imported factory is the function its module declares: the import
525
+ // binding's own cell is the specifier, and it is never reassigned.
526
+ const named = flow.targetOf(callee);
527
+ const target = checker && named?.symbol && (named.symbol.flags & ts.SymbolFlags.Alias) !== 0
528
+ ? resolveFlowSymbolAlias(checker, named.symbol)?.valueDeclaration
529
+ : named?.declaration;
530
+ if (!target || !ts.isFunctionDeclaration(target) || !target.body)
531
+ return refuse(value, 'call:callee-not-function-declaration');
532
+ if (target.asteriskToken || target.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword))
533
+ return refuse(value, 'call:callee-generator-or-async');
534
+ if (calleeBindingIsWritten(flow, target))
535
+ return refuse(value, 'call:callee-binding-written');
536
+ // Under `new`, a non-object completion (or any `this` use) means the
537
+ // result can be the fresh `this`, which no plan enumerates.
538
+ if (ts.isNewExpression(value) && !constructionYieldsCompletionOf(flow, target))
539
+ return refuse(value, 'new:not-a-concrete-object-completion');
540
+ return through([target]);
541
+ }
542
+ if (ts.isPropertyAccessExpression(value) || ts.isElementAccessExpression(value))
543
+ return slotRead(value);
544
+ if (!ts.isIdentifier(value))
545
+ return refuse(value, `identifier:not-an-identifier:${ts.SyntaxKind[value.kind]}`);
546
+ const declaration = importedCellOf(flow.targetOf(value)?.declaration ?? null);
547
+ if (!declaration || (!ts.isVariableDeclaration(declaration) && !ts.isParameter(declaration)))
548
+ return refuse(value, `identifier:${declaration ? ts.SyntaxKind[declaration.kind] : 'no-declaration'}`);
549
+ return through([declaration]);
550
+ };
551
+ // An import binding is the exported cell read from another module: its
552
+ // writes are the declaring module's, which the flow index files against
553
+ // that declaration. Three imports `ColorManagement` into every renderer
554
+ // module.
555
+ const importedCellOf = (declaration) => {
556
+ if (!declaration || !checker || (!ts.isImportSpecifier(declaration) && !ts.isImportClause(declaration)) || !declaration.name)
557
+ return declaration;
558
+ const resolved = resolveFlowSymbolAlias(checker, checker.getSymbolAtLocation(declaration.name))?.valueDeclaration;
559
+ return resolved && ts.isVariableDeclaration(resolved) && !resolved.getSourceFile().isDeclarationFile ? resolved : null;
560
+ };
561
+ // `state.buffers` in three's `WebGLRenderer`: whatever the holder's slot
562
+ // holds. The holder's own plan names its allocations; each carries the key
563
+ // as one data entry, whose initializer is the slot's first value. Any other
564
+ // value needs a store, so no write the flow index files against the entry
565
+ // may exist, and every alias of the holder must be closed against slot
566
+ // replacement -- this module's own proof, or failing that the authority's
567
+ // whole-program one, exactly as a record method call asks.
568
+ const slotRead = (access) => {
569
+ const values = frames.slotValuesOf?.(access) ?? sourceRecordSlotValuesOf(flow, access, frames);
570
+ return values === null ? refuse(access, 'slot-read:values-refused') : through(values);
571
+ };
572
+ const verdict = seededOriginSolver(expand)(original(receiver));
573
+ return verdict === 'allocated' && roots.size > 0 ? { roots: [...roots], needsDefaultPrototype, requirements: [] } : null;
574
+ };
575
+ /** The stored values of a closed own record slot. The allocation, descriptor,
576
+ * alias and replacement checks are shared with nested record-origin reads;
577
+ * a consumer must still establish the provenance of each returned value. */
578
+ export const sourceRecordSlotValuesOf = (flow, access, authority) => {
579
+ const { checker } = authority;
580
+ if (activeSlotReads.has(access)) {
581
+ // A slot read still being answered refuses; anything that leaned on that
582
+ // refusal is reusable only while this same read is open.
583
+ noteHypothesis(access);
584
+ return null;
585
+ }
586
+ const original = unwrapErasedExpression;
587
+ const argument = ts.isElementAccessExpression(access) ? original(access.argumentExpression) : null;
588
+ const key = ts.isPropertyAccessExpression(access)
589
+ ? access.name.text
590
+ : argument && (ts.isStringLiteralLike(argument) || ts.isNumericLiteral(argument))
591
+ ? argument.text
592
+ : null;
593
+ if (key === null || key === '__proto__' || key === 'constructor')
594
+ return null;
595
+ const holder = access.expression;
596
+ activeSlotReads.add(access);
597
+ enterHypothesisGuard(access);
598
+ let answered = null;
599
+ try {
600
+ answered = (() => {
601
+ const plan = sourceRecordDataWritePlanOf(flow, holder, key, authority);
602
+ if (plan === null || plan.needsDefaultPrototype)
603
+ return null;
604
+ const values = [];
605
+ for (const root of plan.roots) {
606
+ const entries = root.properties.filter((property) => property.name !== undefined && objectLiteralEntryKeyOf(property.name) === key);
607
+ const entry = entries.length === 1 ? entries[0] : undefined;
608
+ if (!entry || (!ts.isPropertyAssignment(entry) && !ts.isShorthandPropertyAssignment(entry)))
609
+ return null;
610
+ if (slotRewritten(checker, flow, root, entry, key))
611
+ return null;
612
+ values.push(original(ts.isPropertyAssignment(entry) ? entry.initializer : entry.name));
613
+ }
614
+ const closed = plan.roots.every((root) => recordAllocationAliasesClosed(checker, flow, root)) ||
615
+ authority.recordSlotClosed(holder, key, plan.roots);
616
+ return closed ? values : null;
617
+ })();
618
+ return answered;
619
+ }
620
+ finally {
621
+ // The re-entry above hands out exactly one thing -- a refusal -- so a
622
+ // refusal here confirms it outright.
623
+ exitHypothesisGuard(access, true);
624
+ activeSlotReads.delete(access);
625
+ }
626
+ };