summaryrefslogtreecommitdiff
path: root/drivers/nrex/nrex.cpp
diff options
context:
space:
mode:
authorZher Huei Lee <lee.zh.92@gmail.com>2015-07-24 13:25:04 +0100
committerZher Huei Lee <lee.zh.92@gmail.com>2015-07-24 13:25:04 +0100
commitd9f1a85948478fe5038ecc2fd1923c451cca84d5 (patch)
tree5c852f82e2f93d7c0f3f984604b05e425f79ec7f /drivers/nrex/nrex.cpp
parent732bfd0baff3fc17790c345f7e6b02e5c12a5080 (diff)
More nrex fixes
Diffstat (limited to 'drivers/nrex/nrex.cpp')
-rw-r--r--drivers/nrex/nrex.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/nrex/nrex.cpp b/drivers/nrex/nrex.cpp
index 36a5bb4ced..696d46240e 100644
--- a/drivers/nrex/nrex.cpp
+++ b/drivers/nrex/nrex.cpp
@@ -246,7 +246,18 @@ struct nrex_node_group : public nrex_node
{
return res;
}
- if ((res >= 0) != negate)
+ if (negate)
+ {
+ if (res < 0)
+ {
+ res = pos + 1;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ if (res >= 0)
{
if (capturing >= 0)
{
@@ -479,7 +490,6 @@ struct nrex_node_quantifier : public nrex_node
{
nrex_array<int> backtrack;
backtrack.push(pos);
- s->complete = false;
while (backtrack.top() <= s->end)
{
if (max >= 1 && backtrack.size() > (unsigned int)max)
@@ -502,7 +512,6 @@ struct nrex_node_quantifier : public nrex_node
return res;
}
}
- s->complete = false;
int res = child->test(s, backtrack.top());
if (s->complete)
{
@@ -516,12 +525,7 @@ struct nrex_node_quantifier : public nrex_node
}
while (greedy && (unsigned int) min < backtrack.size())
{
- s->complete = false;
int res = backtrack.top();
- if (s->complete)
- {
- return res;
- }
if (next)
{
res = next->test(s, res);
@@ -530,6 +534,10 @@ struct nrex_node_quantifier : public nrex_node
{
return res;
}
+ if (s->complete)
+ {
+ return res;
+ }
backtrack.pop();
}
return -1;