summaryrefslogtreecommitdiff
path: root/src/piraha/Multi.cc
diff options
context:
space:
mode:
authorsbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-03-22 19:46:56 +0000
committersbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-03-22 19:46:56 +0000
commitf74e867aab6e3a36824f5c33ed1d75bac90ef06f (patch)
treececf6e882ad4ef16dce092ac06dff36d16c84489 /src/piraha/Multi.cc
parent249587f1e95ea75de1e7a04161124751750e42c0 (diff)
Updates to Piraha:
1) Added some debug code 2) Fix logic bugs that only I noticed Still passes the ET testsuite. git-svn-id: http://svn.cactuscode.org/flesh/trunk@4988 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/piraha/Multi.cc')
-rw-r--r--src/piraha/Multi.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/piraha/Multi.cc b/src/piraha/Multi.cc
index 4d718d59..d0733618 100644
--- a/src/piraha/Multi.cc
+++ b/src/piraha/Multi.cc
@@ -6,14 +6,22 @@ using namespace piraha;
bool Multi::match(Matcher *m) {
unsigned int save;
int iter = 0;
+ vector<smart_ptr<Group> > chSave;
while(true) {
save = m->pos;
- if(!pattern->match(m))
+ chSave = m->children;
+ if(!pattern->match(m)) {
+ m->children = chSave;
+ m->pos = save;
break;
- if(save-m->pos == 0)
+ }
+ if(save - m->pos == 0) {
+ std::cout << "ZERO ADVANCE IN MULTI!" << std::endl;
return minv <= iter && iter <= maxv;
+ }
iter++;
+ if(iter == maxv)
+ break;
}
- m->pos = save;
return minv <= iter && iter <= maxv;
}