diff options
author | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-03-22 19:46:56 +0000 |
---|---|---|
committer | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-03-22 19:46:56 +0000 |
commit | f74e867aab6e3a36824f5c33ed1d75bac90ef06f (patch) | |
tree | cecf6e882ad4ef16dce092ac06dff36d16c84489 /src/piraha/Multi.cc | |
parent | 249587f1e95ea75de1e7a04161124751750e42c0 (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.cc | 14 |
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; } |