/// <summary> /// Called when the walker walks into a node. /// </summary> /// <param name="node"></param> protected override void DefaultVisit(LuaSyntaxNode node) { foreach (var child in node.ChildNodesAndTokens()) { if (child.IsToken) { if (Depth >= SyntaxWalkerDepth.Token) { Visit((SyntaxToken)child); } } else { if (Depth >= SyntaxWalkerDepth.Node) { Visit((LuaSyntaxNode)child); } } } }
private IEnumerable <SyntaxNodeOrToken> EnumerateNodes(LuaSyntaxNode node, bool dump) { Print(node, dump); yield return(node); var stack = new Stack <ChildSyntaxList.Enumerator>(24); stack.Push(node.ChildNodesAndTokens().GetEnumerator()); Open(dump); while (stack.Count > 0) { var en = stack.Pop(); if (!en.MoveNext()) { // no more down this branch Close(dump); continue; } var current = en.Current; stack.Push(en); // put it back on stack (struct enumerator) Print(current, dump); yield return(current); if (current.IsNode) { // not token, so consider children stack.Push(current.ChildNodesAndTokens().GetEnumerator()); Open(dump); continue; } } Done(dump); }