for (kid = cLISTOP->op_first; kid; kid = kid->op_sibling)
scalarvoid(kid);
break;
+ case OP_ENTEREVAL:
+ scalarkids(op);
+ break;
case OP_REQUIRE:
- /* since all requires must return a value, they're never void */
+ /* all requires must return a boolean value */
op->op_flags &= ~OPf_WANT;
return scalar(op);
case OP_SPLIT:
}
curcop = &compiling;
break;
+ case OP_REQUIRE:
+ /* all requires must return a boolean value */
+ op->op_flags &= ~OPf_WANT;
+ return scalar(op);
}
return op;
}
switch (op->op_type) {
case OP_UNDEF:
+ modcount++;
return op;
case OP_CONST:
if (!(op->op_private & (OPpCONST_ARYBASE)))
case OP_RV2AV:
case OP_RV2HV:
+ if (!type && cUNOP->op_first->op_type != OP_GV)
+ croak("Can't localize through a reference");
if (type == OP_REFGEN && op->op_flags & OPf_PARENS) {
modcount = 10000;
return op; /* Treat \(@foo) like ordinary list. */
break;
case OP_RV2SV:
if (!type && cUNOP->op_first->op_type != OP_GV)
- croak("Can't localize a reference");
+ croak("Can't localize through a reference");
ref(cUNOP->op_first, op->op_type);
/* FALL THROUGH */
case OP_GV:
if (!(opargs[type] & OA_FOLDCONST))
goto nope;
+ switch (type) {
+ case OP_SPRINTF:
+ case OP_UCFIRST:
+ case OP_LCFIRST:
+ case OP_UC:
+ case OP_LC:
+ if (o->op_private & OPpLOCALE)
+ goto nope;
+ }
+
if (error_count)
goto nope; /* Don't try to run w/ errors */
if (op->op_type == OP_TRANS)
return pmtrans(op, expr, repl);
+ hints |= HINT_BLOCK_SCOPE;
pm = (PMOP*)op;
if (expr->op_type == OP_CONST) {
CvROOT(cv) = Nullop;
LEAVE;
}
+ SvPOK_off((SV*)cv); /* forget prototype */
CvFLAGS(cv) = 0;
SvREFCNT_dec(CvGV(cv));
CvGV(cv) = Nullgv;
gv_efullname3(name = sv_newmortal(), gv, Nullch);
sv_setpv(msg, "Prototype mismatch:");
if (name)
- sv_catpvf(msg, " sub %S", name);
+ sv_catpvf(msg, " sub %_", name);
if (SvPOK(cv))
sv_catpvf(msg, " (%s)", SvPVX(cv));
sv_catpv(msg, " vs ");
sv_catpvf(msg, "(%s)", p);
else
sv_catpv(msg, "none");
- warn("%S", msg);
+ warn("%_", msg);
}
}
SAVEFREESV(compcv);
goto done;
}
+ /* ahem, death to those who redefine active sort subs */
+ if (curstack == sortstack && sortcop == CvSTART(cv))
+ croak("Can't redefine active sort subroutine %s", name);
const_sv = cv_const_sv(cv);
if (const_sv || dowarn) {
line_t oldline = curcop->cop_line;
CV *cv;
HV *hv;
- sv_setpvf(sv, "%S:%ld-%ld",
+ sv_setpvf(sv, "%_:%ld-%ld",
GvSV(curcop->cop_filegv),
(long)subline, (long)curcop->cop_line);
gv_efullname3(tmpstr, gv, Nullch);
ck_match(op)
OP *op;
{
- cPMOP->op_pmflags |= PMf_RUNTIME;
- cPMOP->op_pmpermflags |= PMf_RUNTIME;
+ op->op_private |= OPpRUNTIME;
return op;
}