- Rewrote ::collect to be simpler.
This commit is contained in:
Paul Beckingham 2014-08-22 22:36:10 -04:00
parent a735c7eb63
commit 3aef4f74b9

View file

@ -309,32 +309,23 @@ void Parser::collect (
if (tree == NULL) if (tree == NULL)
tree = _tree; tree = _tree;
if (type == collectAll || tree->_branches.size () == 0)
nodes.push_back (tree);
std::vector <Tree*>::iterator i; std::vector <Tree*>::iterator i;
for (i = tree->_branches.begin (); i != tree->_branches.end (); ++i) for (i = tree->_branches.begin (); i != tree->_branches.end (); ++i)
{
if ((*i)->_branches.size ())
{
if (type == collectAll)
nodes.push_back (*i);
collect (nodes, type, *i);
}
else
{ {
if (type == collectLeaf) if (type == collectLeaf)
{ {
// Parser override operator.
if ((*i)->hasTag ("TERMINATOR") || if ((*i)->hasTag ("TERMINATOR") ||
(*i)->hasTag ("TERMINATED")) (*i)->hasTag ("TERMINATED"))
break; break;
// Skip known args.
if (! (*i)->hasTag ("?")) if (! (*i)->hasTag ("?"))
continue; continue;
} }
nodes.push_back (*i); collect (nodes, type, *i);
}
} }
} }
@ -1593,7 +1584,6 @@ void Parser::findModifications ()
{ {
context.debug ("Parser::findModifications"); context.debug ("Parser::findModifications");
bool action = false; bool action = false;
bool after_writecmd = false; bool after_writecmd = false;
std::vector <Tree*> nodes; std::vector <Tree*> nodes;
@ -1602,9 +1592,10 @@ void Parser::findModifications ()
for (i = nodes.begin (); i != nodes.end (); ++i) for (i = nodes.begin (); i != nodes.end (); ++i)
{ {
if ((*i)->hasTag ("WRITECMD")) if ((*i)->hasTag ("WRITECMD"))
{
after_writecmd = true; after_writecmd = true;
}
if (after_writecmd && else if (after_writecmd &&
! (*i)->hasTag ("CMD") && ! (*i)->hasTag ("CMD") &&
! (*i)->hasTag ("TERMINATOR") && ! (*i)->hasTag ("TERMINATOR") &&
! (*i)->hasTag ("BINARY") && ! (*i)->hasTag ("BINARY") &&