- 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 == collectLeaf)
{ {
if (type == collectAll) if ((*i)->hasTag ("TERMINATOR") ||
nodes.push_back (*i); (*i)->hasTag ("TERMINATED"))
break;
collect (nodes, type, *i); if (! (*i)->hasTag ("?"))
continue;
} }
else
{
if (type == collectLeaf)
{
// Parser override operator.
if ((*i)->hasTag ("TERMINATOR") ||
(*i)->hasTag ("TERMINATED"))
break;
// Skip known args. collect (nodes, type, *i);
if (! (*i)->hasTag ("?"))
continue;
}
nodes.push_back (*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") &&