diff --git a/pike.c b/pike.c index f232721..c567ad1 100644 --- a/pike.c +++ b/pike.c @@ -424,12 +424,12 @@ int re_comp(rcode *prog, const char *re) #define _return(state) \ { prog->gen = gen + 1; return state; } \ -#define newsub() \ +#define newsub(init) \ s1 = freesub; \ if (s1) \ freesub = (rsub*)s1->sub[0]; \ else \ - s1 = (rsub*)&nsubs[rsubsize * subidx++]; \ + { s1 = (rsub*)&nsubs[rsubsize * subidx++]; init }\ #define decref(csub) \ if (--csub->ref == 0) { \ @@ -491,7 +491,7 @@ goto next##nn; \ case SAVE: \ if (sub->ref > 1) { \ sub->ref--; \ - newsub() \ + newsub(/*nop*/) \ for (j = 0; j < nsubp; j++) \ s1->sub[j] = sub->sub[j]; \ sub = s1; \ @@ -575,10 +575,8 @@ int re_pikevm(rcode *prog, const char *s, const char **subp, int nsubp) nlistidx = 0; if (!matched) { jmp_start: - newsub() + newsub(for(i = 1; i < nsubp; i++) s1->sub[i] = NULL;) s1->ref = 1; - for (i = 1; i < nsubp; i++) - s1->sub[i] = NULL; s1->sub[0] = _sp; addthread(1, clist, clistidx, insts, s1) } else if (!clistidx) @@ -625,12 +623,12 @@ int main(int argc, char *argv[]) break; for (int l=0; l