diff --git a/src/Parser.cpp b/src/Parser.cpp index 182296e6c..a5b70ae32 100644 --- a/src/Parser.cpp +++ b/src/Parser.cpp @@ -1726,44 +1726,21 @@ void Parser::findMissingOperators () // Two consecutive ID/UUID arguments get an 'or' inserted between them. bool Parser::insertOr () { - std::vector nodes; - collect (nodes, collectTerminated); - - // Subset the nodes to only the FILTER, non-PSEUDO nodes. - std::vector filterNodes; + std::vector ::iterator prev = _tree->_branches.begin (); std::vector ::iterator i; - for (i = nodes.begin (); i != nodes.end (); ++i) - if ((*i)->hasTag ("FILTER") && ! (*i)->hasTag ("PSEUDO")) - filterNodes.push_back (*i); - - std::vector ::iterator prev = filterNodes.begin (); - for (i = filterNodes.begin (); i != filterNodes.end (); ++i) + for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) { -// std::cout << "# prev = " << (*prev)->attribute ("raw") << " ... i = " << (*i)->attribute ("raw") << "\n"; if (i != prev && ((*prev)->hasTag ("ID") || (*prev)->hasTag ("UUID")) && ((*i)->hasTag ("ID") || (*i)->hasTag ("UUID"))) { -// std::cout << "# needs OR\n"; - Tree* branch = new Tree ("argOp"); branch->attribute ("raw", "or"); branch->tag ("OP"); branch->tag ("FILTER"); - branch->_trunk = (*i)->_trunk; - - std::vector ::iterator b; - for (b = (*i)->_trunk->_branches.begin (); - b != (*i)->_trunk->_branches.end (); - ++b) - { - if (*b == *i) - { - (*i)->_trunk->_branches.insert (b, branch); - break; - } - } + branch->_trunk = _tree; + _tree->_branches.insert (i, branch); return true; }