Upgrade to Pod-Simple-3.04
[p5sagit/p5-mst-13.2.git] / op.c
diff --git a/op.c b/op.c
index e14b4e6..966cf84 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1,7 +1,7 @@
 /*    op.c
  *
  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- *    2000, 2001, 2002, 2003, 2004, 2005, by Larry Wall and others
+ *    2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
@@ -208,11 +208,13 @@ S_no_bareword_allowed(pTHX_ const OP *o)
 PADOFFSET
 Perl_allocmy(pTHX_ char *name)
 {
+    dVAR;
     PADOFFSET off;
+    const bool is_our = (PL_in_my == KEY_our);
 
     /* complain about "my $<special_var>" etc etc */
     if (*name &&
-       !(PL_in_my == KEY_our ||
+       !(is_our ||
          isALPHA(name[1]) ||
          (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
          (name[1] == '_' && (*name == '$' || name[2]))))
@@ -241,22 +243,19 @@ Perl_allocmy(pTHX_ char *name)
     }
 
     /* check for duplicate declaration */
-    pad_check_dup(name,
-               (bool)(PL_in_my == KEY_our),
-               (PL_curstash ? PL_curstash : PL_defstash)
-    );
+    pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
 
     if (PL_in_my_stash && *name != '$') {
        yyerror(Perl_form(aTHX_
                    "Can't declare class for non-scalar %s in \"%s\"",
-                    name, PL_in_my == KEY_our ? "our" : "my"));
+                    name, is_our ? "our" : "my"));
     }
 
     /* allocate a spare slot and store the name in that slot */
 
     off = pad_add_name(name,
                    PL_in_my_stash,
-                   (PL_in_my == KEY_our 
+                   (is_our
                        /* $_ is always in main::, even with our */
                        ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
                        : NULL
@@ -507,19 +506,25 @@ Perl_op_refcnt_unlock(pTHX)
 OP *
 Perl_linklist(pTHX_ OP *o)
 {
+    OP *first;
 
     if (o->op_next)
        return o->op_next;
 
     /* establish postfix order */
-    if (cUNOPo->op_first) {
+    first = cUNOPo->op_first;
+    if (first) {
         register OP *kid;
-       o->op_next = LINKLIST(cUNOPo->op_first);
-       for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
-           if (kid->op_sibling)
+       o->op_next = LINKLIST(first);
+       kid = first;
+       for (;;) {
+           if (kid->op_sibling) {
                kid->op_next = LINKLIST(kid->op_sibling);
-           else
+               kid = kid->op_sibling;
+           } else {
                kid->op_next = o;
+               break;
+           }
        }
     }
     else
@@ -542,6 +547,7 @@ Perl_scalarkids(pTHX_ OP *o)
 STATIC OP *
 S_scalarboolean(pTHX_ OP *o)
 {
+    dVAR;
     if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
        if (ckWARN(WARN_SYNTAX)) {
            const line_t oldline = CopLINE(PL_curcop);
@@ -786,9 +792,10 @@ Perl_scalarvoid(pTHX_ OP *o)
                      built upon these three nroff macros being used in
                      void context. The pink camel has the details in
                      the script wrapman near page 319. */
-                   if (strnEQ(SvPVX_const(sv), "di", 2) ||
-                       strnEQ(SvPVX_const(sv), "ds", 2) ||
-                       strnEQ(SvPVX_const(sv), "ig", 2))
+                   const char * const maybe_macro = SvPVX_const(sv);
+                   if (strnEQ(maybe_macro, "di", 2) ||
+                       strnEQ(maybe_macro, "ds", 2) ||
+                       strnEQ(maybe_macro, "ig", 2))
                            useless = 0;
                }
            }
@@ -959,6 +966,7 @@ Perl_list(pTHX_ OP *o)
 OP *
 Perl_scalarseq(pTHX_ OP *o)
 {
+    dVAR;
     if (o) {
        if (o->op_type == OP_LINESEQ ||
             o->op_type == OP_SCOPE ||
@@ -1029,6 +1037,7 @@ Perl_mod(pTHX_ OP *o, I32 type)
     case OP_CONST:
        if (!(o->op_private & (OPpCONST_ARYBASE)))
            goto nomod;
+       localize = 0;
        if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
            PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
            PL_eval_start = 0;
@@ -1148,9 +1157,8 @@ Perl_mod(pTHX_ OP *o, I32 type)
        /* FALL THROUGH */
     default:
       nomod:
-       /* grep, foreach, subcalls, refgen, m//g */
-       if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN
-           || type == OP_MATCH)
+       /* grep, foreach, subcalls, refgen */
+       if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
            break;
        yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
                     (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
@@ -1532,6 +1540,7 @@ Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
 STATIC OP *
 S_dup_attrlist(pTHX_ OP *o)
 {
+    dVAR;
     OP *rop;
 
     /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
@@ -1569,19 +1578,17 @@ S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
 
     if (for_my) {
        /* Don't force the C<use> if we don't need it. */
-       SV * const * const svp = hv_fetch(GvHVn(PL_incgv), ATTRSMODULE_PM,
-                      sizeof(ATTRSMODULE_PM)-1, 0);
+       SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
        if (svp && *svp != &PL_sv_undef)
            ;           /* already in %INC */
        else
            Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
-                            newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
-                            Nullsv);
+                            newSVpvs(ATTRSMODULE), NULL);
     }
     else {
        Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
-                        newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
-                        Nullsv,
+                        newSVpvs(ATTRSMODULE),
+                        NULL,
                         prepend_elem(OP_LIST,
                                      newSVOP(OP_CONST, 0, stashsv),
                                      prepend_elem(OP_LIST,
@@ -1595,6 +1602,7 @@ S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
 STATIC void
 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
 {
+    dVAR;
     OP *pack, *imop, *arg;
     SV *meth, *stashsv;
 
@@ -1609,7 +1617,7 @@ S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
     apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
 
     /* Need package name for method call. */
-    pack = newSVOP(OP_CONST, 0, newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1));
+    pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
 
     /* Build up the real arg-list. */
     stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
@@ -1624,7 +1632,7 @@ S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
                                    dup_attrlist(attrs)));
 
     /* Fake up a method call to import */
-    meth = newSVpvn_share("import", 6, 0);
+    meth = newSVpvs_share("import");
     imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
                   append_elem(OP_LIST,
                               prepend_elem(OP_LIST, pack, list(arg)),
@@ -1674,7 +1682,7 @@ Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
     }
 
     Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
-                     newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
+                    newSVpvs(ATTRSMODULE),
                      Nullsv, prepend_elem(OP_LIST,
                                  newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
                                  prepend_elem(OP_LIST,
@@ -1686,6 +1694,7 @@ Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
 STATIC OP *
 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
 {
+    dVAR;
     I32 type;
 
     if (!o || PL_error_count)
@@ -1747,6 +1756,7 @@ S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
 OP *
 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
 {
+    dVAR;
     OP *rops;
     int maybe_scalar = 0;
 
@@ -1830,14 +1840,9 @@ Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
     }
     if (!(right->op_flags & OPf_STACKED) && ismatchop) {
        right->op_flags |= OPf_STACKED;
-       /* s/// and tr/// modify their arg.
-        * m//g also indirectly modifies the arg by setting pos magic on it */
-       if (   (right->op_type == OP_MATCH &&
-                   (cPMOPx(right)->op_pmflags & PMf_GLOBAL))
-           || (right->op_type == OP_SUBST)
-           || (right->op_type == OP_TRANS &&
-               ! (right->op_private & OPpTRANS_IDENTICAL))
-       )
+       if (right->op_type != OP_MATCH &&
+            ! (right->op_type == OP_TRANS &&
+               right->op_private & OPpTRANS_IDENTICAL))
            left = mod(left, right->op_type);
        if (right->op_type == OP_TRANS)
            o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
@@ -1895,6 +1900,7 @@ Perl_scope(pTHX_ OP *o)
 int
 Perl_block_start(pTHX_ int full)
 {
+    dVAR;
     const int retval = PL_savestack_ix;
     pad_block_start(full);
     SAVEHINTS();
@@ -1915,6 +1921,7 @@ Perl_block_start(pTHX_ int full)
 OP*
 Perl_block_end(pTHX_ I32 floor, OP *seq)
 {
+    dVAR;
     const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
     OP* const retval = scalarseq(seq);
     LEAVE_SCOPE(floor);
@@ -1928,6 +1935,7 @@ Perl_block_end(pTHX_ I32 floor, OP *seq)
 STATIC OP *
 S_newDEFSVOP(pTHX)
 {
+    dVAR;
     const I32 offset = pad_findmy("$_");
     if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS(offset) & SVpad_OUR) {
        return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
@@ -1942,6 +1950,7 @@ S_newDEFSVOP(pTHX)
 void
 Perl_newPROG(pTHX_ OP *o)
 {
+    dVAR;
     if (PL_in_eval) {
        if (PL_eval_root)
                return;
@@ -1987,6 +1996,7 @@ Perl_newPROG(pTHX_ OP *o)
 OP *
 Perl_localize(pTHX_ OP *o, I32 lex)
 {
+    dVAR;
     if (o->op_flags & OPf_PARENS)
 /* [perl #17376]: this appears to be premature, and results in code such as
    C< our(%x); > executing in list mode rather than void mode */
@@ -2040,8 +2050,7 @@ OP *
 Perl_jmaybe(pTHX_ OP *o)
 {
     if (o->op_type == OP_LIST) {
-       OP *o2;
-       o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", GV_ADD, SVt_PV))),
+       OP * const o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", GV_ADD, SVt_PV)));
        o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
     }
     return o;
@@ -2406,6 +2415,7 @@ static int uvcompare(const void *a, const void *b)
 OP *
 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
 {
+    dVAR;
     SV * const tstr = ((SVOP*)expr)->op_sv;
     SV * const rstr = ((SVOP*)repl)->op_sv;
     STRLEN tlen;
@@ -2811,7 +2821,7 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
 
     if (expr->op_type == OP_CONST) {
        STRLEN plen;
-       SV *pat = ((SVOP*)expr)->op_sv;
+       SV * const pat = ((SVOP*)expr)->op_sv;
        const char *p = SvPV_const(pat, plen);
        if ((o->op_flags & OPf_SPECIAL) && (*p == ' ' && p[1] == '\0')) {
            U32 was_readonly = SvREADONLY(pat);
@@ -2879,7 +2889,7 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
     if (repl) {
        OP *curop;
        if (pm->op_pmflags & PMf_EVAL) {
-           curop = 0;
+           curop = NULL;
            if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
                CopLINE_set(PL_curcop, (line_t)PL_multi_end);
        }
@@ -2890,7 +2900,7 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
            for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
                if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
                    if (curop->op_type == OP_GV) {
-                       GV *gv = cGVOPx_gv(curop);
+                       GV * const gv = cGVOPx_gv(curop);
                        repl_has_vars = 1;
                        if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
                            break;
@@ -3026,6 +3036,7 @@ Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
 void
 Perl_package(pTHX_ OP *o)
 {
+    dVAR;
     const char *name;
     STRLEN len;
 
@@ -3045,6 +3056,7 @@ Perl_package(pTHX_ OP *o)
 void
 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
 {
+    dVAR;
     OP *pack;
     OP *imop;
     OP *veop;
@@ -3071,7 +3083,7 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
            pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
 
            /* Fake up a method call to VERSION */
-           meth = newSVpvn_share("VERSION", 7, 0);
+           meth = newSVpvs_share("VERSION");
            veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
                            append_elem(OP_LIST,
                                        prepend_elem(OP_LIST, pack, list(version)),
@@ -3095,7 +3107,7 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
 
        /* Fake up a method call to import/unimport */
        meth = aver
-           ? newSVpvn_share("import",6, 0) : newSVpvn_share("unimport", 8, 0);
+           ? newSVpvs_share("import") : newSVpvs_share("unimport");
        imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
                       append_elem(OP_LIST,
                                   prepend_elem(OP_LIST, pack, list(arg)),
@@ -3104,7 +3116,7 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
 
     /* Fake up the BEGIN {}, which does its thing immediately. */
     newATTRSUB(floor,
-       newSVOP(OP_CONST, 0, newSVpvn_share("BEGIN", 5, 0)),
+       newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
        Nullop,
        Nullop,
        append_elem(OP_LINESEQ,
@@ -3176,6 +3188,7 @@ Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
 void
 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
 {
+    dVAR;
     OP *veop, *imop;
 
     OP * const modname = newSVOP(OP_CONST, 0, name);
@@ -3216,13 +3229,14 @@ Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
 OP *
 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
 {
+    dVAR;
     OP *doop;
     GV *gv = Nullgv;
 
     if (!force_builtin) {
        gv = gv_fetchpv("do", 0, SVt_PVCV);
        if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
-           GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "do", 2, FALSE);
+           GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
            gv = gvp ? *gvp : Nullgv;
        }
     }
@@ -3290,6 +3304,7 @@ S_is_list_assignment(pTHX_ register const OP *o)
 OP *
 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
 {
+    dVAR;
     OP *o;
 
     if (optype) {
@@ -3763,6 +3778,7 @@ Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
 OP *
 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
 {
+    dVAR;
     OP* listop;
     OP* o;
     const bool once = block && block->op_flags & OPf_SPECIAL &&
@@ -4029,6 +4045,7 @@ Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP
 OP*
 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
 {
+    dVAR;
     OP *o;
 
     if (type != OP_GOTO || label->op_type == OP_CONST) {
@@ -4088,6 +4105,7 @@ S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
                   I32 enter_opcode, I32 leave_opcode,
                   PADOFFSET entertarg)
 {
+    dVAR;
     LOGOP *enterop;
     OP *o;
 
@@ -4140,6 +4158,7 @@ STATIC
 bool
 S_looks_like_bool(pTHX_ OP *o)
 {
+    dVAR;
     switch(o->op_type) {
        case OP_OR:
            return looks_like_bool(cLOGOPo->op_first);
@@ -4195,6 +4214,7 @@ S_looks_like_bool(pTHX_ OP *o)
 OP *
 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
 {
+    dVAR;
     assert( cond );
     return newGIVWHENOP(
        ref_array_or_hash(cond),
@@ -4355,6 +4375,7 @@ Perl_cv_const_sv(pTHX_ CV *cv)
 SV *
 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
 {
+    dVAR;
     SV *sv = Nullsv;
 
     if (!o)
@@ -4697,7 +4718,7 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
        const char * const tname = (name ? name : aname);
 
        if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
-           SV * const sv = NEWSV(0,0);
+           SV * const sv = newSV(0);
            SV * const tmpstr = sv_newmortal();
            GV * const db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
            HV *hv;
@@ -4836,6 +4857,7 @@ Used by C<xsubpp> to hook up XSUBs as Perl subs.
 CV *
 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
 {
+    dVAR;
     GV * const gv = gv_fetchpv(name ? name :
                        (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
                        GV_ADDMULTI, SVt_PVCV);
@@ -4880,7 +4902,7 @@ Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
     if (cv)                            /* must reuse cv if autoloaded */
        cv_undef(cv);
     else {
-       cv = (CV*)NEWSV(1105,0);
+       cv = (CV*)newSV(0);
        sv_upgrade((SV *)cv, SVt_PVCV);
        if (name) {
            GvCV(gv) = cv;
@@ -4945,6 +4967,7 @@ done:
 void
 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
 {
+    dVAR;
     register CV *cv;
 
     GV * const gv = o
@@ -5143,6 +5166,7 @@ Perl_ck_anoncode(pTHX_ OP *o)
 OP *
 Perl_ck_bitop(pTHX_ OP *o)
 {
+    dVAR;
 #define OP_IS_NUMCOMPARE(op) \
        ((op) == OP_LT   || (op) == OP_I_LT || \
         (op) == OP_GT   || (op) == OP_I_GT || \
@@ -5249,6 +5273,7 @@ Perl_ck_die(pTHX_ OP *o)
 OP *
 Perl_ck_eof(pTHX_ OP *o)
 {
+    dVAR;
     const I32 type = o->op_type;
 
     if (o->op_flags & OPf_KIDS) {
@@ -5318,7 +5343,7 @@ Perl_ck_exit(pTHX_ OP *o)
 #ifdef VMS
     HV * const table = GvHV(PL_hintgv);
     if (table) {
-       SV * const * const svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
+       SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
        if (svp && *svp && SvTRUE(*svp))
            o->op_private |= OPpEXIT_VMSISH;
     }
@@ -5345,6 +5370,7 @@ Perl_ck_exec(pTHX_ OP *o)
 OP *
 Perl_ck_exists(pTHX_ OP *o)
 {
+    dVAR;
     o = ck_fun(o);
     if (o->op_flags & OPf_KIDS) {
        OP * const kid = cUNOPo->op_first;
@@ -5519,6 +5545,7 @@ Perl_ck_ftst(pTHX_ OP *o)
 OP *
 Perl_ck_fun(pTHX_ OP *o)
 {
+    dVAR;
     const int type = o->op_type;
     register I32 oa = PL_opargs[type] >> OASHIFT;
 
@@ -5673,7 +5700,7 @@ Perl_ck_fun(pTHX_ OP *o)
                                     || kid->op_type == OP_HELEM)
                            {
                                 OP *op = ((BINOP*)kid)->op_first;
-                                name = 0;
+                                name = NULL;
                                 if (op) {
                                      SV *tmpstr = Nullsv;
                                      const char * const a =
@@ -5994,6 +6021,7 @@ Perl_ck_say(pTHX_ OP *o)
 OP *
 Perl_ck_smartmatch(pTHX_ OP *o)
 {
+    dVAR;
     if (0 == (o->op_flags & OPf_SPECIAL)) {
        OP *first  = cBINOPo->op_first;
        OP *second = first->op_sibling;
@@ -6051,6 +6079,7 @@ Perl_ck_sassign(pTHX_ OP *o)
 OP *
 Perl_ck_match(pTHX_ OP *o)
 {
+    dVAR;
     if (o->op_type != OP_QR && PL_compcv) {
        const I32 offset = pad_findmy("$_");
        if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS(offset) & SVpad_OUR)) {
@@ -6069,10 +6098,11 @@ Perl_ck_method(pTHX_ OP *o)
     OP * const kid = cUNOPo->op_first;
     if (kid->op_type == OP_CONST) {
        SV* sv = kSVOP->op_sv;
-       if (!(strchr(SvPVX_const(sv), ':') || strchr(SvPVX_const(sv), '\''))) {
+       const char * const method = SvPVX_const(sv);
+       if (!(strchr(method, ':') || strchr(method, '\''))) {
            OP *cmop;
            if (!SvREADONLY(sv) || !SvFAKE(sv)) {
-               sv = newSVpvn_share(SvPVX_const(sv), SvCUR(sv), 0);
+               sv = newSVpvn_share(method, SvCUR(sv), 0);
            }
            else {
                kSVOP->op_sv = Nullsv;
@@ -6094,9 +6124,10 @@ Perl_ck_null(pTHX_ OP *o)
 OP *
 Perl_ck_open(pTHX_ OP *o)
 {
+    dVAR;
     HV * const table = GvHV(PL_hintgv);
     if (table) {
-       SV **svp = hv_fetch(table, "open_IN", 7, FALSE);
+       SV **svp = hv_fetchs(table, "open_IN", FALSE);
        if (svp && *svp) {
            const I32 mode = mode_from_discipline(*svp);
            if (mode & O_BINARY)
@@ -6105,7 +6136,7 @@ Perl_ck_open(pTHX_ OP *o)
                o->op_private |= OPpOPEN_IN_CRLF;
        }
 
-       svp = hv_fetch(table, "open_OUT", 8, FALSE);
+       svp = hv_fetchs(table, "open_OUT", FALSE);
        if (svp && *svp) {
            const I32 mode = mode_from_discipline(*svp);
            if (mode & O_BINARY)
@@ -6154,6 +6185,7 @@ Perl_ck_repeat(pTHX_ OP *o)
 OP *
 Perl_ck_require(pTHX_ OP *o)
 {
+    dVAR;
     GV* gv = Nullgv;
 
     if (o->op_flags & OPf_KIDS) {      /* Shall we supply missing .pm? */
@@ -6191,7 +6223,7 @@ Perl_ck_require(pTHX_ OP *o)
        /* handle override, if any */
        gv = gv_fetchpv("require", 0, SVt_PVCV);
        if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
-           GV * const * const gvp = (GV**)hv_fetch(PL_globalstash, "require", 7, FALSE);
+           GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
            gv = gvp ? *gvp : Nullgv;
        }
     }
@@ -6213,6 +6245,7 @@ Perl_ck_require(pTHX_ OP *o)
 OP *
 Perl_ck_return(pTHX_ OP *o)
 {
+    dVAR;
     if (CvLVALUE(PL_compcv)) {
         OP *kid;
        for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
@@ -6245,6 +6278,7 @@ Perl_ck_select(pTHX_ OP *o)
 OP *
 Perl_ck_shift(pTHX_ OP *o)
 {
+    dVAR;
     const I32 type = o->op_type;
 
     if (!(o->op_flags & OPf_KIDS)) {
@@ -6261,15 +6295,16 @@ Perl_ck_shift(pTHX_ OP *o)
 OP *
 Perl_ck_sort(pTHX_ OP *o)
 {
+    dVAR;
     OP *firstkid;
 
     if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0)
     {
-       HV *hinthv = GvHV(PL_hintgv);
+       HV * const hinthv = GvHV(PL_hintgv);
        if (hinthv) {
-           SV **svp = hv_fetch(hinthv, "sort", 4, 0);
+           SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
            if (svp) {
-               I32 sorthints = (I32)SvIV(*svp);
+               const I32 sorthints = (I32)SvIV(*svp);
                if ((sorthints & HINT_SORT_QUICKSORT) != 0)
                    o->op_private |= OPpSORT_QSORT;
                if ((sorthints & HINT_SORT_STABLE) != 0)
@@ -6339,6 +6374,7 @@ Perl_ck_sort(pTHX_ OP *o)
 STATIC void
 S_simplify_sort(pTHX_ OP *o)
 {
+    dVAR;
     register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
     OP *k;
     int descending;
@@ -6480,6 +6516,7 @@ Perl_ck_join(pTHX_ OP *o)
 OP *
 Perl_ck_subr(pTHX_ OP *o)
 {
+    dVAR;
     OP *prev = ((cUNOPo->op_first->op_sibling)
             ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
     OP *o2 = prev->op_sibling;
@@ -7054,7 +7091,7 @@ Perl_peep(pTHX_ register OP *o)
            lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
            if (!(SvFLAGS(lexname) & SVpad_TYPED))
                break;
-           fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
+           fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
            if (!fields || !GvHV(*fields))
                break;
            key = SvPV_const(*svp, keylen);
@@ -7103,7 +7140,7 @@ Perl_peep(pTHX_ register OP *o)
            lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
            if (!(SvFLAGS(lexname) & SVpad_TYPED))
                break;
-           fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
+           fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
            if (!fields || !GvHV(*fields))
                break;
            /* Again guessing that the pushmark can be jumped over.... */
@@ -7399,6 +7436,7 @@ Perl_peep(pTHX_ register OP *o)
 char*
 Perl_custom_op_name(pTHX_ const OP* o)
 {
+    dVAR;
     const IV index = PTR2IV(o->op_ppaddr);
     SV* keysv;
     HE* he;
@@ -7418,6 +7456,7 @@ Perl_custom_op_name(pTHX_ const OP* o)
 char*
 Perl_custom_op_desc(pTHX_ const OP* o)
 {
+    dVAR;
     const IV index = PTR2IV(o->op_ppaddr);
     SV* keysv;
     HE* he;
@@ -7440,6 +7479,7 @@ Perl_custom_op_desc(pTHX_ const OP* o)
 static void
 const_sv_xsub(pTHX_ CV* cv)
 {
+    dVAR;
     dXSARGS;
     if (items != 0) {
 #if 0