COP *ocurcop = PL_curcop;
PAD *old_comppad;
SV *ret;
+ struct regexp *oreg = PL_reg_re;
n = ARG(scan);
PL_op = (OP_4tree*)PL_regdata->data[n];
sw = SvTRUE(ret);
logical = 0;
}
- else
+ else {
sv_setsv(save_scalar(PL_replgv), ret);
+ cache_re(oreg);
+ }
break;
}
case OPEN:
{
I32 l = 0;
CHECKPOINT lastcp;
+ I32 lparen = *PL_reglastparen;
/* We suppose that the next guy does not need
backtracking: in particular, it is of constant length,
}
if (regmatch(next))
sayYES;
+ /* t/op/regexp.t test 885 fails if this is performed */
+ /* *PL_reglastparen = lparen; */
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- move forward. */
}
if (regmatch(next))
sayYES;
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- back up. */
PL_reginput = locinput;
if (minmod) {
CHECKPOINT lastcp;
+ I32 lparen = *PL_reglastparen;
minmod = 0;
if (ln && regrepeat(scan, ln) < ln)
sayNO;
if (c == (UV)c1 || c == (UV)c2)
{
TRYPAREN(paren, ln, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
}
else if (c1 == -1000)
{
TRYPAREN(paren, ln, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- move forward. */
}
else {
CHECKPOINT lastcp;
+ I32 lparen = *PL_reglastparen;
n = regrepeat(scan, n);
locinput = PL_reginput;
if (ln < n && PL_regkind[(U8)OP(next)] == EOL &&
if (c1 == -1000 || c == (UV)c1 || c == (UV)c2)
{
TRYPAREN(paren, n, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- back up. */
if (c1 == -1000 || c == (UV)c1 || c == (UV)c2)
{
TRYPAREN(paren, n, PL_reginput);
+ *PL_reglastparen = lparen;
REGCP_UNWIND(lastcp);
}
/* Couldn't or didn't -- back up. */