@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,992 @@
1
+ import ts from 'typescript';
2
+ import { heritageClassOrInterfaceOf } from './model.js';
3
+ import { sourceClassKeyReadPlanOf } from './source-class-data.js';
4
+ import { classConstructorKeepsInstanceOf } from './member-call-forwarding.js';
5
+ import { unwrapNaming } from './targets.js';
6
+ import { annotationStatesNothing, isGlobalObjectConstructor, isStandardGlobalValue, isUnusableEvidence } from '../derived-expression-type.js';
7
+ import { createPropertyKeyDomains } from '../property-key-domain.js';
8
+ import { objectPrototypeMemberNames } from '../../../representation/record-fields.js';
9
+ import { deferredIntrinsicProtocolLedgerOf, intrinsicProtocolRequirementKind } from '../deferred-intrinsic-protocols.js';
10
+ import { computedKeySetOf } from './computed-key-set.js';
11
+ import { closedCallableAuthorityOf } from './callable-reach.js';
12
+ import { censusArgumentsObjects } from '../arguments-objects.js';
13
+ const KEYED_EDGES = new Set([
14
+ 'index-assignment',
15
+ 'compound-assignment',
16
+ 'logical-assignment',
17
+ 'destructuring',
18
+ 'destructuring-default',
19
+ 'iteration-binding'
20
+ ]);
21
+ /** `Object.<method>` calls that add own properties or replace the prototype. */
22
+ const OBJECT_MUTATORS = new Set(['assign', 'defineProperty', 'defineProperties', 'setPrototypeOf']);
23
+ /** `Reflect.<method>` calls that add own properties or replace the prototype. */
24
+ const REFLECT_MUTATORS = new Set(['set', 'defineProperty', 'setPrototypeOf']);
25
+ const MUTATOR_OWNERS = [
26
+ ['Object', OBJECT_MUTATORS],
27
+ ['Reflect', REFLECT_MUTATORS]
28
+ ];
29
+ const INERT_COMPARISONS = new Set([
30
+ ts.SyntaxKind.EqualsEqualsEqualsToken,
31
+ ts.SyntaxKind.ExclamationEqualsEqualsToken,
32
+ ts.SyntaxKind.EqualsEqualsToken,
33
+ ts.SyntaxKind.ExclamationEqualsToken,
34
+ ts.SyntaxKind.InstanceOfKeyword
35
+ ]);
36
+ /**
37
+ * A mention of the global `Object`/`Reflect` value that cannot hand one of
38
+ * its mutators out: a member read (the member's own symbol is then scanned),
39
+ * a call or construction of it, or an identity/`instanceof` comparison --
40
+ * three's `value.constructor === Object` style checks.
41
+ */
42
+ const globalValueUseIsInert = (reference) => {
43
+ let node = reference;
44
+ while (ts.isParenthesizedExpression(node.parent))
45
+ node = node.parent;
46
+ const parent = node.parent;
47
+ if (ts.isPropertyAccessExpression(parent))
48
+ return parent.expression === node;
49
+ if (ts.isCallExpression(parent) || ts.isNewExpression(parent))
50
+ return parent.expression === node;
51
+ return ts.isBinaryExpression(parent) && INERT_COMPARISONS.has(parent.operatorToken.kind);
52
+ };
53
+ const PRIMITIVE_FLAGS = ts.TypeFlags.StringLike |
54
+ ts.TypeFlags.NumberLike |
55
+ ts.TypeFlags.BigIntLike |
56
+ ts.TypeFlags.BooleanLike |
57
+ ts.TypeFlags.EnumLike |
58
+ ts.TypeFlags.ESSymbolLike |
59
+ ts.TypeFlags.Void |
60
+ ts.TypeFlags.Undefined |
61
+ ts.TypeFlags.Null |
62
+ ts.TypeFlags.Never;
63
+ const skipParentheses = (expression) => unwrapNaming(expression);
64
+ const debugName = process.env['GEA_FAMILY_MEMBER_DEBUG'];
65
+ const debugAllName = process.env['GEA_FAMILY_MEMBER_DEBUG_ALL'];
66
+ /** `GEA_FAMILY_MEMBER_ORIGIN_DEBUG=<member>[,<member>]|*` names the exact sub-check that refused a member slot in `memberExcludesFamily`. */
67
+ const originDebug = process.env['GEA_FAMILY_MEMBER_ORIGIN_DEBUG'];
68
+ /**
69
+ * `GEA_MEMBER_READ_DEBUG=<member>[,<member>]|*` is `GEA_FAMILY_MEMBER_DEBUG_ALL`
70
+ * widened two ways. First, `debugAllName`'s enumeration used to cover only the
71
+ * write/keyed-write scan in `computeClosureRefusal`: a hit there returned
72
+ * `blocking[0]` immediately, so the reflective-call scan right after it (
73
+ * `Object.assign`/`defineProperties`/`Reflect.set`/…) never ran and never got
74
+ * a chance to add its own refusals to the list. This value makes BOTH scans
75
+ * enumerate into the same `blocking` array before anything returns. Second,
76
+ * `classFamilyMemberReadTypeOf` (the caller) prints the Object obligation the
77
+ * closure proof would have recorded -- `plan.needsDefaultPrototype` and the
78
+ * requirement count -- which the closure proof itself never sees, because
79
+ * that fact is computed one layer up, before the proof is even asked.
80
+ */
81
+ const memberReadDebug = process.env['GEA_MEMBER_READ_DEBUG'];
82
+ const memberReadWatching = (name) => memberReadDebug !== undefined && (memberReadDebug === '*' || memberReadDebug.split(',').includes(name));
83
+ /** ` file:line text` for a debug line, or nothing. */
84
+ const describeAt = (at) => {
85
+ const file = at?.getSourceFile();
86
+ return at && file
87
+ ? ` ${file.fileName.split('/').pop()}:${file.getLineAndCharacterOfPosition(at.getStart()).line + 1} ${at.getText().slice(0, 100)}`
88
+ : '';
89
+ };
90
+ /** The source class an INSTANCE type is an instance of -- never `typeof C`, whose symbol is the same class symbol. */
91
+ const instanceClassOf = (type) => {
92
+ if ((type.flags & ts.TypeFlags.Object) === 0)
93
+ return null;
94
+ const objectFlags = type.objectFlags;
95
+ const target = (objectFlags & ts.ObjectFlags.Reference) !== 0 ? type.target : type;
96
+ if (!target.isClassOrInterface() || (target.objectFlags & ts.ObjectFlags.Class) === 0)
97
+ return null;
98
+ const declaration = target.getSymbol()?.valueDeclaration;
99
+ if (!declaration || (!ts.isClassDeclaration(declaration) && !ts.isClassExpression(declaration)))
100
+ return null;
101
+ return declaration.getSourceFile().isDeclarationFile ? null : declaration;
102
+ };
103
+ const isConstVariable = (declaration) => declaration !== undefined &&
104
+ ts.isVariableDeclaration(declaration) &&
105
+ ts.isVariableDeclarationList(declaration.parent) &&
106
+ (declaration.parent.flags & ts.NodeFlags.Const) !== 0;
107
+ const carriesTypeParameter = (type) => (type.flags & ts.TypeFlags.TypeParameter) !== 0 || (type.isUnionOrIntersection() && type.types.some(carriesTypeParameter));
108
+ const inventories = new WeakMap();
109
+ const closures = new WeakMap();
110
+ const NO_CENSUS = {};
111
+ /**
112
+ * Whether a computed write's key is PROVEN to range over a finite set that
113
+ * excludes `target` -- three's `for ( const key in values ) { this[ key ] =
114
+ * newValue }` in `Texture.setValues`/`Material.setValues`, whose `values`
115
+ * only ever holds the options literals the program passes, none of which
116
+ * spell `isFogExp2` or `arrayBuffers`. `computed-key-set.ts` proves the exact
117
+ * set (`this[key]` in `Texture.setValues` is 13 keys, `Material.setValues` is
118
+ * 7, neither containing either name).
119
+ *
120
+ * `false` whenever the set cannot be proven -- an open caller, an unresolved
121
+ * alias, anything `computed-key-set.ts`'s own header lists -- and the write
122
+ * still blocks exactly as before: this only ever NARROWS a `mayName` that was
123
+ * already true, never widens one that was already false.
124
+ *
125
+ * Uses the enclosing proof's complete frame authority. The inventory of
126
+ * possible keys must not shrink because a consumer omitted origin queries.
127
+ */
128
+ const keyProvenToExclude = (checker, flow, key, target, authority) => {
129
+ const keys = computedKeySetOf(checker, flow, key, authority);
130
+ return keys !== null && !keys.has(target);
131
+ };
132
+ /** The KEY expression of a write recorded as `receiver[key] = value` -- `null` for any other write shape. */
133
+ const elementAccessKeyOf = (write) => {
134
+ const receiver = write.naming;
135
+ const access = receiver?.parent;
136
+ if (!receiver || !access || !ts.isElementAccessExpression(access) || access.expression !== receiver)
137
+ return null;
138
+ return access.argumentExpression;
139
+ };
140
+ const writeInventoryOf = (checker, flow) => {
141
+ const held = inventories.get(flow);
142
+ if (held)
143
+ return held;
144
+ const memberWrites = new Map();
145
+ const namedOrigins = new Map();
146
+ const keyedWrites = [];
147
+ for (const write of flow.allWrites) {
148
+ if (write.slot === 'member' && write.member !== null) {
149
+ // `namedOrigins` takes the write before the two exclusions below: a
150
+ // literal's own `{ k: v }` member is not an expando, but it IS one of
151
+ // the values a slot of that name can hold. A `delete` still states only
152
+ // that the slot existed, and a binding pattern's `member` edge is a READ.
153
+ if (write.edge !== 'delete' &&
154
+ !((write.edge === 'destructuring' || write.edge === 'destructuring-default') && ts.isBindingElement(write.site))) {
155
+ const origins = namedOrigins.get(write.member);
156
+ if (origins)
157
+ origins.push(write);
158
+ else
159
+ namedOrigins.set(write.member, [write]);
160
+ }
161
+ // `{ k: v }` initializing a fresh literal is that literal's own member,
162
+ // never an expando on an object that already existed; a binding
163
+ // pattern's `member` edge is a READ of its source.
164
+ if (ts.isPropertyAssignment(write.site) || ts.isShorthandPropertyAssignment(write.site))
165
+ continue;
166
+ if ((write.edge === 'destructuring' || write.edge === 'destructuring-default') && ts.isBindingElement(write.site))
167
+ continue;
168
+ // A delete never creates a property.
169
+ if (write.edge === 'delete')
170
+ continue;
171
+ const list = memberWrites.get(write.member);
172
+ if (list)
173
+ list.push(write);
174
+ else
175
+ memberWrites.set(write.member, [write]);
176
+ }
177
+ else if (write.slot === 'element' && KEYED_EDGES.has(write.edge))
178
+ keyedWrites.push(write);
179
+ }
180
+ const reflectiveCalls = [];
181
+ let reflectiveAlias = null;
182
+ const directCallees = new Set();
183
+ for (const { call } of flow.calls) {
184
+ if (!ts.isCallExpression(call))
185
+ continue;
186
+ const callee = skipParentheses(call.expression);
187
+ if (!ts.isPropertyAccessExpression(callee) || !ts.isIdentifier(callee.expression))
188
+ continue;
189
+ const method = callee.name.text;
190
+ const owner = callee.expression;
191
+ const mutates = (OBJECT_MUTATORS.has(method) && isGlobalObjectConstructor(checker, owner, checker.getTypeAtLocation(owner))) ||
192
+ (REFLECT_MUTATORS.has(method) && isStandardGlobalValue(checker, owner, 'Reflect'));
193
+ if (!mutates)
194
+ continue;
195
+ reflectiveCalls.push({ call, method });
196
+ directCallees.add(callee.name);
197
+ }
198
+ // `const define = Object.defineProperty; define(o, 'k', d)`, or
199
+ // `const R = Reflect; R.set(o, 'k', v)`, calls a mutator the scan above
200
+ // never recorded. The mutators are resolved from the globals themselves,
201
+ // not from the calls, so a program that only ever aliases one is still
202
+ // seen: any mention other than a recorded direct callee name leaves the
203
+ // inventory open. The globals' own values may be read for their members,
204
+ // compared, or called; any other use (`const { defineProperty } = Object`,
205
+ // `Object[key]`, passing `Reflect` along) hands the mutators out unnamed.
206
+ for (const [global, methods] of MUTATOR_OWNERS) {
207
+ let value = checker.resolveName(global, undefined, ts.SymbolFlags.Value, false);
208
+ if (value && (value.flags & ts.SymbolFlags.Alias) !== 0)
209
+ value = checker.getAliasedSymbol(value);
210
+ if (!value)
211
+ continue;
212
+ for (const reference of flow.memberReferencesToSymbol(value)) {
213
+ if (!globalValueUseIsInert(reference) && reflectiveAlias === null)
214
+ reflectiveAlias = reference;
215
+ }
216
+ const valueType = checker.getTypeOfSymbol(value);
217
+ for (const method of methods) {
218
+ const member = checker.getPropertyOfType(valueType, method);
219
+ if (!member)
220
+ continue;
221
+ for (const reference of flow.memberReferencesToSymbol(member)) {
222
+ if (!directCallees.has(reference) && reflectiveAlias === null)
223
+ reflectiveAlias = reference;
224
+ }
225
+ }
226
+ }
227
+ // Every write this index holds is already reachable: the flow walk prunes
228
+ // unreachable members before it records anything.
229
+ const keys = createPropertyKeyDomains(checker, flow, () => true);
230
+ // A spread-free object literal is the only source that can be shown not to
231
+ // carry `key`; anything else (a variable, a call result, a spread) may.
232
+ const literalMayNameKey = (expression, key) => {
233
+ const literal = expression && skipParentheses(expression);
234
+ if (!literal || !ts.isObjectLiteralExpression(literal))
235
+ return true;
236
+ return literal.properties.some((property) => {
237
+ if (ts.isSpreadAssignment(property))
238
+ return true;
239
+ const propertyName = property.name;
240
+ if (!propertyName)
241
+ return true;
242
+ if (ts.isComputedPropertyName(propertyName))
243
+ return keys.mayName(keys.of(propertyName.expression), key);
244
+ if (ts.isIdentifier(propertyName) || ts.isStringLiteralLike(propertyName) || ts.isNumericLiteral(propertyName)) {
245
+ if (ts.isPropertyAssignment(property) && propertyName.text === '__proto__' && !ts.isStringLiteralLike(propertyName))
246
+ return false;
247
+ return propertyName.text === key;
248
+ }
249
+ return true;
250
+ });
251
+ };
252
+ const keyedByName = new Map();
253
+ const reflectionByName = new Map();
254
+ const keyedWritesNaming = (key) => {
255
+ const held = keyedByName.get(key);
256
+ if (held)
257
+ return held;
258
+ const matching = keyedWrites.filter((write) => {
259
+ const access = write.naming?.parent;
260
+ // A keyed write this layer could not attribute to an element access has
261
+ // no key to test, so it may name anything.
262
+ if (!write.naming || !access || !ts.isElementAccessExpression(access) || access.expression !== write.naming)
263
+ return true;
264
+ return keys.mayName(keys.of(access.argumentExpression), key);
265
+ });
266
+ keyedByName.set(key, matching);
267
+ return matching;
268
+ };
269
+ const reflectionMayCreate = (key) => {
270
+ const held = reflectionByName.get(key);
271
+ if (held !== undefined)
272
+ return held;
273
+ const answer = reflectiveCalls.some(({ call, method }) => {
274
+ const args = call.arguments;
275
+ // A spread hides which argument is the target and which the key.
276
+ if (args.some(ts.isSpreadElement))
277
+ return true;
278
+ // A replaced prototype can bring any member with it.
279
+ if (method === 'setPrototypeOf')
280
+ return true;
281
+ const owner = skipParentheses(call.expression);
282
+ const isReflect = ts.isPropertyAccessExpression(owner) && isStandardGlobalValue(checker, owner.expression, 'Reflect');
283
+ // `Object.assign(a, b)` is NAME-PRESERVING: the only value it can put in
284
+ // `a.k` is the one that already sat in some `b.k`, which a union keyed by
285
+ // NAME therefore already holds. A source whose own `k` was written with a
286
+ // COMPUTED key is the exception, and the keyed-write scan covers it.
287
+ if (method === 'assign' && !isReflect)
288
+ return false;
289
+ // `defineProperties(a, map)` is not: `a.k` becomes `map.k.value`, so the
290
+ // value arrives under a DESCRIPTOR rather than under the name itself.
291
+ if (method === 'defineProperties')
292
+ return literalMayNameKey(args[1], key);
293
+ // `defineProperty` (either owner) and `Reflect.set`: the value is stated
294
+ // outright, under no name a member write would have recorded.
295
+ const named = args[1];
296
+ return named === undefined || ts.isSpreadElement(named) || keys.mayName(keys.of(named), key);
297
+ });
298
+ reflectionByName.set(key, answer);
299
+ return answer;
300
+ };
301
+ const inventory = {
302
+ memberWrites,
303
+ namedOrigins,
304
+ keyedWrites,
305
+ reflectiveCalls,
306
+ reflectiveAlias,
307
+ keyedWritesNaming,
308
+ reflectionMayCreate,
309
+ keys
310
+ };
311
+ inventories.set(flow, inventory);
312
+ return inventory;
313
+ };
314
+ /**
315
+ * Whether a keyed store can only overwrite a key the receiver already holds.
316
+ *
317
+ * three's `Material.setValues` is the shape, and it is the only computed-key
318
+ * store on a `Material` receiver:
319
+ *
320
+ * for ( const key in values ) {
321
+ * ...
322
+ * const currentValue = this[ key ];
323
+ * if ( currentValue === undefined ) { warn( ... ); continue; }
324
+ * ...
325
+ * else this[ key ] = newValue;
326
+ * }
327
+ *
328
+ * On an instance that has no `k` anywhere -- no field, nothing on its
329
+ * prototype chain, and (inductively, since every other writer is proved not
330
+ * to add one) no own expando -- `this[ k ]` reads `undefined`, the guard
331
+ * leaves the iteration, and the store never runs. So the store can overwrite
332
+ * a declarer's own `k` (which the declarer's carrier already describes) but
333
+ * never create `k` on an instance lacking it.
334
+ *
335
+ * Admitted only exactly: the receiver is `this`; the key is a `const` binding
336
+ * (so guard and store name one slot); and some statement preceding the store
337
+ * in an enclosing block of the SAME function is `if (<absence of this[key]>)`
338
+ * whose consequent unconditionally leaves (`continue`/`break`/`return`/
339
+ * `throw`). The absence test reads the slot directly or through a `const`
340
+ * initialized from it in the same function, compared `=== undefined`,
341
+ * `== undefined`/`== null`, `typeof ... === 'undefined'`, or negated.
342
+ */
343
+ const guardedAbsentKeyStore = (checker, write, access) => {
344
+ if (write.edge !== 'index-assignment' && write.edge !== 'compound-assignment' && write.edge !== 'logical-assignment')
345
+ return false;
346
+ if (skipParentheses(access.expression).kind !== ts.SyntaxKind.ThisKeyword)
347
+ return false;
348
+ const key = skipParentheses(access.argumentExpression);
349
+ if (!ts.isIdentifier(key))
350
+ return false;
351
+ const keySymbol = checker.getSymbolAtLocation(key);
352
+ if (!keySymbol || !isConstVariable(keySymbol.valueDeclaration))
353
+ return false;
354
+ const owner = ts.findAncestor(access, ts.isFunctionLike);
355
+ if (!owner)
356
+ return false;
357
+ const readsSlotDirectly = (expression) => {
358
+ const read = skipParentheses(expression);
359
+ if (!ts.isElementAccessExpression(read) || skipParentheses(read.expression).kind !== ts.SyntaxKind.ThisKeyword)
360
+ return false;
361
+ const readKey = skipParentheses(read.argumentExpression);
362
+ return (ts.isIdentifier(readKey) && checker.getSymbolAtLocation(readKey) === keySymbol && ts.findAncestor(read, ts.isFunctionLike) === owner);
363
+ };
364
+ const readsSlot = (expression) => {
365
+ const read = skipParentheses(expression);
366
+ if (readsSlotDirectly(read))
367
+ return true;
368
+ if (!ts.isIdentifier(read))
369
+ return false;
370
+ const declaration = checker.getSymbolAtLocation(read)?.valueDeclaration;
371
+ return isConstVariable(declaration) && declaration.initializer !== undefined && readsSlotDirectly(declaration.initializer);
372
+ };
373
+ const isUndefinedValue = (expression) => {
374
+ const value = skipParentheses(expression);
375
+ if (ts.isVoidExpression(value))
376
+ return true;
377
+ return ts.isIdentifier(value) && value.text === 'undefined' && isStandardGlobalValue(checker, value, 'undefined');
378
+ };
379
+ const testsAbsence = (condition) => {
380
+ const test = skipParentheses(condition);
381
+ if (ts.isPrefixUnaryExpression(test) && test.operator === ts.SyntaxKind.ExclamationToken)
382
+ return readsSlot(test.operand);
383
+ if (!ts.isBinaryExpression(test))
384
+ return false;
385
+ const operator = test.operatorToken.kind;
386
+ // Either disjunct holding makes the whole condition hold.
387
+ if (operator === ts.SyntaxKind.BarBarToken)
388
+ return testsAbsence(test.left) || testsAbsence(test.right);
389
+ const strict = operator === ts.SyntaxKind.EqualsEqualsEqualsToken;
390
+ if (!strict && operator !== ts.SyntaxKind.EqualsEqualsToken)
391
+ return false;
392
+ const absentValue = (side) => isUndefinedValue(side) || (!strict && skipParentheses(side).kind === ts.SyntaxKind.NullKeyword);
393
+ if ((absentValue(test.right) && readsSlot(test.left)) || (absentValue(test.left) && readsSlot(test.right)))
394
+ return true;
395
+ const typeofSide = (side, other) => {
396
+ const unary = skipParentheses(side);
397
+ const literal = skipParentheses(other);
398
+ return ts.isTypeOfExpression(unary) && ts.isStringLiteralLike(literal) && literal.text === 'undefined' && readsSlot(unary.expression);
399
+ };
400
+ return typeofSide(test.left, test.right) || typeofSide(test.right, test.left);
401
+ };
402
+ const exits = (statement) => {
403
+ if (ts.isContinueStatement(statement) ||
404
+ ts.isBreakStatement(statement) ||
405
+ ts.isReturnStatement(statement) ||
406
+ ts.isThrowStatement(statement))
407
+ return true;
408
+ if (!ts.isBlock(statement))
409
+ return false;
410
+ const last = statement.statements[statement.statements.length - 1];
411
+ return last !== undefined && exits(last);
412
+ };
413
+ for (let child = access, parent = access.parent; parent !== undefined; child = parent, parent = parent.parent) {
414
+ if (ts.isFunctionLike(parent) || ts.isClassLike(parent) || ts.isSourceFile(parent))
415
+ return false;
416
+ if (!ts.isBlock(parent) && !ts.isCaseClause(parent) && !ts.isDefaultClause(parent))
417
+ continue;
418
+ const statements = parent.statements;
419
+ const at = statements.indexOf(child);
420
+ for (let index = 0; index < at; index++) {
421
+ const statement = statements[index];
422
+ if (ts.isIfStatement(statement) && testsAbsence(statement.expression) && exits(statement.thenStatement))
423
+ return true;
424
+ }
425
+ }
426
+ return false;
427
+ };
428
+ const familyKeyOf = (classes) => [...classes]
429
+ .map((owner) => `${owner.getSourceFile().fileName}:${owner.pos}`)
430
+ .sort()
431
+ .join(',');
432
+ /**
433
+ * What can give a `lacking` instance its own `name`, or replace a family
434
+ * instance's prototype -- the part of closure `sourceClassKeyReadPlanOf`
435
+ * leaves to its caller. `null` when nothing can. The write inventory and every
436
+ * type this consults are fixed for one flow index, so the verdict is cached
437
+ * per flow, member name and family split; the plan itself, and the ledger
438
+ * obligation it raises, is asked again on every query.
439
+ */
440
+ const closureRefusalOf = (checker, flow, instances, lacking, name, census) => {
441
+ let byCensus = closures.get(flow);
442
+ if (!byCensus)
443
+ closures.set(flow, (byCensus = new WeakMap()));
444
+ let byKey = byCensus.get(census ?? NO_CENSUS);
445
+ if (!byKey)
446
+ byCensus.set(census ?? NO_CENSUS, (byKey = new Map()));
447
+ const key = `${name}|${familyKeyOf(instances.keys())}|${familyKeyOf(lacking)}`;
448
+ const held = byKey.get(key);
449
+ if (held)
450
+ return held;
451
+ // The finite-key-set consultation `computeClosureRefusal` may now make
452
+ // (via `keyProvenToExclude`) is itself an intrinsic obligation --
453
+ // `computedKeySetOf`'s for-in/`Object.keys` arms register a requirement on
454
+ // whichever capture is ACTIVE (`deferred-intrinsic-protocols.ts`), and with
455
+ // none active that registration silently no-ops. Wrapping the whole proof
456
+ // in one capture here, once, is what lets a memoized cache hit still carry
457
+ // forward the obligations the FIRST computation incurred: they are stored
458
+ // beside the verdict and replayed by the caller on every hit, never
459
+ // re-derived and never dropped.
460
+ const ledger = deferredIntrinsicProtocolLedgerOf(flow);
461
+ const proof = ledger
462
+ ? (({ value, requirements }) => ({ refusal: value, requirements }))(ledger.capture(() => computeClosureRefusal(checker, flow, instances, lacking, name, census)))
463
+ : { refusal: computeClosureRefusal(checker, flow, instances, lacking, name, census), requirements: [] };
464
+ byKey.set(key, proof);
465
+ return proof;
466
+ };
467
+ const computeClosureRefusal = (checker, flow, instances, lacking, name, census) => {
468
+ const refuse = (reason, at) => (at ? { reason, at } : { reason });
469
+ /** The checker's type, or -- only where the checker says nothing -- the settled census's. */
470
+ const typeOf = (expression) => {
471
+ const own = checker.getTypeAtLocation(expression);
472
+ if (!census || (own.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) === 0)
473
+ return own;
474
+ const settled = census.typeAt(expression);
475
+ return settled && (settled.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) === 0 ? settled : own;
476
+ };
477
+ let keysAuthority;
478
+ const completeKeys = () => {
479
+ if (keysAuthority)
480
+ return keysAuthority;
481
+ const argumentsByFile = new Map();
482
+ keysAuthority = closedCallableAuthorityOf(checker, flow, typeOf, (owner) => {
483
+ const file = owner.getSourceFile();
484
+ let census = argumentsByFile.get(file);
485
+ if (!census)
486
+ argumentsByFile.set(file, (census = censusArgumentsObjects(checker, [file])));
487
+ return census.usesByOwner.get(owner);
488
+ });
489
+ return keysAuthority;
490
+ };
491
+ const family = new Set(instances.keys());
492
+ const ancestorsOf = new Map();
493
+ const ancestry = (member) => {
494
+ const known = ancestorsOf.get(member);
495
+ if (known)
496
+ return known;
497
+ const found = new Set();
498
+ const visit = (type) => {
499
+ const declared = heritageClassOrInterfaceOf(type);
500
+ for (const base of declared === null ? [] : checker.getBaseTypes(declared)) {
501
+ const declaration = instanceClassOf(base);
502
+ if (declaration && !found.has(declaration))
503
+ found.add(declaration);
504
+ visit(base);
505
+ }
506
+ };
507
+ visit(instances.get(member));
508
+ ancestorsOf.set(member, found);
509
+ return found;
510
+ };
511
+ const typeMayHold = (type, targets, depth = 0) => {
512
+ if (depth > 8 || (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
513
+ return true;
514
+ if (type.isUnionOrIntersection())
515
+ return type.types.some((part) => typeMayHold(part, targets, depth + 1));
516
+ if ((type.flags & ts.TypeFlags.TypeParameter) !== 0) {
517
+ const constraint = checker.getBaseConstraintOfType(type);
518
+ return constraint === undefined || constraint === type ? true : typeMayHold(constraint, targets, depth + 1);
519
+ }
520
+ if ((type.flags & PRIMITIVE_FLAGS) !== 0)
521
+ return false;
522
+ if ((type.flags & (ts.TypeFlags.Object | ts.TypeFlags.NonPrimitive)) === 0)
523
+ return true;
524
+ const declaration = instanceClassOf(type);
525
+ if (declaration)
526
+ return [...targets].some((target) => target === declaration || ancestry(target).has(declaration));
527
+ return [...targets].some((target) => checker.isTypeAssignableTo(instances.get(target), type));
528
+ };
529
+ /**
530
+ * Whether every value `expression` can hold was allocated by something that
531
+ * is not a family constructor -- `const cache = {}` in three's
532
+ * `WebGLPrograms`/`WebGLShaderCache`, typed `{}` by the checker and so
533
+ * assignable-from every class. A literal is a fresh object; a `new` of a
534
+ * library constructor or of a source class outside the family (whose
535
+ * constructor provably returns its own `this`) is an instance of that class;
536
+ * an unwritten-elsewhere `const`/`let` holds only what its writes put there.
537
+ */
538
+ const excludesFamily = (expression, active = new Set()) => {
539
+ let value = skipParentheses(expression);
540
+ while (ts.isAsExpression(value) || ts.isTypeAssertionExpression(value) || ts.isSatisfiesExpression(value))
541
+ value = skipParentheses(value.expression);
542
+ if (active.has(value))
543
+ return true;
544
+ active.add(value);
545
+ if (ts.isObjectLiteralExpression(value) ||
546
+ ts.isArrayLiteralExpression(value) ||
547
+ ts.isFunctionExpression(value) ||
548
+ ts.isArrowFunction(value) ||
549
+ ts.isRegularExpressionLiteral(value))
550
+ return true;
551
+ if (ts.isNewExpression(value)) {
552
+ const constructed = checker.getTypeAtLocation(value);
553
+ const declaration = instanceClassOf(constructed);
554
+ if (declaration) {
555
+ const instance = constructed.isClassOrInterface() ? constructed : null;
556
+ return (!family.has(declaration) &&
557
+ ![...family].some((member) => ancestry(member).has(declaration)) &&
558
+ instance !== null &&
559
+ classConstructorKeepsInstanceOf(checker, flow, instance));
560
+ }
561
+ const callee = checker.getSymbolAtLocation(value.expression)?.valueDeclaration;
562
+ return callee !== undefined && callee.getSourceFile().isDeclarationFile && !typeMayHold(constructed, family);
563
+ }
564
+ if (ts.isPropertyAccessExpression(value))
565
+ return memberExcludesFamily(value.name.text, active);
566
+ if (!ts.isIdentifier(value))
567
+ return false;
568
+ const declaration = flow.targetOf(value)?.declaration;
569
+ if (!declaration || !ts.isVariableDeclaration(declaration))
570
+ return false;
571
+ const whole = flow.writesToDeclaration(declaration).filter((write) => write.slot === 'whole');
572
+ return (whole.length > 0 &&
573
+ whole.every((write) => (write.edge === 'declaration-initializer' || write.edge === 'identifier-assignment') &&
574
+ write.value !== null &&
575
+ excludesFamily(write.value, active)));
576
+ };
577
+ /**
578
+ * `excludesFamily` for a MEMBER slot: what can a slot of this name hold,
579
+ * anywhere in the program.
580
+ *
581
+ * The receiver is asked by NAME rather than by symbol because the receivers
582
+ * that reach here have none -- three's `data.arrayBuffers` is an expando on
583
+ * a `@param {Object} [data]`, so the checker declares no such member and
584
+ * `flow.targetOf` resolves nothing. A union over every object in the
585
+ * program is the sound over-approximation of "some object whose slot of
586
+ * this name is being written": it can only add values, so it can only make
587
+ * this proof refuse.
588
+ *
589
+ * For that union to be a superset, every way a slot can acquire a value has
590
+ * to be accounted for, and each one that cannot be enumerated is a refusal:
591
+ * an ACCESSOR is not a stored slot at all (its value is whatever the body
592
+ * returns, and no write records it); a REFLECTIVE mutator can create any
593
+ * name on any object; and a KEYED store whose key may spell this name is
594
+ * one more origin of it. What remains is the recorded writes, and every one
595
+ * of them must state a value that excludes the family.
596
+ */
597
+ const memberExcludesFamily = (key, active) => {
598
+ // Which of the five sub-checks refused decides what to fix, and they are
599
+ // indistinguishable from the outside. See `originDebug`.
600
+ const tracing = originDebug !== undefined && (originDebug === '*' || originDebug.split(',').includes(key));
601
+ const traced = (reason, at) => {
602
+ if (tracing)
603
+ console.error(`[FAMILY-MEMBER-ORIGIN] ${key} ${reason}${at ? describeAt(at) : ''}`);
604
+ return false;
605
+ };
606
+ if (flow.hasComputedAccessorName)
607
+ return traced('computed-accessor-name-somewhere');
608
+ if (flow.accessorNames.has(key))
609
+ return traced('declared-by-an-accessor');
610
+ if (writes.reflectionMayCreate(key))
611
+ return traced('reflective-mutator-may-create');
612
+ // The same conjunction `mayHold` uses, and for the same reason: the
613
+ // checker's own answer settles most origins outright (`x.slice(0).buffer`
614
+ // is an `ArrayBufferLike`, and no class in the family is one), and only a
615
+ // value the checker cannot rule out needs its allocation traced. Asking
616
+ // `excludesFamily` alone would refuse every host-typed value, because a
617
+ // member no source file writes has no origin to enumerate.
618
+ const cannotBeFamily = (value) => value !== null && (!typeMayHold(typeOf(value), family) || excludesFamily(value, active));
619
+ for (const keyed of writes.keyedWritesNaming(key)) {
620
+ // `keyedWritesNaming` answers from `property-key-domain.ts`'s coarser,
621
+ // forever-cached "may name" proof; `computed-key-set.ts` can PROVE a
622
+ // finite key set for the same expression (a `for (const k in values)`
623
+ // loop closed over an options literal, three's `Texture`/`Material`
624
+ // `setValues`) and rule this one write out even where that coarser
625
+ // proof would not. Asked fresh on every call -- never folded into that
626
+ // cache -- so the intrinsic requirement it raises lands in whichever
627
+ // capture `closureRefusalOf` has open right now, not a stale one from
628
+ // an earlier round or a different family.
629
+ const keyExpression = elementAccessKeyOf(keyed);
630
+ if (keyExpression && keyProvenToExclude(checker, flow, keyExpression, key, completeKeys()))
631
+ continue;
632
+ if (!cannotBeFamily(keyed.value))
633
+ return traced('keyed-write-may-create', keyed.site);
634
+ }
635
+ const origins = writes.namedOrigins.get(key) ?? [];
636
+ if (origins.length === 0)
637
+ return traced('no-origin');
638
+ for (const write of origins)
639
+ if (!cannotBeFamily(write.value))
640
+ return traced('origin-unproven', write.site);
641
+ return true;
642
+ };
643
+ const mayHold = (expression, targets) => expression === null || (targets.size > 0 && typeMayHold(typeOf(expression), targets) && !excludesFamily(expression));
644
+ /** A key typed purely number/symbol can never spell an identifier-shaped `name` (numeric names are refused up front). */
645
+ const keyCannotName = (key) => {
646
+ const type = typeOf(key);
647
+ const parts = type.isUnion() ? type.types : [type];
648
+ const typed = parts.every((part) => (part.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) === 0 &&
649
+ (part.flags & (ts.TypeFlags.NumberLike | ts.TypeFlags.ESSymbolLike)) !== 0);
650
+ if (typed || !writes.keys.mayName(writes.keys.of(key), name))
651
+ return true;
652
+ return keyProvenToExclude(checker, flow, key, name, completeKeys());
653
+ };
654
+ const writes = writeInventoryOf(checker, flow);
655
+ if (writes.reflectiveAlias)
656
+ return refuse('reflective-mutator-escapes', writes.reflectiveAlias);
657
+ // `GEA_FAMILY_MEMBER_DEBUG_ALL=<name|*>` (or the newer `GEA_MEMBER_READ_DEBUG`,
658
+ // see its own comment) lists EVERY store that blocks the family rather than
659
+ // stopping at the first -- which one to discharge next. Without it the scan
660
+ // still returns at the first refusal. The two write scans below AND the
661
+ // reflective-call scan after them all feed the same `blocking` array, so a
662
+ // member blocked by e.g. one keyed write and one `Reflect.set` reports both
663
+ // in one run instead of needing a re-run per fix.
664
+ const listing = (debugAllName !== undefined && (debugAllName === '*' || debugAllName === name)) || memberReadWatching(name);
665
+ const blocking = [];
666
+ const blocked = (reason, at) => {
667
+ const refusal = refuse(reason, at);
668
+ if (!listing)
669
+ return refusal;
670
+ blocking.push(refusal);
671
+ return null;
672
+ };
673
+ // A MEASUREMENT ARM, and DELIBERATELY UNSOUND -- never a fix.
674
+ // `GEA_FAMILY_MEMBER_FORCE_ABSENT=<name>[,<name>...]` (or `*`) skips the
675
+ // blocking write scan for those member names, granting the absence proof as
676
+ // if every store had been discharged. It exists because this proof sits at
677
+ // the head of a long causal chain -- `isFogExp2` alone decides whether
678
+ // three's `WebGLPrograms` parameters record has a boxed field, which decides
679
+ // whether the program cache key is built at all -- and the only honest way
680
+ // to price a discharge before writing it is to grant it and measure what
681
+ // moves. Anything it makes green is a claim about the chain, never about the
682
+ // program being correct.
683
+ const forcedAbsent = process.env['GEA_FAMILY_MEMBER_FORCE_ABSENT'];
684
+ const forced = forcedAbsent !== undefined && (forcedAbsent === '*' || forcedAbsent.split(',').includes(name));
685
+ if (!forced) {
686
+ for (const write of writes.memberWrites.get(name) ?? []) {
687
+ const refusal = mayHold(write.naming, lacking) ? blocked('expando-write', write.site) : null;
688
+ if (refusal)
689
+ return refusal;
690
+ }
691
+ for (const write of writes.memberWrites.get('__proto__') ?? []) {
692
+ const refusal = mayHold(write.naming, family) ? blocked('prototype-write', write.site) : null;
693
+ if (refusal)
694
+ return refusal;
695
+ }
696
+ for (const write of writes.keyedWrites) {
697
+ const receiver = write.naming;
698
+ const access = receiver?.parent;
699
+ if (!receiver || !access || !ts.isElementAccessExpression(access) || access.expression !== receiver) {
700
+ const refusal = mayHold(receiver ?? null, lacking) ? blocked('keyed-write-unattributed', write.site) : null;
701
+ if (refusal)
702
+ return refusal;
703
+ continue;
704
+ }
705
+ if (keyCannotName(access.argumentExpression))
706
+ continue;
707
+ if (!mayHold(receiver, lacking))
708
+ continue;
709
+ if (guardedAbsentKeyStore(checker, write, access))
710
+ continue;
711
+ const refusal = blocked('keyed-write', write.site);
712
+ if (refusal)
713
+ return refusal;
714
+ }
715
+ }
716
+ /** Whether an `Object.assign` source or `defineProperties` map can carry `name`: only a spread-free literal says it cannot. */
717
+ const literalMayName = (expression) => {
718
+ const literal = expression && skipParentheses(expression);
719
+ if (!literal || !ts.isObjectLiteralExpression(literal))
720
+ return true;
721
+ return literal.properties.some((property) => {
722
+ if (ts.isSpreadAssignment(property))
723
+ return true;
724
+ const key = property.name;
725
+ if (!key)
726
+ return true;
727
+ if (ts.isComputedPropertyName(key))
728
+ return writes.keys.mayName(writes.keys.of(key.expression), name);
729
+ if (ts.isIdentifier(key) || ts.isStringLiteralLike(key) || ts.isNumericLiteral(key)) {
730
+ // `{ __proto__: v }` sets the literal's own prototype, never an own key.
731
+ if (ts.isPropertyAssignment(property) && key.text === '__proto__' && !ts.isStringLiteralLike(key))
732
+ return false;
733
+ return key.text === name;
734
+ }
735
+ return true;
736
+ });
737
+ };
738
+ const keyMayName = (expression) => expression === undefined || ts.isSpreadElement(expression) || writes.keys.mayName(writes.keys.of(expression), name);
739
+ for (const { call, method } of writes.reflectiveCalls) {
740
+ const args = call.arguments;
741
+ // A spread hides which argument is the target and which the key, so the
742
+ // rest of this call's checks below (which index into `args` positionally)
743
+ // cannot run meaningfully -- move to the next call even while listing.
744
+ if (args.some(ts.isSpreadElement)) {
745
+ const refusal = blocked('reflective-spread-arguments', call);
746
+ if (refusal)
747
+ return refusal;
748
+ continue;
749
+ }
750
+ const target = args[0] && !ts.isSpreadElement(args[0]) ? args[0] : null;
751
+ const owner = skipParentheses(call.expression);
752
+ const isReflect = isStandardGlobalValue(checker, owner.expression, 'Reflect');
753
+ if (method === 'setPrototypeOf') {
754
+ if (mayHold(target, family)) {
755
+ const refusal = blocked('prototype-replaced', call);
756
+ if (refusal)
757
+ return refusal;
758
+ }
759
+ continue;
760
+ }
761
+ if (method === 'assign' && !isReflect) {
762
+ if (mayHold(target, lacking) && args.slice(1).some((source) => literalMayName(source))) {
763
+ const refusal = blocked('object-assign', call);
764
+ if (refusal)
765
+ return refusal;
766
+ }
767
+ continue;
768
+ }
769
+ if (method === 'defineProperties') {
770
+ if (mayHold(target, lacking) && literalMayName(args[1])) {
771
+ const refusal = blocked('define-properties', call);
772
+ if (refusal)
773
+ return refusal;
774
+ }
775
+ continue;
776
+ }
777
+ // `defineProperty` (either owner) and `Reflect.set`, whose optional
778
+ // fourth argument is the receiver a data property is created on.
779
+ const receivers = method === 'set' && isReflect && args[3] ? [target, args[3]] : [target];
780
+ if (receivers.some((receiver) => mayHold(receiver, lacking)) && keyMayName(args[1])) {
781
+ const refusal = blocked(`reflective-${method}`, call);
782
+ if (refusal)
783
+ return refusal;
784
+ }
785
+ }
786
+ if (blocking.length > 0) {
787
+ const clauses = new Map();
788
+ for (const { reason } of blocking)
789
+ clauses.set(reason, (clauses.get(reason) ?? 0) + 1);
790
+ for (const { reason, at } of blocking)
791
+ console.error(`[FAMILY-MEMBER-BLOCK] ${name} ${reason}${describeAt(at)}`);
792
+ if (memberReadWatching(name))
793
+ console.error(`[MEMBER-READ-SUMMARY] ${name} refused=${blocking.length} clauses=${[...clauses].map(([clause, count]) => `${clause}:${count}`).join(',')}`);
794
+ return blocking[0];
795
+ }
796
+ return null;
797
+ };
798
+ /**
799
+ * Whether `type` is a plain, closed record shape -- an object literal's type,
800
+ * or the same shape after the parameter census widens an assigned value --
801
+ * with no index signature and no call/construct signature: `_emptyScene` in
802
+ * three's `WebGLRenderer` (`{ background: null, fog: null, environment: null,
803
+ * overrideMaterial: null, isScene: true }`), assigned into a parameter cell
804
+ * right beside real class instances as a sentinel default. It is never a
805
+ * class or a declared interface (no constructor, no prototype chain to
806
+ * enumerate) and never open-ended (no index signature lets an unrelated key
807
+ * appear, no call signature makes it a callable with its own dispatch), so
808
+ * its OWN declared members are the complete, closed answer for anything read
809
+ * off it -- unlike a source class, which needs the whole closure proof below
810
+ * to rule out an expando or a subclass.
811
+ *
812
+ * Deliberately NOT gated on `ObjectFlags.ObjectLiteral`: the census's own
813
+ * write-join widens an assigned literal's type (`writeSetTypeOf`/`widestOf`)
814
+ * before this module ever sees it, which measurably drops that flag while
815
+ * leaving the shape -- no index signature, no call surface, not a class --
816
+ * exactly as closed as the literal it came from.
817
+ */
818
+ const isClosedRecordType = (checker, type) => {
819
+ if ((type.flags & ts.TypeFlags.Object) === 0)
820
+ return false;
821
+ if (type.isClassOrInterface())
822
+ return false;
823
+ if (instanceClassOf(type) !== null)
824
+ return false;
825
+ if (checker.getIndexInfosOfType(type).length > 0)
826
+ return false;
827
+ if (checker.getSignaturesOfType(type, ts.SignatureKind.Call).length > 0)
828
+ return false;
829
+ if (checker.getSignaturesOfType(type, ts.SignatureKind.Construct).length > 0)
830
+ return false;
831
+ return true;
832
+ };
833
+ /**
834
+ * `receiver.name` read off ONE closed object-literal union member -- `null`
835
+ * when this member cannot be trusted as a plain carrier (the property is
836
+ * itself unusable evidence, or -- because JavaScript reads an absent
837
+ * property as `undefined`, and this module has no write-safety proof for a
838
+ * receiver that is not a `SourceClass` -- the literal simply lacks `name`,
839
+ * which `memberWrites`/`keyedWrites`/reflective-mutator scans below are never
840
+ * asked about a bare literal type). A literal missing the member therefore
841
+ * refuses the WHOLE split (see the caller), exactly as a class whose carrier
842
+ * is unusable does.
843
+ */
844
+ const literalMemberCarrierOf = (checker, type, name) => {
845
+ const member = checker.getPropertyOfType(type, name);
846
+ if (!member?.valueDeclaration)
847
+ return null;
848
+ const memberType = checker.getTypeOfSymbolAtLocation(member, member.valueDeclaration);
849
+ if (isUnusableEvidence(memberType) || (memberType.flags & ts.TypeFlags.Unknown) !== 0 || carriesTypeParameter(memberType))
850
+ return null;
851
+ return memberType;
852
+ };
853
+ /**
854
+ * The type of `receiver.name` when some class the receiver can hold does not
855
+ * declare `name` -- see this module's header. `null` whenever the checker
856
+ * already answers, the receiver is not a union of source class instances,
857
+ * or any closure proof fails.
858
+ */
859
+ export const classFamilyMemberReadTypeOf = (checker, flow, receiver, name, census) => {
860
+ // The measurement arm, kept runnable the way `GEA_BAG_OFF` is.
861
+ if (process.env['GEA_FAMILY_MEMBER_OFF'])
862
+ return null;
863
+ if (objectPrototypeMemberNames.has(name) || name === '__proto__' || String(Number(name)) === name)
864
+ return null;
865
+ const wholeReceiver = checker.getNonNullableType(receiver);
866
+ const watching = debugName !== undefined && (debugName === '*' || debugName === name);
867
+ const refuse = (reason, at) => {
868
+ if (watching)
869
+ console.error(`[FAMILY-MEMBER] ${checker.typeToString(wholeReceiver)}.${name} ${reason}${describeAt(at)}`);
870
+ return null;
871
+ };
872
+ const union = checker.getUnionType;
873
+ // A receiver flowing through a guarded reassignment -- three's `if (
874
+ // scene.isScene !== true ) scene = _emptyScene` -- holds a union of real
875
+ // class instances AND a sentinel object literal. `familyRootsOf` (below,
876
+ // through `sourceClassKeyReadPlanOf`) can only enumerate a CLASS family; a
877
+ // bare literal in the same union is neither a family member nor an
878
+ // ancestor, so asking it the class question for the WHOLE union refuses
879
+ // outright. Splitting the literal member(s) out first and reading each
880
+ // one's OWN declared member directly is what keeps the class machinery
881
+ // answerable for the rest -- see `isClosedRecordType`'s header.
882
+ const parts = wholeReceiver.isUnion() ? wholeReceiver.types : [wholeReceiver];
883
+ const literalParts = parts.filter((part) => isClosedRecordType(checker, part));
884
+ const classParts = parts.filter((part) => !isClosedRecordType(checker, part));
885
+ let literalCarriers = null;
886
+ if (literalParts.length > 0 && union) {
887
+ const resolved = literalParts.map((part) => literalMemberCarrierOf(checker, part, name));
888
+ if (resolved.every((carrier) => carrier !== null))
889
+ literalCarriers = resolved;
890
+ }
891
+ // Nothing to split, or the split could not be trusted end to end: fall
892
+ // through exactly as before, over the WHOLE receiver, so a program with no
893
+ // literal-sentinel arm is untouched and a disqualified one still refuses.
894
+ const present = literalCarriers && classParts.length < parts.length ? (classParts.length > 0 ? union.call(checker, classParts) : null) : wholeReceiver;
895
+ if (present === null) {
896
+ // Every union member was a closed literal -- there is no class family to
897
+ // ask at all, and the literals' own members are the whole answer.
898
+ return literalCarriers && literalCarriers.length > 0 ? union.call(checker, literalCarriers) : refuse('no-declarer');
899
+ }
900
+ const ledger = deferredIntrinsicProtocolLedgerOf(flow);
901
+ if (!ledger)
902
+ return refuse('no-intrinsic-ledger');
903
+ const { value: plan, requirements } = ledger.capture(() => sourceClassKeyReadPlanOf(checker, flow, { kind: 'declared', receiver: present }, name));
904
+ if (!plan)
905
+ return refuse('no-key-read-plan');
906
+ if (!plan.codeFree)
907
+ return refuse('member-runs-code');
908
+ if (plan.carriers.length === 0)
909
+ return refuse('no-declarer');
910
+ // See "The Object obligation": an absent class's `undefined` rests on
911
+ // Object.prototype lacking exactly this key. It is admitted by default when
912
+ // every Object obligation the plan published is that per-key question; a
913
+ // whole-prototype obligation fails under any key write the census cannot
914
+ // attribute, so an answer resting on one is still refused.
915
+ // GEA_FAMILY_MEMBER_ABSENT_KEYS is a kill switch: `0` refuses, `1` admits.
916
+ // The installed hosts can state the `0` refusal for every build that loads
917
+ // them (`ledger.refusesObjectPrototypeAbsenceProofs`); `=1` exists for tests
918
+ // of the proof itself and does not override a host's statement.
919
+ const absentKeys = process.env['GEA_FAMILY_MEMBER_ABSENT_KEYS'];
920
+ if (plan.needsDefaultPrototype &&
921
+ (ledger.refusesObjectPrototypeAbsenceProofs ||
922
+ (absentKeys !== '1' &&
923
+ (absentKeys === '0' ||
924
+ requirements.some(isWholeObjectPrototypeRequirement) ||
925
+ !requirements.some((requirement) => objectPrototypeLacksKeyRequirement(requirement, name))))))
926
+ return refuse('absent-class-needs-object-prototype');
927
+ const carriers = [];
928
+ for (const { owner, type } of plan.carriers) {
929
+ if (isUnusableEvidence(type) ||
930
+ (type.flags & ts.TypeFlags.Unknown) !== 0 ||
931
+ annotationStatesNothing(checker, owner, type) ||
932
+ carriesTypeParameter(type))
933
+ return refuse('declarer-carrier-unknown', owner);
934
+ carriers.push(type);
935
+ }
936
+ const instances = new Map();
937
+ const lacking = new Set();
938
+ for (const [owner, verdict] of plan.classes) {
939
+ const symbol = owner.name ? checker.getSymbolAtLocation(owner.name) : checker.getTypeAtLocation(owner).getSymbol();
940
+ const type = symbol && checker.getDeclaredTypeOfSymbol(symbol);
941
+ if (!type?.isClassOrInterface())
942
+ return refuse('family-member-untyped', owner);
943
+ instances.set(owner, type);
944
+ if (verdict === 'absent')
945
+ lacking.add(owner);
946
+ }
947
+ const closure = closureRefusalOf(checker, flow, instances, lacking, name, census ?? null);
948
+ // The Object obligation this read would have recorded, independent of
949
+ // whether the closure proof itself refused: `plan.needsDefaultPrototype`
950
+ // and the requirement counts are settled ONE layer above `computeClosureRefusal`
951
+ // (in `plan`, from `sourceClassKeyReadPlanOf`, before the closure proof is
952
+ // even asked), so the closure proof itself has no way to report them --
953
+ // they have to be printed here, at the only point that holds both.
954
+ if (memberReadWatching(name))
955
+ console.error(`[MEMBER-READ-OBLIGATION] ${name} needs-default-prototype=${plan.needsDefaultPrototype} plan-requirements=${requirements.length} closure-requirements=${closure.requirements.length} closure-refused=${closure.refusal !== null}`);
956
+ if (closure.refusal)
957
+ return refuse(closure.refusal.reason, closure.refusal.at);
958
+ if (!union)
959
+ return null;
960
+ publish(ledger, closure.requirements.length > 0 ? [...requirements, ...closure.requirements] : requirements);
961
+ const familyCarriers = plan.needsDefaultPrototype ? [...carriers, checker.getUndefinedType()] : carriers;
962
+ return union.call(checker, literalCarriers ? [...familyCarriers, ...literalCarriers] : familyCarriers);
963
+ };
964
+ const isWholeObjectPrototypeRequirement = (requirement) => requirement.intrinsic === 'Object' && requirement.member === undefined && requirement.prototypeKeys === undefined;
965
+ /** The per-key question an absent class's `undefined` rests on: Object.prototype lacks `name`. */
966
+ const objectPrototypeLacksKeyRequirement = (requirement, name) => requirement.intrinsic === 'Object' && requirement.member === undefined && requirement.prototypeKeys?.names?.includes(name) === true;
967
+ const LEDGER_SCOPE = 'class-family-member-read';
968
+ const published = new WeakMap();
969
+ /** Keep a surviving answer's intrinsic obligations -- see "The Object obligation". */
970
+ const publish = (ledger, requirements) => {
971
+ if (requirements.length === 0)
972
+ return;
973
+ // A parameter inference that asked for this read depends on it too.
974
+ ledger.include(requirements);
975
+ let held = published.get(ledger);
976
+ if (!held)
977
+ published.set(ledger, (held = { all: [], seen: new Map() }));
978
+ let added = false;
979
+ for (const requirement of requirements) {
980
+ let kinds = held.seen.get(requirement.location);
981
+ if (!kinds)
982
+ held.seen.set(requirement.location, (kinds = new Set()));
983
+ const kind = `${requirement.intrinsic}.${intrinsicProtocolRequirementKind(requirement) ?? ''}`;
984
+ if (kinds.has(kind))
985
+ continue;
986
+ kinds.add(kind);
987
+ held.all.push(requirement);
988
+ added = true;
989
+ }
990
+ if (added)
991
+ ledger.replace(LEDGER_SCOPE, held.all);
992
+ };