pub fn transitive_effects(
callees_of: &HashMap<String, Vec<String>>,
decls: &HashMap<String, EffectDecl>,
symbol_ids: &[String],
) -> Vec<(String, Vec<TransitiveEffect>)>Expand description
Each of symbol_ids with its transitive effects: every effect category
reachable through a callee — declared by the callee or by anything it
reaches — with the direct callees it is reachable through (via), minus
the categories the symbol declares itself. Sorted by effect, then via.
Computed per strongly connected component of the call graph: every
member of a call cycle reaches whatever any member reaches. The memoized
DFS this replaces stopped at a cycle’s first member, cached that partial
answer for the others, and visited symbols in HashMap order — so cycle
members could miss effects, and which ones changed between runs.