Skip to main content

transitive_effects

Function transitive_effects 

Source
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.