From d22f2c719d85145917dc9426ace3c24a01ad865d Mon Sep 17 00:00:00 2001 From: Kyryl Melekhin Date: Sat, 23 Oct 2021 15:42:00 +0000 Subject: [PATCH] use if else --- pike.c | 122 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/pike.c b/pike.c index 02371d3..2e0fd53 100644 --- a/pike.c +++ b/pike.c @@ -473,19 +473,20 @@ plist[plistidx++] = npc; \ #define onclist(nn) \ -#define endnlist() if (*npc == MATCH) nmatch = sp; \ +#define endnlist() if (spc == MATCH) nmatch = sp; \ #define endclist() \ #define fastrec(nn, list, listidx) \ nsub->ref++; \ -if (*npc < WBEG) { \ +spc = *npc; \ +if (spc < WBEG) { \ list[listidx].sub = nsub; \ list[listidx++].pc = npc; \ - npc = pcs[i]; \ + npc = pcs[si]; \ goto rec##nn; \ } \ -subs[i++] = nsub; \ +subs[si++] = nsub; \ goto next##nn; \ #define saveclist() \ @@ -497,81 +498,80 @@ newsub(/*nop*/, /*nop*/) \ memcpy(s1->sub, nsub->sub, osubp); \ #define instclist(nn) \ -case BOL: \ +else if (spc == BOL) { \ if (_sp != s) { \ - if (!i && !clistidx) \ + if (!si && !clistidx) \ return 0; \ deccheck(nn) \ } \ npc++; goto rec##nn; \ +} \ #define instnlist(nn) \ -case JMP: \ +else if (spc == JMP) { \ npc += 2 + npc[1]; \ goto rec##nn; \ +} \ #define addthread(nn, list, listidx) \ -{ \ - int i = 0; \ - rec##nn: \ - if (*npc < WBEG) { \ - list[listidx].sub = nsub; \ - list[listidx++].pc = npc; \ - rec_check##nn: \ - if (i) { \ - npc = pcs[--i]; \ - nsub = subs[i]; \ - goto rec##nn; \ - } \ - end##list() \ - continue; \ - } \ - next##nn: \ - switch(*npc) { \ - case SPLIT: \ - on##list(nn) \ - npc += 2; \ - pcs[i] = npc + npc[-1]; \ - fastrec(nn, list, listidx) \ - case RSPLIT: \ - on##list(nn) \ - npc += 2; \ - pcs[i] = npc; \ - npc += npc[-1]; \ - fastrec(nn, list, listidx) \ - case SAVE: \ - if (nsub->ref > 1) { \ - nsub->ref--; \ - save##list() \ - nsub = s1; \ - nsub->ref = 1; \ - } \ - nsub->sub[npc[1]] = _sp; \ - npc += 2; \ +si = 0; \ +rec##nn: \ +spc = *npc; \ +if (spc < WBEG) { \ + list[listidx].sub = nsub; \ + list[listidx++].pc = npc; \ + rec_check##nn: \ + if (si) { \ + npc = pcs[--si]; \ + nsub = subs[si]; \ goto rec##nn; \ - case WBEG: \ - if (((sp != s || sp != _sp) && isword(sp)) \ - || !isword(_sp)) \ - deccheck(nn) \ - npc++; goto rec##nn; \ - case WEND: \ - if (isword(_sp)) \ - deccheck(nn) \ - npc++; goto rec##nn; \ - case EOL: \ - if (*_sp) \ - deccheck(nn) \ - npc++; goto rec##nn; \ - inst##list(nn) \ } \ - deccheck(nn) \ + end##list() \ + continue; \ } \ +next##nn: \ +if (spc == SPLIT) { \ + on##list(nn) \ + npc += 2; \ + pcs[si] = npc + npc[-1]; \ + fastrec(nn, list, listidx) \ +} else if (spc == SAVE) { \ + if (nsub->ref > 1) { \ + nsub->ref--; \ + save##list() \ + nsub = s1; \ + nsub->ref = 1; \ + } \ + nsub->sub[npc[1]] = _sp; \ + npc += 2; \ + goto rec##nn; \ +} else if (spc == WBEG) { \ + if (((sp != s || sp != _sp) && isword(sp)) \ + || !isword(_sp)) \ + deccheck(nn) \ + npc++; goto rec##nn; \ +} else if (spc == RSPLIT) { \ + on##list(nn) \ + npc += 2; \ + pcs[si] = npc; \ + npc += npc[-1]; \ + fastrec(nn, list, listidx) \ +} else if (spc == WEND) { \ + if (isword(_sp)) \ + deccheck(nn) \ + npc++; goto rec##nn; \ +} else if (spc == EOL) { \ + if (*_sp) \ + deccheck(nn) \ + npc++; goto rec##nn; \ +} inst##list(nn) \ +deccheck(nn) \ int re_pikevm(rcode *prog, const char *s, const char **subp, int nsubp) { int rsubsize = sizeof(rsub)+(sizeof(char*)*nsubp); - int i, j, c, suboff = rsubsize, *npc, osubp = nsubp * sizeof(char*); - int clistidx = 0, nlistidx, plistidx; + int si, i, j, c, suboff = rsubsize, *npc, osubp = nsubp * sizeof(char*); + int clistidx = 0, nlistidx, plistidx, spc; const char *sp = s, *_sp = s, *nmatch = NULL; int *insts = prog->insts; int *pcs[prog->splits], *plist[prog->splits];