protected DataFlowAnalysisBase(ICFG cfg) { this.CFG = cfg; this.pending = new PriorityQueue <APC> (WorkingListComparer); this.JoinState = new Dictionary <APC, AState> (this); this.widen_strategy = null; }
public virtual void ComputeFixPoint() { this.widen_strategy = new EdgeBasedWidening(20); while (this.pending.Count > 0) { APC next = this.pending.Dequeue(); AState state = MutableVersion(this.JoinState [next], next); APC cur; bool repeatOuter = false; do { cur = next; if (!IsBottom(cur, state)) { state = Transfer(cur, state); } else { repeatOuter = true; break; } } while (HasSingleSuccessor(cur, out next) && !RequiresJoining(next)); if (repeatOuter) { continue; } foreach (APC successorAPC in Successors(cur)) { if (!IsBottom(successorAPC, state)) { PushState(cur, successorAPC, state); } } } }