for (p = regsize; p > parenfloor; p--) {
SSPUSHPTR(regendp[p]);
SSPUSHPTR(regstartp[p]);
- SSPUSHINT(reg_start_tmp[p]);
+ SSPUSHPTR(reg_start_tmp[p]);
SSPUSHINT(p);
}
SSPUSHINT(regsize);
goto phooey;
} else if (c = prog->regstclass) {
I32 doevery = (prog->reganch & ROPT_SKIP) == 0;
- char *class;
+ char *Class;
if (minlen)
dontbother = minlen - 1;
/* We know what class it must start with. */
switch (OP(c)) {
case ANYOF:
- class = OPERAND(c);
+ Class = (char *) OPERAND(c);
while (s < strend) {
- if (reginclass(class, *s)) {
+ if (reginclass(Class, *s)) {
if (tmp && regtry(prog, s))
goto got_it;
else
nextchar = UCHARAT(++locinput);
break;
case EXACT:
- s = OPERAND(scan);
+ s = (char *) OPERAND(scan);
ln = UCHARAT(s++);
/* Inline the first character, for speed. */
if (UCHARAT(s) != nextchar)
reg_flags |= RF_tainted;
/* FALL THROUGH */
case EXACTF:
- s = OPERAND(scan);
+ s = (char *) OPERAND(scan);
ln = UCHARAT(s++);
/* Inline the first character, for speed. */
if (UCHARAT(s) != nextchar &&
nextchar = UCHARAT(locinput);
break;
case ANYOF:
- s = OPERAND(scan);
+ s = (char *) OPERAND(scan);
if (nextchar < 0)
nextchar = UCHARAT(locinput);
if (!reginclass(s, nextchar))
n = ARG(scan); /* which paren pair */
s = regstartp[n];
if (*reglastparen < n || !s)
- break; /* Zero length always matches */
+ sayNO; /* Do not match unless seen CLOSEn. */
if (s == regendp[n])
break;
/* Inline the first character, for speed. */
logical = 0;
sw = 1;
}
- if (OP(scan) == SUSPEND)
+ if (OP(scan) == SUSPEND) {
locinput = reginput;
+ nextchar = UCHARAT(locinput);
+ }
/* FALL THROUGH. */
case LONGJMP:
do_longjump:
scan = reginput;
if (max != REG_INFTY && max < loceol - scan)
loceol = scan + max;
- opnd = OPERAND(p);
+ opnd = (char *) OPERAND(p);
switch (OP(p)) {
case ANY:
while (scan < loceol && *scan != '\n')
return match ^ ((flags & ANYOF_INVERT) != 0);
}
+
+