From a503a0266368826a20743088f1b3190417050843 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sat, 30 Aug 2014 15:36:08 -0400 Subject: [PATCH] Parser - Rewrote ::insertOr to only operate at the ORIGINAL node level, which is appropriate for this operation. --- src/Parser.cpp | 31 ++++--------------------------- 1 file changed, 4 insertions(+), 27 deletions(-) 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; }