private void Visit(BfsTopologicalNode node)
{
//If the node was found in the depth stack, report an error as this means a circular dependence was found.
if (stackVisitedNodes.Contains(node))
{
List<BfsTopologicalNode> reversed = new List<BfsTopologicalNode>(stackVisitedNodes);
reversed.Reverse();
StringBuilder b = new StringBuilder("A circular depencence was detected: ");
foreach (BfsTopologicalNode topoNode in reversed)
b.Append( topoNode.NamedField.Name + " -> ");
b.Append(node.NamedField.Name);
BfsCompiler.ReportError(node.NamedField.SourceRange,b.ToString());
}
if (!node.Visited)
{
node.Visited = true;
stackVisitedNodes.Push(node);
foreach (BfsTopologicalNode subnode in node.Nodes)
Visit(subnode);
stackVisitedNodes.Pop();
if(this.nodes.Contains(node))
resultList.Add(node.NamedField);
}
}