char *sp, *ep, endc;
int i, matchgen, gen;
+ memset(p->threads, 0, sizeof(Rethread)*p->nthr);
if(msize > NSUBEXPM)
msize = NSUBEXPM;
-
if(p->startinst->gen != 0) {
for(ci = p->startinst; ci < p->startinst + p->len; ci++)
ci->gen = 0;
}
- memset(p->threads, 0, sizeof(Rethread)*p->nthr);
-
clist = lists;
clist->head = nil;
clist->tail = &clist->head;
pool = p->threads;
avail = nil;
-
gen = matchgen = 0;
+
sp = str;
ep = nil;
endc = '\0';
*sem->ep = '\0';
}
}
- for(r = 1; r != L'\0'; sp += i) {
+
+ for(r = L'☺'; r != L'\0'; sp += i) {
i = chartorune(&r, sp);
gen++;
if(matchgen == 0) {
break;
ci = t->i;
Again:
- if(ci->gen == gen || matchgen && t->gen > matchgen)
+ if(ci->gen == gen)
goto Done;
ci->gen = gen;
switch(ci->op) {
t->next = nil;
*nlist->tail = t;
nlist->tail = &t->next;
- if(next == nil)
- break;
- t = next;
- ci = t->i;
- goto Again;
+ goto Next;
case OCLASS:
Class:
if(r < ci->r)
t->next = nil;
*nlist->tail = t;
nlist->tail = &t->next;
- if(next == nil)
- break;
- t = next;
- ci = t->i;
- goto Again;
+ goto Next;
case ONOTNL:
if(r != L'\n') {
ci++;
next = t->next;
t->next = avail;
avail = t;
+ Next:
if(next == nil)
break;
+ if(matchgen && next->gen > matchgen) {
+ *clist->tail = avail;
+ avail = next;
+ break;
+ }
t = next;
ci = t->i;
goto Again;