Esempio n. 1
0
        private void WorklistTraversal(IBidirectionalGraph <CFGBlock, TaggedEdge <CFGBlock, EdgeTag> > graph)
        {
            while (_workList.Any())
            {
                var block     = _workList.GetNext();
                var nextEdges = _traversalTechnique.NextEdges(graph, block);
                foreach (var edge in nextEdges)
                {
                    var didChange = _analysis.Analyze(edge);
                    var target    = _traversalTechnique.EdgeTarget(edge);

                    if ((didChange || !_visited.Contains(target)) && !_workList.Contains(target))
                    {
                        _workList.Add(target);
                    }

                    _visited.Add(target);
                }
            }
        }