@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,667 @@
1
+ import ts from 'typescript';
2
+ import { isAmbientDeclaration } from '../ambient.js';
3
+ import { arrayAssignmentWriteTargetOf, isArrayAssignmentPatternElement, isAssignmentPattern, isObjectAssignmentElement, objectAssignmentElementOfTarget } from './assignment-patterns.js';
4
+ import { regionId } from '../../identity/ids.js';
5
+ import { forEachEvaluationChild } from './evaluation-order.js';
6
+ import { enclosingCallIfCallee } from './producers/erasure.js';
7
+ import { rootSpecialization } from './identities.js';
8
+ /**
9
+ * The family a syntax kind belongs to.
10
+ *
11
+ * `null` means the node is not itself an operation -- a type annotation, a
12
+ * modifier, a token. Returning `null` is different from returning a family and
13
+ * then failing to normalize it: the first says "there is nothing here", the
14
+ * second says "there is something here I could not model", and only the second
15
+ * is a blocker.
16
+ */
17
+ /**
18
+ * Whether an identifier is a value reference rather than a name.
19
+ *
20
+ * `obj.foo`, `{ foo: 1 }`, `class C`, and `import { foo }` all contain an
21
+ * identifier that never evaluates: it names something. Censusing those as
22
+ * references would inflate the reference family with candidates no producer can
23
+ * ever publish, and an inflated census is exactly what makes "not installed"
24
+ * stop meaning anything.
25
+ */
26
+ /**
27
+ * Whether an identifier is an intrinsic JSX tag rather than a value reference.
28
+ *
29
+ * JSX's grammar decides this, and it decides it from the spelling: a
30
+ * lowercase-initial identifier in tag position names an intrinsic element,
31
+ * anything else resolves as a value. This is the same kind of authority a
32
+ * string literal's characters carry -- the tag is data the language reads --
33
+ * and it is why the rule can be stated here without consulting the checker.
34
+ */
35
+ const isIntrinsicJsxTagName = (node) => {
36
+ const parent = node.parent;
37
+ if (!parent)
38
+ return false;
39
+ const inTagPosition = (ts.isJsxOpeningElement(parent) || ts.isJsxSelfClosingElement(parent) || ts.isJsxClosingElement(parent)) && parent.tagName === node;
40
+ if (!inTagPosition || !ts.isIdentifier(node))
41
+ return false;
42
+ const first = node.text.charAt(0);
43
+ return first === first.toLowerCase() && first !== first.toUpperCase();
44
+ };
45
+ /**
46
+ * Whether an identifier resolves a value out of a scope.
47
+ *
48
+ * Exported because it is an authority, not a helper: the census uses it to
49
+ * decide which identifiers become reference candidates, and `frontend.ts`'s
50
+ * ambient-host walk uses the same answer to decide which identifiers name a
51
+ * cell a host owns. Two walks with two rules would disagree exactly on the
52
+ * awkward cases -- a JSX tag, an import specifier, a property key -- and each
53
+ * disagreement is a binding one layer thinks exists and the other does not.
54
+ */
55
+ export const isValueReference = (node, paths) => {
56
+ if (objectAssignmentElementOfTarget(node))
57
+ return false;
58
+ const parent = node.parent;
59
+ if (!parent)
60
+ return false;
61
+ // The member half of a property access is a key, not a reference. The object
62
+ // half is a reference and reaches this function separately.
63
+ if (ts.isPropertyAccessExpression(parent) && parent.name === node)
64
+ return false;
65
+ // The object half of `Debug.x` when `Debug` is a source namespace is a path
66
+ // segment, not a read (`namespace-paths.ts`) -- but only when the whole
67
+ // access IS a path or a qualified member. An access that resolves to no
68
+ // member keeps its ordinary shape, receiver read included.
69
+ if (ts.isPropertyAccessExpression(parent) &&
70
+ parent.expression === node &&
71
+ (paths.isPath(parent) || paths.memberSymbolOf(parent) !== null)) {
72
+ return false;
73
+ }
74
+ if (ts.isQualifiedName(parent))
75
+ return false;
76
+ // A bare type reference (`: GeaJsxElement`, `Array<T>`'s `T`) names a type,
77
+ // not a value: TypeScript keeps the type and value namespaces separate, and
78
+ // this identifier is never looked up against a value-holding scope. A
79
+ // dotted reference's own name half is already excluded above via
80
+ // `isQualifiedName`; this is the same fact for the one-segment case, where
81
+ // the identifier's parent is the `TypeReferenceNode` itself rather than a
82
+ // `QualifiedName` link inside one. Without this, a walk that (unlike the
83
+ // census's own, which skips `TypeNode` subtrees outright) descends into
84
+ // type annotations sees `GeaJsxElement` in `function Image(...):
85
+ // GeaJsxElement` as a value read, mints a phantom host-object binding keyed
86
+ // by the interface's bare name, and a later `native-handle` derived from it
87
+ // spells a `gea_native_protocol_GeaJsxElement_v1` tag `gea_runtime.h` never
88
+ // declares -- a program that certifies and then fails in clang.
89
+ if (ts.isTypeReferenceNode(parent) && parent.typeName === node)
90
+ return false;
91
+ if (ts.isMetaProperty(parent))
92
+ return false;
93
+ // A label is resolved against enclosing labeled statements, not against a
94
+ // binding, so it is not a reference to anything a scope holds.
95
+ if (ts.isLabeledStatement(parent) && parent.label === node)
96
+ return false;
97
+ if ((ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) && parent.label === node)
98
+ return false;
99
+ if (ts.isImportSpecifier(parent) || ts.isExportSpecifier(parent) || ts.isImportClause(parent) || ts.isNamespaceImport(parent))
100
+ return false;
101
+ if (ts.isPropertyAssignment(parent) && parent.name === node)
102
+ return false;
103
+ // An intrinsic JSX tag is data, not a name: `<view/>` reads nothing from any
104
+ // scope, and the identifier's own symbol is the *property signature* on the
105
+ // JSX namespace's `IntrinsicElements`, which is a type-level member with no
106
+ // value cell behind it. Censusing it as a reference makes the element read a
107
+ // binding the program never introduces. A capitalised or dotted tag is the
108
+ // opposite -- it really does resolve a value -- and stays a reference; the
109
+ // element producer states the same rule, and both read it from the tag's own
110
+ // spelling because that is where the JSX grammar puts it.
111
+ if (isIntrinsicJsxTagName(node))
112
+ return false;
113
+ // A JSX attribute name is a property key, exactly as a property assignment's
114
+ // name is.
115
+ if (ts.isJsxAttribute(parent) && parent.name === node)
116
+ return false;
117
+ // `{ x }` is the one place a name and a read are the same identifier: the
118
+ // shorthand really does evaluate `x`, so dropping it would lose a real read.
119
+ if (ts.isShorthandPropertyAssignment(parent))
120
+ return true;
121
+ // `export default foo` READS `foo`. ECMA-262 spells that production as an
122
+ // `AssignmentExpression` (§16.2.3), evaluated once during module evaluation,
123
+ // and the module's `*default*` binding is initialized from the value it
124
+ // produces -- an ordinary read, no different from `const d = foo`.
125
+ //
126
+ // TypeScript nevertheless reports the identifier as the ExportAssignment's
127
+ // own NAME (`getNonAssignedNameOfDeclaration` returns `expression` when it is
128
+ // an identifier), because the checker needs an alias symbol there for CJS
129
+ // interop. That is a fact about the type system's naming, not about what
130
+ // runs, and the declaration-name rule at the end of this function -- written
131
+ // for `let x = 1`, where the name really is not read -- would otherwise
132
+ // silently absorb it: the identifier gets no family, `citeExpressionResult`
133
+ // reports the expression as unmodelled, and the whole module is blocked with
134
+ // "expression of syntax kind Identifier has no normalized family". Every
135
+ // node-compat builtin ends in `export default <namespace object>`, so both
136
+ // `node:http` and `node:events` failed on exactly this line.
137
+ if (ts.isExportAssignment(parent) && parent.expression === node)
138
+ return true;
139
+ // In `const { a: b } = o`, `a` is the key read from `o` and `b` is the binding.
140
+ // Only `b` is what `getNameOfDeclaration` reports, so `a` is excluded here.
141
+ if (ts.isBindingElement(parent) && parent.propertyName === node)
142
+ return false;
143
+ if (ts.isEnumMember(parent) && parent.name === node)
144
+ return false;
145
+ // The name of a declaration is the thing being declared. `let x = 1` binds
146
+ // `x`; it does not read it, and treating it as a read would invent an
147
+ // evaluation that never happens.
148
+ // `ts.isDeclaration` is checker-internal; `getNameOfDeclaration` is the public
149
+ // answer to the same question and returns nothing for a non-declaration.
150
+ return ts.getNameOfDeclaration(parent) !== node;
151
+ };
152
+ /**
153
+ * Whether `node` is a plain identifier used DIRECTLY as a for-of/for-in loop's
154
+ * own head, with no `var`/`let`/`const` of its own -- `var v; for (v of xs)`,
155
+ * where `v` is declared elsewhere and merely reused.
156
+ *
157
+ * ECMA-262's `ForIn/OfStatement : for ( LeftHandSideExpression of
158
+ * AssignmentExpression )` never evaluates this position as a value -- there is
159
+ * no `GetValue` step, only `PutValue`, performed once per iteration from the
160
+ * loop's own `IteratorStep`/enumerate step (`ForOfBodyEvaluation`/
161
+ * `ForIn/OfHeadEvaluation`). This is the write-target twin of
162
+ * `arrayAssignmentWriteTargetOf`, for the one shape that predicate does not
163
+ * cover: a single identifier rather than an array pattern's element.
164
+ *
165
+ * Without this exclusion the identifier fell through to `isValueReference`'s
166
+ * default rule (`getNameOfDeclaration` finds no declaration at this position,
167
+ * so it answered "yes, a reference"), which censused it as a value READ the
168
+ * loop never performs, and left the actual per-iteration write with no
169
+ * producer at all: `gating.ts`'s own `visitHere` already reserves the
170
+ * `iteration` scope for exactly this write (its comment names "the
171
+ * `VariableDeclarationList` holding `value`'s own declaration, or a bare
172
+ * assignment target" as the two shapes `node.initializer` can be), waiting on
173
+ * a producer that never existed. `producers/bindings.ts`'s
174
+ * `contributeForOfLoopHeadWrite` is that producer, keyed by this same family.
175
+ *
176
+ * A property or element access loop head (`for (obj.p of xs)`, `for (arr[i]
177
+ * of xs)`) is a different, earlier-classified shape (`property` family, via
178
+ * the `PropertyAccessExpression`/`ElementAccessExpression` arms above) and is
179
+ * not covered here.
180
+ */
181
+ const isForOfLoopHeadWriteTarget = (node) => {
182
+ const parent = node.parent;
183
+ return parent !== undefined && (ts.isForOfStatement(parent) || ts.isForInStatement(parent)) && parent.initializer === node;
184
+ };
185
+ /** A class body owns its members' lifecycle; an object literal allocates them. */
186
+ const hasClassLikeParent = (node) => node.parent !== undefined && ts.isClassLike(node.parent);
187
+ /**
188
+ * A function-like declaration that states a signature and no implementation.
189
+ *
190
+ * `ts.isPropertyDeclaration` is deliberately not covered: a property with no
191
+ * initializer is not the same shape at all -- it still declares a field the
192
+ * constructor installs -- so only the nodes that would otherwise allocate a
193
+ * *callable* are asked.
194
+ */
195
+ const isFunctionLikeWithoutBody = (node) => (ts.isFunctionDeclaration(node) ||
196
+ ts.isMethodDeclaration(node) ||
197
+ ts.isGetAccessorDeclaration(node) ||
198
+ ts.isSetAccessorDeclaration(node)) &&
199
+ node.body === undefined;
200
+ /** An `abstract` member: a declaration the class states and every concrete subclass must implement. */
201
+ const isAbstractClassMember = (node) => hasClassLikeParent(node) &&
202
+ ts.canHaveModifiers(node) &&
203
+ (ts.getModifiers(node)?.some((modifier) => modifier.kind === ts.SyntaxKind.AbstractKeyword) ?? false);
204
+ export const familyOf = (node, paths) => {
205
+ if (isObjectAssignmentElement(node))
206
+ return 'destructuring';
207
+ if (objectAssignmentElementOfTarget(node))
208
+ return null;
209
+ // A simple array-assignment target (`[a, o.p, arr[0]] = ...`) is a WRITE,
210
+ // never the ordinary read `reference`/`property` would census it as -- the
211
+ // sibling pattern candidate below reads the position, and this candidate
212
+ // only stores into it. Checked ahead of the property/reference rules for
213
+ // the same reason `objectAssignmentElementOfTarget` is checked ahead of
214
+ // them: an excluded node must never fall through to its ordinary family.
215
+ if (arrayAssignmentWriteTargetOf(node))
216
+ return 'destructuring';
217
+ // The default `=` and rest `...` WRAPPERS around such a target are not
218
+ // themselves censused -- they exist only to be keyed by the array
219
+ // pattern's own extraction/default operations (`destructuring.ts`'s
220
+ // `contributeArrayAssignmentPattern`), the same way a binding pattern's
221
+ // `BindingElement` node is a key rather than a computation.
222
+ if ((ts.isSpreadElement(node) || (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken)) &&
223
+ isArrayAssignmentPatternElement(node)) {
224
+ return null;
225
+ }
226
+ if (ts.isCallExpression(node) || ts.isNewExpression(node) || ts.isTaggedTemplateExpression(node)) {
227
+ // `import(...)` is a call in syntax only: its target is resolved at runtime
228
+ // by the host, so treating it as an ordinary call would fabricate a target.
229
+ if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword)
230
+ return 'dynamic-language';
231
+ return 'invocation';
232
+ }
233
+ if (ts.isPropertyAccessExpression(node)) {
234
+ // `Debug.log` in `Debug.log.trace(...)`: a path segment, no operation.
235
+ if (paths.isPath(node))
236
+ return null;
237
+ // `Debug.assert`: a qualified binding reference -- the same family, and
238
+ // the same `reference`/`binding` pair, that a bare `assert` written inside
239
+ // the namespace body publishes. See `namespace-paths.ts`.
240
+ if (paths.memberSymbolOf(node) !== null)
241
+ return 'reference';
242
+ return 'property';
243
+ }
244
+ if (ts.isElementAccessExpression(node))
245
+ return 'property';
246
+ if (ts.isIdentifier(node) || ts.isPrivateIdentifier(node)) {
247
+ if (isForOfLoopHeadWriteTarget(node))
248
+ return 'binding';
249
+ return isValueReference(node, paths) ? 'reference' : null;
250
+ }
251
+ // `this` resolves against the environment chain exactly as a name does --
252
+ // `ResolveThisBinding` is `GetThisEnvironment().GetThisBinding()` -- so it is
253
+ // a reference site, and censusing it as one is what gives the receiver a
254
+ // published result instead of a placeholder every consumer has to invent.
255
+ if (node.kind === ts.SyntaxKind.ThisKeyword)
256
+ return 'reference';
257
+ // `super` in `super.x`/`super.x(...)` resolves against the environment
258
+ // chain the identical way `this` does: `GetSuperBase` reads the active
259
+ // function's `[[HomeObject]]`, and a class method's home object is a fully
260
+ // static fact -- the class's OWN declaration -- known without running
261
+ // anything. Censusing it as a reference, the same family `this` gets, is
262
+ // what lets `references.ts`'s reference producer publish a result for it
263
+ // instead of every consumer inventing its own placeholder.
264
+ //
265
+ // Excluded when `super` is itself the bare callee of a call (`super(...)`):
266
+ // that shape is grammar-restricted to a constructor and reads the base's
267
+ // own *constructor*, a different question already answered a different way
268
+ // (`invocations.ts`'s `superConstructorRead`, reached through
269
+ // `ts.isCallExpression`'s branch above rather than this one). Syntax
270
+ // permits `super` in exactly three positions -- `super(...)`, `super.x`,
271
+ // `super[x]` -- and only the bare-callee one is that different question, so
272
+ // this is the one shape carved back out rather than the other way round.
273
+ if (node.kind === ts.SyntaxKind.SuperKeyword && enclosingCallIfCallee(node) === null)
274
+ return 'reference';
275
+ // A formal parameter introduces a binding, exactly as a variable declaration
276
+ // does; the only difference is where its value comes from. Leaving it out of
277
+ // the census makes every parameter read a read of a cell nothing declared,
278
+ // which is invisible to every later layer -- the precise failure the census
279
+ // exists to make measurable.
280
+ if (ts.isVariableDeclaration(node) || ts.isBindingElement(node) || ts.isParameter(node))
281
+ return 'binding';
282
+ if (ts.isObjectLiteralExpression(node) || ts.isArrayLiteralExpression(node)) {
283
+ return isAssignmentPattern(node) ? 'destructuring' : 'allocation';
284
+ }
285
+ if (ts.isFunctionExpression(node) ||
286
+ ts.isArrowFunction(node) ||
287
+ ts.isFunctionDeclaration(node) ||
288
+ ts.isClassExpression(node) ||
289
+ ts.isRegularExpressionLiteral(node)) {
290
+ // A declaration with no body allocates nothing. `OrdinaryFunctionCreate`
291
+ // needs a body to close over; what a bodiless declaration states is that a
292
+ // function exists somewhere else -- either the host's, in `declare global
293
+ // { function requestAnimationFrame(...) }`, or this program's own
294
+ // implementation signature, in an overload set whose last member carries
295
+ // the body.
296
+ //
297
+ // Censusing one anyway published a callable whose ABI declared parameters
298
+ // no body could ever bind, and `projection/abi.ts` refused the program for
299
+ // it -- naming the arity mismatch rather than the declaration that has no
300
+ // body to bind them in. Five corpus apps were blocked that way.
301
+ return isFunctionLikeWithoutBody(node) ? null : 'allocation';
302
+ }
303
+ if (ts.isClassDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || ts.isConstructorDeclaration(node))
304
+ return 'class-lifecycle';
305
+ if (ts.isMethodDeclaration(node) ||
306
+ ts.isGetAccessorDeclaration(node) ||
307
+ ts.isSetAccessorDeclaration(node) ||
308
+ ts.isPropertyDeclaration(node)) {
309
+ // A bodiless method is the same non-event a bodiless function is: an
310
+ // overload signature, or a member an ambient class merely declares --
311
+ // EXCEPT an `abstract` one, which is neither. `abstract check(value:
312
+ // number): boolean` allocates nothing and still states a real class-
313
+ // evaluation fact: the class declares this key, and every concrete
314
+ // subclass must fill it. That declaration is what roots a dispatch family
315
+ // (`targets/cpp/virtual-methods.ts`), and censusing it as nothing is why
316
+ // `rules.map(r => r.describe())` over an abstract-typed array went through
317
+ // a boxed dynamic property read that aborted at runtime.
318
+ if (isFunctionLikeWithoutBody(node))
319
+ return isAbstractClassMember(node) ? 'class-lifecycle' : null;
320
+ // The same syntax kinds appear in an object literal, where they are part of
321
+ // building one object rather than steps of class evaluation.
322
+ return hasClassLikeParent(node) ? 'class-lifecycle' : 'allocation';
323
+ }
324
+ if (ts.isBinaryExpression(node) ||
325
+ ts.isPrefixUnaryExpression(node) ||
326
+ ts.isPostfixUnaryExpression(node) ||
327
+ ts.isConditionalExpression(node) ||
328
+ // A `TemplateExpression` is a string concatenation -- EXCEPT the one under a
329
+ // tagged template, which is not evaluated as a string at all. ECMA-262
330
+ // 13.3.11.1 hands the tag the segments and the raw substitution values;
331
+ // nothing calls `ToString` on a substitution. Censusing it as a computation
332
+ // anyway is not merely dead work: a substitution whose `ToString` throws
333
+ // (a symbol, an object with a throwing `toString`) would throw at a site
334
+ // the language says never stringifies it. `tagged-template.ts` reads the
335
+ // spans' expressions directly, so nothing is lost by leaving this node to
336
+ // its tagged parent.
337
+ (ts.isTemplateExpression(node) && !ts.isTaggedTemplateExpression(node.parent)) ||
338
+ ts.isTypeOfExpression(node) ||
339
+ ts.isVoidExpression(node) ||
340
+ ts.isDeleteExpression(node)) {
341
+ return 'computation';
342
+ }
343
+ if (ts.isIfStatement(node) ||
344
+ ts.isForStatement(node) ||
345
+ ts.isForOfStatement(node) ||
346
+ ts.isForInStatement(node) ||
347
+ ts.isWhileStatement(node) ||
348
+ ts.isDoStatement(node) ||
349
+ ts.isSwitchStatement(node) ||
350
+ ts.isReturnStatement(node) ||
351
+ ts.isThrowStatement(node) ||
352
+ ts.isTryStatement(node) ||
353
+ ts.isBreakStatement(node) ||
354
+ ts.isContinueStatement(node) ||
355
+ ts.isLabeledStatement(node) ||
356
+ ts.isAwaitExpression(node) ||
357
+ ts.isYieldExpression(node) ||
358
+ node.kind === ts.SyntaxKind.DebuggerStatement) {
359
+ return 'control';
360
+ }
361
+ // JSX element syntax is the only surface in the language whose meaning comes
362
+ // from declarations rather than from the specification, so it gets its own
363
+ // family instead of being folded into allocation or invocation -- neither of
364
+ // which is true of it under every JSX namespace a program may supply.
365
+ if (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node))
366
+ return 'element';
367
+ if (ts.isObjectBindingPattern(node) || ts.isArrayBindingPattern(node))
368
+ return 'destructuring';
369
+ if (ts.isSpreadElement(node) || ts.isSpreadAssignment(node))
370
+ return 'protocol';
371
+ if (ts.isCatchClause(node))
372
+ return 'boundary';
373
+ if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node) || ts.isExportAssignment(node))
374
+ return 'declaration-lifecycle';
375
+ return null;
376
+ };
377
+ /**
378
+ * Whether this node is an arrow function's expression body.
379
+ *
380
+ * `EvaluateBody` for an `ExpressionBody` is `Return ? Evaluation of
381
+ * AssignmentExpression`: the return is part of the arrow's call, and no
382
+ * `ReturnStatement` exists to census. A concise body is the one place in the
383
+ * language where a single node both produces a value and carries it out of the
384
+ * call.
385
+ */
386
+ const isConciseArrowBody = (node) => node.parent !== undefined && ts.isArrowFunction(node.parent) && node.parent.body === node && !ts.isBlock(node);
387
+ /**
388
+ * Whether this node is a class field's initializer expression.
389
+ *
390
+ * `ClassFieldDefinitionRecord`'s initializer is a function whose whole body is
391
+ * `Return ? Evaluation of the initializer` -- the same implicit return a
392
+ * concise arrow body performs, for the same reason: the value has to leave the
393
+ * call, and no `ReturnStatement` exists to census.
394
+ */
395
+ export const isFieldInitializerBody = (node) => node.parent !== undefined && ts.isPropertyDeclaration(node.parent) && node.parent.initializer === node;
396
+ /** Whether `node` is `ancestor` or lies inside it. */
397
+ const isWithin = (node, ancestor) => {
398
+ for (let current = node; current; current = current.parent)
399
+ if (current === ancestor)
400
+ return true;
401
+ return false;
402
+ };
403
+ /**
404
+ * Whether this node is a parameter property: `constructor(readonly name: T)`.
405
+ *
406
+ * TypeScript's own predicate, not a re-derivation of it -- the modifier set
407
+ * that makes a parameter also declare a member is the language's rule, and
408
+ * spelling it a second time here would be a second authority over it.
409
+ */
410
+ export const isParameterProperty = (node) => node.parent !== undefined && ts.isParameterPropertyDeclaration(node, node.parent);
411
+ /**
412
+ * Every family a node carries, in evaluation order.
413
+ *
414
+ * Almost every node carries one. A concise arrow body and a field initializer
415
+ * carry two -- the expression and the implicit return -- and they stay
416
+ * distinguishable because identity is keyed by `(node, family, ordinal)`, so
417
+ * neither can be mistaken for the other by a consumer citing one of them.
418
+ * Dropping the second is what made an arrow function evaluate its body and
419
+ * then return nothing.
420
+ *
421
+ * A parameter property carries two for a third reason: it IS two declarations
422
+ * written as one. `constructor(readonly name: string)` declares a formal
423
+ * parameter -- the `binding` every parameter is -- and an instance member the
424
+ * constructor assigns that parameter into. The second half is class evaluation,
425
+ * so it is `class-lifecycle`, and its caller is the constructor the parameter
426
+ * sits in, which is exactly where the assignment belongs.
427
+ */
428
+ export const familiesOf = (node, paths) => {
429
+ const primary = familyOf(node, paths);
430
+ if (isParameterProperty(node))
431
+ return primary ? [primary, 'class-lifecycle'] : ['class-lifecycle'];
432
+ // A class EXPRESSION is an allocation (its value is the constructor object)
433
+ // and, when it extends something, one step of class evaluation too: the
434
+ // heritage read `ClassDefinitionEvaluation` performs. Without that event the
435
+ // projection saw no base for `const D = class extends B {}`, and an
436
+ // inherited field read on a `D` instance went through the dynamic sidecar
437
+ // and aborted. The declaration form publishes the same event from
438
+ // `class-lifecycle.ts`'s `contributeClass`; this is the expression's half.
439
+ // A written constructor is the other lifecycle step an expression shares
440
+ // with a declaration: its callable allocation is what gives the body a
441
+ // stated convention (`class-lifecycle.ts`'s `writtenConstructorAllocationOf`).
442
+ if (ts.isClassExpression(node) &&
443
+ (node.heritageClauses?.some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword) ||
444
+ node.members.some((member) => ts.isConstructorDeclaration(member) && member.body !== undefined))) {
445
+ return primary ? [primary, 'class-lifecycle'] : ['class-lifecycle'];
446
+ }
447
+ if (!isConciseArrowBody(node) && !isFieldInitializerBody(node))
448
+ return primary ? [primary] : [];
449
+ // A concise body that is itself a control expression (`await x`, `yield x`)
450
+ // would collide with its own implicit return at one identity; the return is
451
+ // what the arrow needs, and the census refuses to publish two operations that
452
+ // cannot be told apart rather than silently keeping one of them.
453
+ if (primary === 'control')
454
+ return ['control'];
455
+ return primary ? [primary, 'control'] : ['control'];
456
+ };
457
+ /** The nearest enclosing function or region that executes this node. */
458
+ const callerOf = (node, identities, regions, path) => {
459
+ let current = node.parent;
460
+ while (current) {
461
+ if (ts.isFunctionDeclaration(current) ||
462
+ ts.isFunctionExpression(current) ||
463
+ ts.isArrowFunction(current) ||
464
+ ts.isMethodDeclaration(current) ||
465
+ ts.isConstructorDeclaration(current) ||
466
+ ts.isGetAccessorDeclaration(current) ||
467
+ ts.isSetAccessorDeclaration(current)) {
468
+ return { kind: 'function', functionId: identities.functionIdOf(current, path) };
469
+ }
470
+ // A field initializer is a function, not a region: `ClassFieldDefinition`
471
+ // creates one with `OrdinaryFunctionCreate` and calls it with the instance
472
+ // as its receiver, once per construction. Modelling it as a region would
473
+ // leave it with no calling convention to declare that receiver, and the
474
+ // `this` its body reads would have no frame slot to come from.
475
+ //
476
+ // Only the INITIALIZER is that function. A computed key (`[incomingKey]:
477
+ // T`) is evaluated by ClassDefinitionEvaluation itself, in the class
478
+ // body's scope, before any instance exists; attributing its reference to
479
+ // the field function handed a field WITHOUT an initializer -- for which
480
+ // `class-lifecycle.ts` correctly allocates no function object -- an
481
+ // operation owned by a function that has no allocation, and ABI
482
+ // projection refused the whole program ("no function-object allocation
483
+ // published a callable carrier"). `@hono/node-server`'s adapted
484
+ // `LightRequest` declares exactly such a field. The key's owner is
485
+ // whatever owns the class body, found by continuing the walk.
486
+ if (ts.isPropertyDeclaration(current)) {
487
+ if (current.initializer !== undefined && isWithin(node, current.initializer)) {
488
+ return { kind: 'function', functionId: identities.functionIdOf(current, path) };
489
+ }
490
+ current = current.parent;
491
+ continue;
492
+ }
493
+ // A static block executes in its own context too, and collapsing it into
494
+ // the class body or the module body would lose the order in which class
495
+ // evaluation runs it.
496
+ if (ts.isClassStaticBlockDeclaration(current)) {
497
+ const id = regionId(identities.declarationIdOf(current, path), 'static-block');
498
+ if (!regions.has(id)) {
499
+ regions.set(id, { id, role: 'static-block', bodyNode: identities.nodeIdOf(current, path), caller: null });
500
+ }
501
+ return { kind: 'region', regionId: id };
502
+ }
503
+ current = current.parent;
504
+ }
505
+ const file = node.getSourceFile();
506
+ const id = regionId(identities.nodeIdOf(file), 'module-body');
507
+ if (!regions.has(id))
508
+ regions.set(id, { id, role: 'module-body', bodyNode: identities.nodeIdOf(file), caller: null });
509
+ return { kind: 'region', regionId: id };
510
+ };
511
+ const callerKey = (caller) => (caller.kind === 'function' ? `fn|${caller.functionId}` : `region|${caller.regionId}`);
512
+ export const censusProgram = (files, identities, reachable, specializations, namespacePaths) => {
513
+ const candidates = [];
514
+ const regions = new Map();
515
+ const ordinals = new Map();
516
+ const nextOrdinal = (caller) => {
517
+ const key = callerKey(caller);
518
+ const ordinal = ordinals.get(key) ?? 0;
519
+ ordinals.set(key, ordinal + 1);
520
+ return ordinal;
521
+ };
522
+ for (const file of files) {
523
+ /**
524
+ * Census this node's own candidates.
525
+ *
526
+ * `callerPath` is the path of the scope that *holds* this node, which is
527
+ * not always the path its children are walked under: a generic declaration
528
+ * is held by an unspecialized scope while everything inside it belongs to
529
+ * one copy.
530
+ */
531
+ const record = (node, callerPath, path) => {
532
+ const families = familiesOf(node, namespacePaths);
533
+ if (families.length === 0)
534
+ return;
535
+ const caller = callerOf(node, identities, regions, callerPath);
536
+ const owner = ts.isClassDeclaration(node) ? node : ts.isClassDeclaration(node.parent) ? node.parent : null;
537
+ for (const family of families) {
538
+ candidates.push({
539
+ node,
540
+ id: identities.nodeIdOf(node, path),
541
+ family,
542
+ caller,
543
+ ...(owner && reachable.classIsLayoutOnly(owner) ? { classLayoutOnly: true } : {}),
544
+ evaluationOrdinal: nextOrdinal(caller),
545
+ specialization: path
546
+ });
547
+ }
548
+ };
549
+ const visit = (node, path) => {
550
+ // Ambient module/global blocks describe host values; none of their children execute.
551
+ if (ts.isModuleDeclaration(node) && isAmbientDeclaration(node))
552
+ return;
553
+ // A type annotation contains no operations: nothing in it evaluates. The
554
+ // one exception is a heritage clause, whose expression really is evaluated
555
+ // at class definition time, so it is descended into rather than skipped.
556
+ if (ts.isTypeNode(node) && !ts.isExpressionWithTypeArguments(node))
557
+ return;
558
+ // An overload signature -- a bodiless, non-abstract function or method
559
+ // -- is not a runtime event (`familyOf` already answers `null` for the
560
+ // node itself), and nothing UNDER it evaluates either: its parameters
561
+ // bind nothing, and a computed name such as `[Symbol.iterator]` is
562
+ // evaluated once, for the implementation that follows. Descending into
563
+ // it minted that key's `Symbol.iterator` read as an operation whose
564
+ // caller was the signature's own function id -- a function no
565
+ // allocation ever publishes a carrier for -- and `projection/abi.ts`
566
+ // refused the program at the signature with "no function-object
567
+ // allocation published a callable carrier" (node-compat's
568
+ // URLSearchParams `*[Symbol.iterator]` overload pair;
569
+ // `test/runtime/class-symbol-iterator-generator-overload.ts`). A
570
+ // named overload had no child that evaluates, which is why it never
571
+ // showed the same refusal.
572
+ if (isFunctionLikeWithoutBody(node) && !isAbstractClassMember(node))
573
+ return;
574
+ // A static method nothing in the program NAMES. The class around it is
575
+ // live -- its layout is what a live reference reaches -- but a body only
576
+ // `C.m` can reach, with no `C.m` anywhere, is dead exactly as an
577
+ // unreferenced top-level function is. `reachability.ts` is the one
578
+ // authority on that, asked here for the same reason `statementsOf` is
579
+ // asked below: so there is one answer and not two.
580
+ if (reachable.memberIsPruned(node))
581
+ return;
582
+ // Monomorphization, as the census performs it: a generic declaration's
583
+ // subtree is walked once per instantiation the program makes, with that
584
+ // instantiation's ordinal pushed onto the path. Every identity minted
585
+ // underneath is therefore per copy, which is what makes `T` answerable --
586
+ // there is no longer one body with a hole in it, there are as many bodies
587
+ // as the program has instantiations, each with a type in that position.
588
+ //
589
+ // A generic the program never instantiates is walked *not at all*. Its
590
+ // body has no meaning until something fills the hole, and emitting one
591
+ // copy with the hole still open is exactly the state this removes.
592
+ //
593
+ // Which node carries the copies is `genericSubjectOf`'s question, not
594
+ // this walk's: `const f = <T>(...) => ...` keys them on the arrow while
595
+ // the declaration naming it is what has to be recorded per copy, so the
596
+ // fork is hoisted here and the arrow reached as a child finds itself
597
+ // already inside its own copy. Forking it again would push a second entry
598
+ // for the same owner and mint identities under a path no use site names.
599
+ const holder = path[path.length - 1];
600
+ if (holder !== undefined && holder.owner === node) {
601
+ forEachEvaluationChild(node, (child) => visit(child, path));
602
+ record(node, path, path);
603
+ return;
604
+ }
605
+ const subject = identities.genericSubjectOf(node);
606
+ const copies = specializations.specializationsOf(subject);
607
+ if (copies.length > 0) {
608
+ for (const copy of copies) {
609
+ const inner = [...path, { owner: subject, ordinal: copy.ordinal }];
610
+ // Children first, then this node: the ordinal is an *evaluation*
611
+ // index, and the generic's own allocation evaluates after whatever it
612
+ // encloses is laid out.
613
+ forEachEvaluationChild(node, (child) => visit(child, inner));
614
+ record(node, path, inner);
615
+ }
616
+ return;
617
+ }
618
+ // The other half of that rule, and the case a framework barrel makes
619
+ // ordinary: `mount<RootComponent extends Component>` is in every app's
620
+ // module graph, and the apps that never call it instantiate it never.
621
+ // Walking it once anyway publishes a function-object allocation whose
622
+ // carrier *is* the open hole, which representation then refuses -- one
623
+ // uncalled generic in a shared module denied a whole program its
624
+ // certificate. There is no such function in this program, so nothing is
625
+ // recorded for it.
626
+ if (specializations.isGeneric(subject))
627
+ return;
628
+ // Children first, then this node: the ordinal is an *evaluation* index,
629
+ // and an expression's operands evaluate before the expression does. A
630
+ // pre-order index says the opposite, and where the graph leaves two
631
+ // operations unordered -- an assignment's store and whatever consumes the
632
+ // assignment's value, say -- the tie would break in favour of the
633
+ // consumer, scheduling a store after the `return` that reads it. Sibling
634
+ // order is preserved either way, so statements still run in source order.
635
+ // RequireObjectCoercible runs before any assignment target is evaluated.
636
+ // Each element then publishes its own extraction and write in order.
637
+ if (ts.isObjectLiteralExpression(node) && isAssignmentPattern(node)) {
638
+ record(node, path, path);
639
+ forEachEvaluationChild(node, (child) => visit(child, path));
640
+ return;
641
+ }
642
+ // GetIterator runs once, up front, before any element's target
643
+ // reference is resolved or its default evaluated -- the array-pattern
644
+ // twin of the object-pattern rule immediately above.
645
+ if (ts.isArrayLiteralExpression(node) && isAssignmentPattern(node)) {
646
+ record(node, path, path);
647
+ forEachEvaluationChild(node, (child) => visit(child, path));
648
+ return;
649
+ }
650
+ forEachEvaluationChild(node, (child) => visit(child, path));
651
+ record(node, path, path);
652
+ };
653
+ // The statements this program reaches, not the file: a declaration nothing
654
+ // reaches has no meaning to census, exactly as an uninstantiated generic
655
+ // above has none. `reachability.ts` is the one authority on which those
656
+ // are, and every other whole-program walk asks the same one.
657
+ for (const node of reachable.statementsOf(file))
658
+ visit(node, rootSpecialization);
659
+ }
660
+ const byFamily = new Map();
661
+ for (const candidate of candidates) {
662
+ const bucket = byFamily.get(candidate.family) ?? [];
663
+ bucket.push(candidate);
664
+ byFamily.set(candidate.family, bucket);
665
+ }
666
+ return { candidates, regions, byFamily };
667
+ };