Esempio n. 1
0
 protected DataFlowAnalysisBase(ICFG cfg)
 {
     this.CFG            = cfg;
     this.pending        = new PriorityQueue <APC> (WorkingListComparer);
     this.JoinState      = new Dictionary <APC, AState> (this);
     this.widen_strategy = null;
 }
Esempio n. 2
0
        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);
                    }
                }
            }
        }