@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,1027 @@
1
+ import ts from 'typescript';
2
+ import { isScriptGlobalObjectPropertyDeclaration } from '../script-global-redefinition.js';
3
+ import { enclosingCallIfCallee, unwrapErasedExpression } from './erasure.js';
4
+ import { publishesShortCircuit } from './optional-chain.js';
5
+ import { operationId, regionId, semanticResultId } from '../../../identity/ids.js';
6
+ import { normalCompletion, pureEffects, throwingCompletion } from '../../model/operands.js';
7
+ import { familyOf } from '../census.js';
8
+ import { bindingKindOf } from './binding-kind.js';
9
+ import { blocked, mintOperationId, mintResult, operand } from './mint.js';
10
+ import { valueSymbolAt } from '../unresolvable-names.js';
11
+ import { argumentsObjectValueAt } from './bindings.js';
12
+ import { calleeAwareTypeAt, isAssignmentOperatorKind } from './shared.js';
13
+ const literalConstantOf = (expression) => {
14
+ if (ts.isStringLiteralLike(expression))
15
+ return { text: expression.text, literal: 'string' };
16
+ if (ts.isNumericLiteral(expression))
17
+ return { text: expression.text, literal: 'number' };
18
+ if (expression.kind === ts.SyntaxKind.BigIntLiteral)
19
+ return { text: expression.text.slice(0, -1), literal: 'bigint' };
20
+ if (expression.kind === ts.SyntaxKind.TrueKeyword)
21
+ return { text: 'true', literal: 'boolean' };
22
+ if (expression.kind === ts.SyntaxKind.FalseKeyword)
23
+ return { text: 'false', literal: 'boolean' };
24
+ if (expression.kind === ts.SyntaxKind.NullKeyword)
25
+ return { text: 'null', literal: 'null' };
26
+ // `undefined` is spelled as a name, but it is not a binding any program
27
+ // reads: the global property is non-writable and non-configurable, so every
28
+ // resolution of the unshadowed name yields the one value. Citing it as a
29
+ // constant is what `null` already gets, and it is what lets `undefined as
30
+ // unknown as T` -- the standard ambient-global guard -- publish a value at
31
+ // all. A program that declares its *own* `undefined` is a different name;
32
+ // `buildReference` refuses that one by name rather than letting this text
33
+ // answer for it.
34
+ if (ts.isIdentifier(expression) && expression.text === 'undefined')
35
+ return { text: 'undefined', literal: 'undefined' };
36
+ return null;
37
+ };
38
+ /** Whether a checker type explicitly has an `undefined` constituent. */
39
+ const includesUndefined = (type) => {
40
+ if ((type.flags & ts.TypeFlags.Undefined) !== 0)
41
+ return true;
42
+ return type.isUnion() && type.types.some(includesUndefined);
43
+ };
44
+ /** Whether an equality operation directly compares this expression with `undefined`. */
45
+ const comparesWithUndefined = (context, node) => {
46
+ let inner = node;
47
+ let parent = inner.parent;
48
+ while (parent && ts.isParenthesizedExpression(parent)) {
49
+ inner = parent;
50
+ parent = parent.parent;
51
+ }
52
+ if (!parent || !ts.isBinaryExpression(parent))
53
+ return false;
54
+ const operator = parent.operatorToken.kind;
55
+ if (operator !== ts.SyntaxKind.EqualsEqualsToken &&
56
+ operator !== ts.SyntaxKind.ExclamationEqualsToken &&
57
+ operator !== ts.SyntaxKind.EqualsEqualsEqualsToken &&
58
+ operator !== ts.SyntaxKind.ExclamationEqualsEqualsToken) {
59
+ return false;
60
+ }
61
+ const other = parent.left === inner ? parent.right : parent.right === inner ? parent.left : null;
62
+ return other !== null && (context.types.rawTypeAt(other).flags & ts.TypeFlags.Undefined) !== 0;
63
+ };
64
+ /**
65
+ * Keep an explicitly optional local's physical absence when this use has a
66
+ * destination for it. TypeScript flow narrows `let value: T | undefined =
67
+ * dictionary[key]` to `T` when `noUncheckedIndexedAccess` is off, because its
68
+ * checker type for the initializer omits the missing-key `undefined`. The
69
+ * property producer restores that absence and the cell therefore physically
70
+ * holds `Optional<T>`; dereferencing it at a later optional return or
71
+ * `!== undefined` test would discard the very absence the producer recovered.
72
+ *
73
+ * This does not suppress ordinary control-flow narrowing: only a use whose
74
+ * contextual destination itself admits `undefined`, or which directly tests
75
+ * for it, keeps the declaration's stated carrier. A use that requires `T`
76
+ * continues to use the checker's narrowed answer and its existing presence
77
+ * proof/conversion.
78
+ */
79
+ const destinationPreservesDeclaredAbsence = (context, node, declaration) => {
80
+ if (!declaration || !ts.isVariableDeclaration(declaration) || declaration.type === undefined)
81
+ return null;
82
+ const declared = context.checker.getTypeAtLocation(declaration.name);
83
+ if (!includesUndefined(declared))
84
+ return null;
85
+ const contextual = context.checker.getContextualType(node);
86
+ if ((contextual === undefined || !includesUndefined(contextual)) && !comparesWithUndefined(context, node))
87
+ return null;
88
+ return context.types.typeAt(declaration);
89
+ };
90
+ /**
91
+ * Cite the result an expression's own family producer publishes for it, without
92
+ * minting anything: `operationId`/`semanticResultId` are pure, so recomputing
93
+ * the identity another producer will independently compute for the same node
94
+ * is exactly how one operation's operand reaches another's result. The ordinal
95
+ * is 0 because a node used purely to produce a value for someone else's operand
96
+ * is never itself the target of an assignment, delete, or `in` test -- the one
97
+ * thing (compound assignment, update expressions) that ever mints a second
98
+ * operation from the same node happens at the node's own census candidate, not
99
+ * at a citing site.
100
+ */
101
+ /** The property whose installation completes an object literal, if it has one. */
102
+ const lastDataPropertyOf = (node) => {
103
+ const data = node.properties.filter((property) => ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property));
104
+ return data[data.length - 1] ?? null;
105
+ };
106
+ /**
107
+ * Where an `arguments` reference site publishes its value.
108
+ *
109
+ * ONE rule, read by both sides: `buildArgumentsObjectReference` publishes at
110
+ * this coordinate and `citeExpressionResult` cites it, and the publisher
111
+ * checks its own minted answer against this function rather than trusting
112
+ * that the two stayed in step. That check is the point -- a citation and a
113
+ * publication that drift apart produce no error at all, only an operation
114
+ * quietly withheld and, with it, every operation of the enclosing function.
115
+ *
116
+ * The shape depends on the phantom rest parameter's ordinal because
117
+ * `argumentsObjectValueAt` publishes two shapes: at ordinal 0 the phantom's
118
+ * own rest array IS the whole `arguments` object, and a single
119
+ * `reference`/`parameter-value` operation carries it; at ordinal P > 0 the
120
+ * object is P declared parameters concatenated with that tail, which takes an
121
+ * array allocation the reference feeds, and the allocation is what a consumer
122
+ * means by `arguments`.
123
+ */
124
+ const argumentsObjectResultAt = (nodeId, phantomOrdinal) => phantomOrdinal === 0
125
+ ? semanticResultId(operationId(nodeId, 'reference', 0), 'value')
126
+ : semanticResultId(operationId(nodeId, 'allocation', 0), 'value');
127
+ /**
128
+ * Where a name with no binding anywhere publishes its value.
129
+ *
130
+ * ONE rule, read by both sides, exactly like `argumentsObjectResultAt` above:
131
+ * `buildReference` publishes at this coordinate and `citeExpressionResult`
132
+ * cites it. A name the checker resolves to no symbol has no cell, so
133
+ * `GetValue` reads nothing and no `binding` operation exists to cite -- the
134
+ * generic `family === 'reference'` path predicted one regardless, because it
135
+ * reads syntax and the syntax is an identifier like any other.
136
+ */
137
+ const unresolvableValueResultAt = (nodeId) => semanticResultId(operationId(nodeId, 'reference', 0), 'value');
138
+ /** TypeScript's declarationless intrinsic `globalThis` publishes at the reference operation itself, like `this`. */
139
+ const globalThisValueResultAt = (nodeId) => semanticResultId(operationId(nodeId, 'reference', 0), 'value');
140
+ export const citeExpressionResult = (expression, facts, branch = 'expression') => {
141
+ const identities = facts.identities;
142
+ const real = unwrapErasedExpression(expression);
143
+ const literal = literalConstantOf(real);
144
+ if (literal !== null)
145
+ return { kind: 'source', source: { kind: 'constant', text: literal.text, literal: literal.literal } };
146
+ // `this` publishes its value directly: `ResolveThisBinding` returns a value,
147
+ // not a Reference Record, so there is no read to cite and nothing to assign
148
+ // through.
149
+ if (real.kind === ts.SyntaxKind.ThisKeyword) {
150
+ const id = operationId(identities.nodeIdOf(real), 'reference', 0);
151
+ return { kind: 'source', source: { kind: 'result', result: semanticResultId(id, 'value') } };
152
+ }
153
+ // `super` (in `super.x`/`super.x(...)`, never in the bare-callee `super(...)`
154
+ // shape -- see `census.ts`'s own carve-out) publishes its value the same
155
+ // direct way: `buildSuperReference` below mints the identical operation
156
+ // identity this predicts, holding `this`'s own runtime value under the home
157
+ // object's static type, so a member reached off it resolves starting one
158
+ // prototype above `this`'s own class instead of at it.
159
+ if (real.kind === ts.SyntaxKind.SuperKeyword) {
160
+ const id = operationId(identities.nodeIdOf(real), 'reference', 0);
161
+ return { kind: 'source', source: { kind: 'result', result: semanticResultId(id, 'value') } };
162
+ }
163
+ // `arguments` publishes its value directly too, and for the same reason as
164
+ // `this`: the magic binding resolves to no declaration anywhere, so there is
165
+ // no cell for `GetValue` to read and no `binding` operation any producer
166
+ // could ever mint for it. The generic `family === 'reference'` path below
167
+ // predicted one regardless -- it reads syntax, and the syntax is an
168
+ // identifier like any other -- so every consumer of an `arguments` read
169
+ // cited a result nothing publishes, and was withheld along with the rest of
170
+ // the enclosing function. That is what made `Object3D.add`'s
171
+ // `arguments.length` guard, and the eleven other `arguments` bodies in
172
+ // three.js, compile to nothing at all.
173
+ const argumentsOrdinal = facts.argumentsObjects.phantomOrdinalOf(real);
174
+ if (argumentsOrdinal !== null) {
175
+ return { kind: 'source', source: { kind: 'result', result: argumentsObjectResultAt(identities.nodeIdOf(real), argumentsOrdinal) } };
176
+ }
177
+ if (ts.isIdentifier(real) && facts.unresolvableNames.isIntrinsicGlobalThis(real)) {
178
+ return { kind: 'source', source: { kind: 'result', result: globalThisValueResultAt(identities.nodeIdOf(real)) } };
179
+ }
180
+ // A name that resolves to no binding at all publishes its value directly,
181
+ // for the same reason `arguments` does: there is no cell, so there is no
182
+ // `GetValue` to mint a `binding` operation for. Three's feature detection is
183
+ // full of these -- `typeof Float16Array !== 'undefined' && array instanceof
184
+ // Float16Array`, and the same shape for `XRWebGLBinding`, `XRWebGLLayer` and
185
+ // `__THREE_DEVTOOLS__` -- and every one of them cited a read nothing
186
+ // published, withholding the guard and the operations around it.
187
+ //
188
+ // Reading such a name usually throws (`unresolvableThrows`), so nothing
189
+ // downstream of this value is reachable -- except as `typeof`'s own operand
190
+ // (`isTypeofOperand`, ECMA-262 13.5.1.2's carve-out: `typeof` returns
191
+ // `"undefined"` for an unresolvable reference without ever calling
192
+ // `GetValue`), where the value really is reached, as the constant
193
+ // `undefined`. Either way this is honest rather than a fiction: the result
194
+ // exists so the graph can be built and BOTH answers -- the throw, and the
195
+ // one case that is not one -- are stated, not assumed.
196
+ if (ts.isIdentifier(real) && facts.unresolvableNames.hasNoCell(real)) {
197
+ return { kind: 'source', source: { kind: 'result', result: unresolvableValueResultAt(identities.nodeIdOf(real)) } };
198
+ }
199
+ // An object literal evaluates to its object only once every property is
200
+ // installed, so what a consumer cites is the last install, not the bare
201
+ // allocation. Citing the allocation would let `const o = { a: f() }` bind `o`
202
+ // before `f()` runs -- precisely the read the temporal dead zone exists to
203
+ // refuse -- because nothing would order the binding after the installs.
204
+ // The allocation producer mints that install as a `property` operation on the
205
+ // property's own node; the census routes no family to a PropertyAssignment,
206
+ // so the family is stated here rather than looked up.
207
+ const completing = ts.isObjectLiteralExpression(real) ? lastDataPropertyOf(real) : null;
208
+ const owner = completing ?? real;
209
+ const family = completing ? 'property' : familyOf(owner, facts.namespacePaths);
210
+ if (!family) {
211
+ return {
212
+ kind: 'unmodelled',
213
+ reason: `expression of syntax kind ${ts.SyntaxKind[real.kind]} has no normalized family to publish a citable result`
214
+ };
215
+ }
216
+ // A name's *value* is what a consumer needs, and that is the binding read
217
+ // GetValue publishes, not the Reference Record the resolution publishes.
218
+ // Citing the reference would hand a consumer a place where it asked for a
219
+ // value, and the two are not interchangeable at any layer below this one.
220
+ if (family === 'reference') {
221
+ const referenceId = operationId(identities.nodeIdOf(owner), 'reference', 0);
222
+ const readId = operationId(identities.nodeIdOf(owner), 'binding', 0);
223
+ return {
224
+ kind: 'source',
225
+ source: { kind: 'result', result: semanticResultId(readId, 'value') },
226
+ // The reference itself, for a consumer that assigns rather than reads.
227
+ reference: semanticResultId(referenceId, 'reference')
228
+ };
229
+ }
230
+ // A postfix update evaluates to the value *before* the increment, and the
231
+ // increment is what ordinal 0 publishes -- every writer cites it as the value
232
+ // stored. The old value is the ToNumeric coercion the update producer mints
233
+ // next, so a postfix consumer predicts ordinal 1 rather than 0.
234
+ const ordinal = ts.isPostfixUnaryExpression(owner) ? 1 : 0;
235
+ const id = operationId(identities.nodeIdOf(owner), family, ordinal);
236
+ // `a?.b` evaluates to the property when the receiver is present and to
237
+ // `undefined` when it is not, and that merged value is the `short-circuit`
238
+ // result. Citing `value` here would hand a consumer the property read alone,
239
+ // which does not exist on one of the two branches -- the reader would be
240
+ // scheduled in a block the writer never reaches.
241
+ const role = publishesShortCircuit(owner) && branch === 'expression' ? 'short-circuit' : 'value';
242
+ return { kind: 'source', source: { kind: 'result', result: semanticResultId(id, role) } };
243
+ };
244
+ const isDeclarationNamePosition = (node) => {
245
+ const parent = node.parent;
246
+ if (ts.isBindingElement(parent))
247
+ return parent.name === node || parent.propertyName === node;
248
+ if (ts.isVariableDeclaration(parent))
249
+ return parent.name === node;
250
+ if (ts.isParameter(parent))
251
+ return parent.name === node;
252
+ if (ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(parent))
253
+ return parent.name === node;
254
+ if (ts.isClassDeclaration(parent) || ts.isClassExpression(parent))
255
+ return parent.name === node;
256
+ if (ts.isMethodDeclaration(parent) || ts.isMethodSignature(parent))
257
+ return parent.name === node;
258
+ if (ts.isPropertyDeclaration(parent) || ts.isPropertySignature(parent))
259
+ return parent.name === node;
260
+ if (ts.isGetAccessorDeclaration(parent) || ts.isSetAccessorDeclaration(parent))
261
+ return parent.name === node;
262
+ if (ts.isEnumDeclaration(parent))
263
+ return parent.name === node;
264
+ if (ts.isEnumMember(parent))
265
+ return parent.name === node;
266
+ if (ts.isInterfaceDeclaration(parent))
267
+ return parent.name === node;
268
+ if (ts.isTypeAliasDeclaration(parent))
269
+ return parent.name === node;
270
+ if (ts.isModuleDeclaration(parent))
271
+ return parent.name === node;
272
+ if (ts.isTypeParameterDeclaration(parent))
273
+ return parent.name === node;
274
+ if (ts.isImportEqualsDeclaration(parent))
275
+ return parent.name === node;
276
+ return false;
277
+ };
278
+ const isPropertyAssignmentKeyPosition = (node) => {
279
+ const parent = node.parent;
280
+ // Shorthand `{ x }` is excluded on purpose: its name is simultaneously the
281
+ // key and a real reference to the local binding `x`, unlike `{ x: 1 }`'s key.
282
+ return ts.isPropertyAssignment(parent) && parent.name === node;
283
+ };
284
+ /**
285
+ * An import's local name and an export's public label are never resolved by
286
+ * looking anything up; a plain `export { x }`'s `x`, by contrast, *is* the
287
+ * local reference (there is no separate `propertyName` to carry it), which is
288
+ * why export specifiers are not treated symmetrically with import specifiers.
289
+ */
290
+ const isNonReferenceSpecifierPosition = (node) => {
291
+ const parent = node.parent;
292
+ if (ts.isImportSpecifier(parent))
293
+ return parent.name === node || parent.propertyName === node;
294
+ if (ts.isExportSpecifier(parent))
295
+ return parent.propertyName !== undefined && parent.name === node;
296
+ if (ts.isImportClause(parent))
297
+ return parent.name === node;
298
+ if (ts.isNamespaceImport(parent))
299
+ return parent.name === node;
300
+ if (ts.isNamespaceExport(parent))
301
+ return parent.name === node;
302
+ return false;
303
+ };
304
+ const isLabelPosition = (node) => {
305
+ const parent = node.parent;
306
+ if (ts.isLabeledStatement(parent))
307
+ return parent.label === node;
308
+ if (ts.isBreakOrContinueStatement(parent))
309
+ return parent.label === node;
310
+ return false;
311
+ };
312
+ /**
313
+ * Whether this name is the base of a chain link this compiler does not model.
314
+ *
315
+ * The base of a link that carries the `?.` itself is an ordinary read: `a` in
316
+ * `a?.b` is evaluated unconditionally, and that read is precisely the guard the
317
+ * short-circuit branches on. Refusing it would refuse the operand the whole
318
+ * construct is built from.
319
+ *
320
+ * What stays refused is a base further along a chain -- `a` in `a.b?.c`, where
321
+ * `a.b` is part of the chain but carries no `?.` of its own. Such a link
322
+ * short-circuits on a receiver that is not its own, and nothing here threads the
323
+ * chain's root to it.
324
+ */
325
+ const isOptionalChainBase = (node) => {
326
+ const parent = node.parent;
327
+ if (ts.isPropertyAccessExpression(parent) || ts.isElementAccessExpression(parent) || ts.isCallExpression(parent)) {
328
+ return parent.expression === node && ts.isOptionalChain(parent) && parent.questionDotToken === undefined;
329
+ }
330
+ return false;
331
+ };
332
+ const classifyIdentifier = (node) => {
333
+ if (isDeclarationNamePosition(node))
334
+ return { kind: 'skip' };
335
+ if (isPropertyAssignmentKeyPosition(node))
336
+ return { kind: 'skip' };
337
+ if (isNonReferenceSpecifierPosition(node))
338
+ return { kind: 'skip' };
339
+ if (isLabelPosition(node))
340
+ return { kind: 'skip' };
341
+ if (ts.isPartOfTypeNode(node))
342
+ return { kind: 'skip' };
343
+ const parent = node.parent;
344
+ if (ts.isPropertyAccessExpression(parent) && parent.name === node) {
345
+ if (parent.expression.kind === ts.SyntaxKind.SuperKeyword) {
346
+ return { kind: 'blocked', reason: 'super property references require home-object resolution semantics', missingPrimitive: 'P1' };
347
+ }
348
+ // An ordinary IdentifierName is never looked up in an environment: the
349
+ // whole property access already owns this as its static key.
350
+ return { kind: 'skip' };
351
+ }
352
+ if (isOptionalChainBase(node)) {
353
+ return { kind: 'blocked', reason: 'optional chaining requires short-circuit selection semantics', missingPrimitive: 'P0' };
354
+ }
355
+ return { kind: 'reference', form: 'identifier' };
356
+ };
357
+ const classifyPrivateIdentifier = (node) => {
358
+ // `class C { #x }`'s `#x` declares the private name; only access sites
359
+ // (`o.#x`, `#x in o`) resolve it against the enclosing class's private scope.
360
+ if (isDeclarationNamePosition(node))
361
+ return { kind: 'skip' };
362
+ // `o.#x`'s name half never arrives here at all -- `census.ts`'s
363
+ // `isValueReference` excludes a property access's own name, and
364
+ // `properties.ts` resolves it as the constant key it is. The grammar admits
365
+ // a private name in exactly one other position, so this is `#x in o` and
366
+ // nothing else: the brand check, whose entire question is whether a receiver
367
+ // the checker did NOT prove is an instance carries the private element.
368
+ // Answering it needs a runtime brand a fixed struct layout does not have --
369
+ // every instance of a class has every one of its members, so "does this
370
+ // object have `#x`" is not a question the layout can be asked. Refused by
371
+ // name rather than answered with a constant `true`, which would be right for
372
+ // every receiver the checker proves and wrong for the ones the operator
373
+ // exists to distinguish.
374
+ return {
375
+ kind: 'blocked',
376
+ reason: 'a `#x in o` brand check needs a runtime private-element table no fixed layout carries',
377
+ missingPrimitive: 'P1'
378
+ };
379
+ };
380
+ /** Whether this name is the target of a plain `=`, which writes without reading. */
381
+ const isPlainAssignmentTarget = (node) => {
382
+ const parent = node.parent;
383
+ return ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
384
+ };
385
+ /**
386
+ * Whether `node` sits directly in a `typeof` expression's operand position,
387
+ * over any purely syntactic `(...)` wrapper (`dead-typeof-guards.ts`'s
388
+ * `unwrapParens` strips the identical wrapper for the whole guard; this
389
+ * strips it for the operand alone).
390
+ *
391
+ * ECMA-262 13.5.1.2 `typeof`: it evaluates its operand to a Reference Record
392
+ * and only THEN asks `IsUnresolvableReference` -- and if that is true,
393
+ * returns `"undefined"` directly, WITHOUT ever calling `GetValue`. That is a
394
+ * carve-out `typeof` alone has: `x` with no cell anywhere still throws for
395
+ * every other reader (an ordinary read, an argument, a callee), because
396
+ * `GetValue` really does throw for them -- `typeof x` is the one shape the
397
+ * spec defines a non-throwing answer for. `censusUnresolvableNames`'s own doc
398
+ * comment is written about exactly this idiom (`typeof Float16Array !==
399
+ * 'undefined'`, three.js), which is what makes skipping this carve-out a
400
+ * silent miscompile rather than a missed optimization: `typeof Deno !==
401
+ * 'undefined'` would abort where the language returns `false`.
402
+ */
403
+ const isTypeofOperand = (node) => {
404
+ let current = node;
405
+ while (ts.isParenthesizedExpression(current.parent))
406
+ current = current.parent;
407
+ return ts.isTypeOfExpression(current.parent) && current.parent.expression === current;
408
+ };
409
+ /**
410
+ * Whether `const alias = subject` names a callable whose type is settled PER
411
+ * CALL rather than once at the declaration.
412
+ *
413
+ * A bare identifier never CHOOSES between callable values -- it names exactly
414
+ * one declaration, the "alias hop" shape `genericSubjectOf` (identities.ts)
415
+ * and `bindingHoldsExactly` (invocations.ts) both key on. For a GENERIC
416
+ * subject, reading that declaration's own type asks the checker for `box`'s
417
+ * unspecialized declared type independent of any call, which is what
418
+ * `calleeAwareTypeAt` exists to avoid: it closes every read of the alias to
419
+ * the same (wrong) type regardless of which instantiation the call names, and
420
+ * `certify` then refused the alias's own binding for publishing a per-copy
421
+ * type nothing could convert into the un-narrowed one.
422
+ *
423
+ * The generic test is the whole condition, and it is not a heuristic. An
424
+ * OVERLOAD SET is the other thing a bare identifier can alias, and it wants
425
+ * the opposite answer: `const asValue = decorate` over `decorate(text)` /
426
+ * `decorate(text, suffix)` is ONE runtime function with ONE calling
427
+ * convention, joined by `sharedAbiOf` (representation/derive.ts) across every
428
+ * arm. Narrowing it per call publishes whichever arm that call selected --
429
+ * `(string) -> string` at `asValue('c')` -- and nothing converts the
430
+ * implementation's joined `(string, optional(string)) -> string` into it, so
431
+ * the program refused entirely. Per-call narrowing is right where the call
432
+ * MAKES the type and wrong where it merely picks an arm of one that already
433
+ * exists.
434
+ */
435
+ const aliasIsInstantiatedPerCall = (checker, initializer) => ts.isIdentifier(initializer) &&
436
+ checker
437
+ .getTypeAtLocation(initializer)
438
+ .getCallSignatures()
439
+ .some((signature) => (signature.typeParameters?.length ?? 0) > 0);
440
+ const buildReference = (candidate, node, form, context) => {
441
+ const id = mintOperationId(context.ordinals, candidate.id, 'reference');
442
+ // An identifier resolved and read only to be invoked immediately reads
443
+ // through the same narrowing an invocation's own callee operand already
444
+ // gets (`calleeAwareTypeAt`, shared.ts): the checker resolved this call to
445
+ // exactly one signature, and that is a stronger, narrower fact than "the
446
+ // name's general declared type", which for an overloaded ambient global
447
+ // (`setTimeout`, `fetch`, `clearTimeout` -- two incompatible DOM/lib
448
+ // overloads) has no single physical calling convention at all. Deriving the
449
+ // reference/binding-read pair from the general type asked a question the
450
+ // overload set was never going to answer, even though the invocation right
451
+ // next to it already asked -- and answered -- the narrower one. A
452
+ // non-callee identifier is untouched: `calleeAwareTypeAt` falls back to the
453
+ // plain type the moment `enclosingCallIfCallee` says this name is not a
454
+ // callee.
455
+ //
456
+ // `new` is deliberately excluded from this narrowing. `calleeAwareTypeAt`'s
457
+ // narrowed answer (`resolvedSignatureTypeOf`, structural.ts) is always a
458
+ // bare `{kind:'signature', construct:[...]}` -- it names no declared anchor,
459
+ // by construction, because the checker's resolved signature carries no
460
+ // reference back to the class it came from. For an ordinary function that
461
+ // costs nothing: a function's identity for conversion purposes is its ABI,
462
+ // full stop. For a class named directly in `new MyClass(...)`, it is a
463
+ // regression: the *general* type already carries the class's own
464
+ // `class-constructor` anchor -- richer than any one resolved signature,
465
+ // needed for `constructor-family`/class-ref conversions elsewhere in the
466
+ // same program -- and overload widening across a class's own constructors
467
+ // is `deriveClassConstructor`'s job (via `sharedAbiOf`'s widening), not a
468
+ // per-call-site narrowing here. Applying the narrowing there mints a second,
469
+ // anchor-less carrier for the identical class, and nothing converts between
470
+ // the two: exactly the `constructor-family -> constructor-value-dispatch`
471
+ // split this comment used to introduce before it was scoped to non-`new`.
472
+ // A namespace-qualified member (`Debug.assert`) resolves to its member's
473
+ // symbol the way a bare `assert` inside the namespace body does -- one
474
+ // rule, `namespace-paths.ts`, shared with the census that gave this node
475
+ // the `reference` family in the first place.
476
+ const symbol = ts.isPropertyAccessExpression(node)
477
+ ? (context.namespacePaths.memberSymbolOf(node) ?? undefined)
478
+ : valueSymbolAt(context.checker, node);
479
+ const call = ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) ? enclosingCallIfCallee(node) : null;
480
+ const variable = symbol?.valueDeclaration;
481
+ const declarationNode = symbol ? context.identities.valueDeclarationOfSymbol(symbol) : null;
482
+ const constInitializer = call &&
483
+ !ts.isNewExpression(call) &&
484
+ variable &&
485
+ ts.isVariableDeclaration(variable) &&
486
+ variable.type === undefined &&
487
+ ts.getJSDocType(variable) === undefined &&
488
+ variable.initializer !== undefined &&
489
+ !ts.isArrowFunction(variable.initializer) &&
490
+ !ts.isFunctionExpression(variable.initializer) &&
491
+ !aliasIsInstantiatedPerCall(context.checker, variable.initializer) &&
492
+ ts.isVariableDeclarationList(variable.parent) &&
493
+ (variable.parent.flags & ts.NodeFlags.Const) !== 0
494
+ ? variable.initializer
495
+ : null;
496
+ // A const with no TypeScript or JSDoc annotation physically keeps exactly its initializer when
497
+ // that initializer CHOOSES between callable values. A function expression
498
+ // or arrow is itself the one callable allocation, and asking for the
499
+ // initializer's contextual type at a direct call can expose its annotated
500
+ // RESULT (`(): Iterable<T> => ...`) instead of its callable type. Keep those
501
+ // on the binding's ordinary callee-aware path; there is no union arm to
502
+ // recover from them in the first place.
503
+ // When the checker gives a union of functions a common callable view at a
504
+ // direct call, that view is not a conversion the runtime performs: the cell
505
+ // still holds one original arm and [[Call]] dispatches through it. Publish
506
+ // the initializer's structural type here so the existing tagged-union call
507
+ // lowering sees the carrier the binding actually holds.
508
+ const type = (ts.isIdentifier(node) ? destinationPreservesDeclaredAbsence(context, node, declarationNode) : null) ??
509
+ (constInitializer
510
+ ? context.types.typeAt(constInitializer)
511
+ : call && !ts.isNewExpression(call)
512
+ ? calleeAwareTypeAt(context, node)
513
+ : context.types.typeAt(node));
514
+ if (ts.isIdentifier(node) && context.unresolvableNames.isIntrinsicGlobalThis(node)) {
515
+ // `globalThis` is a language-owned singleton, but the checker represents
516
+ // it as a synthetic symbol with no declaration. Its physical surface is
517
+ // necessarily open: hosts and programs may install arbitrary global
518
+ // properties. Carry the object itself as one native dictionary and only
519
+ // box its values, whose source type is genuinely `unknown`.
520
+ const unknown = context.table.intern({ kind: 'primitive', primitive: 'unknown' });
521
+ const globalType = context.table.intern({
522
+ kind: 'object',
523
+ members: [],
524
+ index: [{ key: 'string', value: unknown, readonly: false }],
525
+ membersDropped: false
526
+ });
527
+ const operation = {
528
+ id,
529
+ family: 'reference',
530
+ form: 'global-this',
531
+ strict: ts.isExternalModule(node.getSourceFile()),
532
+ unresolvableThrows: false,
533
+ hasNoCell: false,
534
+ caller: candidate.caller,
535
+ operands: [],
536
+ results: [mintResult(id, 'value', globalType)],
537
+ completion: normalCompletion,
538
+ effects: { ...pureEffects, readsMutableState: true },
539
+ evaluationOrdinal: candidate.evaluationOrdinal
540
+ };
541
+ return { kind: 'operations', operations: [operation], edges: [] };
542
+ }
543
+ // Every citation of the name `undefined` is the language constant
544
+ // (`literalConstantOf`). A declaration of that name would make some
545
+ // citations a real binding read and leave the two disagreeing, silently, on
546
+ // whichever side the reader happened to take -- so it is refused here rather
547
+ // than answered twice.
548
+ if (ts.isIdentifier(node) && node.text === 'undefined' && (symbol?.declarations?.length ?? 0) > 0) {
549
+ return {
550
+ kind: 'blocked',
551
+ blocker: blocked(candidate.id, 'reference', 'a declaration named `undefined` shadows the language constant, which is not modelled', 'P1')
552
+ };
553
+ }
554
+ // `hasNoCell` is the NAME fact (no symbol anywhere); `unresolvableThrows` is
555
+ // the BEHAVIOR that usually follows from it, except for `typeof`
556
+ // (`isTypeofOperand`'s own comment states the carve-out: ECMA-262 13.5.1.2
557
+ // returns `"undefined"` for exactly this shape without ever calling
558
+ // `GetValue`). Kept apart, per `ReferenceOperation.hasNoCell`'s own comment,
559
+ // because a `value` result still has to be published either way -- there is
560
+ // no cell a `binding` read could ever be minted against -- and only the
561
+ // COMPLETION (throw, or the constant `typeof` returns) differs.
562
+ const hasNoCell = symbol === undefined;
563
+ const unresolvableThrows = hasNoCell && !isTypeofOperand(node);
564
+ const operation = {
565
+ id,
566
+ family: 'reference',
567
+ form,
568
+ strict: ts.isExternalModule(node.getSourceFile()),
569
+ unresolvableThrows,
570
+ hasNoCell,
571
+ caller: candidate.caller,
572
+ operands: [],
573
+ // A name with no cell publishes its value HERE, at the coordinate
574
+ // `unresolvableValueResultAt` states, because the `binding` read below is
575
+ // never minted for it -- there is no declaration to read through. The
576
+ // `reference` result is kept alongside so an assignment consumer, which
577
+ // cites the Reference rather than a value, is unaffected.
578
+ results: hasNoCell && ts.isIdentifier(node)
579
+ ? [mintResult(id, 'reference', type), mintResult(id, 'value', type)]
580
+ : [mintResult(id, 'reference', type)],
581
+ completion: unresolvableThrows ? throwingCompletion : normalCompletion,
582
+ effects: { ...pureEffects, readsMutableState: true },
583
+ evaluationOrdinal: candidate.evaluationOrdinal
584
+ };
585
+ // Resolving a name produces a Reference Record, not a value: GetValue is a
586
+ // separate step, and it is the step every consumer of the name actually
587
+ // needs. Publishing only the reference leaves a graph in which nothing ever
588
+ // reads a binding, and each consumer would have to invent the read itself --
589
+ // which is how one program ends up with several disagreeing answers to
590
+ // "what does this name hold".
591
+ // The *value* declaration, not the anchor: a name in value position reads
592
+ // whatever holds the value, and for a merged ambient global (`interface
593
+ // Error` + `declare var Error`) that is the second declaration, not the
594
+ // first. `frontend.ts`'s `bindAmbientValue` keys the host placement this
595
+ // read has to find by the same rule, so the two agree by construction.
596
+ const declaration = symbol ? context.identities.symbolValueDeclarationId(symbol, node) : null;
597
+ if (declaration !== null &&
598
+ (context.hostSingletonBindings.has(declaration) || context.hostNamespaceBindings.has(declaration)) &&
599
+ (context.globalHostMutationTaint.has('*') || context.globalHostMutationTaint.has(declaration))) {
600
+ return {
601
+ kind: 'blocked',
602
+ blocker: blocked(candidate.id, 'reference', 'an authenticated host global may be mutated through globalThis, so its bare native binding identity is not stable', 'P0')
603
+ };
604
+ }
605
+ // The program's own script-level `var` is an own property of the global
606
+ // object (9.1.1.4.17), so `Object.defineProperty(globalThis, 'X', …)` writes
607
+ // the same cell this bare read names. The mutation census files that write
608
+ // against the declaration; a read that ignored it would answer with the
609
+ // value the redefinition replaced -- the stale-binding miscompile, not a
610
+ // refusal. `properties.ts` refuses the `globalThis.X` spelling by the same
611
+ // rule; a `'*'` taint says the census could not place the write at all.
612
+ if (declaration !== null &&
613
+ symbol?.valueDeclaration !== undefined &&
614
+ isScriptGlobalObjectPropertyDeclaration(symbol.valueDeclaration) &&
615
+ (context.globalHostMutationTaint.has('*') || context.globalHostMutationTaint.has(declaration))) {
616
+ return {
617
+ kind: 'blocked',
618
+ blocker: blocked(candidate.id, 'reference', "a script's global var is redefined through the global object (Object.defineProperty(globalThis, ...)), so its bare read has two writers this backend does not reconcile", 'P0')
619
+ };
620
+ }
621
+ // A plain `=` target is resolved and written, never read: PutValue takes the
622
+ // Reference, not a value. Reading it anyway would invent an access the
623
+ // program does not perform -- and for a `const` or a `let` before its
624
+ // initializer, that invented read is a temporal-dead-zone throw the source
625
+ // never had. A compound target is excluded because it genuinely does read.
626
+ if (!declaration || isPlainAssignmentTarget(node))
627
+ return { kind: 'operations', operations: [operation], edges: [] };
628
+ const { mutable, temporalDeadZone } = declarationNode ? bindingKindOf(declarationNode) : { mutable: true, temporalDeadZone: false };
629
+ const readId = mintOperationId(context.ordinals, candidate.id, 'binding');
630
+ const read = {
631
+ id: readId,
632
+ family: 'binding',
633
+ action: 'read',
634
+ declaration,
635
+ mutable,
636
+ temporalDeadZone,
637
+ ...(context.commonJsBindings.has(declaration)
638
+ ? {
639
+ commonJs: {
640
+ global: context.commonJsBindings.get(declaration),
641
+ owner: regionId(context.identities.nodeIdOf(node.getSourceFile()), 'module-body'),
642
+ ...(context.commonJsModuleRecords.moduleExportExpressionAt(node) ? { nativeRecord: true } : {})
643
+ }
644
+ }
645
+ : {}),
646
+ caller: candidate.caller,
647
+ operands: [operand('reference', 0, { kind: 'result', result: semanticResultId(id, 'reference') }, type, { kind: 'provenance' })],
648
+ results: [mintResult(readId, 'value', type)],
649
+ // A read of a dead-zone binding throws; one of an initialized cell cannot.
650
+ completion: temporalDeadZone ? throwingCompletion : normalCompletion,
651
+ effects: { ...pureEffects, readsMutableState: true },
652
+ evaluationOrdinal: candidate.evaluationOrdinal
653
+ };
654
+ return {
655
+ kind: 'operations',
656
+ operations: [operation, read],
657
+ edges: [
658
+ { kind: 'value', result: semanticResultId(id, 'reference'), to: readId, role: 'reference', ordinal: 0 },
659
+ ...hoistedInitializerEdges(context.identities, declarationNode, node, readId)
660
+ ]
661
+ };
662
+ };
663
+ /**
664
+ * The precedence a HOISTED function declaration's own binding needs when a
665
+ * read of its name appears above it.
666
+ *
667
+ * `FunctionDeclarationInstantiation` initializes a function declaration's
668
+ * binding before the first statement of the enclosing body runs, so a call
669
+ * written above the declaration reaches a cell that already holds the
670
+ * function. Nothing in the graph says that on its own: a binding read cites
671
+ * the *reference*, never the write (the same gap `orderOwnerOperations`'s
672
+ * catch-clause prologue needed an explicit edge for), and the census's
673
+ * source-order ordinal then schedules the initialize AFTER the read. hono's
674
+ * `compose` is the shape -- `return dispatch(0)` above `async function
675
+ * dispatch(i)`, both closing over the same `let index` -- and it emitted a
676
+ * call on a cell no operation had written, which clang caught as "use of
677
+ * undeclared identifier".
678
+ *
679
+ * Only for a read that PRECEDES the declaration, and this is what keeps the
680
+ * edge from over-stating the hoist. Source order already orders a read below
681
+ * it. And the function's own body -- where a recursive read lives -- is inside
682
+ * the declaration, so it is excluded by the same test: claiming the enclosing
683
+ * body's prologue runs before a nested body's statements would be false, and a
684
+ * read in a body the declaration encloses is ordered by the call that reaches
685
+ * it, not by this.
686
+ *
687
+ * A `let`/`const` gets no such edge, deliberately: its binding is NOT
688
+ * initialized early, and a read above it is a temporal-dead-zone throw whose
689
+ * order the source already states.
690
+ */
691
+ const hoistedInitializerEdges = (identities, declarationNode, read, readId) => {
692
+ if (!declarationNode || !ts.isFunctionDeclaration(declarationNode))
693
+ return [];
694
+ if (declarationNode.pos <= read.pos)
695
+ return [];
696
+ return [{ kind: 'evaluation', from: operationId(identities.nodeIdOf(declarationNode), 'binding', 0), to: readId }];
697
+ };
698
+ /**
699
+ * Whether a `this` here can throw before producing a value.
700
+ *
701
+ * A derived constructor's `this` is uninitialized until `super()` returns, and
702
+ * reading it before that is a ReferenceError. Everywhere else the binding is
703
+ * established before the body runs and the read cannot fail. The walk stops at
704
+ * the first non-arrow function because an arrow has no this-binding of its own:
705
+ * `GetThisEnvironment` skips it, which is the same reason the receiver an arrow
706
+ * reads belongs to its enclosing method.
707
+ */
708
+ const thisCanThrow = (node) => {
709
+ for (let current = node.parent; current; current = current.parent) {
710
+ if (ts.isArrowFunction(current))
711
+ continue;
712
+ if (ts.isConstructorDeclaration(current)) {
713
+ const classNode = current.parent;
714
+ if (!ts.isClassLike(classNode))
715
+ return false;
716
+ return (classNode.heritageClauses ?? []).some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword);
717
+ }
718
+ if (ts.isFunctionLike(current) || ts.isClassStaticBlockDeclaration(current))
719
+ return false;
720
+ }
721
+ return false;
722
+ };
723
+ /**
724
+ * Whether the nearest scope a `this` here would be normalized under is an
725
+ * arrow.
726
+ *
727
+ * Mirrors the walk `callerOf` (census.ts) performs to decide which owner an
728
+ * operation belongs to, stopping at the same boundaries -- reusing the same
729
+ * stopping set here, rather than inventing a second one, is what keeps this
730
+ * answer from silently drifting away from the owner census actually assigns.
731
+ * An arrow owner has no this-binding of its own to declare in its calling
732
+ * convention (`GetThisEnvironment` skips it), so a `this` whose nearest owner
733
+ * is an arrow is not reading that owner's own frame -- it is reading whatever
734
+ * the lexically enclosing scope bound, which crosses a physical-body boundary.
735
+ */
736
+ const nearestOwningScopeIsArrow = (node) => {
737
+ for (let current = node.parent; current; current = current.parent) {
738
+ if (ts.isArrowFunction(current))
739
+ return true;
740
+ if (ts.isFunctionDeclaration(current) ||
741
+ ts.isFunctionExpression(current) ||
742
+ ts.isMethodDeclaration(current) ||
743
+ ts.isConstructorDeclaration(current) ||
744
+ ts.isGetAccessorDeclaration(current) ||
745
+ ts.isSetAccessorDeclaration(current) ||
746
+ ts.isPropertyDeclaration(current) ||
747
+ ts.isClassStaticBlockDeclaration(current)) {
748
+ return false;
749
+ }
750
+ }
751
+ return false;
752
+ };
753
+ /** The class whose constructor object a static `this` denotes, plus whether the nearest owner is a non-callable static block. */
754
+ const staticThisOwner = (node) => {
755
+ for (let current = node.parent; current; current = current.parent) {
756
+ if (ts.isArrowFunction(current))
757
+ continue;
758
+ if (ts.isClassStaticBlockDeclaration(current)) {
759
+ return ts.isClassLike(current.parent) ? { classNode: current.parent, block: true } : null;
760
+ }
761
+ if (ts.isMethodDeclaration(current) ||
762
+ ts.isGetAccessorDeclaration(current) ||
763
+ ts.isSetAccessorDeclaration(current) ||
764
+ ts.isPropertyDeclaration(current)) {
765
+ const isStatic = (ts.getCombinedModifierFlags(current) & ts.ModifierFlags.Static) !== 0;
766
+ return isStatic && ts.isClassLike(current.parent) ? { classNode: current.parent, block: false } : null;
767
+ }
768
+ if (ts.isFunctionLike(current) || ts.isClassLike(current))
769
+ return null;
770
+ }
771
+ return null;
772
+ };
773
+ /**
774
+ * Whether this `this` is genuinely bound to an enclosing class, as opposed to
775
+ * the global object, `undefined`, or some other binding this layer does not
776
+ * model.
777
+ *
778
+ * The checker already resolves `ResolveThisBinding` for us -- `this` inside a
779
+ * class member (through any number of nested arrows) resolves to the class
780
+ * declaration's own symbol, the same symbol regardless of how many arrow
781
+ * frames sit between the keyword and the member. Reusing that answer, rather
782
+ * than re-deriving "does this method have a receiver" a second way here, is
783
+ * what keeps this check from becoming a second authority that can disagree
784
+ * with `structural.ts`'s over the same question.
785
+ */
786
+ const isClassBoundThis = (node, context) => {
787
+ const symbol = context.checker.getSymbolAtLocation(node);
788
+ return (symbol?.declarations ?? []).some((declaration) => ts.isClassLike(declaration) || ts.isObjectLiteralExpression(declaration));
789
+ };
790
+ /**
791
+ * `this`: one operation that resolves the binding and publishes its value.
792
+ *
793
+ * Every other reference form is two operations -- resolve, then `GetValue` --
794
+ * because a Reference Record is a real intermediate a consumer can assign
795
+ * through. `this` has no such intermediate, so splitting it would mint a read
796
+ * of a Reference that the language never creates.
797
+ */
798
+ const buildThisReference = (candidate, node, context) => {
799
+ // An arrow closes over `this` rather than binding one: physically, reading
800
+ // it means capturing the enclosing method's receiver across a function-
801
+ // object boundary. That capture is installed (`targets/cpp/captures.ts`
802
+ // computes the environment; `ir/lower-operands.ts`'s `resolveRequiredOperand`
803
+ // lowers the read), gated on this operand's own *role* rather than on a new
804
+ // `OperandSource` variant -- `role` is an ordinary string
805
+ // (`semantics/model/operands.ts`), and `captured-receiver` is this
806
+ // producer's own proof, computed once, right here, that `isClassBoundThis`
807
+ // already confirmed the read resolves to an enclosing class's own instance
808
+ // -- not to `undefined`, the global object, or some other binding this
809
+ // layer does not model. Every other `this` -- inside a method or
810
+ // constructor's own body, or inside a plain function with no lexically
811
+ // enclosing class receiver at all -- keeps the ordinary `receiver` role, so
812
+ // a genuinely undeclared read still refuses exactly as it always has
813
+ // (`ir/lower-operands.ts`'s `resolveRequiredOperand`, unchanged for that
814
+ // role). Nothing downstream can mistake one for the other: the role a
815
+ // *plain* function's dynamic `this` might coincidentally share a carrier
816
+ // with is never `captured-receiver`, because only this one condition ever
817
+ // mints that role.
818
+ const captured = nearestOwningScopeIsArrow(node) && isClassBoundThis(node, context);
819
+ const staticOwner = staticThisOwner(node);
820
+ const id = mintOperationId(context.ordinals, candidate.id, 'reference');
821
+ const type = staticOwner ? context.types.valueTypeAt(staticOwner.classNode) : context.types.typeAt(node);
822
+ const canThrow = thisCanThrow(node);
823
+ const operation = {
824
+ id,
825
+ family: 'reference',
826
+ form: 'this',
827
+ strict: ts.isExternalModule(node.getSourceFile()),
828
+ unresolvableThrows: canThrow,
829
+ hasNoCell: false,
830
+ caller: candidate.caller,
831
+ // The receiver is supplied by the frame the caller established, so it is
832
+ // recorded as provenance rather than as a runtime step: nothing here
833
+ // evaluates it, and an operand that claimed to would order an evaluation
834
+ // the language does not perform.
835
+ operands: [
836
+ operand(staticOwner?.block ? 'static-class-receiver' : captured ? 'captured-receiver' : 'receiver', 0, { kind: 'receiver' }, type, {
837
+ kind: 'provenance'
838
+ })
839
+ ],
840
+ results: [mintResult(id, 'value', type)],
841
+ completion: canThrow ? throwingCompletion : normalCompletion,
842
+ effects: { ...pureEffects, readsMutableState: true },
843
+ evaluationOrdinal: candidate.evaluationOrdinal
844
+ };
845
+ return { kind: 'operations', operations: [operation], edges: [] };
846
+ };
847
+ /**
848
+ * `super` (in `super.x`/`super.x(...)`): one operation, the same shape
849
+ * `this` gets and for the same reason -- `MakeSuperPropertyReference` calls
850
+ * `GetThisEnvironment().GetThisBinding()` to build the reference's `thisValue`
851
+ * component, so evaluating a super reference publishes a value directly and
852
+ * can throw before it does, exactly as `this` can.
853
+ *
854
+ * The one place this genuinely differs from `buildThisReference` is `type`:
855
+ * a `this` read publishes the checker's type AT the keyword, which for `this`
856
+ * is the enclosing class's own instance type, but the checker types a `super`
857
+ * keyword as the class's *base* -- `[[HomeObject]]`'s prototype, exactly the
858
+ * fact `GetSuperBase` reads -- without this compiler asking it to resolve
859
+ * anything: `class Derived extends Base { m() { super.x } }` types the
860
+ * `super` in `super.x` as `Base`, verified directly against the checker
861
+ * rather than assumed. Publishing THAT type as this operation's result is
862
+ * what makes a member reached off it -- `classMemberText`,
863
+ * emit-properties.ts -- start its lookup one class above `this`'s own,
864
+ * which is the whole of what a home object resolution has to decide here:
865
+ * which class a member name resolves against is a fully static fact for a
866
+ * class method, so no runtime `[[HomeObject]]` slot is needed to decide it.
867
+ * The VALUE, in every other respect, is `this`'s own value unchanged --
868
+ * `super.x` reads a member starting one prototype above `this`'s class and
869
+ * calls it (when called) WITH `this` as receiver, never with a `Base`-typed
870
+ * value substituted in -- so the operand below is the identical
871
+ * `receiver`/`captured-receiver` provenance `buildThisReference` reads,
872
+ * differing only in which type is published alongside it. An implicit
873
+ * `Derived` argument reaching a callable frame typed for `Base`'s own
874
+ * receiver is an ordinary base-class upcast, which the emitted C++
875
+ * inheritance (`records.ts`) already allows without help from this operation.
876
+ */
877
+ /**
878
+ * An `arguments` reference site: the value, published where the citer looks.
879
+ *
880
+ * `argumentsObjectValueAt` (`bindings.ts`) already builds this value -- it is
881
+ * what `587286fc1` added so a `...arguments` spread had an operand to cite --
882
+ * and this is the same construction reached from an ordinary reference
883
+ * instead of from a spread. Reusing it is not a convenience: the phantom rest
884
+ * parameter's `reference`/`parameter-value` operation is ALSO what
885
+ * `projection/abi.ts`'s `parameterCarrierKeys` counts as evidence that the
886
+ * body physically binds that slot, so a body reading `arguments` stops
887
+ * blocking with "binds 1 physical parameter(s) but the ABI declares 2" by
888
+ * publishing the value it was already missing -- one operation answering both.
889
+ *
890
+ * Returned BEFORE `buildReference`'s own mint, never after: that function
891
+ * opens by taking `reference` ordinal 0 at this node for the Reference Record,
892
+ * and the phantom parameter read has to be the one holding it.
893
+ */
894
+ /**
895
+ * Whether this `arguments` site is WRITTEN THROUGH rather than read.
896
+ *
897
+ * Every reference site mints its own copy of the `arguments` object -- see
898
+ * `argumentsObjectValueAt`'s own note that this is "correct only because
899
+ * `arguments` is exclusively READ". A write breaks exactly that premise:
900
+ * `arguments[0] = 5; return arguments[0]` would store into one fresh array
901
+ * and read from a second, answering the original argument and never the
902
+ * stored value. Nothing downstream can see that -- the program compiles, the
903
+ * certificate is clean, and the answer is quietly wrong -- so the site is
904
+ * refused here instead.
905
+ *
906
+ * It is only the write THROUGH the object that is refused, never a read: an
907
+ * `arguments[i]` on the right of an assignment, or anywhere else, is one of
908
+ * the reads this whole path exists to publish.
909
+ *
910
+ * `arguments = x` itself needs no case: it is an early SyntaxError in strict
911
+ * mode, and every ES module is strict.
912
+ */
913
+ const isWrittenThroughArguments = (node) => {
914
+ const access = node.parent;
915
+ if (!ts.isElementAccessExpression(access) && !ts.isPropertyAccessExpression(access))
916
+ return false;
917
+ if (access.expression !== node)
918
+ return false;
919
+ const parent = access.parent;
920
+ if (ts.isBinaryExpression(parent) && parent.left === access)
921
+ return isAssignmentOperatorKind(parent.operatorToken.kind);
922
+ if (ts.isPostfixUnaryExpression(parent))
923
+ return true;
924
+ if (ts.isPrefixUnaryExpression(parent)) {
925
+ return parent.operator === ts.SyntaxKind.PlusPlusToken || parent.operator === ts.SyntaxKind.MinusMinusToken;
926
+ }
927
+ return ts.isDeleteExpression(parent);
928
+ };
929
+ const buildArgumentsObjectReference = (candidate, node, phantomOrdinal, context) => {
930
+ if (isWrittenThroughArguments(node)) {
931
+ return {
932
+ kind: 'blocked',
933
+ blocker: blocked(candidate.id, 'reference', 'a write through the `arguments` object; every reference site publishes its own copy, so the store would be invisible to every later read', 'P1')
934
+ };
935
+ }
936
+ const built = argumentsObjectValueAt(node, candidate.id, candidate.caller, candidate.evaluationOrdinal, context);
937
+ // The census said this site has a phantom at `phantomOrdinal`; the builder
938
+ // re-derives the same fact and would answer `null` if it disagreed. Neither
939
+ // outcome is guessed at.
940
+ if (!built) {
941
+ return {
942
+ kind: 'blocked',
943
+ blocker: blocked(candidate.id, 'reference', 'the `arguments` census recognized a phantom rest parameter at this site and the value builder did not', 'P1')
944
+ };
945
+ }
946
+ // The publication and the citation are two authorities over one identity,
947
+ // and a disagreement between them is invisible -- a withheld operation, no
948
+ // error. So the publisher checks the citer's own rule against what it
949
+ // actually minted, and refuses out loud instead.
950
+ const predicted = argumentsObjectResultAt(candidate.id, phantomOrdinal);
951
+ if (built.value !== predicted) {
952
+ return {
953
+ kind: 'blocked',
954
+ blocker: blocked(candidate.id, 'reference', `an \`arguments\` site publishes its value as ${built.value}, and \`citeExpressionResult\` cites ${predicted}`, 'P1')
955
+ };
956
+ }
957
+ return { kind: 'operations', operations: built.operations, edges: built.edges };
958
+ };
959
+ const buildSuperReference = (candidate, node, context) => {
960
+ const captured = nearestOwningScopeIsArrow(node) && isClassBoundThis(node, context);
961
+ const id = mintOperationId(context.ordinals, candidate.id, 'reference');
962
+ const type = context.types.typeAt(node);
963
+ const canThrow = thisCanThrow(node);
964
+ const operation = {
965
+ id,
966
+ family: 'reference',
967
+ form: 'super-property',
968
+ strict: ts.isExternalModule(node.getSourceFile()),
969
+ unresolvableThrows: canThrow,
970
+ hasNoCell: false,
971
+ caller: candidate.caller,
972
+ operands: [operand(captured ? 'captured-receiver' : 'receiver', 0, { kind: 'receiver' }, type, { kind: 'provenance' })],
973
+ results: [mintResult(id, 'value', type)],
974
+ completion: canThrow ? throwingCompletion : normalCompletion,
975
+ effects: { ...pureEffects, readsMutableState: true },
976
+ evaluationOrdinal: candidate.evaluationOrdinal
977
+ };
978
+ return { kind: 'operations', operations: [operation], edges: [] };
979
+ };
980
+ export const createReferenceProducer = (context) => ({
981
+ family: 'reference',
982
+ contribute: (candidate) => {
983
+ const node = candidate.node;
984
+ if (node.kind === ts.SyntaxKind.ThisKeyword)
985
+ return buildThisReference(candidate, node, context);
986
+ if (node.kind === ts.SyntaxKind.SuperKeyword)
987
+ return buildSuperReference(candidate, node, context);
988
+ if (ts.isIdentifier(node)) {
989
+ // Ahead of `classifyIdentifier`, which reads only syntax and would call
990
+ // this an ordinary name resolution -- the one thing `arguments` is not.
991
+ const phantomOrdinal = context.argumentsObjects.phantomOrdinalOf(node);
992
+ if (phantomOrdinal !== null)
993
+ return buildArgumentsObjectReference(candidate, node, phantomOrdinal, context);
994
+ const classification = classifyIdentifier(node);
995
+ if (classification.kind === 'skip')
996
+ return { kind: 'operations', operations: [], edges: [] };
997
+ if (classification.kind === 'blocked') {
998
+ return { kind: 'blocked', blocker: blocked(candidate.id, 'reference', classification.reason, classification.missingPrimitive) };
999
+ }
1000
+ return buildReference(candidate, node, classification.form, context);
1001
+ }
1002
+ if (ts.isPropertyAccessExpression(node)) {
1003
+ // The census routes a property access here only when it is a
1004
+ // namespace-qualified member (`familyOf`, census.ts); anything else
1005
+ // reaching this producer is the two having drifted apart.
1006
+ if (context.namespacePaths.memberSymbolOf(node) === null) {
1007
+ throw new Error('reference producer received a property access that is not a namespace-qualified member');
1008
+ }
1009
+ // `identifier`, deliberately: the operation IS a name resolution to a
1010
+ // declared cell, which is the whole of what that form states downstream.
1011
+ return buildReference(candidate, node, 'identifier', context);
1012
+ }
1013
+ if (ts.isPrivateIdentifier(node)) {
1014
+ const classification = classifyPrivateIdentifier(node);
1015
+ if (classification.kind === 'skip')
1016
+ return { kind: 'operations', operations: [], edges: [] };
1017
+ if (classification.kind === 'blocked') {
1018
+ return { kind: 'blocked', blocker: blocked(candidate.id, 'reference', classification.reason, classification.missingPrimitive) };
1019
+ }
1020
+ return buildReference(candidate, node, classification.form, context);
1021
+ }
1022
+ // census.ts assigns the 'reference' family only to Identifier,
1023
+ // PrivateIdentifier, and `this` nodes; reaching this means the census and
1024
+ // this producer have drifted out of sync with each other.
1025
+ throw new Error(`reference producer received a candidate of unexpected syntax kind ${ts.SyntaxKind[node.kind]}`);
1026
+ }
1027
+ });