hints/dec_osf.sh (Re: blead@26701 compilation warning from tru64 cc)
[p5sagit/p5-mst-13.2.git] / regcomp.c
index dd2188f..83b9015 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -79,7 +79,7 @@
  ****    Alterations to Henry's code are...
  ****
  ****    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.
@@ -886,7 +886,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
 
 
     for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
-        regnode *noper = NEXTOPER( cur );
+        regnode * const noper = NEXTOPER( cur );
         const U8 *uc = (U8*)STRING( noper );
         const U8 * const e  = uc + STR_LEN( noper );
         STRLEN foldlen = 0;
@@ -974,72 +974,70 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
 
         for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
 
-        regnode *noper   = NEXTOPER( cur );
-        U8 *uc           = (U8*)STRING( noper );
-        const U8 * const e = uc + STR_LEN( noper );
-        U32 state        = 1;         /* required init */
-        U16 charid       = 0;         /* sanity init */
-        U8 *scan         = (U8*)NULL; /* sanity init */
-        STRLEN foldlen   = 0;         /* required init */
-        U8 foldbuf[ UTF8_MAXBYTES_CASE + 1 ];
-
-
-        for ( ; uc < e ; uc += len ) {
-
-            TRIE_READ_CHAR;
-
-            if ( uvc < 256 ) {
-                charid = trie->charmap[ uvc ];
-            } else {
-                SV** svpp=(SV**)NULL;
-                svpp = hv_fetch( trie->widecharmap, (char*)&uvc, sizeof( UV ), 0);
-                if ( !svpp ) {
-                    charid = 0;
-                } else {
-                    charid=(U16)SvIV( *svpp );
-                }
-            }
-            if ( charid ) {
+           regnode * const noper = NEXTOPER( cur );
+           U8 *uc           = (U8*)STRING( noper );
+           const U8 * const e = uc + STR_LEN( noper );
+           U32 state        = 1;         /* required init */
+           U16 charid       = 0;         /* sanity init */
+           U8 *scan         = (U8*)NULL; /* sanity init */
+           STRLEN foldlen   = 0;         /* required init */
+           U8 foldbuf[ UTF8_MAXBYTES_CASE + 1 ];
+
+           for ( ; uc < e ; uc += len ) {
+
+               TRIE_READ_CHAR;
+
+               if ( uvc < 256 ) {
+                   charid = trie->charmap[ uvc ];
+               } else {
+                   SV** const svpp = hv_fetch( trie->widecharmap, (char*)&uvc, sizeof( UV ), 0);
+                   if ( !svpp ) {
+                       charid = 0;
+                   } else {
+                       charid=(U16)SvIV( *svpp );
+                   }
+               }
+               if ( charid ) {
 
-                U16 check;
-                U32 newstate = 0;
+                   U16 check;
+                   U32 newstate = 0;
 
-                charid--;
-                if ( !trie->states[ state ].trans.list ) {
-                    TRIE_LIST_NEW( state );
-                }
-                for ( check = 1; check <= TRIE_LIST_USED( state ); check++ ) {
-                    if ( TRIE_LIST_ITEM( state, check ).forid == charid ) {
-                        newstate = TRIE_LIST_ITEM( state, check ).newstate;
-                        break;
-                    }
-               }
-               if ( ! newstate ) {
-                   newstate = next_alloc++;
-                   TRIE_LIST_PUSH( state, charid, newstate );
-                   transcount++;
+                   charid--;
+                   if ( !trie->states[ state ].trans.list ) {
+                       TRIE_LIST_NEW( state );
+                   }
+                   for ( check = 1; check <= TRIE_LIST_USED( state ); check++ ) {
+                       if ( TRIE_LIST_ITEM( state, check ).forid == charid ) {
+                           newstate = TRIE_LIST_ITEM( state, check ).newstate;
+                           break;
+                       }
+                   }
+                   if ( ! newstate ) {
+                       newstate = next_alloc++;
+                       TRIE_LIST_PUSH( state, charid, newstate );
+                       transcount++;
+                   }
+                   state = newstate;
+               } else {
+                   Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %"IVdf, uvc );
                }
-               state = newstate;
-            } else {
-                Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %"IVdf, uvc );
-            }
-            /* charid is now 0 if we dont know the char read, or nonzero if we do */
-        }
+               /* charid is now 0 if we dont know the char read, or nonzero if we do */
+           }
 
-        if ( !trie->states[ state ].wordnum ) {
-            /* we havent inserted this word into the structure yet. */
-            trie->states[ state ].wordnum = ++curword;
+           if ( !trie->states[ state ].wordnum ) {
+               /* we havent inserted this word into the structure yet. */
+               trie->states[ state ].wordnum = ++curword;
 
-            DEBUG_r({
-                /* store the word for dumping */
-                SV* tmp = newSVpvn( STRING( noper ), STR_LEN( noper ) );
-                if ( UTF ) SvUTF8_on( tmp );
-                av_push( trie->words, tmp );
-            });
+               DEBUG_r({
+                   /* store the word for dumping */
+                   SV* tmp = newSVpvn( STRING( noper ), STR_LEN( noper ) );
+                   if ( UTF ) SvUTF8_on( tmp );
+                   av_push( trie->words, tmp );
+               });
 
-        } else {
-            /* Its a dupe. So ignore it. */
-        }
+           } else {
+               /* Its a dupe. So ignore it. */
+           }
 
         } /* end second pass */
 
