/// <summary> /// Performs transfer function on a block represent by node. /// </summary> /// <param name="node"></param> /// <param name="input"></param> /// <returns></returns> protected override ScopeEscapeDomain Flow(CFGNode node, ScopeEscapeDomain input) { var nState = input.Clone(); var visitor = new EscapeTransferVisitor(nState, this); visitor.Visit(node); UpdateResults(visitor); return(visitor.State.Clone()); }
/// <summary> /// Updates the results of the analysis. /// </summary> /// <param name="visitor"></param> private void UpdateResults(EscapeTransferVisitor visitor) { interestingRowEscaped |= visitor.SomeRowEscaped; // We currently do not need fine grained results, so // this saves us execution time. //foreach (var key in visitor.PreStates.Keys) //{ // preResults[key] = visitor.PreStates[key]; //} //foreach (var key in visitor.PostStates.Keys) //{ // postResults[key] = visitor.PostStates[key]; //} }