diff --git a/pike.c b/pike.c index 37f659a..f32b7af 100644 --- a/pike.c +++ b/pike.c @@ -453,14 +453,13 @@ if (*pc < WBEG) { \ subs[i++] = sub; \ goto next##nn; \ -#define save1() \ +#define saveclist() \ newsub(for (j = 0; j < nsubp; j++) s1->sub[j] = sub->sub[j];, \ -for (j = 0; j < nsubp / 2; j++) s1->sub[j] = sub->sub[j];) \ +for (j = 0; j < nsubp / 2 - 1; j++) s1->sub[j] = sub->sub[j];) \ -#define save2() \ +#define savenlist() \ newsub(/*nop*/, /*nop*/) \ -for (j = 0; j < nsubp; j++) \ - s1->sub[j] = sub->sub[j]; \ +for (j = 0; j < nsubp; j++) s1->sub[j] = sub->sub[j]; \ #define addthread(nn, list, listidx, _pc, _sub) \ { \ @@ -503,7 +502,7 @@ for (j = 0; j < nsubp; j++) \ case SAVE: \ if (sub->ref > 1) { \ sub->ref--; \ - save##nn() \ + save##list() \ sub = s1; \ sub->ref = 1; \ } \ @@ -595,7 +594,7 @@ int re_pikevm(rcode *prog, const char *s, const char **subp, int nsubp) if (matched) { for (i = 0, j = i; i < nsubp; i+=2, j++) { subp[i] = matched->sub[j]; - subp[i+1] = matched->sub[j+(nsubp/2)]; + subp[i+1] = matched->sub[nsubp / 2 + j]; } _return(1) }