public static ReachabilityAnalysis Create(IList<ControlFlowNode> controlFlowGraph, CancellationToken cancellationToken = default(CancellationToken)) { if (controlFlowGraph == null) throw new ArgumentNullException("controlFlowGraph"); ReachabilityAnalysis ra = new ReachabilityAnalysis(); ra.stack.Push(controlFlowGraph[0]); while (ra.stack.Count > 0) { cancellationToken.ThrowIfCancellationRequested(); ra.MarkReachable(ra.stack.Pop()); } ra.stack = null; ra.visitedNodes = null; return ra; }
public static ReachabilityAnalysis Create(IList <ControlFlowNode> controlFlowGraph, CancellationToken cancellationToken = default(CancellationToken)) { if (controlFlowGraph == null) { throw new ArgumentNullException("controlFlowGraph"); } ReachabilityAnalysis ra = new ReachabilityAnalysis(); ra.stack.Push(controlFlowGraph[0]); while (ra.stack.Count > 0) { cancellationToken.ThrowIfCancellationRequested(); ra.MarkReachable(ra.stack.Pop()); } ra.stack = null; ra.visitedNodes = null; return(ra); }
public static ReachabilityAnalysis Create(IList <ControlFlowNode> controlFlowGraph, RecursiveDetectorVisitor recursiveDetectorVisitor = null, CancellationToken cancellationToken = default(CancellationToken)) { if (controlFlowGraph == null) { throw new ArgumentNullException("controlFlowGraph"); } ReachabilityAnalysis ra = new ReachabilityAnalysis(); ra.recursiveDetectorVisitor = recursiveDetectorVisitor; // Analysing a null node can result in an empty control flow graph if (controlFlowGraph.Count > 0) { ra.stack.Push(controlFlowGraph[0]); while (ra.stack.Count > 0) { cancellationToken.ThrowIfCancellationRequested(); ra.MarkReachable(ra.stack.Pop()); } } ra.stack = null; ra.visitedNodes = null; return(ra); }
private StatementIssueCollector (GatherVisitor visitor, ReachabilityAnalysis reachability) { collectedStatements = new HashSet<Statement> (); this.visitor = visitor; this.reachability = reachability; }
/// <summary> /// Creates a new reachability analysis object with a given statement. /// </summary> /// <param name="statement"> /// The statement to start the analysis. /// </param> /// <param name="recursiveDetectorVisitor"> /// TODO. /// </param> /// <returns> /// The reachability analysis object. /// </returns> public ReachabilityAnalysis CreateReachabilityAnalysis (Statement statement, ReachabilityAnalysis.RecursiveDetectorVisitor recursiveDetectorVisitor = null) { return ReachabilityAnalysis.Create (statement, resolver, recursiveDetectorVisitor, CancellationToken); }