summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-12-16 14:59:43 +0100
committerTyge Løvset <[email protected]>2022-12-16 14:59:43 +0100
commitab1cc9675da34df7b43c337d298b878b7dab1427 (patch)
tree6aceab6fbb8a166a3448fc0285d88d2297ee0c72 /src
parente557b8b688426bdbafd3c52d941ba5a4d0dd0d0a (diff)
downloadSTC-modified-ab1cc9675da34df7b43c337d298b878b7dab1427.tar.gz
STC-modified-ab1cc9675da34df7b43c337d298b878b7dab1427.zip
Fixed another cregex regression and simplified.
Diffstat (limited to 'src')
-rw-r--r--src/cregex.c37
1 files changed, 14 insertions, 23 deletions
diff --git a/src/cregex.c b/src/cregex.c
index 21faeb7c..6b51de01 100644
--- a/src/cregex.c
+++ b/src/cregex.c
@@ -327,7 +327,6 @@ typedef struct _Parser
int rune_type;
bool litmode;
bool lastwasand; /* Last token was _operand */
- bool lexdone;
short nbra;
short nclass;
_Rune yyrune; /* last lex'd rune */
@@ -573,10 +572,6 @@ static int /* quoted */
_nextc(_Parser *par, _Rune *rp)
{
int ret;
- if (par->lexdone) {
- *rp = 0;
- return 1;
- }
for (;;) {
ret = par->litmode;
par->exprp += chartorune(rp, par->exprp);
@@ -585,27 +580,19 @@ _nextc(_Parser *par, _Rune *rp)
if (par->litmode) {
if (*par->exprp != 'E')
break;
- par->litmode = false;
par->exprp += 1;
+ par->litmode = false;
continue;
}
par->exprp += chartorune(rp, par->exprp);
- switch (*rp) {
- case 'Q':
+ if (*rp == 'Q') {
par->litmode = true;
continue;
- case 't': *rp = '\t'; break;
- case 'n': *rp = '\n'; break;
- case 'r': *rp = '\r'; break;
- case 'v': *rp = '\v'; break;
- case 'f': *rp = '\f'; break;
}
ret = 1;
}
break;
}
- if (*rp == 0)
- par->lexdone = true;
return ret;
}
@@ -620,18 +607,23 @@ _lex(_Parser *par)
return par->rune_type;
switch (par->yyrune) {
- case 'd': return UTF_d;
- case 'D': return UTF_D;
- case 's': return UTF_s;
- case 'S': return UTF_S;
- case 'w': return UTF_w;
- case 'W': return UTF_W;
+ case 't': par->yyrune = '\t'; break;
+ case 'n': par->yyrune = '\n'; break;
+ case 'r': par->yyrune = '\r'; break;
+ case 'v': par->yyrune = '\v'; break;
+ case 'f': par->yyrune = '\f'; break;
+ case 'd': par->yyrune = UTF_d; break;
+ case 'D': par->yyrune = UTF_D; break;
+ case 's': par->yyrune = UTF_s; break;
+ case 'S': par->yyrune = UTF_S; break;
+ case 'w': par->yyrune = UTF_w; break;
+ case 'W': par->yyrune = UTF_W; break;
case 'b': return TOK_WBOUND;
case 'B': return TOK_NWBOUND;
case 'A': return TOK_BOS;
case 'z': return TOK_EOS;
case 'Z': return TOK_EOZ;
- case 'x': /* hex number */
+ case 'x': /* hex number rune */
if (*par->exprp != '{') break;
sscanf(++par->exprp, "%x", &par->yyrune);
while (*par->exprp) if (*(par->exprp++) == '}') break;
@@ -827,7 +819,6 @@ _regcomp1(_Reprog *progp, _Parser *par, const char *s, int cflags)
goto out;
/* go compile the sucker */
- par->lexdone = false;
par->flags = pp->flags;
par->rune_type = pp->flags.icase ? TOK_IRUNE : TOK_RUNE;
par->dot_type = pp->flags.dotall ? TOK_ANYNL : TOK_ANY;