@@ -1100,11 +1098,12 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
                    U16 idx;
 
                     for( idx = 2 ; idx <= TRIE_LIST_USED( state ) ; idx++ ) {
-                        if ( TRIE_LIST_ITEM( state, idx).forid < minid ) {
-                            minid=TRIE_LIST_ITEM( state, idx).forid;
-                        } else if ( TRIE_LIST_ITEM( state, idx).forid > maxid ) {
-                            maxid=TRIE_LIST_ITEM( state, idx).forid;
-                        }
+                       const U16 forid = TRIE_LIST_ITEM( state, idx).forid;
+                       if ( forid < minid ) {
+                           minid=forid;
+                       } else if ( forid > maxid ) {
+                           maxid=forid;
+                       }
                     }
                     if ( transcount < tp + maxid - minid + 1) {
                         transcount *= 2;
@@ -1131,7 +1130,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
                         }
                     } else {
                         for ( idx=1; idx <= TRIE_LIST_USED( state ) ; idx++ ) {
-                            U32 tid = base -  trie->uniquecharcount + TRIE_LIST_ITEM( state, idx ).forid;
+                            const U32 tid = base -  trie->uniquecharcount + TRIE_LIST_ITEM( state, idx ).forid;
                             trie->trans[ tid ].next = TRIE_LIST_ITEM( state, idx ).newstate;
                             trie->trans[ tid ].check = state;
                         }
@@ -1192,7 +1191,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
 
         for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
 
-            regnode *noper   = NEXTOPER( cur );
+           regnode * const noper   = NEXTOPER( cur );
            const U8 *uc     = (U8*)STRING( noper );
            const U8 * const e = uc + STR_LEN( noper );
 
@@ -1213,13 +1212,8 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *firs
                 if ( uvc < 256 ) {
                     charid = trie->charmap[ uvc ];
                 } else {
-                    SV** svpp=(SV**)NULL;
-                    svpp = hv_fetch( trie->widecharmap, (char*)&uvc, sizeof( UV ), 0);
-                    if ( !svpp ) {
-                        charid = 0;
-                    } else {
-                        charid=(U16)SvIV( *svpp );
-                    }
+                   SV* const * const svpp = hv_fetch( trie->widecharmap, (char*)&uvc, sizeof( UV ), 0);
+                   charid = svpp ? (U16)SvIV(*svpp) : 0;
                 }
                 if ( charid ) {
                     charid--;
@@ -1546,6 +1540,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap,
                        /* deltap: Write maxlen-minlen here. */
                        /* last: Stop before this one. */
 {
+    dVAR;
     I32 min = 0, pars = 0, code;
     regnode *scan = *scanp, *next;
     I32 delta = 0;
@@ -1561,7 +1556,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap,
     while (scan && OP(scan) != END && scan < last) {
        /* Peephole optimizer: */
        DEBUG_OPTIMISE_r({
-         SV *mysv=sv_newmortal();
+         SV * const mysv=sv_newmortal();
          regprop( mysv, scan);
          PerlIO_printf(Perl_debug_log, "%*speep: %s (0x%08"UVXf")\n",
            (int)depth*2, "", SvPV_nolen_const(mysv), PTR2UV(scan));
@@ -1595,7 +1590,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap,
                }
                else if (stringok) {
                    const int oldl = STR_LEN(scan);
-                   regnode *nnext = regnext(n);
+                   regnode * const nnext = regnext(n);
 
                    if (oldl + STR_LEN(n) > U8_MAX)
                        break;
@@ -1640,8 +1635,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap,
    another valid sequence of UTF-8 bytes.
 
 */
-                char *s0 = STRING(scan), *s, *t;
-                char *s1 = s0 + STR_LEN(scan) - 1, *s2 = s1 - 4;
+                char * const s0 = STRING(scan), *s, *t;
+                char * const s1 = s0 + STR_LEN(scan) - 1;
+                char * const s2 = s1 - 4;
                 const char * const t0 = "\xcc\x88\xcc\x81";
                 const char * const t1 = t0 + 3;
 
@@ -1840,7 +1836,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap,
                         U32 count=0;
 
 #ifdef DEBUGGING
-                        SV *mysv = sv_newmortal();       /* for dumping */
+                        SV * const mysv = sv_newmortal();       /* for dumping */
 #endif
                         /* var tail is used because there may be a TAIL
                            regop in the way. Ie, the exacts will point to the
@@ -1985,11 +1981,13 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap,
        }
        else if (OP(scan) == EXACT) {
            I32 l = STR_LEN(scan);
-           UV uc = *((U8*)STRING(scan));
+           UV uc;
            if (UTF) {
                const U8 * const s = (U8*)STRING(scan);
                l = utf8_length(s, s + l);
                uc = utf8_to_uvchr(s, NULL);
+           } else {
+               uc = *((U8*)STRING(scan));
            }
            min += l;
            if (flags & SCF_DO_SUBSTR) { /* Update longest substr. */
@@ -2334,7 +2332,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap,
                if (data && fl & (SF_HAS_PAR|SF_IN_PAR))
                    pars++;
                if (flags & SCF_DO_SUBSTR) {
-                   SV *last_str = Nullsv;
+                   SV *last_str = NULL;
                    int counted = mincount != 0;
 
                    if (data->last_end > 0 && mincount != 0) { /* Ends with a string. */
@@ -2770,6 +2768,7 @@ S_add_data(pTHX_ RExC_state_t *pRExC_state, I32 n, const char *s)
 void
 Perl_reginitcolors(pTHX)
 {
+    dVAR;
     const char * const s = PerlEnv_getenv("PERL_RE_COLORS");
     if (s) {
        char *t = savepv(s);
@@ -2811,6 +2810,7 @@ Perl_reginitcolors(pTHX)
 regexp *
 Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
 {
+    dVAR;
     register regexp *r;
     regnode *scan;
     regnode *first;
@@ -2858,7 +2858,7 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
     REGC((U8)REG_MAGIC, (char*)RExC_emit);
 #endif
     if (reg(pRExC_state, 0, &flags) == NULL) {
-       RExC_precomp = Nullch;
+       RExC_precomp = NULL;
        return(NULL);
     }
     DEBUG_COMPILE_r(PerlIO_printf(Perl_debug_log, "size %"IVdf" ", (IV)RExC_size));
@@ -2887,7 +2887,7 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
     r->precomp = savepvn(RExC_precomp, r->prelen);
     r->subbeg = NULL;
 #ifdef PERL_OLD_COPY_ON_WRITE
-    r->saved_copy = Nullsv;
+    r->saved_copy = NULL;
 #endif
     r->reganch = pm->op_pmflags & PMf_COMPILETIME;
     r->nparens = RExC_npar - 1;        /* set early to validate backrefs */
@@ -3023,9 +3023,9 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
        */
        minlen = 0;
 
-       data.longest_fixed = newSVpvn("",0);
-       data.longest_float = newSVpvn("",0);
-       data.last_found = newSVpvn("",0);
+       data.longest_fixed = newSVpvs("");
+       data.longest_float = newSVpvs("");
+       data.last_found = newSVpvs("");
        data.longest = &(data.longest_fixed);
        first = scan;
        if (!r->regstclass) {
@@ -3060,10 +3060,10 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
 
            if (SvUTF8(data.longest_float)) {
                r->float_utf8 = data.longest_float;
-               r->float_substr = Nullsv;
+               r->float_substr = NULL;
            } else {
                r->float_substr = data.longest_float;
-               r->float_utf8 = Nullsv;
+               r->float_utf8 = NULL;
            }
            r->float_min_offset = data.offset_float_min;
            r->float_max_offset = data.offset_float_max;
@@ -3074,7 +3074,7 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
        }
        else {
          remove_float:
-           r->float_substr = r->float_utf8 = Nullsv;
+           r->float_substr = r->float_utf8 = NULL;
            SvREFCNT_dec(data.longest_float);
            longest_float_length = 0;
        }
@@ -3088,10 +3088,10 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
 
            if (SvUTF8(data.longest_fixed)) {
                r->anchored_utf8 = data.longest_fixed;
-               r->anchored_substr = Nullsv;
+               r->anchored_substr = NULL;
            } else {
                r->anchored_substr = data.longest_fixed;
-               r->anchored_utf8 = Nullsv;
+               r->anchored_utf8 = NULL;
            }
            r->anchored_offset = data.offset_fixed;
            t = (data.flags & SF_FIX_BEFORE_EOL /* Can't have SEOL and MULTI */
@@ -3100,7 +3100,7 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
            fbm_compile(data.longest_fixed, t ? FBMcf_TAIL : 0);
        }
        else {
-           r->anchored_substr = r->anchored_utf8 = Nullsv;
+           r->anchored_substr = r->anchored_utf8 = NULL;
            SvREFCNT_dec(data.longest_fixed);
            longest_fixed_length = 0;
        }
@@ -3164,7 +3164,7 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
        data.last_closep = &last_close;
        minlen = study_chunk(pRExC_state, &scan, &fake, scan + RExC_size, &data, SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS,0);
        r->check_substr = r->check_utf8 = r->anchored_substr = r->anchored_utf8
-               = r->float_substr = r->float_utf8 = Nullsv;
+               = r->float_substr = r->float_utf8 = NULL;
        if (!(data.start_class->flags & ANYOF_EOS)
            && !cl_is_anything(data.start_class))
        {
@@ -3218,18 +3218,21 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp)
     register regnode *ret;             /* Will be the head of the group. */
     register regnode *br;
     register regnode *lastbr;
-    register regnode *ender = 0;
+    register regnode *ender = NULL;
     register I32 parno = 0;
-    I32 flags, oregflags = RExC_flags, have_branch = 0, open = 0;
+    I32 flags;
+    const I32 oregflags = RExC_flags;
+    I32 have_branch = 0;
+    I32 open = 0;
 
     /* for (?g), (?gc), and (?o) warnings; warning
        about (?c) will warn about (?g) -- japhy    */
 
-    I32 wastedflags = 0x00,
-        wasted_o    = 0x01,
-        wasted_g    = 0x02,
-        wasted_gc   = 0x02 | 0x04,
-        wasted_c    = 0x04;
+    I32 wastedflags = 0x00;
+    const I32 wasted_o  = 0x01;
+    const I32 wasted_g  = 0x02;
+    const I32 wasted_gc = 0x02 | 0x04;
+    const I32 wasted_c  = 0x04;
 
     char * parse_start = RExC_parse; /* MJD */
     char * const oregcomp_parse = RExC_parse;
@@ -3315,7 +3318,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp)
                    if (RExC_parse - 1 - s)
                        sv = newSVpvn(s, RExC_parse - 1 - s);
                    else
-                       sv = newSVpvn("", 0);
+                       sv = newSVpvs("");
 
                    ENTER;
                    Perl_save_re_context(aTHX);
@@ -3627,6 +3630,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp)
 STATIC regnode *
 S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first)
 {
+    dVAR;
     register regnode *ret;
     register regnode *chain = NULL;
     register regnode *latest;
@@ -3694,6 +3698,7 @@ S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first)
 STATIC regnode *
 S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp)
 {
+    dVAR;
     register regnode *ret;
     register char op;
     register char *next;
@@ -3716,7 +3721,7 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp)
     if (op == '{' && regcurly(RExC_parse)) {
         parse_start = RExC_parse; /* MJD */
        next = RExC_parse + 1;
-       maxpos = Nullch;
+       maxpos = NULL;
        while (isDIGIT(*next) || *next == ',') {
            if (*next == ',') {
                if (maxpos)
@@ -3871,7 +3876,8 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp)
 STATIC regnode *
 S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp)
 {
-    register regnode *ret = 0;
+    dVAR;
+    register regnode *ret = NULL;
     I32 flags;
     char *parse_start = RExC_parse;
 
@@ -4460,6 +4466,7 @@ S_regwhite(pTHX_ char *p, const char *e)
 STATIC I32
 S_regpposixcc(pTHX_ RExC_state_t *pRExC_state, I32 value)
 {
+    dVAR;
     I32 namedclass = OOB_NAMEDCLASS;
 
     if (value == '[' && RExC_parse + 1 < RExC_end &&
@@ -4619,6 +4626,7 @@ S_regpposixcc(pTHX_ RExC_state_t *pRExC_state, I32 value)
 STATIC void
 S_checkposixcc(pTHX_ RExC_state_t *pRExC_state)
 {
+    dVAR;
     if (!SIZE_ONLY && POSIXCC(UCHARAT(RExC_parse))) {
        const char *s = RExC_parse;
        const char  c = *s++;
@@ -4646,6 +4654,7 @@ S_checkposixcc(pTHX_ RExC_state_t *pRExC_state)
 STATIC regnode *
 S_regclass(pTHX_ RExC_state_t *pRExC_state)
 {
+    dVAR;
     register UV value;
     register UV nextvalue;
     register IV prevvalue = OOB_UNICODE;
@@ -4653,13 +4662,13 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state)
     register regnode *ret;
     STRLEN numlen;
     IV namedclass;
-    char *rangebegin = 0;
+    char *rangebegin = NULL;
     bool need_class = 0;
-    SV *listsv = Nullsv;
+    SV *listsv = NULL;
     register char *e;
     UV n;
     bool optimize_invert   = TRUE;
-    AV* unicode_alternate  = 0;
+    AV* unicode_alternate  = NULL;
 #ifdef EBCDIC
     UV literal_endpoint = 0;
 #endif
@@ -4685,7 +4694,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state)
        if (LOC)
            ANYOF_FLAGS(ret) |= ANYOF_LOCALE;
        ANYOF_BITMAP_ZERO(ret);
-       listsv = newSVpvn("# comment\n", 10);
+       listsv = newSVpvs("# comment\n");
     }
 
     nextvalue = RExC_parse < RExC_end ? UCHARAT(RExC_parse) : 0;
@@ -5422,6 +5431,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state)
 STATIC char*
 S_nextchar(pTHX_ RExC_state_t *pRExC_state)
 {
+    dVAR;
     char* retval = RExC_parse++;
 
     for (;;) {
@@ -5456,6 +5466,7 @@ S_nextchar(pTHX_ RExC_state_t *pRExC_state)
 STATIC regnode *                       /* Location. */
 S_reg_node(pTHX_ RExC_state_t *pRExC_state, U8 op)
 {
+    dVAR;
     register regnode *ptr;
     regnode * const ret = RExC_emit;
 
@@ -5491,6 +5502,7 @@ S_reg_node(pTHX_ RExC_state_t *pRExC_state, U8 op)
 STATIC regnode *                       /* Location. */
 S_reganode(pTHX_ RExC_state_t *pRExC_state, U8 op, U32 arg)
 {
+    dVAR;
     register regnode *ptr;
     regnode * const ret = RExC_emit;
 
@@ -5527,6 +5539,7 @@ S_reganode(pTHX_ RExC_state_t *pRExC_state, U8 op, U32 arg)
 STATIC void
 S_reguni(pTHX_ const RExC_state_t *pRExC_state, UV uv, char* s, STRLEN* lenp)
 {
+    dVAR;
     *lenp = SIZE_ONLY ? UNISKIP(uv) : (uvchr_to_utf8((U8*)s, uv) - (U8*)s);
 }
 
@@ -5538,6 +5551,7 @@ S_reguni(pTHX_ const RExC_state_t *pRExC_state, UV uv, char* s, STRLEN* lenp)
 STATIC void
 S_reginsert(pTHX_ RExC_state_t *pRExC_state, U8 op, regnode *opnd)
 {
+    dVAR;
     register regnode *src;
     register regnode *dst;
     register regnode *place;
@@ -5596,6 +5610,7 @@ S_reginsert(pTHX_ RExC_state_t *pRExC_state, U8 op, regnode *opnd)
 STATIC void
 S_regtail(pTHX_ RExC_state_t *pRExC_state, regnode *p, regnode *val)
 {
+    dVAR;
     register regnode *scan;
 
     if (SIZE_ONLY)
@@ -5624,6 +5639,7 @@ S_regtail(pTHX_ RExC_state_t *pRExC_state, regnode *p, regnode *val)
 STATIC void
 S_regoptail(pTHX_ RExC_state_t *pRExC_state, regnode *p, regnode *val)
 {
+    dVAR;
     /* "Operandless" and "op != BRANCH" are synonymous in practice. */
     if (p == NULL || SIZE_ONLY)
        return;
@@ -5666,7 +5682,8 @@ void
 Perl_regdump(pTHX_ regexp *r)
 {
 #ifdef DEBUGGING
-    SV *sv = sv_newmortal();
+    dVAR;
+    SV * const sv = sv_newmortal();
 
     (void)dumpuntil(r->program, r->program + 1, NULL, sv, 0);
 
@@ -5757,6 +5774,8 @@ Perl_regdump(pTHX_ regexp *r)
            PerlIO_printf(Perl_debug_log, "\n");
         });
     }
+#else
+    PERL_UNUSED_ARG(r);
 #endif /* DEBUGGING */
 }
 
@@ -5767,6 +5786,7 @@ void
 Perl_regprop(pTHX_ SV *sv, const regnode *o)
 {
 #ifdef DEBUGGING
+    dVAR;
     register int k;
 
     sv_setpvn(sv, "", 0);
@@ -5779,7 +5799,7 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
     k = PL_regkind[(U8)OP(o)];
 
     if (k == EXACT) {
-       SV * const dsv = sv_2mortal(newSVpvn("", 0));
+       SV * const dsv = sv_2mortal(newSVpvs(""));
        /* Using is_utf8_string() is a crude hack but it may
         * be the best for now since we have no flag "this EXACTish
         * node was UTF-8" --jhi */
@@ -5820,8 +5840,9 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
     else if (k == ANYOF) {
        int i, rangestart = -1;
        const U8 flags = ANYOF_FLAGS(o);
-       const char * const anyofs[] = { /* Should be synchronized with
-                                        * ANYOF_ #xdefines in regcomp.h */
+
+       /* Should be synchronized with * ANYOF_ #xdefines in regcomp.h */
+       static const char * const anyofs[] = {
            "\\w",
            "\\W",
            "\\s",
@@ -5855,12 +5876,12 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
        };
 
        if (flags & ANYOF_LOCALE)
-           sv_catpv(sv, "{loc}");
+           sv_catpvs(sv, "{loc}");
        if (flags & ANYOF_FOLD)
-           sv_catpv(sv, "{i}");
+           sv_catpvs(sv, "{i}");
        Perl_sv_catpvf(aTHX_ sv, "[%s", PL_colors[0]);
        if (flags & ANYOF_INVERT)
-           sv_catpv(sv, "^");
+           sv_catpvs(sv, "^");
        for (i = 0; i <= 256; i++) {
            if (i < 256 && ANYOF_BITMAP_TEST(o,i)) {
                if (rangestart == -1)
@@ -5871,7 +5892,7 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
                        put_byte(sv, rangestart);
                else {
                    put_byte(sv, rangestart);
-                   sv_catpv(sv, "-");
+                   sv_catpvs(sv, "-");
                    put_byte(sv, i - 1);
                }
                rangestart = -1;
@@ -5884,9 +5905,9 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
                    sv_catpv(sv, anyofs[i]);
 
        if (flags & ANYOF_UNICODE)
-           sv_catpv(sv, "{unicode}");
+           sv_catpvs(sv, "{unicode}");
        else if (flags & ANYOF_UNICODE_ALL)
-           sv_catpv(sv, "{unicode_all}");
+           sv_catpvs(sv, "{unicode_all}");
 
        {
            SV *lv;
@@ -5915,7 +5936,7 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
                                U8 *p;
                                for (p = s; p < e; p++)
                                    put_byte(sv, *p);
-                               sv_catpvn(sv, "-", 1);
+                               sv_catpvs(sv, "-");
                                e = uvchr_to_utf8(s, i-1);
                                for (p = s; p < e; p++)
                                    put_byte(sv, *p);
@@ -5924,12 +5945,12 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
                            }
                        }
                        
-                   sv_catpv(sv, "..."); /* et cetera */
+                   sv_catpvs(sv, "..."); /* et cetera */
                }
 
                {
                    char *s = savesvpv(lv);
-                   char *origs = s;
+                   char * const origs = s;
                
                    while(*s && *s != '\n') s++;
                
@@ -5956,12 +5977,16 @@ Perl_regprop(pTHX_ SV *sv, const regnode *o)
     }
     else if (k == BRANCHJ && (OP(o) == UNLESSM || OP(o) == IFMATCH))
        Perl_sv_catpvf(aTHX_ sv, "[-%d]", o->flags);
+#else
+    PERL_UNUSED_ARG(sv);
+    PERL_UNUSED_ARG(o);
 #endif /* DEBUGGING */
 }
 
 SV *
 Perl_re_intuit_string(pTHX_ regexp *prog)
 {                              /* Assume that RE_INTUIT is set */
+    dVAR;
     GET_RE_DEBUG_FLAGS_DECL;
     DEBUG_COMPILE_r(
        {
@@ -5987,15 +6012,15 @@ Perl_pregfree(pTHX_ struct regexp *r)
 {
     dVAR;
 #ifdef DEBUGGING
-    SV *dsv = PERL_DEBUG_PAD_ZERO(0);
-    SV *re_debug_flags=get_sv(RE_DEBUG_FLAGS,0);
+    SV * const dsv = PERL_DEBUG_PAD_ZERO(0);
+    SV * const re_debug_flags=get_sv(RE_DEBUG_FLAGS,0);
 #endif
 
 
     if (!r || (--r->refcnt > 0))
        return;
     DEBUG_r(if (re_debug_flags && (SvIV(re_debug_flags) & RE_DEBUG_COMPILE)) {
-        const char *s = (r->reganch & ROPT_UTF8)
+        const char * const s = (r->reganch & ROPT_UTF8)
             ? pv_uni_display(dsv, (U8*)r->precomp, r->prelen, 60, UNI_DISPLAY_REGEX)
             : pv_display(dsv, r->precomp, r->prelen, 0, 60);
         const int len = SvCUR(dsv);
@@ -6052,8 +6077,7 @@ Perl_pregfree(pTHX_ struct regexp *r)
                    Perl_croak(aTHX_ "panic: pregfree comppad");
                PAD_SAVE_LOCAL(old_comppad,
                    /* Watch out for global destruction's random ordering. */
-                   (SvTYPE(new_comppad) == SVt_PVAV) ?
-                               new_comppad : Null(PAD *)
+                   (SvTYPE(new_comppad) == SVt_PVAV) ? new_comppad : NULL
                );
                OP_REFCNT_LOCK;
                refcnt = OpREFCNT_dec((OP_4tree*)r->data->data[n]);
@@ -6069,7 +6093,7 @@ Perl_pregfree(pTHX_ struct regexp *r)
                break;
            case 't':
                    {
-                       reg_trie_data *trie=(reg_trie_data*)r->data->data[n];
+                       reg_trie_data * const trie=(reg_trie_data*)r->data->data[n];
                        U32 refcount;
                        OP_REFCNT_LOCK;
                        refcount = --trie->refcount;
@@ -6108,6 +6132,7 @@ Perl_pregfree(pTHX_ struct regexp *r)
 regnode *
 Perl_regnext(pTHX_ register regnode *p)
 {
+    dVAR;
     register I32 offset;
 
     if (p == &PL_regdummy)
@@ -6159,6 +6184,7 @@ S_re_croak2(pTHX_ const char* pat1,const char* pat2,...)
 void
 Perl_save_re_context(pTHX)
 {
+    dVAR;
     SAVEI32(PL_reg_flags);             /* from regexec.c */
     SAVEPPTR(PL_bostr);
     SAVEPPTR(PL_reginput);             /* String-input pointer. */
@@ -6190,36 +6216,35 @@ Perl_save_re_context(pTHX)
     SAVEVPTR(PL_reg_oldcurpm);         /* from regexec.c */
     SAVEVPTR(PL_reg_curpm);            /* from regexec.c */
     SAVEPPTR(PL_reg_oldsaved);         /* old saved substr during match */
-    PL_reg_oldsaved = Nullch;
+    PL_reg_oldsaved = NULL;
     SAVEI32(PL_reg_oldsavedlen);       /* old length of saved substr during match */
     PL_reg_oldsavedlen = 0;
 #ifdef PERL_OLD_COPY_ON_WRITE
     SAVESPTR(PL_nrs);
-    PL_nrs = Nullsv;
+    PL_nrs = NULL;
 #endif
     SAVEI32(PL_reg_maxiter);           /* max wait until caching pos */
     PL_reg_maxiter = 0;
     SAVEI32(PL_reg_leftiter);          /* wait until caching pos */
     PL_reg_leftiter = 0;
     SAVEGENERICPV(PL_reg_poscache);    /* cache of pos of WHILEM */
-    PL_reg_poscache = Nullch;
+    PL_reg_poscache = NULL;
     SAVEI32(PL_reg_poscache_size);     /* size of pos cache of WHILEM */
     PL_reg_poscache_size = 0;
     SAVEPPTR(PL_regprecomp);           /* uncompiled string. */
     SAVEI32(PL_regnpar);               /* () count. */
     SAVEI32(PL_regsize);               /* from regexec.c */
 
-    {
-       /* Save $1..$n (#18107: UTF-8 s/(\w+)/uc($1)/e); AMS 20021106. */
-       REGEXP *rx;
-
-       if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
+    /* Save $1..$n (#18107: UTF-8 s/(\w+)/uc($1)/e); AMS 20021106. */
+    if (PL_curpm) {
+       const REGEXP * const rx = PM_GETRE(PL_curpm);
+       if (rx) {
            U32 i;
            for (i = 1; i <= rx->nparens; i++) {
-               GV *mgv;
                char digits[TYPE_CHARS(long)];
                const STRLEN len = my_sprintf(digits, "%lu", (long)i);
-               if ((mgv = gv_fetchpvn_flags(digits, len, FALSE, SVt_PV)))
+               GV * const mgv = gv_fetchpvn_flags(digits, len, 0, SVt_PV);
+               if (mgv)
                    save_scalar(mgv);
            }
        }
@@ -6233,6 +6258,7 @@ Perl_save_re_context(pTHX)
 static void
 clear_re(pTHX_ void *r)
 {
+    dVAR;
     ReREFCNT_dec((regexp *)r);
 }
 
@@ -6253,6 +6279,7 @@ S_put_byte(pTHX_ SV *sv, int c)
 STATIC regnode *
 S_dumpuntil(pTHX_ regnode *start, regnode *node, regnode *last, SV* sv, I32 l)
 {
+    dVAR;
     register U8 op = EXACT;    /* Arbitrary non-END op. */
     register regnode *next;