attributes-two.patch, the next batch
Andy Lester [Mon, 9 May 2005 17:45:00 +0000 (17:45 +0000)]
Message-ID: <20050509154518.GA18273@petdance.com>

p4raw-id: //depot/perl@24431

15 files changed:
doop.c
embed.fnc
embed.pl
gv.c
handy.h
op.c
perl.c
pod/perlapi.pod
pp.c
pp_ctl.c
pp_sys.c
proto.h
sv.c
toke.c
utf8.c

diff --git a/doop.c b/doop.c
index 34bf782..39e5d36 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -30,15 +30,13 @@ S_do_trans_simple(pTHX_ SV *sv)
 {
     U8 *s;
     U8 *d;
-    U8 *send;
+    const U8 *send;
     U8 *dstart;
     I32 matches = 0;
-    I32 grows = PL_op->op_private & OPpTRANS_GROWS;
+    const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
     STRLEN len;
-    short *tbl;
-    I32 ch;
 
-    tbl = (short*)cPVOP->op_pv;
+    const short *tbl = (short*)cPVOP->op_pv;
     if (!tbl)
        Perl_croak(aTHX_ "panic: do_trans_simple line %d",__LINE__);
 
@@ -48,7 +46,8 @@ S_do_trans_simple(pTHX_ SV *sv)
     /* First, take care of non-UTF-8 input strings, because they're easy */
     if (!SvUTF8(sv)) {
        while (s < send) {
-           if ((ch = tbl[*s]) >= 0) {
+           const I32 ch = tbl[*s];
+           if (ch >= 0) {
                matches++;
                *s++ = (U8)ch;
            }
@@ -67,10 +66,10 @@ S_do_trans_simple(pTHX_ SV *sv)
     dstart = d;
     while (s < send) {
         STRLEN ulen;
-        UV c;
+       I32 ch;
 
         /* Need to check this, otherwise 128..255 won't match */
-       c = utf8n_to_uvchr(s, send - s, &ulen, 0);
+       const UV c = utf8n_to_uvchr(s, send - s, &ulen, 0);
         if (c < 0x100 && (ch = tbl[c]) >= 0) {
             matches++;
            d = uvchr_to_utf8(d, ch);
@@ -102,10 +101,9 @@ S_do_trans_count(pTHX_ SV *sv)
     U8 *send;
     I32 matches = 0;
     STRLEN len;
-    short *tbl;
-    I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT;
+    const I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT;
 
-    tbl = (short*)cPVOP->op_pv;
+    const short * const tbl = (short*)cPVOP->op_pv;
     if (!tbl)
        Perl_croak(aTHX_ "panic: do_trans_count line %d",__LINE__);
 
@@ -119,9 +117,8 @@ S_do_trans_count(pTHX_ SV *sv)
        }
     else
        while (s < send) {
-           UV c;
            STRLEN ulen;
-           c = utf8n_to_uvchr(s, send - s, &ulen, 0);
+           const UV c = utf8n_to_uvchr(s, send - s, &ulen, 0);
            if (c < 0x100) {
                if (tbl[c] >= 0)
                    matches++;
@@ -142,14 +139,12 @@ S_do_trans_complex(pTHX_ SV *sv)
     U8 *dstart;
     I32 isutf8;
     I32 matches = 0;
-    I32 grows = PL_op->op_private & OPpTRANS_GROWS;
-    I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT;
-    I32 del = PL_op->op_private & OPpTRANS_DELETE;
+    const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
+    const I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT;
+    const I32 del = PL_op->op_private & OPpTRANS_DELETE;
     STRLEN len, rlen = 0;
-    short *tbl;
-    I32 ch;
 
-    tbl = (short*)cPVOP->op_pv;
+    const short * const tbl = (short*)cPVOP->op_pv;
     if (!tbl)
        Perl_croak(aTHX_ "panic: do_trans_complex line %d",__LINE__);
 
@@ -160,9 +155,10 @@ S_do_trans_complex(pTHX_ SV *sv)
     if (!isutf8) {
        dstart = d = s;
        if (PL_op->op_private & OPpTRANS_SQUASH) {
-           U8* p = send;
+           const U8* p = send;
            while (s < send) {
-               if ((ch = tbl[*s]) >= 0) {
+               const I32 ch = tbl[*s];
+               if (ch >= 0) {
                    *d = (U8)ch;
                    matches++;
                    if (p != d - 1 || *p != *d)
@@ -177,7 +173,8 @@ S_do_trans_complex(pTHX_ SV *sv)
        }
        else {
            while (s < send) {
-               if ((ch = tbl[*s]) >= 0) {
+               const I32 ch = tbl[*s];
+               if (ch >= 0) {
                    matches++;
                    *d++ = (U8)ch;
                }
@@ -208,7 +205,8 @@ S_do_trans_complex(pTHX_ SV *sv)
            UV pch = 0xfeedface;
            while (s < send) {
                STRLEN len;
-               UV comp = utf8_to_uvchr(s, &len);
+               const UV comp = utf8_to_uvchr(s, &len);
+               I32 ch;
 
                if (comp > 0xff) {
                    if (!complement) {
@@ -253,6 +251,7 @@ S_do_trans_complex(pTHX_ SV *sv)
            while (s < send) {
                STRLEN len;
                const UV comp = utf8_to_uvchr(s, &len);
+               I32 ch;
                if (comp > 0xff) {
                    if (!complement) {
                        Move(s, d, len, U8);
@@ -304,14 +303,14 @@ S_do_trans_simple_utf8(pTHX_ SV *sv)
     U8 *start;
     U8 *dstart, *dend;
     I32 matches = 0;
-    I32 grows = PL_op->op_private & OPpTRANS_GROWS;
+    const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
     STRLEN len;
 
     SV* rv = (SV*)cSVOP->op_sv;
     HV* hv = (HV*)SvRV(rv);
     SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
-    UV none = svp ? SvUV(*svp) : 0x7fffffff;
-    UV extra = none + 1;
+    const UV none = svp ? SvUV(*svp) : 0x7fffffff;
+    const UV extra = none + 1;
     UV final = 0;
     UV uv;
     I32 isutf8;
@@ -320,9 +319,9 @@ S_do_trans_simple_utf8(pTHX_ SV *sv)
     s = (U8*)SvPV(sv, len);
     isutf8 = SvUTF8(sv);
     if (!isutf8) {
-       U8 *t = s, *e = s + len;
+       const U8 *t = s, *e = s + len;
        while (t < e) {
-           U8 ch = *t++;
+           const U8 ch = *t++;
            if ((hibit = !NATIVE_IS_INVARIANT(ch)))
                break;
        }
@@ -404,9 +403,8 @@ S_do_trans_count_utf8(pTHX_ SV *sv)
     SV* rv = (SV*)cSVOP->op_sv;
     HV* hv = (HV*)SvRV(rv);
     SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
-    UV none = svp ? SvUV(*svp) : 0x7fffffff;
-    UV extra = none + 1;
-    UV uv;
+    const UV none = svp ? SvUV(*svp) : 0x7fffffff;
+    const UV extra = none + 1;
     U8 hibit = 0;
 
     s = (U8*)SvPV(sv, len);
@@ -424,6 +422,7 @@ S_do_trans_count_utf8(pTHX_ SV *sv)
     send = s + len;
 
     while (s < send) {
+       UV uv;
        if ((uv = swash_fetch(rv, s, TRUE)) < none || uv == extra)
            matches++;
        s += UTF8SKIP(s);
@@ -437,7 +436,6 @@ S_do_trans_count_utf8(pTHX_ SV *sv)
 STATIC I32
 S_do_trans_complex_utf8(pTHX_ SV *sv)
 {
-    U8 *s;
     U8 *start, *send;
     U8 *d;
     I32 matches = 0;
@@ -447,22 +445,20 @@ S_do_trans_complex_utf8(pTHX_ SV *sv)
     SV* rv = (SV*)cSVOP->op_sv;
     HV* hv = (HV*)SvRV(rv);
     SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
-    UV none = svp ? SvUV(*svp) : 0x7fffffff;
-    UV extra = none + 1;
+    const UV none = svp ? SvUV(*svp) : 0x7fffffff;
+    const UV extra = none + 1;
     UV final = 0;
     bool havefinal = FALSE;
-    UV uv;
     STRLEN len;
     U8 *dstart, *dend;
-    I32 isutf8;
     U8 hibit = 0;
 
-    s = (U8*)SvPV(sv, len);
-    isutf8 = SvUTF8(sv);
+    U8 *s = (U8*)SvPV(sv, len);
+    const I32 isutf8 = SvUTF8(sv);
     if (!isutf8) {
-       U8 *t = s, *e = s + len;
+       const U8 *t = s, *e = s + len;
        while (t < e) {
-           U8 ch = *t++;
+           const U8 ch = *t++;
            if ((hibit = !NATIVE_IS_INVARIANT(ch)))
                break;
        }
@@ -492,7 +488,7 @@ S_do_trans_complex_utf8(pTHX_ SV *sv)
     if (squash) {
        UV puv = 0xfeedface;
        while (s < send) {
-           uv = swash_fetch(rv, s, TRUE);
+           UV uv = swash_fetch(rv, s, TRUE);
        
            if (d > dend) {
                const STRLEN clen = d - dstart;
@@ -547,10 +543,10 @@ S_do_trans_complex_utf8(pTHX_ SV *sv)
     }
     else {
        while (s < send) {
-           uv = swash_fetch(rv, s, TRUE);
+           const UV uv = swash_fetch(rv, s, TRUE);
            if (d > dend) {
-               STRLEN clen = d - dstart;
-               STRLEN nlen = dend - dstart + len + UTF8_MAXBYTES;
+               const STRLEN clen = d - dstart;
+               const STRLEN nlen = dend - dstart + len + UTF8_MAXBYTES;
                if (!grows)
                    Perl_croak(aTHX_ "panic: do_trans_complex_utf8 line %d",__LINE__);
                Renew(dstart, nlen + UTF8_MAXBYTES, U8);
@@ -564,7 +560,7 @@ S_do_trans_complex_utf8(pTHX_ SV *sv)
                continue;
            }
            else if (uv == none) {      /* "none" is unmapped character */
-               int i = UTF8SKIP(s);
+               const int i = UTF8SKIP(s);
                Move(s, d, i, U8);
                d += i;
                s += i;
@@ -651,7 +647,6 @@ Perl_do_join(pTHX_ register SV *sv, SV *del, register SV **mark, register SV **s
     register I32 items = sp - mark;
     register STRLEN len;
     STRLEN delimlen;
-    STRLEN tmplen;
 
     (void) SvPV(del, delimlen); /* stringify and get the delimlen */
     /* SvCUR assumes it's SvPOK() and woe betide you if it's not. */
@@ -662,6 +657,7 @@ Perl_do_join(pTHX_ register SV *sv, SV *del, register SV **mark, register SV **s
     if (SvLEN(sv) < len + items) {     /* current length is way too short */
        while (items-- > 0) {
            if (*mark && !SvGAMAGIC(*mark) && SvOK(*mark)) {
+               STRLEN tmplen;
                SvPV(*mark, tmplen);
                len += tmplen;
            }
@@ -944,10 +940,10 @@ Perl_do_chop(pTHX_ register SV *astr, register SV *sv)
 
     if (SvTYPE(sv) == SVt_PVAV) {
        register I32 i;
-        I32 max;
        AV* av = (AV*)sv;
-        max = AvFILL(av);
-        for (i = 0; i <= max; i++) {
+       const I32 max = AvFILL(av);
+
+       for (i = 0; i <= max; i++) {
            sv = (SV*)av_fetch(av, i, FALSE);
            if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
                do_chop(astr, sv);
@@ -1022,10 +1018,10 @@ Perl_do_chomp(pTHX_ register SV *sv)
     count = 0;
     if (SvTYPE(sv) == SVt_PVAV) {
        register I32 i;
-        I32 max;
        AV* av = (AV*)sv;
-        max = AvFILL(av);
-        for (i = 0; i <= max; i++) {
+       const I32 max = AvFILL(av);
+
+       for (i = 0; i <= max; i++) {
            sv = (SV*)av_fetch(av, i, FALSE);
            if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
                count += do_chomp(sv);
@@ -1159,8 +1155,8 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
     I32 lensave;
     char *lsave;
     char *rsave;
-    bool left_utf = DO_UTF8(left);
-    bool right_utf = DO_UTF8(right);
+    const bool left_utf = DO_UTF8(left);
+    const bool right_utf = DO_UTF8(right);
     I32 needlen = 0;
 
     if (left_utf && !right_utf)
@@ -1265,7 +1261,7 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
        !((long)lc % sizeof(long)) &&
        !((long)rc % sizeof(long)))     /* It's almost always aligned... */
     {
-       I32 remainder = len % (sizeof(long)*4);
+       const I32 remainder = len % (sizeof(long)*4);
        len /= (sizeof(long)*4);
 
        dl = (long*)dc;
@@ -1340,13 +1336,10 @@ Perl_do_kv(pTHX)
     HV *hv = (HV*)POPs;
     HV *keys;
     register HE *entry;
-    SV *tmpstr;
-    I32 gimme = GIMME_V;
-    I32 dokeys =   (PL_op->op_type == OP_KEYS);
-    I32 dovalues = (PL_op->op_type == OP_VALUES);
-
-    if (PL_op->op_type == OP_RV2HV || PL_op->op_type == OP_PADHV)
-       dokeys = dovalues = TRUE;
+    const I32 gimme = GIMME_V;
+    const I32 dokv =     (PL_op->op_type == OP_RV2HV || PL_op->op_type == OP_PADHV);
+    const I32 dokeys =   dokv || (PL_op->op_type == OP_KEYS);
+    const I32 dovalues = dokv || (PL_op->op_type == OP_VALUES);
 
     if (!hv) {
        if (PL_op->op_flags & OPf_MOD || LVRET) {       /* lvalue */
@@ -1404,6 +1397,7 @@ Perl_do_kv(pTHX)
            XPUSHs(sv); /* won't clobber stack_sp */
        }
        if (dovalues) {
+           SV *tmpstr;
            PUTBACK;
            tmpstr = hv_iterval(hv,entry);
            DEBUG_H(Perl_sv_setpvf(aTHX_ tmpstr, "%lu%%%d=%lu",
index 1873e63..498304a 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
 :                      but has also Perl_ implementation (which is exported)
 :      U               suppress usage example in autogenerated documentation
 :      a               allocates memory a la malloc/calloc
+:      R               Return value must not be ignored.  All "a" functions
+:                      get this automatically.
 :      P               pure function: no effects except the return value;
 :                      return value depends only on parms and/or globals
 :
-: Pointer parameters that must not be passed NULLs should be preceded by NN.
+: Pointer parameters that must not be passed NULLs should be prefixed with NN.
 :
 : Individual flags may be separated by whitespace.
 :
@@ -192,7 +194,7 @@ p   |I32    |do_msgsnd      |SV** mark|SV** sp
 p      |I32    |do_semop       |SV** mark|SV** sp
 p      |I32    |do_shmio       |I32 optype|SV** mark|SV** sp
 #endif
-Ap     |void   |do_join        |SV* sv|SV* del|SV** mark|SV** sp
+Ap     |void   |do_join        |NN SV* sv|NN SV* del|NN SV** mark|NN SV** sp
 p      |OP*    |do_kv
 Ap     |bool   |do_open        |GV* gv|char* name|I32 len|int as_raw \
                                |int rawmode|int rawperm|PerlIO* supplied_fp
@@ -226,7 +228,7 @@ Ap  |void   |gv_dump        |GV* gv
 Ap     |void   |op_dump        |const OP* arg
 Ap     |void   |pmop_dump      |PMOP* pm
 Ap     |void   |dump_packsubs  |const HV* stash
-Ap     |void   |dump_sub       |const GV* gv
+Ap     |void   |dump_sub       |NN const GV* gv
 Apd    |void   |fbm_compile    |SV* sv|U32 flags
 Apd    |char*  |fbm_instr      |unsigned char* big|unsigned char* bigend \
                                |SV* littlesv|U32 flags
@@ -296,7 +298,7 @@ Apd |void   |hv_undef       |HV* tb
 ApP    |I32    |ibcmp          |NN const char* a|NN const char* b|I32 len
 ApP    |I32    |ibcmp_locale   |NN const char* a|NN const char* b|I32 len
 Apd    |I32    |ibcmp_utf8     |NN const char* a|char **pe1|UV l1|bool u1|NN const char* b|char **pe2|UV l2|bool u2
-p      |bool   |ingroup        |Gid_t testgid|Uid_t effective
+pR     |bool   |ingroup        |Gid_t testgid|Uid_t effective
 p      |void   |init_argv_symbols|int argc|NN char **argv
 p      |void   |init_debugger
 Ap     |void   |init_stacks
@@ -305,43 +307,43 @@ pd        |U32    |intro_my
 ApP    |char*  |instr          |NN const char* big|NN const char* little
 p      |bool   |io_close       |IO* io|bool not_implicit
 p      |OP*    |invert         |OP* cmd
-dp     |bool   |is_gv_magical  |const char *name|STRLEN len|U32 flags
-Ap     |I32    |is_lvalue_sub
-Ap     |U32    |to_uni_upper_lc|U32 c
-Ap     |U32    |to_uni_title_lc|U32 c
-Ap     |U32    |to_uni_lower_lc|U32 c
-Ap     |bool   |is_uni_alnum   |UV c
-Ap     |bool   |is_uni_alnumc  |UV c
-Ap     |bool   |is_uni_idfirst |UV c
-Ap     |bool   |is_uni_alpha   |UV c
-Ap     |bool   |is_uni_ascii   |UV c
-Ap     |bool   |is_uni_space   |UV c
-Ap     |bool   |is_uni_cntrl   |UV c
-Ap     |bool   |is_uni_graph   |UV c
-Ap     |bool   |is_uni_digit   |UV c
-Ap     |bool   |is_uni_upper   |UV c
-Ap     |bool   |is_uni_lower   |UV c
-Ap     |bool   |is_uni_print   |UV c
-Ap     |bool   |is_uni_punct   |UV c
-Ap     |bool   |is_uni_xdigit  |UV c
+dpR    |bool   |is_gv_magical  |const char *name|STRLEN len|U32 flags
+ApR    |I32    |is_lvalue_sub
+ApPR   |U32    |to_uni_upper_lc|U32 c
+ApPR   |U32    |to_uni_title_lc|U32 c
+ApPR   |U32    |to_uni_lower_lc|U32 c
+ApPR   |bool   |is_uni_alnum   |UV c
+ApPR   |bool   |is_uni_alnumc  |UV c
+ApPR   |bool   |is_uni_idfirst |UV c
+ApPR   |bool   |is_uni_alpha   |UV c
+ApPR   |bool   |is_uni_ascii   |UV c
+ApPR   |bool   |is_uni_space   |UV c
+ApPR   |bool   |is_uni_cntrl   |UV c
+ApPR   |bool   |is_uni_graph   |UV c
+ApPR   |bool   |is_uni_digit   |UV c
+ApPR   |bool   |is_uni_upper   |UV c
+ApPR   |bool   |is_uni_lower   |UV c
+ApPR   |bool   |is_uni_print   |UV c
+ApPR   |bool   |is_uni_punct   |UV c
+ApPR   |bool   |is_uni_xdigit  |UV c
 Ap     |UV     |to_uni_upper   |UV c|NN U8 *p|NN STRLEN *lenp
 Ap     |UV     |to_uni_title   |UV c|NN U8 *p|NN STRLEN *lenp
 Ap     |UV     |to_uni_lower   |UV c|NN U8 *p|NN STRLEN *lenp
 Ap     |UV     |to_uni_fold    |UV c|NN U8 *p|NN STRLEN *lenp
-Ap     |bool   |is_uni_alnum_lc|UV c
-Ap     |bool   |is_uni_alnumc_lc|UV c
-Ap     |bool   |is_uni_idfirst_lc|UV c
-Ap     |bool   |is_uni_alpha_lc|UV c
-Ap     |bool   |is_uni_ascii_lc|UV c
-Ap     |bool   |is_uni_space_lc|UV c
-Ap     |bool   |is_uni_cntrl_lc|UV c
-Ap     |bool   |is_uni_graph_lc|UV c
-Ap     |bool   |is_uni_digit_lc|UV c
-Ap     |bool   |is_uni_upper_lc|UV c
-Ap     |bool   |is_uni_lower_lc|UV c
-Ap     |bool   |is_uni_print_lc|UV c
-Ap     |bool   |is_uni_punct_lc|UV c
-Ap     |bool   |is_uni_xdigit_lc|UV c
+ApPR   |bool   |is_uni_alnum_lc|UV c
+ApPR   |bool   |is_uni_alnumc_lc|UV c
+ApPR   |bool   |is_uni_idfirst_lc|UV c
+ApPR   |bool   |is_uni_alpha_lc|UV c
+ApPR   |bool   |is_uni_ascii_lc|UV c
+ApPR   |bool   |is_uni_space_lc|UV c
+ApPR   |bool   |is_uni_cntrl_lc|UV c
+ApPR   |bool   |is_uni_graph_lc|UV c
+ApPR   |bool   |is_uni_digit_lc|UV c
+ApPR   |bool   |is_uni_upper_lc|UV c
+ApPR   |bool   |is_uni_lower_lc|UV c
+ApPR   |bool   |is_uni_print_lc|UV c
+ApPR   |bool   |is_uni_punct_lc|UV c
+ApPR   |bool   |is_uni_xdigit_lc|UV c
 Apd    |STRLEN |is_utf8_char   |NN const U8 *p
 Apd    |bool   |is_utf8_string |NN const U8 *s|STRLEN len
 Apd    |bool   |is_utf8_string_loc|NN const U8 *s|STRLEN len|NN const U8 **p
@@ -362,7 +364,7 @@ Ap  |bool   |is_utf8_punct  |NN const U8 *p
 Ap     |bool   |is_utf8_xdigit |NN const U8 *p
 Ap     |bool   |is_utf8_mark   |NN const U8 *p
 p      |OP*    |jmaybe         |NN OP* arg
-p      |I32    |keyword        |NN const char* d|I32 len
+pP     |I32    |keyword        |NN const char* d|I32 len
 Ap     |void   |leave_scope    |I32 base
 p      |void   |lex_end
 p      |void   |lex_start      |SV* line
@@ -376,10 +378,10 @@ p |OP*    |listkids       |OP* o
 Apd    |void   |load_module|U32 flags|SV* name|SV* ver|...
 Ap     |void   |vload_module|U32 flags|SV* name|SV* ver|va_list* args
 p      |OP*    |localize       |OP* arg|I32 lexical
-Apd    |I32    |looks_like_number|SV* sv
-Apd    |UV     |grok_bin       |const char* start|STRLEN* len|I32* flags|NV *result
-Apd    |UV     |grok_hex       |const char* start|STRLEN* len|I32* flags|NV *result
-Apd    |int    |grok_number    |const char *pv|STRLEN len|UV *valuep
+ApdR   |I32    |looks_like_number|NN SV* sv
+Apd    |UV     |grok_bin       |NN const char* start|NN STRLEN* len|NN I32* flags|NV *result
+Apd    |UV     |grok_hex       |NN const char* start|NN STRLEN* len|NN I32* flags|NV *result
+Apd    |int    |grok_number    |NN const char *pv|STRLEN len|UV *valuep
 Apd    |bool   |grok_numeric_radix|const char **sp|const char *send
 Apd    |UV     |grok_oct       |const char* start|STRLEN* len|I32* flags|NV *result
 p      |int    |magic_clearenv |SV* sv|MAGIC* mg
@@ -483,66 +485,66 @@ Ap        |void   |my_setenv      |const char* nam|const char* val
 Ap     |I32    |my_stat
 Ap     |char * |my_strftime    |const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
 #if defined(MYSWAP)
-ApP    |short  |my_swap        |short s
-ApP    |long   |my_htonl       |long l
-ApP    |long   |my_ntohl       |long l
+ApPa   |short  |my_swap        |short s
+ApPa   |long   |my_htonl       |long l
+ApPa   |long   |my_ntohl       |long l
 #endif
 p      |void   |my_unexec
-Ap     |OP*    |newANONLIST    |OP* o
-Ap     |OP*    |newANONHASH    |OP* o
+Apa    |OP*    |newANONLIST    |OP* o
+Apa    |OP*    |newANONHASH    |OP* o
 Ap     |OP*    |newANONSUB     |I32 floor|OP* proto|OP* block
-Ap     |OP*    |newASSIGNOP    |I32 flags|OP* left|I32 optype|OP* right
-Ap     |OP*    |newCONDOP      |I32 flags|OP* expr|OP* trueop|OP* falseop
+Apa    |OP*    |newASSIGNOP    |I32 flags|OP* left|I32 optype|OP* right
+Apa    |OP*    |newCONDOP      |I32 flags|OP* expr|OP* trueop|OP* falseop
 Apd    |CV*    |newCONSTSUB    |HV* stash|const char* name|SV* sv
 Ap     |void   |newFORM        |I32 floor|OP* o|OP* block
-Ap     |OP*    |newFOROP       |I32 flags|char* label|line_t forline \
+Apa    |OP*    |newFOROP       |I32 flags|char* label|line_t forline \
                                |OP* sclr|OP* expr|OP*block|OP*cont
-Ap     |OP*    |newLOGOP       |I32 optype|I32 flags|OP* left|OP* right
-Ap     |OP*    |newLOOPEX      |I32 type|OP* label
-Ap     |OP*    |newLOOPOP      |I32 flags|I32 debuggable|OP* expr|OP* block
+Apa    |OP*    |newLOGOP       |I32 optype|I32 flags|OP* left|OP* right
+Apa    |OP*    |newLOOPEX      |I32 type|OP* label
+Apa    |OP*    |newLOOPOP      |I32 flags|I32 debuggable|OP* expr|OP* block
 Apa    |OP*    |newNULLLIST
-Ap     |OP*    |newOP          |I32 optype|I32 flags
-Ap     |void   |newPROG        |OP* o
-Ap     |OP*    |newRANGE       |I32 flags|OP* left|OP* right
-Ap     |OP*    |newSLICEOP     |I32 flags|OP* subscript|OP* listop
-Ap     |OP*    |newSTATEOP     |I32 flags|char* label|OP* o
+Apa    |OP*    |newOP          |I32 optype|I32 flags
+Ap     |void   |newPROG        |NN OP* o
+Apa    |OP*    |newRANGE       |I32 flags|OP* left|OP* right
+Apa    |OP*    |newSLICEOP     |I32 flags|OP* subscript|OP* listop
+Apa    |OP*    |newSTATEOP     |I32 flags|char* label|OP* o
 Ap     |CV*    |newSUB         |I32 floor|OP* o|OP* proto|OP* block
 Apd    |CV*    |newXS          |NN const char* name|XSUBADDR_t f|NN const char* filename
-Apd    |AV*    |newAV
-Ap     |OP*    |newAVREF       |NN OP* o
-Ap     |OP*    |newBINOP       |I32 type|I32 flags|OP* first|OP* last
-Ap     |OP*    |newCVREF       |I32 flags|OP* o
-Ap     |OP*    |newGVOP        |I32 type|I32 flags|GV* gv
-Ap     |GV*    |newGVgen       |const char* pack
-Ap     |OP*    |newGVREF       |I32 type|OP* o
-Ap     |OP*    |newHVREF       |NN OP* o
-Apd    |HV*    |newHV
-Ap     |HV*    |newHVhv        |HV* hv
-Ap     |IO*    |newIO
-Ap     |OP*    |newLISTOP      |I32 type|I32 flags|OP* first|OP* last
-Ap     |OP*    |newPADOP       |I32 type|I32 flags|SV* sv
-Ap     |OP*    |newPMOP        |I32 type|I32 flags
-Ap     |OP*    |newPVOP        |I32 type|I32 flags|char* pv
-Ap     |SV*    |newRV          |SV* pref
-Apd    |SV*    |newRV_noinc    |NN SV *sv
-Apd    |SV*    |newSV          |STRLEN len
-Ap     |OP*    |newSVREF       |NN OP* o
-Ap     |OP*    |newSVOP        |I32 type|I32 flags|NN SV* sv
-Apd    |SV*    |newSViv        |IV i
-Apd    |SV*    |newSVuv        |UV u
-Apd    |SV*    |newSVnv        |NV n
-Apd    |SV*    |newSVpv        |const char* s|STRLEN len
-Apd    |SV*    |newSVpvn       |const char* s|STRLEN len
-Apd    |SV*    |newSVpvn_share |const char* s|I32 len|U32 hash
-Afpd   |SV*    |newSVpvf       |const char* pat|...
+Apda   |AV*    |newAV
+Apa    |OP*    |newAVREF       |NN OP* o
+Apa    |OP*    |newBINOP       |I32 type|I32 flags|OP* first|OP* last
+Apa    |OP*    |newCVREF       |I32 flags|OP* o
+Apa    |OP*    |newGVOP        |I32 type|I32 flags|GV* gv
+Apa    |GV*    |newGVgen       |const char* pack
+Apa    |OP*    |newGVREF       |I32 type|OP* o
+Apa    |OP*    |newHVREF       |NN OP* o
+Apda   |HV*    |newHV
+Apa    |HV*    |newHVhv        |HV* hv
+Apa    |IO*    |newIO
+Apa    |OP*    |newLISTOP      |I32 type|I32 flags|OP* first|OP* last
+Apa    |OP*    |newPADOP       |I32 type|I32 flags|SV* sv
+Apa    |OP*    |newPMOP        |I32 type|I32 flags
+Apa    |OP*    |newPVOP        |I32 type|I32 flags|char* pv
+Apa    |SV*    |newRV          |SV* pref
+Apda   |SV*    |newRV_noinc    |NN SV *sv
+Apda   |SV*    |newSV          |STRLEN len
+Apa    |OP*    |newSVREF       |NN OP* o
+Apa    |OP*    |newSVOP        |I32 type|I32 flags|NN SV* sv
+Apda   |SV*    |newSViv        |IV i
+Apda   |SV*    |newSVuv        |UV u
+Apda   |SV*    |newSVnv        |NV n
+Apda   |SV*    |newSVpv        |const char* s|STRLEN len
+Apda   |SV*    |newSVpvn       |const char* s|STRLEN len
+Apda   |SV*    |newSVpvn_share |const char* s|I32 len|U32 hash
+Afpda  |SV*    |newSVpvf       |const char* pat|...
 Ap     |SV*    |vnewSVpvf      |const char* pat|va_list* args
-Apd    |SV*    |newSVrv        |SV* rv|const char* classname
-Apd    |SV*    |newSVsv        |SV* old
-Ap     |OP*    |newUNOP        |I32 type|I32 flags|OP* first
-Ap     |OP*    |newWHILEOP     |I32 flags|I32 debuggable|LOOP* loop \
+Apda   |SV*    |newSVrv        |SV* rv|const char* classname
+Apda   |SV*    |newSVsv        |SV* old
+Apa    |OP*    |newUNOP        |I32 type|I32 flags|OP* first
+Apa    |OP*    |newWHILEOP     |I32 flags|I32 debuggable|LOOP* loop \
                                |I32 whileline|OP* expr|OP* block|OP* cont \
                                |I32 has_my
-Ap     |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
+Apa    |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
 Ap     |char*  |scan_vstring   |NN const char *vstr|NN SV *sv
 Apd    |char*  |scan_version   |NN const char *vstr|NN SV *sv|bool qv
 Apd    |SV*    |new_version    |SV *ver
@@ -704,16 +706,16 @@ Ap        |SV**   |stack_grow     |NN SV** sp|NN SV**p|int n
 Ap     |I32    |start_subparse |I32 is_format|U32 flags
 p      |void   |sub_crush_depth|CV* cv
 Apd    |bool   |sv_2bool       |NN SV* sv
-Apd    |CV*    |sv_2cv         |SV* sv|HV** st|GV** gvp|I32 lref
-Apd    |IO*    |sv_2io         |SV* sv
-Amb    |IV     |sv_2iv         |SV* sv
-Apd    |IV     |sv_2iv_flags   |SV* sv|I32 flags
-Apd    |SV*    |sv_2mortal     |SV* sv
-Apd    |NV     |sv_2nv         |SV* sv
-Amb    |char*  |sv_2pv         |SV* sv|NN STRLEN* lp
-Apd    |char*  |sv_2pv_flags   |SV* sv|NN STRLEN* lp|I32 flags
-Apd    |char*  |sv_2pvutf8     |SV* sv|NN STRLEN* lp
-Apd    |char*  |sv_2pvbyte     |SV* sv|NN STRLEN* lp
+Apd    |CV*    |sv_2cv         |NN SV* sv|HV** st|GV** gvp|I32 lref
+Apd    |IO*    |sv_2io         |NN SV* sv
+Amb    |IV     |sv_2iv         |NN SV* sv
+Apd    |IV     |sv_2iv_flags   |NN SV* sv|I32 flags
+Apd    |SV*    |sv_2mortal     |NN SV* sv
+Apd    |NV     |sv_2nv         |NN SV* sv
+Amb    |char*  |sv_2pv         |NN SV* sv|NN STRLEN* lp
+Apd    |char*  |sv_2pv_flags   |NN SV* sv|NN STRLEN* lp|I32 flags
+Apd    |char*  |sv_2pvutf8     |NN SV* sv|NN STRLEN* lp
+Apd    |char*  |sv_2pvbyte     |NN SV* sv|NN STRLEN* lp
 Ap     |char*  |sv_pvn_nomg    |NN SV* sv|NN STRLEN* lp
 Amb    |UV     |sv_2uv         |NN SV* sv
 Apd    |UV     |sv_2uv_flags   |NN SV* sv|I32 flags
@@ -723,28 +725,28 @@ Apd       |NV     |sv_nv          |NN SV* sv
 Apd    |char*  |sv_pvn         |NN SV *sv|NN STRLEN *len
 Apd    |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *len
 Apd    |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *len
-Apd    |I32    |sv_true        |SV *sv
-pd     |void   |sv_add_arena   |char* ptr|U32 size|U32 flags
-Apd    |int    |sv_backoff     |SV* sv
-Apd    |SV*    |sv_bless       |SV* sv|HV* stash
-Afpd   |void   |sv_catpvf      |SV* sv|const char* pat|...
-Apd    |void   |sv_vcatpvf     |SV* sv|const char* pat|va_list* args
-Apd    |void   |sv_catpv       |SV* sv|const char* ptr
-Amdb   |void   |sv_catpvn      |SV* sv|const char* ptr|STRLEN len
-Amdb   |void   |sv_catsv       |SV* dsv|SV* ssv
-Apd    |void   |sv_chop        |SV* sv|char* ptr
+Apd    |I32    |sv_true        |NN SV *sv
+pd     |void   |sv_add_arena   |NN char* ptr|U32 size|U32 flags
+Apd    |int    |sv_backoff     |NN SV* sv
+Apd    |SV*    |sv_bless       |NN SV* sv|NN HV* stash
+Afpd   |void   |sv_catpvf      |NN SV* sv|const char* pat|...
+Apd    |void   |sv_vcatpvf     |NN SV* sv|const char* pat|va_list* args
+Apd    |void   |sv_catpv       |NN SV* sv|const char* ptr
+Amdb   |void   |sv_catpvn      |NN SV* sv|const char* ptr|STRLEN len
+Amdb   |void   |sv_catsv       |NN SV* dsv|SV* ssv
+Apd    |void   |sv_chop        |NN SV* sv|const char* ptr
 pd     |I32    |sv_clean_all
 pd     |void   |sv_clean_objs
-Apd    |void   |sv_clear       |SV* sv
-Apd    |I32    |sv_cmp         |SV* sv1|SV* sv2
-Apd    |I32    |sv_cmp_locale  |SV* sv1|SV* sv2
+Apd    |void   |sv_clear       |NN SV* sv
+Apd    |I32    |sv_cmp         |NN SV* sv1|NN SV* sv2
+Apd    |I32    |sv_cmp_locale  |NN SV* sv1|NN SV* sv2
 #if defined(USE_LOCALE_COLLATE)
-Apd    |char*  |sv_collxfrm    |SV* sv|STRLEN* nxp
+Apd    |char*  |sv_collxfrm    |NN SV* sv|STRLEN* nxp
 #endif
 Ap     |OP*    |sv_compile_2op |NN SV* sv|NN OP** startp|NN const char* code|NN PAD** padp
 Apd    |int    |getcwd_sv      |NN SV* sv
-Apd    |void   |sv_dec         |SV* sv
-Ap     |void   |sv_dump        |SV* sv
+Apd    |void   |sv_dec         |NN SV* sv
+Ap     |void   |sv_dump        |NN SV* sv
 Apd    |bool   |sv_derived_from|NN SV* sv|NN const char* name
 Apd    |I32    |sv_eq          |NN SV* sv1|NN SV* sv2
 Apd    |void   |sv_free        |SV* sv
@@ -752,19 +754,19 @@ poMX      |void   |sv_free2       |NN SV* sv
 pd     |void   |sv_free_arenas
 Apd    |char*  |sv_gets        |NN SV* sv|NN PerlIO* fp|I32 append
 Apd    |char*  |sv_grow        |NN SV* sv|STRLEN newlen
-Apd    |void   |sv_inc         |SV* sv
+Apd    |void   |sv_inc         |NN SV* sv
 Apd    |void   |sv_insert      |NN SV* bigsv|STRLEN offset|STRLEN len \
                                |NN const char* little|STRLEN littlelen
-Apd    |int    |sv_isa         |SV* sv|const char* name
-Apd    |int    |sv_isobject    |SV* sv
-Apd    |STRLEN |sv_len         |SV* sv
-Apd    |STRLEN |sv_len_utf8    |SV* sv
-Apd    |void   |sv_magic       |SV* sv|SV* obj|int how|const char* name \
+Apd    |int    |sv_isa         |NN SV* sv|const char* name
+Apd    |int    |sv_isobject    |NN SV* sv
+Apd    |STRLEN |sv_len         |NN SV* sv
+Apd    |STRLEN |sv_len_utf8    |NN SV* sv
+Apd    |void   |sv_magic       |NN SV* sv|SV* obj|int how|const char* name \
                                |I32 namlen
-Apd    |MAGIC *|sv_magicext    |SV* sv|SV* obj|int how|const MGVTBL *vtbl \
+Apd    |MAGIC *|sv_magicext    |NN SV* sv|SV* obj|int how|const MGVTBL *vtbl \
                                |const char* name|I32 namlen
 Apd    |SV*    |sv_mortalcopy  |NN SV* oldsv
-Apd    |SV*    |sv_newmortal
+ApdR   |SV*    |sv_newmortal
 Apd    |SV*    |sv_newref      |SV* sv
 Ap     |char*  |sv_peek        |SV* sv
 Apd    |void   |sv_pos_u2b     |SV* sv|I32* offsetp|I32* lenp
@@ -796,16 +798,16 @@ Apd       |void   |sv_setpvn      |NN SV* sv|const char* ptr|STRLEN len
 Amdb   |void   |sv_setsv       |SV* dsv|SV* ssv
 Apd    |void   |sv_taint       |SV* sv
 Apd    |bool   |sv_tainted     |SV* sv
-Apd    |int    |sv_unmagic     |SV* sv|int type
-Apd    |void   |sv_unref       |SV* sv
-Apd    |void   |sv_unref_flags |SV* sv|U32 flags
-Apd    |void   |sv_untaint     |SV* sv
-Apd    |bool   |sv_upgrade     |SV* sv|U32 mt
-Apd    |void   |sv_usepvn      |SV* sv|char* ptr|STRLEN len
-Apd    |void   |sv_vcatpvfn    |SV* sv|const char* pat|STRLEN patlen \
+Apd    |int    |sv_unmagic     |NN SV* sv|int type
+Apd    |void   |sv_unref       |NN SV* sv
+Apd    |void   |sv_unref_flags |NN SV* sv|U32 flags
+Apd    |void   |sv_untaint     |NN SV* sv
+Apd    |bool   |sv_upgrade     |NN SV* sv|U32 mt
+Apd    |void   |sv_usepvn      |NN SV* sv|char* ptr|STRLEN len
+Apd    |void   |sv_vcatpvfn    |NN SV* sv|NN const char* pat|STRLEN patlen \
                                |va_list* args|SV** svargs|I32 svmax \
                                |bool *maybe_tainted
-Apd    |void   |sv_vsetpvfn    |SV* sv|const char* pat|STRLEN patlen \
+Apd    |void   |sv_vsetpvfn    |NN SV* sv|NN const char* pat|STRLEN patlen \
                                |va_list* args|SV** svargs|I32 svmax \
                                |bool *maybe_tainted
 Ap     |NV     |str_to_version |SV *sv
@@ -813,11 +815,11 @@ Ap        |SV*    |swash_init     |const char* pkg|const char* name|SV* listsv|I32 minbits|I32
 Ap     |UV     |swash_fetch    |SV *sv|const U8 *ptr|bool do_utf8
 Ap     |void   |taint_env
 Ap     |void   |taint_proper   |const char* f|const char* s
-Apd    |UV     |to_utf8_case   |const U8 *p|U8* ustrp|STRLEN *lenp|SV **swash|const char *normal|const char *special
-Apd    |UV     |to_utf8_lower  |const U8 *p|U8* ustrp|STRLEN *lenp
-Apd    |UV     |to_utf8_upper  |const U8 *p|U8* ustrp|STRLEN *lenp
-Apd    |UV     |to_utf8_title  |const U8 *p|U8* ustrp|STRLEN *lenp
-Apd    |UV     |to_utf8_fold   |const U8 *p|U8* ustrp|STRLEN *lenp
+Apd    |UV     |to_utf8_case   |NN const U8 *p|NN U8* ustrp|STRLEN *lenp|SV **swash|const char *normal|const char *special
+Apd    |UV     |to_utf8_lower  |NN const U8 *p|NN U8* ustrp|STRLEN *lenp
+Apd    |UV     |to_utf8_upper  |NN const U8 *p|NN U8* ustrp|STRLEN *lenp
+Apd    |UV     |to_utf8_title  |NN const U8 *p|NN U8* ustrp|STRLEN *lenp
+Apd    |UV     |to_utf8_fold   |NN const U8 *p|NN U8* ustrp|STRLEN *lenp
 #if defined(UNLINK_ALL_VERSIONS)
 Ap     |I32    |unlnk          |char* f
 #endif
@@ -975,12 +977,12 @@ Adp       |int    |nothreadhook
 END_EXTERN_C
 
 #if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-s      |I32    |do_trans_simple        |SV *sv
-s      |I32    |do_trans_count         |SV *sv
-s      |I32    |do_trans_complex       |SV *sv
-s      |I32    |do_trans_simple_utf8   |SV *sv
-s      |I32    |do_trans_count_utf8    |SV *sv
-s      |I32    |do_trans_complex_utf8  |SV *sv
+s      |I32    |do_trans_simple        |NN SV *sv
+s      |I32    |do_trans_count         |NN SV *sv
+s      |I32    |do_trans_complex       |NN SV *sv
+s      |I32    |do_trans_simple_utf8   |NN SV *sv
+s      |I32    |do_trans_count_utf8    |NN SV *sv
+s      |I32    |do_trans_complex_utf8  |NN SV *sv
 #endif
 
 #if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
@@ -1248,10 +1250,10 @@ s       |char*  |force_word     |char *start|int token|int check_keyword \
                                |int allow_pack|int allow_tick
 s      |SV*    |tokeq          |SV *sv
 s      |int    |pending_ident
-s      |char*  |scan_const     |char *start
-s      |char*  |scan_formline  |char *s
-s      |char*  |scan_heredoc   |char *s
-s      |char*  |scan_ident     |char *s|char *send|char *dest \
+s      |char*  |scan_const     |NN char *start
+s      |char*  |scan_formline  |NN char *s
+s      |char*  |scan_heredoc   |NN char *s
+s      |char*  |scan_ident     |NN char *s|NN const char *send|NN char *dest \
                                |STRLEN destlen|I32 ck_uni
 s      |char*  |scan_inputsymbol|char *start
 s      |char*  |scan_pat       |char *start|I32 type
@@ -1262,7 +1264,7 @@ s |char*  |scan_word      |char *s|char *dest|STRLEN destlen \
                                |int allow_package|STRLEN *slp
 s      |char*  |skipspace      |char *s
 s      |char*  |swallow_bom    |U8 *s
-s      |void   |checkcomma     |char *s|char *name|const char *what
+s      |void   |checkcomma     |NN char *s|NN const char *name|NN const char *what
 s      |void   |force_ident    |const char *s|int kind
 s      |void   |incline        |char *s
 s      |int    |intuit_method  |char *s|GV *gv
index 50ec17f..9cdef07 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -201,23 +201,37 @@ sub write_protos {
            $ret .= "void" if !$has_context;
        }
        $ret .= ")";
-       $ret .= " __attribute__((noreturn))" if $flags =~ /r/;
-       $ret .= "\n\t\t\t__attribute__((malloc)) __attribute__((warn_unused_result))" if $flags =~ /a/;
-       $ret .= "\n\t\t\t__attribute__((pure))" if $flags =~ /P/;
+       my @attrs;
+       if ( $flags =~ /r/ ) {
+           push @attrs, "__attribute__((noreturn))";
+       }
+       if ( $flags =~ /a/ ) {
+           push @attrs, "__attribute__((malloc))";
+           $flags .= "R"; # All allocing must check return value
+       }
+       if ( $flags =~ /R/ ) {
+           push @attrs, "__attribute__((warn_unused_result))";
+       }
+       if ( $flags =~ /P/ ) {
+           push @attrs, "__attribute__((pure))";
+       }
        if( $flags =~ /f/ ) {
            my $prefix = $has_context ? 'pTHX_' : '';
            my $args = scalar @args;
-           $ret .= sprintf "\n\t\t\t__attribute__format__(__printf__,%s%d,%s%d)",
+           push @attrs, sprintf "__attribute__format__(__printf__,%s%d,%s%d)",
                                    $prefix, $args - 1, $prefix, $args;
        }
-       $ret .= "\n\t\t\t__attribute__((nonnull))" if $flags =~ /N/;
        if ( @nonnull ) {
            my @pos = map { $has_context ? "pTHX_$_" : $_ } @nonnull;
-           $ret .= sprintf( "\n\t\t\t__attribute__((nonnull(%s)))", join( ",", @pos ) );
+           push @attrs, sprintf( "__attribute__((nonnull(%s)))", join( ",", @pos ) );
+       }
+       if ( @attrs ) {
+           $ret .= "\n";
+           $ret .= join( "\n", map { "\t\t\t$_" } @attrs );
        }
        $ret .= ";";
        $ret .= ' */' if $flags =~ /m/;
-       $ret .= "\n";
+       $ret .= @attrs ? "\n\n" : "\n";
     }
     $ret;
 }
diff --git a/gv.c b/gv.c
index ea3de43..0f3fa24 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -34,8 +34,8 @@ Perl stores its global variables.
 #define PERL_IN_GV_C
 #include "perl.h"
 
-const char S_autoload[] = "AUTOLOAD";
-const STRLEN S_autolen = sizeof(S_autoload)-1;
+static const char S_autoload[] = "AUTOLOAD";
+static const STRLEN S_autolen = sizeof(S_autoload)-1;
 
 GV *
 Perl_gv_AVadd(pTHX_ register GV *gv)
@@ -111,7 +111,7 @@ Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
     dVAR;
     register GP *gp;
     const bool doproto = SvTYPE(gv) > SVt_NULL;
-    char *proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
+    const char * const proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
 
     sv_upgrade((SV*)gv, SVt_PVGV);
     if (SvLEN(gv)) {
diff --git a/handy.h b/handy.h
index b1a7307..2aa02b7 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -687,10 +687,10 @@ hopefully catches attempts to access uninitialized memory.
 #ifdef USE_ITHREADS
 #define pTHX_FORMAT  "Perl interpreter: 0x%p"
 #define pTHX__FORMAT ", Perl interpreter: 0x%p"
-#define pTHX_VALUE_   (unsigned long)my_perl,
-#define pTHX_VALUE    (unsigned long)my_perl
-#define pTHX__VALUE_ ,(unsigned long)my_perl,
-#define pTHX__VALUE  ,(unsigned long)my_perl
+#define pTHX_VALUE_   (void *)my_perl,
+#define pTHX_VALUE    (void *)my_perl
+#define pTHX__VALUE_ ,(void *)my_perl,
+#define pTHX__VALUE  ,(void *)my_perl
 #else
 #define pTHX_FORMAT 
 #define pTHX__FORMAT
diff --git a/op.c b/op.c
index f72252f..446bb59 100644 (file)
--- a/op.c
+++ b/op.c
@@ -4231,14 +4231,13 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
 {
     dVAR;
     STRLEN n_a;
-    const char *name;
     const char *aname;
     GV *gv;
     char *ps;
     register CV *cv=0;
     SV *const_sv;
 
-    name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
+    const char * const name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
 
     if (proto) {
        assert(proto->op_type == OP_CONST);
diff --git a/perl.c b/perl.c
index afd2255..e47fe92 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2173,7 +2173,7 @@ Perl_call_sv(pTHX_ SV *sv, I32 flags)
        /* we're trying to emulate pp_entertry() here */
        {
            register PERL_CONTEXT *cx;
-           I32 gimme = GIMME_V;
+           const I32 gimme = GIMME_V;
        
            ENTER;
            SAVETMPS;
index 400b264..0da12ba 100644 (file)
@@ -4188,7 +4188,7 @@ string. Uses the "OOK hack".
 Beware: after this function returns, C<ptr> and SvPVX(sv) may no longer
 refer to the same chunk of data.
 
-       void    sv_chop(SV* sv, char* ptr)
+       void    sv_chop(SV* sv, const char* ptr)
 
 =for hackers
 Found in file sv.c
diff --git a/pp.c b/pp.c
index 0761ff1..694e460 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -78,7 +78,7 @@ PP(pp_padav)
     }
     gimme = GIMME_V;
     if (gimme == G_ARRAY) {
-       I32 maxarg = AvFILL((AV*)TARG) + 1;
+       const I32 maxarg = AvFILL((AV*)TARG) + 1;
        EXTEND(SP, maxarg);
        if (SvMAGICAL(TARG)) {
            U32 i;
@@ -94,7 +94,7 @@ PP(pp_padav)
     }
     else if (gimme == G_SCALAR) {
        SV* sv = sv_newmortal();
-       I32 maxarg = AvFILL((AV*)TARG) + 1;
+       const I32 maxarg = AvFILL((AV*)TARG) + 1;
        sv_setiv(sv, maxarg);
        PUSHs(sv);
     }
@@ -167,17 +167,16 @@ PP(pp_rv2gv)
                if (SvREADONLY(sv))
                    Perl_croak(aTHX_ PL_no_modify);
                if (PL_op->op_private & OPpDEREF) {
-                   const char *name;
                    GV *gv;
                    if (cUNOP->op_targ) {
                        STRLEN len;
                        SV *namesv = PAD_SV(cUNOP->op_targ);
-                       name = SvPV(namesv, len);
+                       const char *name = SvPV(namesv, len);
                        gv = (GV*)NEWSV(0,0);
                        gv_init(gv, CopSTASH(PL_curcop), name, len, 0);
                    }
                    else {
-                       name = CopSTASHPV(PL_curcop);
+                       const char *name = CopSTASHPV(PL_curcop);
                        gv = newGVgen(name);
                    }
                    if (SvTYPE(sv) < SVt_RV)
@@ -377,11 +376,9 @@ PP(pp_prototype)
 
     ret = &PL_sv_undef;
     if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
-       char *s = SvPVX(TOPs);
+       const char *s = SvPVX(TOPs);
        if (strnEQ(s, "CORE::", 6)) {
-           int code;
-       
-           code = keyword(s + 6, SvCUR(TOPs) - 6);
+           const int code = keyword(s + 6, SvCUR(TOPs) - 6);
            if (code < 0) {     /* Overridable. */
 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
                int i = 0, n = 0, seen_question = 0;
@@ -3855,7 +3852,7 @@ PP(pp_each)
     dSP;
     HV *hash = (HV*)POPs;
     HE *entry;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
 
     PUTBACK;
     /* might clobber stack_sp */
@@ -3894,8 +3891,8 @@ PP(pp_keys)
 PP(pp_delete)
 {
     dSP;
-    I32 gimme = GIMME_V;
-    I32 discard = (gimme == G_VOID) ? G_DISCARD : 0;
+    const I32 gimme = GIMME_V;
+    const I32 discard = (gimme == G_VOID) ? G_DISCARD : 0;
     SV *sv;
     HV *hv;
 
@@ -4525,15 +4522,15 @@ PP(pp_split)
     register SV *dstr;
     register char *m;
     I32 iters = 0;
-    STRLEN slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : (strend - s);
+    const STRLEN slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : (strend - s);
     I32 maxiters = slen + 10;
     I32 i;
     char *orig;
     I32 origlimit = limit;
     I32 realarray = 0;
     I32 base;
-    I32 gimme = GIMME_V;
-    I32 oldsave = PL_savestack_ix;
+    const I32 gimme = GIMME_V;
+    const I32 oldsave = PL_savestack_ix;
     I32 make_mortal = 1;
     bool multiline = 0;
     MAGIC *mg = (MAGIC *) NULL;
index b61769a..1c582bc 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -931,7 +931,7 @@ PP(pp_mapstart)
 PP(pp_mapwhile)
 {
     dVAR; dSP;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
     I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
     I32 count;
     I32 shift;
@@ -1138,7 +1138,7 @@ PP(pp_flop)
        else {
            SV *final = sv_mortalcopy(right);
            STRLEN len, n_a;
-           char *tmps = SvPV(final, len);
+           const char *tmps = SvPV(final, len);
 
            sv = sv_mortalcopy(left);
            SvPV_force(sv,n_a);
@@ -1228,7 +1228,7 @@ S_dopoptolabel(pTHX_ const char *label)
 I32
 Perl_dowantarray(pTHX)
 {
-    I32 gimme = block_gimme();
+    const I32 gimme = block_gimme();
     return (gimme == G_VOID) ? G_SCALAR : gimme;
 }
 
@@ -1543,10 +1543,8 @@ PP(pp_caller)
     register PERL_CONTEXT *cx;
     register PERL_CONTEXT *ccstack = cxstack;
     PERL_SI *top_si = PL_curstackinfo;
-    I32 dbcxix;
     I32 gimme;
     const char *stashname;
-    SV *sv;
     I32 count = 0;
 
     if (MAXARG)
@@ -1577,7 +1575,7 @@ PP(pp_caller)
 
     cx = &ccstack[cxix];
     if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
-        dbcxix = dopoptosub_at(ccstack, cxix - 1);
+        const I32 dbcxix = dopoptosub_at(ccstack, cxix - 1);
        /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
           field below is defined for any cx. */
        /* caller() should not report the automatic calls to &DB::sub */
@@ -1612,7 +1610,7 @@ PP(pp_caller)
        GV *cvgv = CvGV(ccstack[cxix].blk_sub.cv);
        /* So is ccstack[dbcxix]. */
        if (isGV(cvgv)) {
-           sv = NEWSV(49, 0);
+           SV * const sv = NEWSV(49, 0);
            gv_efullname3(sv, cvgv, Nullch);
            PUSHs(sv_2mortal(sv));
            PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
@@ -1739,7 +1737,7 @@ PP(pp_dbstate)
        dSP;
        register CV *cv;
        register PERL_CONTEXT *cx;
-       I32 gimme = G_ARRAY;
+       const I32 gimme = G_ARRAY;
        U8 hasargs;
        GV *gv;
 
@@ -1781,7 +1779,7 @@ PP(pp_enteriter)
 {
     dVAR; dSP; dMARK;
     register PERL_CONTEXT *cx;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
     SV **svp;
     U32 cxtype = CXt_LOOP;
 #ifdef USE_ITHREADS
@@ -1868,7 +1866,7 @@ PP(pp_enterloop)
 {
     dVAR; dSP;
     register PERL_CONTEXT *cx;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
 
     ENTER;
     SAVETMPS;
@@ -2618,7 +2616,7 @@ PP(pp_exit)
 PP(pp_nswitch)
 {
     dSP;
-    NV value = SvNVx(GvSV(cCOP->cop_gv));
+    const NV value = SvNVx(GvSV(cCOP->cop_gv));
     register I32 match = I_32(value);
 
     if (value < 0.0) {
@@ -2662,10 +2660,10 @@ S_save_lines(pTHX_ AV *array, SV *sv)
 {
     register const char *s = SvPVX(sv);
     register const char *send = SvPVX(sv) + SvCUR(sv);
-    register const char *t;
     register I32 line = 1;
 
     while (s && s < send) {
+       const char *t;
        SV *tmpstr = NEWSV(85,0);
 
        sv_upgrade(tmpstr, SVt_PVMG);
@@ -3014,7 +3012,7 @@ STATIC PerlIO *
 S_doopen_pm(pTHX_ const char *name, const char *mode)
 {
 #ifndef PERL_DISABLE_PMC
-    STRLEN namelen = strlen(name);
+    const STRLEN namelen = strlen(name);
     PerlIO *fp;
 
     if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
@@ -3056,9 +3054,8 @@ PP(pp_require)
     char *tryname = Nullch;
     SV *namesv = Nullsv;
     SV** svp;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
     PerlIO *tryrsfp = 0;
-    STRLEN n_a;
     int filter_has_file = 0;
     GV *filter_child_proc = 0;
     SV *filter_state = 0;
@@ -3243,6 +3240,7 @@ PP(pp_require)
                        || (*name == ':' && name[1] != ':' && strchr(name+2, ':'))
 #endif
                  ) {
+                   STRLEN n_a;
                    char *dir = SvPVx(dirsv, n_a);
 #ifdef MACOS_TRADITIONAL
                    char buf1[256];
@@ -3306,7 +3304,8 @@ PP(pp_require)
                    sv_catpv(msg, " (did you run h2ph?)");
                sv_catpv(msg, " (@INC contains:");
                for (i = 0; i <= AvFILL(ar); i++) {
-                   char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
+                   STRLEN n_a;
+                   const char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
                    Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
                    sv_catsv(msg, dirmsgsv);
                }
@@ -3393,7 +3392,7 @@ PP(pp_entereval)
     dVAR; dSP;
     register PERL_CONTEXT *cx;
     dPOPss;
-    I32 gimme = GIMME_V, was = PL_sub_generation;
+    const I32 gimme = GIMME_V, was = PL_sub_generation;
     char tbuf[TYPE_DIGITS(long) + 12];
     char *tmpbuf = tbuf;
     char *safestr;
@@ -3544,7 +3543,7 @@ PP(pp_entertry)
 {
     dVAR; dSP;
     register PERL_CONTEXT *cx;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
 
     ENTER;
     SAVETMPS;
index ec094a0..a920a6c 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -321,7 +321,7 @@ PP(pp_backtick)
     PerlIO *fp;
     STRLEN n_a;
     char *tmps = POPpx;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
     const char *mode = "r";
 
     TAINT_PROPER("``");
@@ -1210,7 +1210,7 @@ PP(pp_getc)
     if (gv && (io = GvIO(gv))
        && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
     {
-       I32 gimme = GIMME_V;
+       const I32 gimme = GIMME_V;
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)io, mg));
        PUTBACK;
@@ -1256,7 +1256,7 @@ S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
 {
     dVAR;
     register PERL_CONTEXT *cx;
-    I32 gimme = GIMME_V;
+    const I32 gimme = GIMME_V;
 
     ENTER;
     SAVETMPS;
@@ -1358,7 +1358,7 @@ PP(pp_leavewrite)
        }
        if (IoFLAGS(io) & IOf_DIDTOP) { /* Oh dear.  It still doesn't fit. */
            I32 lines = IoLINES_LEFT(io);
-           char *s = SvPVX(PL_formtarget);
+           const char *s = SvPVX(PL_formtarget);
            if (lines <= 0)             /* Yow, header didn't even fit!!! */
                goto forget_top;
            while (lines-- > 0) {
@@ -1368,7 +1368,7 @@ PP(pp_leavewrite)
                s++;
            }
            if (s) {
-               STRLEN save = SvCUR(PL_formtarget);
+               const STRLEN save = SvCUR(PL_formtarget);
                SvCUR_set(PL_formtarget, s - SvPVX(PL_formtarget));
                do_print(PL_formtarget, ofp);
                SvCUR_set(PL_formtarget, save);
@@ -3928,7 +3928,7 @@ PP(pp_readdir)
     dSP;
 
     SV *sv;
-    I32 gimme = GIMME;
+    const I32 gimme = GIMME;
     GV *gv = (GV *)POPs;
     register Direntry_t *dp;
     register IO *io = GvIOn(gv);
diff --git a/proto.h b/proto.h
index 968422f..ca7cbdf 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -23,12 +23,16 @@ PERL_CALLCONV PerlInterpreter*      perl_alloc_using(struct IPerlMem* m, struct IPerl
 PERL_CALLCONV PerlInterpreter* perl_alloc(void);
 PERL_CALLCONV void     perl_construct(PerlInterpreter* interp)
                        __attribute__((nonnull(1)));
+
 PERL_CALLCONV int      perl_destruct(PerlInterpreter* interp)
                        __attribute__((nonnull(1)));
+
 PERL_CALLCONV void     perl_free(PerlInterpreter* interp)
                        __attribute__((nonnull(1)));
+
 PERL_CALLCONV int      perl_run(PerlInterpreter* interp)
                        __attribute__((nonnull(1)));
+
 PERL_CALLCONV int      perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env);
 PERL_CALLCONV bool     Perl_doing_taint(int argc, char** argv, char** env);
 #if defined(USE_ITHREADS)
@@ -39,11 +43,17 @@ PERL_CALLCONV PerlInterpreter*      perl_clone_using(PerlInterpreter *interp, UV flag
 #endif
 
 PERL_CALLCONV Malloc_t Perl_malloc(MEM_SIZE nbytes)
-                       __attribute__((malloc)) __attribute__((warn_unused_result));
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV Malloc_t Perl_calloc(MEM_SIZE elements, MEM_SIZE size)
-                       __attribute__((malloc)) __attribute__((warn_unused_result));
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV Malloc_t Perl_realloc(Malloc_t where, MEM_SIZE nbytes)
-                       __attribute__((malloc)) __attribute__((warn_unused_result));
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV Free_t   Perl_mfree(Malloc_t where);
 #if defined(MYMALLOC)
 PERL_CALLCONV MEM_SIZE Perl_malloced_size(void *p);
@@ -89,6 +99,7 @@ PERL_CALLCONV void    Perl_boot_core_PerlIO(pTHX);
 PERL_CALLCONV void     Perl_call_list(pTHX_ I32 oldscope, AV* av_list);
 PERL_CALLCONV bool     Perl_cando(pTHX_ Mode_t mode, Uid_t effective, const Stat_t* statbufp)
                        __attribute__((nonnull(pTHX_3)));
+
 PERL_CALLCONV U32      Perl_cast_ulong(pTHX_ NV f);
 PERL_CALLCONV I32      Perl_cast_i32(pTHX_ NV f);
 PERL_CALLCONV IV       Perl_cast_iv(pTHX_ NV f);
@@ -97,43 +108,63 @@ PERL_CALLCONV UV   Perl_cast_uv(pTHX_ NV f);
 PERL_CALLCONV I32      Perl_my_chsize(pTHX_ int fd, Off_t length);
 #endif
 PERL_CALLCONV OP*      Perl_convert(pTHX_ I32 optype, I32 flags, OP* o);
-PERL_CALLCONV void     Perl_croak(pTHX_ const char* pat, ...) __attribute__((noreturn))
+PERL_CALLCONV void     Perl_croak(pTHX_ const char* pat, ...)
+                       __attribute__((noreturn))
                        __attribute__format__(__printf__,pTHX_1,pTHX_2);
-PERL_CALLCONV void     Perl_vcroak(pTHX_ const char* pat, va_list* args) __attribute__((noreturn));
+
+PERL_CALLCONV void     Perl_vcroak(pTHX_ const char* pat, va_list* args)
+                       __attribute__((noreturn));
+
 #if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV void     Perl_croak_nocontext(const char* pat, ...) __attribute__((noreturn))
+PERL_CALLCONV void     Perl_croak_nocontext(const char* pat, ...)
+                       __attribute__((noreturn))
                        __attribute__format__(__printf__,1,2);
+
 PERL_CALLCONV OP*      Perl_die_nocontext(const char* pat, ...)
                        __attribute__format__(__printf__,1,2);
+
 PERL_CALLCONV void     Perl_deb_nocontext(const char* pat, ...)
                        __attribute__format__(__printf__,1,2);
+
 PERL_CALLCONV char*    Perl_form_nocontext(const char* pat, ...)
                        __attribute__format__(__printf__,1,2);
+
 PERL_CALLCONV void     Perl_load_module_nocontext(U32 flags, SV* name, SV* ver, ...);
 PERL_CALLCONV SV*      Perl_mess_nocontext(const char* pat, ...)
                        __attribute__format__(__printf__,1,2);
+
 PERL_CALLCONV void     Perl_warn_nocontext(const char* pat, ...)
                        __attribute__format__(__printf__,1,2);
+
 PERL_CALLCONV void     Perl_warner_nocontext(U32 err, const char* pat, ...)
                        __attribute__format__(__printf__,2,3);
+
 PERL_CALLCONV SV*      Perl_newSVpvf_nocontext(const char* pat, ...)
                        __attribute__format__(__printf__,1,2);
+
 PERL_CALLCONV void     Perl_sv_catpvf_nocontext(SV* sv, const char* pat, ...)
                        __attribute__format__(__printf__,2,3);
+
 PERL_CALLCONV void     Perl_sv_setpvf_nocontext(SV* sv, const char* pat, ...)
                        __attribute__format__(__printf__,2,3);
+
 PERL_CALLCONV void     Perl_sv_catpvf_mg_nocontext(SV* sv, const char* pat, ...)
                        __attribute__format__(__printf__,2,3);
+
 PERL_CALLCONV void     Perl_sv_setpvf_mg_nocontext(SV* sv, const char* pat, ...)
                        __attribute__format__(__printf__,2,3);
+
 PERL_CALLCONV int      Perl_fprintf_nocontext(PerlIO* stream, const char* fmt, ...)
                        __attribute__format__(__printf__,2,3);
+
 PERL_CALLCONV int      Perl_printf_nocontext(const char* fmt, ...)
                        __attribute__format__(__printf__,1,2);
+
 #endif
 PERL_CALLCONV void     Perl_cv_ckproto(pTHX_ const CV* cv, const GV* gv, const char* p);
 PERL_CALLCONV CV*      Perl_cv_clone(pTHX_ CV* proto)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV SV*      Perl_cv_const_sv(pTHX_ CV* cv);
 PERL_CALLCONV SV*      Perl_op_const_sv(pTHX_ const OP* o, CV* cv);
 PERL_CALLCONV void     Perl_cv_undef(pTHX_ CV* cv);
@@ -143,31 +174,42 @@ PERL_CALLCONV void        Perl_filter_del(pTHX_ filter_t funcp);
 PERL_CALLCONV I32      Perl_filter_read(pTHX_ int idx, SV* buffer, int maxlen);
 PERL_CALLCONV char**   Perl_get_op_descs(pTHX)
                        __attribute__((pure));
+
 PERL_CALLCONV char**   Perl_get_op_names(pTHX)
                        __attribute__((pure));
+
 PERL_CALLCONV const char*      Perl_get_no_modify(pTHX)
                        __attribute__((pure));
+
 PERL_CALLCONV U32*     Perl_get_opargs(pTHX)
                        __attribute__((pure));
+
 PERL_CALLCONV PPADDR_t*        Perl_get_ppaddr(pTHX)
                        __attribute__((pure));
+
 PERL_CALLCONV I32      Perl_cxinc(pTHX);
 PERL_CALLCONV void     Perl_deb(pTHX_ const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_1,pTHX_2);
+
 PERL_CALLCONV void     Perl_vdeb(pTHX_ const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_debprofdump(pTHX);
 PERL_CALLCONV I32      Perl_debop(pTHX_ const OP* o)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV I32      Perl_debstack(pTHX);
 PERL_CALLCONV I32      Perl_debstackptrs(pTHX);
 PERL_CALLCONV char*    Perl_delimcpy(pTHX_ char* to, const char* toend, const char* from, const char* fromend, int delim, I32* retlen)
                        __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3,pTHX_4,pTHX_6)));
+
 PERL_CALLCONV void     Perl_deprecate(pTHX_ const char* s)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_deprecate_old(pTHX_ const char* s)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV OP*      Perl_die(pTHX_ const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_1,pTHX_2);
+
 PERL_CALLCONV OP*      Perl_vdie(pTHX_ const char* pat, va_list* args);
 PERL_CALLCONV OP*      Perl_die_where(pTHX_ const char* message, STRLEN msglen);
 PERL_CALLCONV void     Perl_dounwind(pTHX_ I32 cxix);
@@ -175,14 +217,19 @@ PERL_CALLCONV bool        Perl_do_aexec(pTHX_ SV* really, SV** mark, SV** sp);
 PERL_CALLCONV bool     Perl_do_aexec5(pTHX_ SV* really, SV** mark, SV** sp, int fd, int flag);
 PERL_CALLCONV int      Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_do_chop(pTHX_ SV* asv, SV* sv)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV bool     Perl_do_close(pTHX_ GV* gv, bool not_implicit)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_do_eof(pTHX_ GV* gv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_do_exec(pTHX_ char* cmd)
                        __attribute__((nonnull(pTHX_1)));
+
 #if defined(WIN32) || defined(SYMBIAN)
 PERL_CALLCONV int      Perl_do_aspawn(pTHX_ SV* really, SV** mark, SV** sp);
 PERL_CALLCONV int      Perl_do_spawn(pTHX_ char* cmd);
@@ -200,7 +247,9 @@ PERL_CALLCONV I32   Perl_do_msgsnd(pTHX_ SV** mark, SV** sp);
 PERL_CALLCONV I32      Perl_do_semop(pTHX_ SV** mark, SV** sp);
 PERL_CALLCONV I32      Perl_do_shmio(pTHX_ I32 optype, SV** mark, SV** sp);
 #endif
-PERL_CALLCONV void     Perl_do_join(pTHX_ SV* sv, SV* del, SV** mark, SV** sp);
+PERL_CALLCONV void     Perl_do_join(pTHX_ SV* sv, SV* del, SV** mark, SV** sp)
+                       __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3,pTHX_4)));
+
 PERL_CALLCONV OP*      Perl_do_kv(pTHX);
 PERL_CALLCONV bool     Perl_do_open(pTHX_ GV* gv, char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp);
 PERL_CALLCONV bool     Perl_do_open9(pTHX_ GV *gv, char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num);
@@ -216,8 +265,10 @@ PERL_CALLCONV Off_t        Perl_do_tell(pTHX_ GV* gv);
 PERL_CALLCONV I32      Perl_do_trans(pTHX_ SV* sv);
 PERL_CALLCONV UV       Perl_do_vecget(pTHX_ SV* sv, I32 offset, I32 size)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_do_vecset(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_do_vop(pTHX_ I32 optype, SV* sv, SV* left, SV* right);
 PERL_CALLCONV OP*      Perl_dofile(pTHX_ OP* term);
 PERL_CALLCONV I32      Perl_dowantarray(pTHX);
@@ -231,16 +282,21 @@ PERL_CALLCONV void        Perl_gv_dump(pTHX_ GV* gv);
 PERL_CALLCONV void     Perl_op_dump(pTHX_ const OP* arg);
 PERL_CALLCONV void     Perl_pmop_dump(pTHX_ PMOP* pm);
 PERL_CALLCONV void     Perl_dump_packsubs(pTHX_ const HV* stash);
-PERL_CALLCONV void     Perl_dump_sub(pTHX_ const GV* gv);
+PERL_CALLCONV void     Perl_dump_sub(pTHX_ const GV* gv)
+                       __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_fbm_compile(pTHX_ SV* sv, U32 flags);
 PERL_CALLCONV char*    Perl_fbm_instr(pTHX_ unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags);
 PERL_CALLCONV char*    Perl_find_script(pTHX_ const char *scriptname, bool dosearch, const char **search_ext, I32 flags);
 PERL_CALLCONV OP*      Perl_force_list(pTHX_ OP* arg)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV OP*      Perl_fold_constants(pTHX_ OP* arg)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV char*    Perl_form(pTHX_ const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_1,pTHX_2);
+
 PERL_CALLCONV char*    Perl_vform(pTHX_ const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_free_tmps(pTHX);
 PERL_CALLCONV OP*      Perl_gen_constant_list(pTHX_ OP* o);
@@ -295,14 +351,20 @@ PERL_CALLCONV void        Perl_hv_undef(pTHX_ HV* tb);
 PERL_CALLCONV I32      Perl_ibcmp(pTHX_ const char* a, const char* b, I32 len)
                        __attribute__((pure))
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV I32      Perl_ibcmp_locale(pTHX_ const char* a, const char* b, I32 len)
                        __attribute__((pure))
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV I32      Perl_ibcmp_utf8(pTHX_ const char* a, char **pe1, UV l1, bool u1, const char* b, char **pe2, UV l2, bool u2)
                        __attribute__((nonnull(pTHX_1,pTHX_5)));
-PERL_CALLCONV bool     Perl_ingroup(pTHX_ Gid_t testgid, Uid_t effective);
+
+PERL_CALLCONV bool     Perl_ingroup(pTHX_ Gid_t testgid, Uid_t effective)
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV void     Perl_init_argv_symbols(pTHX_ int argc, char **argv)
                        __attribute__((nonnull(pTHX_2)));
+
 PERL_CALLCONV void     Perl_init_debugger(pTHX);
 PERL_CALLCONV void     Perl_init_stacks(pTHX);
 PERL_CALLCONV void     Perl_init_tm(pTHX_ struct tm *ptm);
@@ -310,91 +372,215 @@ PERL_CALLCONV U32        Perl_intro_my(pTHX);
 PERL_CALLCONV char*    Perl_instr(pTHX_ const char* big, const char* little)
                        __attribute__((pure))
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV bool     Perl_io_close(pTHX_ IO* io, bool not_implicit);
 PERL_CALLCONV OP*      Perl_invert(pTHX_ OP* cmd);
-PERL_CALLCONV bool     Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags);
-PERL_CALLCONV I32      Perl_is_lvalue_sub(pTHX);
-PERL_CALLCONV U32      Perl_to_uni_upper_lc(pTHX_ U32 c);
-PERL_CALLCONV U32      Perl_to_uni_title_lc(pTHX_ U32 c);
-PERL_CALLCONV U32      Perl_to_uni_lower_lc(pTHX_ U32 c);
-PERL_CALLCONV bool     Perl_is_uni_alnum(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_alnumc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_idfirst(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_alpha(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_ascii(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_space(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_cntrl(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_graph(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_digit(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_upper(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_lower(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_print(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_punct(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_xdigit(pTHX_ UV c);
+PERL_CALLCONV bool     Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV I32      Perl_is_lvalue_sub(pTHX)
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV U32      Perl_to_uni_upper_lc(pTHX_ U32 c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV U32      Perl_to_uni_title_lc(pTHX_ U32 c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV U32      Perl_to_uni_lower_lc(pTHX_ U32 c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_alnum(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_alnumc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_idfirst(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_alpha(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_ascii(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_space(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_cntrl(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_graph(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_digit(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_upper(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_lower(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_print(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_punct(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_xdigit(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
 PERL_CALLCONV UV       Perl_to_uni_upper(pTHX_ UV c, U8 *p, STRLEN *lenp)
                        __attribute__((nonnull(pTHX_2,pTHX_3)));
+
 PERL_CALLCONV UV       Perl_to_uni_title(pTHX_ UV c, U8 *p, STRLEN *lenp)
                        __attribute__((nonnull(pTHX_2,pTHX_3)));
+
 PERL_CALLCONV UV       Perl_to_uni_lower(pTHX_ UV c, U8 *p, STRLEN *lenp)
                        __attribute__((nonnull(pTHX_2,pTHX_3)));
+
 PERL_CALLCONV UV       Perl_to_uni_fold(pTHX_ UV c, U8 *p, STRLEN *lenp)
                        __attribute__((nonnull(pTHX_2,pTHX_3)));
-PERL_CALLCONV bool     Perl_is_uni_alnum_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_alnumc_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_idfirst_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_alpha_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_ascii_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_space_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_cntrl_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_graph_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_digit_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_upper_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_lower_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_print_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_punct_lc(pTHX_ UV c);
-PERL_CALLCONV bool     Perl_is_uni_xdigit_lc(pTHX_ UV c);
+
+PERL_CALLCONV bool     Perl_is_uni_alnum_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_alnumc_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_idfirst_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_alpha_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_ascii_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_space_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_cntrl_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_graph_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_digit_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_upper_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_lower_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_print_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_punct_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
+PERL_CALLCONV bool     Perl_is_uni_xdigit_lc(pTHX_ UV c)
+                       __attribute__((warn_unused_result))
+                       __attribute__((pure));
+
 PERL_CALLCONV STRLEN   Perl_is_utf8_char(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_string(pTHX_ const U8 *s, STRLEN len)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **p)
                        __attribute__((nonnull(pTHX_1,pTHX_3)));
+
 PERL_CALLCONV bool     Perl_is_utf8_alnum(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_alnumc(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_idfirst(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_idcont(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_alpha(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_ascii(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_space(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_cntrl(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_digit(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_graph(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_upper(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_lower(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_print(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_punct(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_xdigit(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_is_utf8_mark(pTHX_ const U8 *p)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV OP*      Perl_jmaybe(pTHX_ OP* arg)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV I32      Perl_keyword(pTHX_ const char* d, I32 len)
+                       __attribute__((pure))
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_leave_scope(pTHX_ I32 base);
 PERL_CALLCONV void     Perl_lex_end(pTHX);
 PERL_CALLCONV void     Perl_lex_start(pTHX_ SV* line);
@@ -408,10 +594,19 @@ PERL_CALLCONV OP* Perl_listkids(pTHX_ OP* o);
 PERL_CALLCONV void     Perl_load_module(pTHX_ U32 flags, SV* name, SV* ver, ...);
 PERL_CALLCONV void     Perl_vload_module(pTHX_ U32 flags, SV* name, SV* ver, va_list* args);
 PERL_CALLCONV OP*      Perl_localize(pTHX_ OP* arg, I32 lexical);
-PERL_CALLCONV I32      Perl_looks_like_number(pTHX_ SV* sv);
-PERL_CALLCONV UV       Perl_grok_bin(pTHX_ const char* start, STRLEN* len, I32* flags, NV *result);
-PERL_CALLCONV UV       Perl_grok_hex(pTHX_ const char* start, STRLEN* len, I32* flags, NV *result);
-PERL_CALLCONV int      Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep);
+PERL_CALLCONV I32      Perl_looks_like_number(pTHX_ SV* sv)
+                       __attribute__((warn_unused_result))
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV UV       Perl_grok_bin(pTHX_ const char* start, STRLEN* len, I32* flags, NV *result)
+                       __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3)));
+
+PERL_CALLCONV UV       Perl_grok_hex(pTHX_ const char* start, STRLEN* len, I32* flags, NV *result)
+                       __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3)));
+
+PERL_CALLCONV int      Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep)
+                       __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_grok_numeric_radix(pTHX_ const char **sp, const char *send);
 PERL_CALLCONV UV       Perl_grok_oct(pTHX_ const char* start, STRLEN* len, I32* flags, NV *result);
 PERL_CALLCONV int      Perl_magic_clearenv(pTHX_ SV* sv, MAGIC* mg);
@@ -437,7 +632,9 @@ PERL_CALLCONV U32   Perl_magic_len(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_nextpack(pTHX_ SV* sv, MAGIC* mg, SV* key);
 PERL_CALLCONV U32      Perl_magic_regdata_cnt(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_regdatum_get(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int      Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg) __attribute__((noreturn));
+PERL_CALLCONV int      Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg)
+                       __attribute__((noreturn));
+
 PERL_CALLCONV int      Perl_magic_set(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_setamagic(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_setarylen(pTHX_ SV* sv, MAGIC* mg);
@@ -472,6 +669,7 @@ PERL_CALLCONV char* Perl_mem_collxfrm(pTHX_ const char* s, STRLEN len, STRLEN* x
 #endif
 PERL_CALLCONV SV*      Perl_mess(pTHX_ const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_1,pTHX_2);
+
 PERL_CALLCONV SV*      Perl_vmess(pTHX_ const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_qerror(pTHX_ SV* err);
 PERL_CALLCONV void     Perl_sortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t cmp);
@@ -490,18 +688,26 @@ PERL_CALLCONV int Perl_mode_from_discipline(pTHX_ SV* discp);
 PERL_CALLCONV char*    Perl_moreswitches(pTHX_ char* s);
 PERL_CALLCONV OP*      Perl_my(pTHX_ OP* o)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV NV       Perl_my_atof(pTHX_ const char *s)
                        __attribute__((nonnull(pTHX_1)));
+
 #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
 PERL_CALLCONV char*    Perl_my_bcopy(const char* from, char* to, I32 len)
                        __attribute__((nonnull(1,2)));
+
 #endif
 #if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
 PERL_CALLCONV char*    Perl_my_bzero(char* loc, I32 len)
                        __attribute__((nonnull(1)));
+
 #endif
-PERL_CALLCONV void     Perl_my_exit(pTHX_ U32 status) __attribute__((noreturn));
-PERL_CALLCONV void     Perl_my_failure_exit(pTHX) __attribute__((noreturn));
+PERL_CALLCONV void     Perl_my_exit(pTHX_ U32 status)
+                       __attribute__((noreturn));
+
+PERL_CALLCONV void     Perl_my_failure_exit(pTHX)
+                       __attribute__((noreturn));
+
 PERL_CALLCONV I32      Perl_my_fflush_all(pTHX);
 PERL_CALLCONV Pid_t    Perl_my_fork(void);
 PERL_CALLCONV void     Perl_atfork_lock(void);
@@ -511,10 +717,12 @@ PERL_CALLCONV I32 Perl_my_lstat(pTHX);
 PERL_CALLCONV I32      Perl_my_memcmp(const char* s1, const char* s2, I32 len)
                        __attribute__((pure))
                        __attribute__((nonnull(1,2)));
+
 #endif
 #if !defined(HAS_MEMSET)
 PERL_CALLCONV void*    Perl_my_memset(char* loc, I32 ch, I32 len)
                        __attribute__((nonnull(1)));
+
 #endif
 PERL_CALLCONV I32      Perl_my_pclose(pTHX_ PerlIO* ptr);
 PERL_CALLCONV PerlIO*  Perl_my_popen(pTHX_ char* cmd, char* mode);
@@ -524,77 +732,225 @@ PERL_CALLCONV I32        Perl_my_stat(pTHX);
 PERL_CALLCONV char *   Perl_my_strftime(pTHX_ const char *fmt, int sec, int min, int hour, int mday, int mon, int year, int wday, int yday, int isdst);
 #if defined(MYSWAP)
 PERL_CALLCONV short    Perl_my_swap(pTHX_ short s)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((pure));
+
 PERL_CALLCONV long     Perl_my_htonl(pTHX_ long l)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((pure));
+
 PERL_CALLCONV long     Perl_my_ntohl(pTHX_ long l)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((pure));
+
 #endif
 PERL_CALLCONV void     Perl_my_unexec(pTHX);
-PERL_CALLCONV OP*      Perl_newANONLIST(pTHX_ OP* o);
-PERL_CALLCONV OP*      Perl_newANONHASH(pTHX_ OP* o);
+PERL_CALLCONV OP*      Perl_newANONLIST(pTHX_ OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newANONHASH(pTHX_ OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV OP*      Perl_newANONSUB(pTHX_ I32 floor, OP* proto, OP* block);
-PERL_CALLCONV OP*      Perl_newASSIGNOP(pTHX_ I32 flags, OP* left, I32 optype, OP* right);
-PERL_CALLCONV OP*      Perl_newCONDOP(pTHX_ I32 flags, OP* expr, OP* trueop, OP* falseop);
+PERL_CALLCONV OP*      Perl_newASSIGNOP(pTHX_ I32 flags, OP* left, I32 optype, OP* right)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newCONDOP(pTHX_ I32 flags, OP* expr, OP* trueop, OP* falseop)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV CV*      Perl_newCONSTSUB(pTHX_ HV* stash, const char* name, SV* sv);
 PERL_CALLCONV void     Perl_newFORM(pTHX_ I32 floor, OP* o, OP* block);
-PERL_CALLCONV OP*      Perl_newFOROP(pTHX_ I32 flags, char* label, line_t forline, OP* sclr, OP* expr, OP*block, OP*cont);
-PERL_CALLCONV OP*      Perl_newLOGOP(pTHX_ I32 optype, I32 flags, OP* left, OP* right);
-PERL_CALLCONV OP*      Perl_newLOOPEX(pTHX_ I32 type, OP* label);
-PERL_CALLCONV OP*      Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP* expr, OP* block);
+PERL_CALLCONV OP*      Perl_newFOROP(pTHX_ I32 flags, char* label, line_t forline, OP* sclr, OP* expr, OP*block, OP*cont)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newLOGOP(pTHX_ I32 optype, I32 flags, OP* left, OP* right)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newLOOPEX(pTHX_ I32 type, OP* label)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP* expr, OP* block)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV OP*      Perl_newNULLLIST(pTHX)
-                       __attribute__((malloc)) __attribute__((warn_unused_result));
-PERL_CALLCONV OP*      Perl_newOP(pTHX_ I32 optype, I32 flags);
-PERL_CALLCONV void     Perl_newPROG(pTHX_ OP* o);
-PERL_CALLCONV OP*      Perl_newRANGE(pTHX_ I32 flags, OP* left, OP* right);
-PERL_CALLCONV OP*      Perl_newSLICEOP(pTHX_ I32 flags, OP* subscript, OP* listop);
-PERL_CALLCONV OP*      Perl_newSTATEOP(pTHX_ I32 flags, char* label, OP* o);
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newOP(pTHX_ I32 optype, I32 flags)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV void     Perl_newPROG(pTHX_ OP* o)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV OP*      Perl_newRANGE(pTHX_ I32 flags, OP* left, OP* right)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newSLICEOP(pTHX_ I32 flags, OP* subscript, OP* listop)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newSTATEOP(pTHX_ I32 flags, char* label, OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV CV*      Perl_newSUB(pTHX_ I32 floor, OP* o, OP* proto, OP* block);
 PERL_CALLCONV CV*      Perl_newXS(pTHX_ const char* name, XSUBADDR_t f, const char* filename)
                        __attribute__((nonnull(pTHX_1,pTHX_3)));
-PERL_CALLCONV AV*      Perl_newAV(pTHX);
+
+PERL_CALLCONV AV*      Perl_newAV(pTHX)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV OP*      Perl_newAVREF(pTHX_ OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((nonnull(pTHX_1)));
-PERL_CALLCONV OP*      Perl_newBINOP(pTHX_ I32 type, I32 flags, OP* first, OP* last);
-PERL_CALLCONV OP*      Perl_newCVREF(pTHX_ I32 flags, OP* o);
-PERL_CALLCONV OP*      Perl_newGVOP(pTHX_ I32 type, I32 flags, GV* gv);
-PERL_CALLCONV GV*      Perl_newGVgen(pTHX_ const char* pack);
-PERL_CALLCONV OP*      Perl_newGVREF(pTHX_ I32 type, OP* o);
+
+PERL_CALLCONV OP*      Perl_newBINOP(pTHX_ I32 type, I32 flags, OP* first, OP* last)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newCVREF(pTHX_ I32 flags, OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newGVOP(pTHX_ I32 type, I32 flags, GV* gv)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV GV*      Perl_newGVgen(pTHX_ const char* pack)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newGVREF(pTHX_ I32 type, OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV OP*      Perl_newHVREF(pTHX_ OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((nonnull(pTHX_1)));
-PERL_CALLCONV HV*      Perl_newHV(pTHX);
-PERL_CALLCONV HV*      Perl_newHVhv(pTHX_ HV* hv);
-PERL_CALLCONV IO*      Perl_newIO(pTHX);
-PERL_CALLCONV OP*      Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP* first, OP* last);
-PERL_CALLCONV OP*      Perl_newPADOP(pTHX_ I32 type, I32 flags, SV* sv);
-PERL_CALLCONV OP*      Perl_newPMOP(pTHX_ I32 type, I32 flags);
-PERL_CALLCONV OP*      Perl_newPVOP(pTHX_ I32 type, I32 flags, char* pv);
-PERL_CALLCONV SV*      Perl_newRV(pTHX_ SV* pref);
+
+PERL_CALLCONV HV*      Perl_newHV(pTHX)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV HV*      Perl_newHVhv(pTHX_ HV* hv)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV IO*      Perl_newIO(pTHX)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP* first, OP* last)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newPADOP(pTHX_ I32 type, I32 flags, SV* sv)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newPMOP(pTHX_ I32 type, I32 flags)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newPVOP(pTHX_ I32 type, I32 flags, char* pv)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV SV*      Perl_newRV(pTHX_ SV* pref)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV SV*      Perl_newRV_noinc(pTHX_ SV *sv)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((nonnull(pTHX_1)));
-PERL_CALLCONV SV*      Perl_newSV(pTHX_ STRLEN len);
+
+PERL_CALLCONV SV*      Perl_newSV(pTHX_ STRLEN len)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV OP*      Perl_newSVREF(pTHX_ OP* o)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV OP*      Perl_newSVOP(pTHX_ I32 type, I32 flags, SV* sv)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__((nonnull(pTHX_3)));
-PERL_CALLCONV SV*      Perl_newSViv(pTHX_ IV i);
-PERL_CALLCONV SV*      Perl_newSVuv(pTHX_ UV u);
-PERL_CALLCONV SV*      Perl_newSVnv(pTHX_ NV n);
-PERL_CALLCONV SV*      Perl_newSVpv(pTHX_ const char* s, STRLEN len);
-PERL_CALLCONV SV*      Perl_newSVpvn(pTHX_ const char* s, STRLEN len);
-PERL_CALLCONV SV*      Perl_newSVpvn_share(pTHX_ const char* s, I32 len, U32 hash);
+
+PERL_CALLCONV SV*      Perl_newSViv(pTHX_ IV i)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV SV*      Perl_newSVuv(pTHX_ UV u)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV SV*      Perl_newSVnv(pTHX_ NV n)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV SV*      Perl_newSVpv(pTHX_ const char* s, STRLEN len)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV SV*      Perl_newSVpvn(pTHX_ const char* s, STRLEN len)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV SV*      Perl_newSVpvn_share(pTHX_ const char* s, I32 len, U32 hash)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV SV*      Perl_newSVpvf(pTHX_ const char* pat, ...)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result))
                        __attribute__format__(__printf__,pTHX_1,pTHX_2);
+
 PERL_CALLCONV SV*      Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args);
-PERL_CALLCONV SV*      Perl_newSVrv(pTHX_ SV* rv, const char* classname);
-PERL_CALLCONV SV*      Perl_newSVsv(pTHX_ SV* old);
-PERL_CALLCONV OP*      Perl_newUNOP(pTHX_ I32 type, I32 flags, OP* first);
-PERL_CALLCONV OP*      Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont, I32 has_my);
-PERL_CALLCONV PERL_SI* Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems);
+PERL_CALLCONV SV*      Perl_newSVrv(pTHX_ SV* rv, const char* classname)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV SV*      Perl_newSVsv(pTHX_ SV* old)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newUNOP(pTHX_ I32 type, I32 flags, OP* first)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV OP*      Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont, I32 has_my)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
+PERL_CALLCONV PERL_SI* Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems)
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV char*    Perl_scan_vstring(pTHX_ const char *vstr, SV *sv)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_scan_version(pTHX_ const char *vstr, SV *sv, bool qv)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV SV*      Perl_new_version(pTHX_ SV *ver);
 PERL_CALLCONV SV*      Perl_upg_version(pTHX_ SV *ver);
 PERL_CALLCONV SV*      Perl_vnumify(pTHX_ SV *vs);
@@ -602,22 +958,30 @@ PERL_CALLCONV SV* Perl_vnormal(pTHX_ SV *vs);
 PERL_CALLCONV SV*      Perl_vstringify(pTHX_ SV *vs);
 PERL_CALLCONV int      Perl_vcmp(pTHX_ SV *lvs, SV *rvs)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV PerlIO*  Perl_nextargv(pTHX_ GV* gv);
 PERL_CALLCONV char*    Perl_ninstr(pTHX_ const char* big, const char* bigend, const char* little, const char* lend)
                        __attribute__((pure));
-PERL_CALLCONV OP*      Perl_oopsCV(pTHX_ OP* o) __attribute__((noreturn));
+
+PERL_CALLCONV OP*      Perl_oopsCV(pTHX_ OP* o)
+                       __attribute__((noreturn));
+
 PERL_CALLCONV void     Perl_op_free(pTHX_ OP* arg);
 PERL_CALLCONV void     Perl_package(pTHX_ OP* o);
 PERL_CALLCONV PADOFFSET        Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype);
 PERL_CALLCONV PADOFFSET        Perl_allocmy(pTHX_ char* name)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV PADOFFSET        Perl_pad_findmy(pTHX_ const char* name)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV PADOFFSET        Perl_find_rundefsvoffset(pTHX);
 PERL_CALLCONV OP*      Perl_oopsAV(pTHX_ OP* o)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV OP*      Perl_oopsHV(pTHX_ OP* o)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_pad_leavemy(pTHX);
 PERL_CALLCONV SV*      Perl_pad_sv(pTHX_ PADOFFSET po);
 PERL_CALLCONV void     Perl_pad_free(pTHX_ PADOFFSET po);
@@ -634,44 +998,58 @@ PERL_CALLCONV void*       Perl_reentrant_retry(const char*, ...);
 PERL_CALLCONV void     Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr);
 PERL_CALLCONV I32      Perl_call_argv(pTHX_ const char* sub_name, I32 flags, char** argv)
                        __attribute__((nonnull(pTHX_1,pTHX_3)));
+
 PERL_CALLCONV I32      Perl_call_method(pTHX_ const char* methname, I32 flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV I32      Perl_call_pv(pTHX_ const char* sub_name, I32 flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV I32      Perl_call_sv(pTHX_ SV* sv, I32 flags);
 PERL_CALLCONV void     Perl_despatch_signals(pTHX);
 PERL_CALLCONV SV*      Perl_eval_pv(pTHX_ const char* p, I32 croak_on_error)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV I32      Perl_eval_sv(pTHX_ SV* sv, I32 flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV SV*      Perl_get_sv(pTHX_ const char* name, I32 create)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV AV*      Perl_get_av(pTHX_ const char* name, I32 create)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV HV*      Perl_get_hv(pTHX_ const char* name, I32 create);
 PERL_CALLCONV CV*      Perl_get_cv(pTHX_ const char* name, I32 create);
 PERL_CALLCONV int      Perl_init_i18nl10n(pTHX_ int printwarn);
 PERL_CALLCONV int      Perl_init_i18nl14n(pTHX_ int printwarn);
 PERL_CALLCONV void     Perl_new_collate(pTHX_ char* newcoll)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_new_ctype(pTHX_ char* newctype)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_new_numeric(pTHX_ char* newcoll)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_set_numeric_local(pTHX);
 PERL_CALLCONV void     Perl_set_numeric_radix(pTHX);
 PERL_CALLCONV void     Perl_set_numeric_standard(pTHX);
 PERL_CALLCONV void     Perl_require_pv(pTHX_ const char* pv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags);
 PERL_CALLCONV void     Perl_packlist(pTHX_ SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist);
 PERL_CALLCONV void     Perl_pidgone(pTHX_ Pid_t pid, int status);
 PERL_CALLCONV void     Perl_pmflag(pTHX_ U32* pmfl, int ch)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV OP*      Perl_pmruntime(pTHX_ OP* pm, OP* expr, bool isreg)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV OP*      Perl_pmtrans(pTHX_ OP* o, OP* expr, OP* repl)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV void     Perl_pop_scope(pTHX);
 PERL_CALLCONV OP*      Perl_prepend_elem(pTHX_ I32 optype, OP* head, OP* tail);
 PERL_CALLCONV void     Perl_push_scope(pTHX);
@@ -679,12 +1057,15 @@ PERL_CALLCONV OP*        Perl_ref(pTHX_ OP* o, I32 type);
 PERL_CALLCONV OP*      Perl_refkids(pTHX_ OP* o, I32 type);
 PERL_CALLCONV void     Perl_regdump(pTHX_ regexp* r)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV SV*      Perl_regclass_swash(pTHX_ struct regnode *n, bool doinit, SV **listsvp, SV **altsvp);
 PERL_CALLCONV I32      Perl_pregexec(pTHX_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave)
                        __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3,pTHX_4,pTHX_6)));
+
 PERL_CALLCONV void     Perl_pregfree(pTHX_ struct regexp* r);
 PERL_CALLCONV regexp*  Perl_pregcomp(pTHX_ char* exp, char* xend, PMOP* pm)
                        __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3)));
+
 PERL_CALLCONV char*    Perl_re_intuit_start(pTHX_ regexp* prog, SV* sv, char* strpos, char* strend, U32 flags, struct re_scream_pos_data_s *data);
 PERL_CALLCONV SV*      Perl_re_intuit_string(pTHX_ regexp* prog);
 PERL_CALLCONV I32      Perl_regexec_flags(pTHX_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, void* data, U32 flags);
@@ -692,8 +1073,10 @@ PERL_CALLCONV regnode*    Perl_regnext(pTHX_ regnode* p);
 PERL_CALLCONV void     Perl_regprop(pTHX_ SV* sv, regnode* o);
 PERL_CALLCONV void     Perl_repeatcpy(pTHX_ char* to, const char* from, I32 len, I32 count)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_rninstr(pTHX_ const char* big, const char* bigend, const char* little, const char* lend)
                        __attribute__((pure));
+
 PERL_CALLCONV Sighandler_t     Perl_rsignal(pTHX_ int i, Sighandler_t t);
 PERL_CALLCONV int      Perl_rsignal_restore(pTHX_ int i, Sigsave_t* t);
 PERL_CALLCONV int      Perl_rsignal_save(pTHX_ int i, Sighandler_t t1, Sigsave_t* t2);
@@ -704,6 +1087,7 @@ PERL_CALLCONV void Perl_rxres_save(pTHX_ void** rsp, REGEXP* prx);
 #if !defined(HAS_RENAME)
 PERL_CALLCONV I32      Perl_same_dirent(pTHX_ const char* a, const char* b)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 #endif
 PERL_CALLCONV char*    Perl_savepv(pTHX_ const char* pv);
 PERL_CALLCONV char*    Perl_savesharedpv(pTHX_ const char* pv);
@@ -728,7 +1112,9 @@ PERL_CALLCONV void Perl_save_shared_pvref(pTHX_ char** str);
 PERL_CALLCONV void     Perl_save_gp(pTHX_ GV* gv, I32 empty);
 PERL_CALLCONV HV*      Perl_save_hash(pTHX_ GV* gv);
 PERL_CALLCONV void     Perl_save_helem(pTHX_ HV* hv, SV *key, SV **sptr);
-PERL_CALLCONV void     Perl_save_hints(pTHX) __attribute__((noreturn));
+PERL_CALLCONV void     Perl_save_hints(pTHX)
+                       __attribute__((noreturn));
+
 PERL_CALLCONV void     Perl_save_hptr(pTHX_ HV** hptr);
 PERL_CALLCONV void     Perl_save_I16(pTHX_ I16* intp);
 PERL_CALLCONV void     Perl_save_I32(pTHX_ I32* intp);
@@ -748,7 +1134,9 @@ PERL_CALLCONV void Perl_save_re_context(pTHX);
 PERL_CALLCONV void     Perl_save_padsv(pTHX_ PADOFFSET off);
 PERL_CALLCONV void     Perl_save_sptr(pTHX_ SV** sptr);
 PERL_CALLCONV SV*      Perl_save_svref(pTHX_ SV** sptr);
-PERL_CALLCONV SV**     Perl_save_threadsv(pTHX_ PADOFFSET i) __attribute__((noreturn));
+PERL_CALLCONV SV**     Perl_save_threadsv(pTHX_ PADOFFSET i)
+                       __attribute__((noreturn));
+
 PERL_CALLCONV OP*      Perl_sawparens(pTHX_ OP* o);
 PERL_CALLCONV OP*      Perl_scalar(pTHX_ OP* o);
 PERL_CALLCONV OP*      Perl_scalarkids(pTHX_ OP* o);
@@ -769,91 +1157,175 @@ PERL_CALLCONV Signal_t  Perl_sighandler(int sig);
 PERL_CALLCONV Signal_t Perl_csighandler(int sig);
 PERL_CALLCONV SV**     Perl_stack_grow(pTHX_ SV** sp, SV**p, int n)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV I32      Perl_start_subparse(pTHX_ I32 is_format, U32 flags);
 PERL_CALLCONV void     Perl_sub_crush_depth(pTHX_ CV* cv);
 PERL_CALLCONV bool     Perl_sv_2bool(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1)));
-PERL_CALLCONV CV*      Perl_sv_2cv(pTHX_ SV* sv, HV** st, GV** gvp, I32 lref);
-PERL_CALLCONV IO*      Perl_sv_2io(pTHX_ SV* sv);
-/* PERL_CALLCONV IV    sv_2iv(pTHX_ SV* sv); */
-PERL_CALLCONV IV       Perl_sv_2iv_flags(pTHX_ SV* sv, I32 flags);
-PERL_CALLCONV SV*      Perl_sv_2mortal(pTHX_ SV* sv);
-PERL_CALLCONV NV       Perl_sv_2nv(pTHX_ SV* sv);
+
+PERL_CALLCONV CV*      Perl_sv_2cv(pTHX_ SV* sv, HV** st, GV** gvp, I32 lref)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV IO*      Perl_sv_2io(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+/* PERL_CALLCONV IV    sv_2iv(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1))); */
+
+PERL_CALLCONV IV       Perl_sv_2iv_flags(pTHX_ SV* sv, I32 flags)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV SV*      Perl_sv_2mortal(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV NV       Perl_sv_2nv(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
 /* PERL_CALLCONV char* sv_2pv(pTHX_ SV* sv, STRLEN* lp)
-                       __attribute__((nonnull(pTHX_2))); */
+                       __attribute__((nonnull(pTHX_1,pTHX_2))); */
+
 PERL_CALLCONV char*    Perl_sv_2pv_flags(pTHX_ SV* sv, STRLEN* lp, I32 flags)
-                       __attribute__((nonnull(pTHX_2)));
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_sv_2pvutf8(pTHX_ SV* sv, STRLEN* lp)
-                       __attribute__((nonnull(pTHX_2)));
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_sv_2pvbyte(pTHX_ SV* sv, STRLEN* lp)
-                       __attribute__((nonnull(pTHX_2)));
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_sv_pvn_nomg(pTHX_ SV* sv, STRLEN* lp)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 /* PERL_CALLCONV UV    sv_2uv(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1))); */
+
 PERL_CALLCONV UV       Perl_sv_2uv_flags(pTHX_ SV* sv, I32 flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV IV       Perl_sv_iv(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV UV       Perl_sv_uv(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV NV       Perl_sv_nv(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV char*    Perl_sv_pvn(pTHX_ SV *sv, STRLEN *len)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *len)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *len)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
-PERL_CALLCONV I32      Perl_sv_true(pTHX_ SV *sv);
-PERL_CALLCONV void     Perl_sv_add_arena(pTHX_ char* ptr, U32 size, U32 flags);
-PERL_CALLCONV int      Perl_sv_backoff(pTHX_ SV* sv);
-PERL_CALLCONV SV*      Perl_sv_bless(pTHX_ SV* sv, HV* stash);
+
+PERL_CALLCONV I32      Perl_sv_true(pTHX_ SV *sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_add_arena(pTHX_ char* ptr, U32 size, U32 flags)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV int      Perl_sv_backoff(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV SV*      Perl_sv_bless(pTHX_ SV* sv, HV* stash)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV void     Perl_sv_catpvf(pTHX_ SV* sv, const char* pat, ...)
-                       __attribute__format__(__printf__,pTHX_2,pTHX_3);
-PERL_CALLCONV void     Perl_sv_vcatpvf(pTHX_ SV* sv, const char* pat, va_list* args);
-PERL_CALLCONV void     Perl_sv_catpv(pTHX_ SV* sv, const char* ptr);
-/* PERL_CALLCONV void  sv_catpvn(pTHX_ SV* sv, const char* ptr, STRLEN len); */
-/* PERL_CALLCONV void  sv_catsv(pTHX_ SV* dsv, SV* ssv); */
-PERL_CALLCONV void     Perl_sv_chop(pTHX_ SV* sv, char* ptr);
+                       __attribute__format__(__printf__,pTHX_2,pTHX_3)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_vcatpvf(pTHX_ SV* sv, const char* pat, va_list* args)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_catpv(pTHX_ SV* sv, const char* ptr)
+                       __attribute__((nonnull(pTHX_1)));
+
+/* PERL_CALLCONV void  sv_catpvn(pTHX_ SV* sv, const char* ptr, STRLEN len)
+                       __attribute__((nonnull(pTHX_1))); */
+
+/* PERL_CALLCONV void  sv_catsv(pTHX_ SV* dsv, SV* ssv)
+                       __attribute__((nonnull(pTHX_1))); */
+
+PERL_CALLCONV void     Perl_sv_chop(pTHX_ SV* sv, const char* ptr)
+                       __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV I32      Perl_sv_clean_all(pTHX);
 PERL_CALLCONV void     Perl_sv_clean_objs(pTHX);
-PERL_CALLCONV void     Perl_sv_clear(pTHX_ SV* sv);
-PERL_CALLCONV I32      Perl_sv_cmp(pTHX_ SV* sv1, SV* sv2);
-PERL_CALLCONV I32      Perl_sv_cmp_locale(pTHX_ SV* sv1, SV* sv2);
+PERL_CALLCONV void     Perl_sv_clear(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV I32      Perl_sv_cmp(pTHX_ SV* sv1, SV* sv2)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
+PERL_CALLCONV I32      Perl_sv_cmp_locale(pTHX_ SV* sv1, SV* sv2)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 #if defined(USE_LOCALE_COLLATE)
-PERL_CALLCONV char*    Perl_sv_collxfrm(pTHX_ SV* sv, STRLEN* nxp);
+PERL_CALLCONV char*    Perl_sv_collxfrm(pTHX_ SV* sv, STRLEN* nxp)
+                       __attribute__((nonnull(pTHX_1)));
+
 #endif
 PERL_CALLCONV OP*      Perl_sv_compile_2op(pTHX_ SV* sv, OP** startp, const char* code, PAD** padp)
                        __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3,pTHX_4)));
+
 PERL_CALLCONV int      Perl_getcwd_sv(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1)));
-PERL_CALLCONV void     Perl_sv_dec(pTHX_ SV* sv);
-PERL_CALLCONV void     Perl_sv_dump(pTHX_ SV* sv);
+
+PERL_CALLCONV void     Perl_sv_dec(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_dump(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV bool     Perl_sv_derived_from(pTHX_ SV* sv, const char* name)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV I32      Perl_sv_eq(pTHX_ SV* sv1, SV* sv2)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV void     Perl_sv_free(pTHX_ SV* sv);
 PERL_CALLCONV void     Perl_sv_free2(pTHX_ SV* sv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_sv_free_arenas(pTHX);
 PERL_CALLCONV char*    Perl_sv_gets(pTHX_ SV* sv, PerlIO* fp, I32 append)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_sv_grow(pTHX_ SV* sv, STRLEN newlen)
                        __attribute__((nonnull(pTHX_1)));
-PERL_CALLCONV void     Perl_sv_inc(pTHX_ SV* sv);
+
+PERL_CALLCONV void     Perl_sv_inc(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_sv_insert(pTHX_ SV* bigsv, STRLEN offset, STRLEN len, const char* little, STRLEN littlelen)
                        __attribute__((nonnull(pTHX_1,pTHX_4)));
-PERL_CALLCONV int      Perl_sv_isa(pTHX_ SV* sv, const char* name);
-PERL_CALLCONV int      Perl_sv_isobject(pTHX_ SV* sv);
-PERL_CALLCONV STRLEN   Perl_sv_len(pTHX_ SV* sv);
-PERL_CALLCONV STRLEN   Perl_sv_len_utf8(pTHX_ SV* sv);
-PERL_CALLCONV void     Perl_sv_magic(pTHX_ SV* sv, SV* obj, int how, const char* name, I32 namlen);
-PERL_CALLCONV MAGIC *  Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtbl, const char* name, I32 namlen);
+
+PERL_CALLCONV int      Perl_sv_isa(pTHX_ SV* sv, const char* name)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV int      Perl_sv_isobject(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV STRLEN   Perl_sv_len(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV STRLEN   Perl_sv_len_utf8(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_magic(pTHX_ SV* sv, SV* obj, int how, const char* name, I32 namlen)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV MAGIC *  Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtbl, const char* name, I32 namlen)
+                       __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV SV*      Perl_sv_mortalcopy(pTHX_ SV* oldsv)
                        __attribute__((nonnull(pTHX_1)));
-PERL_CALLCONV SV*      Perl_sv_newmortal(pTHX);
+
+PERL_CALLCONV SV*      Perl_sv_newmortal(pTHX)
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV SV*      Perl_sv_newref(pTHX_ SV* sv);
 PERL_CALLCONV char*    Perl_sv_peek(pTHX_ SV* sv);
 PERL_CALLCONV void     Perl_sv_pos_u2b(pTHX_ SV* sv, I32* offsetp, I32* lenp);
@@ -869,6 +1341,7 @@ PERL_CALLCONV void Perl_sv_report_used(pTHX);
 PERL_CALLCONV void     Perl_sv_reset(pTHX_ const char* s, HV* stash);
 PERL_CALLCONV void     Perl_sv_setpvf(pTHX_ SV* sv, const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_2,pTHX_3);
+
 PERL_CALLCONV void     Perl_sv_vsetpvf(pTHX_ SV* sv, const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_sv_setiv(pTHX_ SV* sv, IV num);
 PERL_CALLCONV void     Perl_sv_setpviv(pTHX_ SV* sv, IV num);
@@ -882,27 +1355,54 @@ PERL_CALLCONV SV*        Perl_sv_setref_pvn(pTHX_ SV* rv, const char* classname, char*
 PERL_CALLCONV void     Perl_sv_setpv(pTHX_ SV* sv, const char* ptr);
 PERL_CALLCONV void     Perl_sv_setpvn(pTHX_ SV* sv, const char* ptr, STRLEN len)
                        __attribute__((nonnull(pTHX_1)));
+
 /* PERL_CALLCONV void  sv_setsv(pTHX_ SV* dsv, SV* ssv); */
 PERL_CALLCONV void     Perl_sv_taint(pTHX_ SV* sv);
 PERL_CALLCONV bool     Perl_sv_tainted(pTHX_ SV* sv);
-PERL_CALLCONV int      Perl_sv_unmagic(pTHX_ SV* sv, int type);
-PERL_CALLCONV void     Perl_sv_unref(pTHX_ SV* sv);
-PERL_CALLCONV void     Perl_sv_unref_flags(pTHX_ SV* sv, U32 flags);
-PERL_CALLCONV void     Perl_sv_untaint(pTHX_ SV* sv);
-PERL_CALLCONV bool     Perl_sv_upgrade(pTHX_ SV* sv, U32 mt);
-PERL_CALLCONV void     Perl_sv_usepvn(pTHX_ SV* sv, char* ptr, STRLEN len);
-PERL_CALLCONV void     Perl_sv_vcatpvfn(pTHX_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted);
-PERL_CALLCONV void     Perl_sv_vsetpvfn(pTHX_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted);
+PERL_CALLCONV int      Perl_sv_unmagic(pTHX_ SV* sv, int type)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_unref(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_unref_flags(pTHX_ SV* sv, U32 flags)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_untaint(pTHX_ SV* sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV bool     Perl_sv_upgrade(pTHX_ SV* sv, U32 mt)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_usepvn(pTHX_ SV* sv, char* ptr, STRLEN len)
+                       __attribute__((nonnull(pTHX_1)));
+
+PERL_CALLCONV void     Perl_sv_vcatpvfn(pTHX_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
+PERL_CALLCONV void     Perl_sv_vsetpvfn(pTHX_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV NV       Perl_str_to_version(pTHX_ SV *sv);
 PERL_CALLCONV SV*      Perl_swash_init(pTHX_ const char* pkg, const char* name, SV* listsv, I32 minbits, I32 none);
 PERL_CALLCONV UV       Perl_swash_fetch(pTHX_ SV *sv, const U8 *ptr, bool do_utf8);
 PERL_CALLCONV void     Perl_taint_env(pTHX);
 PERL_CALLCONV void     Perl_taint_proper(pTHX_ const char* f, const char* s);
-PERL_CALLCONV UV       Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, SV **swash, const char *normal, const char *special);
-PERL_CALLCONV UV       Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
-PERL_CALLCONV UV       Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
-PERL_CALLCONV UV       Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
-PERL_CALLCONV UV       Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
+PERL_CALLCONV UV       Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, SV **swash, const char *normal, const char *special)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
+PERL_CALLCONV UV       Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
+PERL_CALLCONV UV       Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
+PERL_CALLCONV UV       Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
+PERL_CALLCONV UV       Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+                       __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 #if defined(UNLINK_ALL_VERSIONS)
 PERL_CALLCONV I32      Perl_unlnk(pTHX_ char* f);
 #endif
@@ -916,14 +1416,18 @@ PERL_CALLCONV U8*        Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8 *d, I32 bytelen, I
 PERL_CALLCONV STRLEN   Perl_utf8_length(pTHX_ const U8* s, const U8 *e)
                        __attribute__((pure))
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV IV       Perl_utf8_distance(pTHX_ const U8 *a, const U8 *b)
                        __attribute__((pure))
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV U8*      Perl_utf8_hop(pTHX_ const U8 *s, I32 off)
                        __attribute__((pure))
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV U8*      Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *len)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV U8*      Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *len, bool *is_utf8);
 PERL_CALLCONV U8*      Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *len);
 PERL_CALLCONV UV       Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN* retlen);
@@ -932,12 +1436,16 @@ PERL_CALLCONV UV Perl_utf8n_to_uvchr(pTHX_ const U8 *s, STRLEN curlen, STRLEN* r
 PERL_CALLCONV UV       Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN* retlen, U32 flags);
 PERL_CALLCONV U8*      Perl_uvchr_to_utf8(pTHX_ U8 *d, UV uv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV U8*      Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV U8*      Perl_uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV U8*      Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV char*    Perl_pv_uni_display(pTHX_ SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim, UV flags);
 PERL_CALLCONV char*    Perl_sv_uni_display(pTHX_ SV *dsv, SV *ssv, STRLEN pvlim, UV flags);
 PERL_CALLCONV void     Perl_vivify_defelem(pTHX_ SV* sv);
@@ -950,9 +1458,11 @@ PERL_CALLCONV void        Perl_report_evil_fh(pTHX_ const GV *gv, const IO *io, I32 op)
 PERL_CALLCONV void     Perl_report_uninit(pTHX_ SV* uninit_sv);
 PERL_CALLCONV void     Perl_warn(pTHX_ const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_1,pTHX_2);
+
 PERL_CALLCONV void     Perl_vwarn(pTHX_ const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_warner(pTHX_ U32 err, const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_2,pTHX_3);
+
 PERL_CALLCONV void     Perl_vwarner(pTHX_ U32 err, const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_watch(pTHX_ char** addr);
 PERL_CALLCONV I32      Perl_whichsig(pTHX_ const char* sig);
@@ -966,11 +1476,17 @@ PERL_CALLCONV void       Perl_dump_mstats(pTHX_ char* s);
 PERL_CALLCONV int      Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int level);
 #endif
 PERL_CALLCONV Malloc_t Perl_safesysmalloc(MEM_SIZE nbytes)
-                       __attribute__((malloc)) __attribute__((warn_unused_result));
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV Malloc_t Perl_safesyscalloc(MEM_SIZE elements, MEM_SIZE size)
-                       __attribute__((malloc)) __attribute__((warn_unused_result));
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV Malloc_t Perl_safesysrealloc(Malloc_t where, MEM_SIZE nbytes)
-                       __attribute__((malloc)) __attribute__((warn_unused_result));
+                       __attribute__((malloc))
+                       __attribute__((warn_unused_result));
+
 PERL_CALLCONV Free_t   Perl_safesysfree(Malloc_t where);
 #if defined(PERL_GLOBAL_STRUCT)
 PERL_CALLCONV struct perl_vars *       Perl_GetVars(pTHX);
@@ -981,12 +1497,14 @@ PERL_CALLCONV int        Perl_runops_standard(pTHX);
 PERL_CALLCONV int      Perl_runops_debug(pTHX);
 PERL_CALLCONV void     Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_2,pTHX_3);
+
 PERL_CALLCONV void     Perl_sv_vcatpvf_mg(pTHX_ SV* sv, const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_sv_catpv_mg(pTHX_ SV *sv, const char *ptr);
 PERL_CALLCONV void     Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
 PERL_CALLCONV void     Perl_sv_catsv_mg(pTHX_ SV *dstr, SV *sstr);
 PERL_CALLCONV void     Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_2,pTHX_3);
+
 PERL_CALLCONV void     Perl_sv_vsetpvf_mg(pTHX_ SV* sv, const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_sv_setiv_mg(pTHX_ SV *sv, IV i);
 PERL_CALLCONV void     Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv);
@@ -1000,6 +1518,7 @@ PERL_CALLCONV MGVTBL*     Perl_get_vtbl(pTHX_ int vtbl_id);
 PERL_CALLCONV char*    Perl_pv_display(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim);
 PERL_CALLCONV void     Perl_dump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
                        __attribute__format__(__printf__,pTHX_3,pTHX_4);
+
 PERL_CALLCONV void     Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args);
 PERL_CALLCONV void     Perl_do_gv_dump(pTHX_ I32 level, PerlIO *file, const char *name, GV *sv);
 PERL_CALLCONV void     Perl_do_gvgv_dump(pTHX_ I32 level, PerlIO *file, const char *name, GV *sv);
@@ -1027,9 +1546,12 @@ PERL_CALLCONV SV*        Perl_sv_rvweaken(pTHX_ SV *sv);
 PERL_CALLCONV int      Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg);
 PERL_CALLCONV OP*      Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block);
 PERL_CALLCONV CV*      Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block);
-PERL_CALLCONV void     Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) __attribute__((noreturn));
+PERL_CALLCONV void     Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
+                       __attribute__((noreturn));
+
 PERL_CALLCONV OP *     Perl_my_attrs(pTHX_ OP *o, OP *attrs)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_boot_core_xsutils(pTHX);
 #if defined(USE_ITHREADS)
 PERL_CALLCONV PERL_CONTEXT*    Perl_cx_dup(pTHX_ PERL_CONTEXT* cx, I32 ix, I32 max, CLONE_PARAMS* param);
@@ -1050,10 +1572,13 @@ PERL_CALLCONV void      Perl_sys_intern_dup(pTHX_ struct interp_intern* src, struct i
 PERL_CALLCONV PTR_TBL_t*       Perl_ptr_table_new(pTHX);
 PERL_CALLCONV void*    Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV void     Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldsv, void *newsv)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl);
 PERL_CALLCONV void     Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl);
 #endif
@@ -1064,9 +1589,11 @@ PERL_CALLCONV void       Perl_sys_intern_init(pTHX);
 
 PERL_CALLCONV char *   Perl_custom_op_name(pTHX_ const OP* op)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV char *   Perl_custom_op_desc(pTHX_ const OP* op)
                        __attribute__((nonnull(pTHX_1)));
 
+
 #if defined(PERL_COPY_ON_WRITE)
 PERL_CALLCONV int      Perl_sv_release_IVX(pTHX_ SV *sv);
 #endif
@@ -1079,12 +1606,24 @@ PERL_CALLCONV int       Perl_nothreadhook(pTHX);
 END_EXTERN_C
 
 #if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-STATIC I32     S_do_trans_simple(pTHX_ SV *sv);
-STATIC I32     S_do_trans_count(pTHX_ SV *sv);
-STATIC I32     S_do_trans_complex(pTHX_ SV *sv);
-STATIC I32     S_do_trans_simple_utf8(pTHX_ SV *sv);
-STATIC I32     S_do_trans_count_utf8(pTHX_ SV *sv);
-STATIC I32     S_do_trans_complex_utf8(pTHX_ SV *sv);
+STATIC I32     S_do_trans_simple(pTHX_ SV *sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC I32     S_do_trans_count(pTHX_ SV *sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC I32     S_do_trans_complex(pTHX_ SV *sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC I32     S_do_trans_simple_utf8(pTHX_ SV *sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC I32     S_do_trans_count_utf8(pTHX_ SV *sv)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC I32     S_do_trans_complex_utf8(pTHX_ SV *sv)
+                       __attribute__((nonnull(pTHX_1)));
+
 #endif
 
 #if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
@@ -1102,7 +1641,9 @@ STATIC HEK*       S_save_hek_flags(pTHX_ const char *str, I32 len, U32 hash, int flags
 STATIC void    S_hv_magic_check(pTHX_ HV *hv, bool *needs_copy, bool *needs_store);
 STATIC void    S_unshare_hek_or_pvn(pTHX_ HEK* hek, const char* sv, I32 len, U32 hash);
 STATIC HEK*    S_share_hek_flags(pTHX_ const char* sv, I32 len, U32 hash, int flags);
-STATIC void    S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen, const char *msg) __attribute__((noreturn));
+STATIC void    S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen, const char *msg)
+                       __attribute__((noreturn));
+
 #endif
 
 #if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
@@ -1148,7 +1689,9 @@ STATIC void       S_init_main_stash(pTHX);
 STATIC void    S_init_perllib(pTHX);
 STATIC void    S_init_postdump_symbols(pTHX_ int, char **, char **);
 STATIC void    S_init_predump_symbols(pTHX);
-STATIC void    S_my_exit_jump(pTHX) __attribute__((noreturn));
+STATIC void    S_my_exit_jump(pTHX)
+                       __attribute__((noreturn));
+
 STATIC void    S_nuke_stacks(pTHX);
 STATIC void    S_open_script(pTHX_ const char *scriptname, bool dosearch, SV *sv);
 STATIC void    S_usage(pTHX_ const char *name);
@@ -1157,7 +1700,9 @@ STATIC void       S_validate_suid(pTHX_ const char *validarg, const char *scriptname);
 STATIC int     S_fd_on_nosuid_fs(pTHX_ int fd);
 #  endif
 STATIC void*   S_parse_body(pTHX_ char **env, XSINIT_t xsinit);
-STATIC void    S_run_body(pTHX_ I32 oldscope) __attribute__((noreturn));
+STATIC void    S_run_body(pTHX_ I32 oldscope)
+                       __attribute__((noreturn));
+
 STATIC void    S_call_body(pTHX_ const OP *myop, bool is_eval);
 STATIC void*   S_call_list_body(pTHX_ CV *cv);
 #endif
@@ -1171,18 +1716,25 @@ STATIC I32      S_unpack_rec(pTHX_ struct tempsym* symptr, const char *s, const char
 STATIC SV **   S_pack_rec(pTHX_ SV *cat, struct tempsym* symptr, SV **beglist, SV **endlist);
 STATIC SV*     S_mul128(pTHX_ SV *sv, U8 m)
                        __attribute__((nonnull(pTHX_1)));
+
 STATIC I32     S_measure_struct(pTHX_ struct tempsym* symptr)
                        __attribute__((nonnull(pTHX_1)));
+
 STATIC bool    S_next_symbol(pTHX_ struct tempsym* symptr)
                        __attribute__((nonnull(pTHX_1)));
+
 STATIC SV*     S_is_an_int(pTHX_ const char *s, STRLEN l)
                        __attribute__((nonnull(pTHX_1)));
+
 STATIC int     S_div128(pTHX_ SV *pnum, bool *done)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 STATIC const char *    S_group_end(pTHX_ const char *pat, const char *patend, char ender)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 STATIC const char *    S_get_num(pTHX_ const char *ppat, I32 *lenptr)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 #endif
 
 #if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
@@ -1194,6 +1746,7 @@ STATIC bool       S_num_overflow(NV value, I32 fldsize, I32 frcsize);
 STATIC I32     S_dopoptoeval(pTHX_ I32 startingblock);
 STATIC I32     S_dopoptolabel(pTHX_ const char *label)
                        __attribute__((nonnull(pTHX_1)));
+
 STATIC I32     S_dopoptoloop(pTHX_ I32 startingblock);
 STATIC I32     S_dopoptosub(pTHX_ I32 startingblock);
 STATIC I32     S_dopoptosub_at(pTHX_ PERL_CONTEXT* cxstk, I32 startingblock);
@@ -1202,6 +1755,7 @@ STATIC OP*        S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq);
 STATIC PerlIO *        S_doopen_pm(pTHX_ const char *name, const char *mode);
 STATIC bool    S_path_is_absolute(pTHX_ const char *name)
                        __attribute__((nonnull(pTHX_1)));
+
 #endif
 
 #if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
@@ -1246,7 +1800,9 @@ STATIC void       S_cl_and(pTHX_ struct regnode_charclass_class *cl, struct regnode_ch
 STATIC void    S_cl_or(pTHX_ struct RExC_state_t*, struct regnode_charclass_class *cl, struct regnode_charclass_class *or_with);
 STATIC I32     S_study_chunk(pTHX_ struct RExC_state_t*, regnode **scanp, I32 *deltap, regnode *last, struct scan_data_t *data, U32 flags, U32 depth);
 STATIC I32     S_add_data(pTHX_ struct RExC_state_t*, I32 n, const char *s);
-STATIC void    S_re_croak2(pTHX_ const char* pat1, const char* pat2, ...) __attribute__((noreturn));
+STATIC void    S_re_croak2(pTHX_ const char* pat1, const char* pat2, ...)
+                       __attribute__((noreturn));
+
 STATIC I32     S_regpposixcc(pTHX_ struct RExC_state_t*, I32 value);
 STATIC void    S_checkposixcc(pTHX_ struct RExC_state_t*);
 
@@ -1351,10 +1907,18 @@ STATIC char*    S_force_version(pTHX_ char *start, int guessing);
 STATIC char*   S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack, int allow_tick);
 STATIC SV*     S_tokeq(pTHX_ SV *sv);
 STATIC int     S_pending_ident(pTHX);
-STATIC char*   S_scan_const(pTHX_ char *start);
-STATIC char*   S_scan_formline(pTHX_ char *s);
-STATIC char*   S_scan_heredoc(pTHX_ char *s);
-STATIC char*   S_scan_ident(pTHX_ char *s, char *send, char *dest, STRLEN destlen, I32 ck_uni);
+STATIC char*   S_scan_const(pTHX_ char *start)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC char*   S_scan_formline(pTHX_ char *s)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC char*   S_scan_heredoc(pTHX_ char *s)
+                       __attribute__((nonnull(pTHX_1)));
+
+STATIC char*   S_scan_ident(pTHX_ char *s, const char *send, char *dest, STRLEN destlen, I32 ck_uni)
+                       __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3)));
+
 STATIC char*   S_scan_inputsymbol(pTHX_ char *start);
 STATIC char*   S_scan_pat(pTHX_ char *start, I32 type);
 STATIC char*   S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims);
@@ -1363,13 +1927,17 @@ STATIC char*    S_scan_trans(pTHX_ char *start);
 STATIC char*   S_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp);
 STATIC char*   S_skipspace(pTHX_ char *s);
 STATIC char*   S_swallow_bom(pTHX_ U8 *s);
-STATIC void    S_checkcomma(pTHX_ char *s, char *name, const char *what);
+STATIC void    S_checkcomma(pTHX_ char *s, const char *name, const char *what)
+                       __attribute__((nonnull(pTHX_1,pTHX_2,pTHX_3)));
+
 STATIC void    S_force_ident(pTHX_ const char *s, int kind);
 STATIC void    S_incline(pTHX_ char *s);
 STATIC int     S_intuit_method(pTHX_ char *s, GV *gv);
 STATIC int     S_intuit_more(pTHX_ char *s);
 STATIC I32     S_lop(pTHX_ I32 f, int x, char *s);
-STATIC void    S_missingterm(pTHX_ char *s) __attribute__((noreturn));
+STATIC void    S_missingterm(pTHX_ char *s)
+                       __attribute__((noreturn));
+
 STATIC void    S_no_op(pTHX_ const char *what, char *s);
 STATIC void    S_set_csh(pTHX);
 STATIC I32     S_sublex_done(pTHX);
@@ -1416,18 +1984,25 @@ START_EXTERN_C
 
 PERL_CALLCONV void     Perl_sv_setsv_flags(pTHX_ SV* dsv, SV* ssv, I32 flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV void     Perl_sv_catpvn_flags(pTHX_ SV* sv, const char* ptr, STRLEN len, I32 flags)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV void     Perl_sv_catsv_flags(pTHX_ SV* dsv, SV* ssv, I32 flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV STRLEN   Perl_sv_utf8_upgrade_flags(pTHX_ SV *sv, I32 flags)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV char*    Perl_sv_pvn_force_flags(pTHX_ SV* sv, STRLEN* lp, I32 flags)
                        __attribute__((nonnull(pTHX_2)));
+
 PERL_CALLCONV void     Perl_sv_copypv(pTHX_ SV* dsv, SV* ssv)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV char*    Perl_my_atof2(pTHX_ const char *s, NV* value)
                        __attribute__((nonnull(pTHX_1,pTHX_2)));
+
 PERL_CALLCONV int      Perl_my_socketpair(int family, int type, int protocol, int fd[2]);
 #ifdef PERL_COPY_ON_WRITE
 PERL_CALLCONV SV*      Perl_sv_setsv_cow(pTHX_ SV* dsv, SV* ssv);
@@ -1469,6 +2044,7 @@ PERL_CALLCONV PADLIST*    Perl_pad_new(pTHX_ int flags);
 PERL_CALLCONV void     Perl_pad_undef(pTHX_ CV* cv);
 PERL_CALLCONV PADOFFSET        Perl_pad_add_name(pTHX_ const char *name, HV* typestash, HV* ourstash, bool clone)
                        __attribute__((nonnull(pTHX_1)));
+
 PERL_CALLCONV PADOFFSET        Perl_pad_add_anon(pTHX_ SV* sv, OPCODE op_type);
 PERL_CALLCONV void     Perl_pad_check_dup(pTHX_ const char* name, bool is_our, const HV* ourstash);
 #ifdef DEBUGGING
diff --git a/sv.c b/sv.c
index a20eae8..9dfbadb 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -349,9 +349,9 @@ S_more_sv(pTHX)
         PL_nice_chunk_size = 0;
     }
     else {
-       char *chunk; /* must use New here to match call to Safefree()      */
-       New(704,chunk,PERL_ARENA_SIZE,char);   /*  in sv_free_arenas()     */
-       sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
+       char *chunk;                /* must use New here to match call to */
+       New(704,chunk,1008,char);   /* Safefree() in sv_free_arenas()     */
+       sv_add_arena(chunk, 1008, 0);
     }
     uproot_SV(sv);
     return sv;
@@ -673,7 +673,6 @@ S_find_hash_subscript(pTHX_ HV *hv, SV* val)
 {
     dVAR;
     register HE **array;
-    register HE *entry;
     I32 i;
 
     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
@@ -683,6 +682,7 @@ S_find_hash_subscript(pTHX_ HV *hv, SV* val)
     array = HvARRAY(hv);
 
     for (i=HvMAX(hv); i>0; i--) {
+       register HE *entry;
        for (entry = array[i]; entry; entry = HeNEXT(entry)) {
            if (HeVAL(entry) != val)
                continue;
@@ -835,8 +835,8 @@ S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
     case OP_PADAV:
     case OP_PADHV:
       {
-       bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
-       bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
+       const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
+       const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
        I32 index = 0;
        SV *keysv = Nullsv;
        int subscript_type = FUV_SUBSCRIPT_WITHIN;
@@ -986,9 +986,9 @@ S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
                                                keysv, 0, FUV_SUBSCRIPT_HASH);
            }
            else {
-               I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
+               const I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
                if (index >= 0)
-               return S_varname(aTHX_ gv, "@", o->op_targ,
+                   return S_varname(aTHX_ gv, "@", o->op_targ,
                                        Nullsv, index, FUV_SUBSCRIPT_ARRAY);
            }
            if (match)
@@ -2652,7 +2652,7 @@ Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
     }
     else if (SvPOKp(sv) && SvLEN(sv)) {
        UV value;
-       int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
+       const int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
        /* We want to avoid a possible problem when we cache an IV which
           may be later translated to an NV, and the resulting NV is not
           the same as the direct translation of the initial string
@@ -2955,7 +2955,7 @@ Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
     }
     else if (SvPOKp(sv) && SvLEN(sv)) {
        UV value;
-       int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
+       const int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
 
        /* We want to avoid a possible problem when we cache a UV which
           may be later translated to an NV, and the resulting NV is not
@@ -3205,7 +3205,7 @@ Perl_sv_2nv(pTHX_ register SV *sv)
     }
     else if (SvPOKp(sv) && SvLEN(sv)) {
        UV value;
-       int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
+       const int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
        if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
            not_a_number(sv);
 #ifdef NV_PRESERVES_UV
@@ -5051,7 +5051,7 @@ refer to the same chunk of data.
 */
 
 void
-Perl_sv_chop(pTHX_ register SV *sv, register char *ptr)
+Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
 {
     register STRLEN delta;
     if (!ptr || !SvPOKp(sv))
@@ -5063,7 +5063,7 @@ Perl_sv_chop(pTHX_ register SV *sv, register char *ptr)
 
     if (!SvOOK(sv)) {
        if (!SvLEN(sv)) { /* make copy of shared string */
-           char *pvx = SvPVX(sv);
+           const char *pvx = SvPVX(sv);
            STRLEN len = SvCUR(sv);
            SvGROW(sv, len + 1);
            Move(pvx,SvPVX(sv),len,char);
@@ -5116,9 +5116,8 @@ void
 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
 {
     STRLEN dlen;
-    char *dstr;
+    const char *dstr = SvPV_force_flags(dsv, dlen, flags);
 
-    dstr = SvPV_force_flags(dsv, dlen, flags);
     SvGROW(dsv, dlen + slen + 1);
     if (sstr == dstr)
        sstr = SvPVX(dsv);
@@ -6961,7 +6960,7 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
         */
        Stat_t st;
        if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
-           Off_t offset = PerlIO_tell(fp);
+           const Off_t offset = PerlIO_tell(fp);
            if (offset != (Off_t) -1 && st.st_size + append > offset) {
                (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
            }
diff --git a/toke.c b/toke.c
index a50f625..4e7f695 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -278,10 +278,10 @@ S_tokereport(pTHX_ const char* s, I32 rv)
     if (DEBUG_T_TEST) {
        const char *name = Nullch;
        enum token_type type = TOKENTYPE_NONE;
-       struct debug_tokens *p;
+       const struct debug_tokens *p;
        SV* report = newSVpvn("<== ", 4);
 
-       for (p = (struct debug_tokens *)debug_tokens; p->token; p++) {
+       for (p = debug_tokens; p->token; p++) {
            if (p->token == (int)rv) {
                name = p->name;
                type = p->type;
@@ -384,7 +384,7 @@ S_no_op(pTHX_ const char *what, char *s)
            Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
                    "\t(Missing semicolon on previous line?)\n");
        else if (PL_oldoldbufptr && isIDFIRST_lazy_if(PL_oldoldbufptr,UTF)) {
-           char *t;
+           const char *t;
            for (t = PL_oldoldbufptr; *t && (isALNUM_lazy_if(t,UTF) || *t == ':'); t++) ;
            if (t < PL_bufptr && isSPACE(*t))
                Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
@@ -487,8 +487,8 @@ S_depcom(pTHX)
 static void
 strip_return(SV *sv)
 {
-    register char *s = SvPVX(sv);
-    register char *e = s + SvCUR(sv);
+    register const char *s = SvPVX(sv);
+    register const char *e = s + SvCUR(sv);
     /* outer loop optimized to do nothing if there are no CR-LFs */
     while (s < e) {
        if (*s++ == '\r' && *s == '\n') {
@@ -509,7 +509,7 @@ strip_return(SV *sv)
 STATIC I32
 S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen)
 {
-    I32 count = FILTER_READ(idx+1, sv, maxlen);
+    const I32 count = FILTER_READ(idx+1, sv, maxlen);
     if (count > 0 && !maxlen)
        strip_return(sv);
     return count;
@@ -967,9 +967,9 @@ Perl_str_to_version(pTHX_ SV *sv)
     NV retval = 0.0;
     NV nshift = 1.0;
     STRLEN len;
-    char *start = SvPVx(sv,len);
+    const char *start = SvPVx(sv,len);
+    const char *end = start + len;
     bool utf = SvUTF8(sv) ? TRUE : FALSE;
-    char *end = start + len;
     while (start < end) {
        STRLEN skip;
        UV n;
@@ -1114,7 +1114,7 @@ S_tokeq(pTHX_ SV *sv)
 STATIC I32
 S_sublex_start(pTHX)
 {
-    register I32 op_type = yylval.ival;
+    const register I32 op_type = yylval.ival;
 
     if (op_type == OP_NULL) {
        yylval.opval = PL_lex_op;
@@ -1127,11 +1127,8 @@ S_sublex_start(pTHX)
        if (SvTYPE(sv) == SVt_PVIV) {
            /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
            STRLEN len;
-           char *p;
-           SV *nsv;
-
-           p = SvPV(sv, len);
-           nsv = newSVpvn(p, len);
+           const char *p = SvPV(sv, len);
+           SV * const nsv = newSVpvn(p, len);
            if (SvUTF8(sv))
                SvUTF8_on(nsv);
            SvREFCNT_dec(sv);
@@ -1910,7 +1907,7 @@ S_intuit_more(pTHX_ register char *s)
        int weight = 2;         /* let's weigh the evidence */
        char seen[256];
        unsigned char un_char = 255, last_un_char;
-       char *send = strchr(s,']');
+       const char *send = strchr(s,']');
        char tmpbuf[sizeof PL_tokenbuf * 4];
 
        if (!send)              /* has to be an expression */
@@ -2038,7 +2035,7 @@ S_intuit_method(pTHX_ char *start, GV *gv)
        if (GvIO(gv))
            return 0;
        if ((cv = GvCVu(gv))) {
-           char *proto = SvPVX(cv);
+           const char *proto = SvPVX(cv);
            if (proto) {
                if (*proto == ';')
                    proto++;
@@ -2190,7 +2187,7 @@ Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
        if (maxlen) {
            /* Want a block */
            int len ;
-           int old_len = SvCUR(buf_sv) ;
+           const int old_len = SvCUR(buf_sv);
 
            /* ensure buf_sv is large enough */
            SvGROW(buf_sv, (STRLEN)(old_len + maxlen)) ;
@@ -2366,11 +2363,9 @@ Perl_yylex(pTHX)
 #endif
        /* handle \E or end of string */
                if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
-           char oldmod;
-
            /* if at a \E */
            if (PL_lex_casemods) {
-               oldmod = PL_lex_casestack[--PL_lex_casemods];
+               const char oldmod = PL_lex_casestack[--PL_lex_casemods];
                PL_lex_casestack[PL_lex_casemods] = '\0';
 
                if (PL_bufptr != PL_bufend
@@ -2773,8 +2768,8 @@ Perl_yylex(pTHX)
                    else {
                        STRLEN blen;
                        STRLEN llen;
-                       char *bstart = SvPV(CopFILESV(PL_curcop),blen);
-                       char *lstart = SvPV(x,llen);
+                       const char *bstart = SvPV(CopFILESV(PL_curcop),blen);
+                       const char *lstart = SvPV(x,llen);
                        if (llen < blen) {
                            bstart += blen - llen;
                            if (strnEQ(bstart, lstart, llen) && bstart[-1] == '/') {
@@ -2820,7 +2815,7 @@ Perl_yylex(pTHX)
                 * contains the start of the Perl program.
                 */
                if (d && *s != '#') {
-                   char *c = ipath;
+                   const char *c = ipath;
                    while (*c && !strchr("; \t\r\n\f\v#", *c))
                        c++;
                    if (c < d)
@@ -2862,18 +2857,18 @@ Perl_yylex(pTHX)
                }
 #endif
                if (d) {
-                   U32 oldpdb = PL_perldb;
-                   bool oldn = PL_minus_n;
-                   bool oldp = PL_minus_p;
+                   const U32 oldpdb = PL_perldb;
+                   const bool oldn = PL_minus_n;
+                   const bool oldp = PL_minus_p;
 
                    while (*d && !isSPACE(*d)) d++;
                    while (SPACE_OR_TAB(*d)) d++;
 
                    if (*d++ == '-') {
-                       bool switches_done = PL_doswitches;
+                       const bool switches_done = PL_doswitches;
                        do {
                            if (*d == 'M' || *d == 'm' || *d == 'C') {
-                               char *m = d;
+                               const char *m = d;
                                while (*d && !isSPACE(*d)) d++;
                                Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
                                      (int)(d - m), m);
@@ -3221,7 +3216,7 @@ Perl_yylex(pTHX)
            }
            tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}(' for vi */
            if (*s != ';' && *s != '}' && *s != tmp && (tmp != '=' || *s != ')')) {
-               char q = ((*s == '\'') ? '"' : '\'');
+               const char q = ((*s == '\'') ? '"' : '\'');
                /* If here for an expression, and parsed no attrs, back off. */
                if (tmp == '=' && !attrs) {
                    s = PL_bufptr;
@@ -3313,7 +3308,7 @@ Perl_yylex(pTHX)
                while (d < PL_bufend && SPACE_OR_TAB(*d))
                    d++;
                if (*d == '}') {
-                   char minus = (PL_tokenbuf[0] == '-');
+                   const char minus = (PL_tokenbuf[0] == '-');
                    s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
                    if (minus)
                        force_next('-');
@@ -3331,7 +3326,7 @@ Perl_yylex(pTHX)
            PL_expect = XSTATE;
            break;
        default: {
-               char *t;
+               const char *t;
                if (PL_oldoldbufptr == PL_last_lop)
                    PL_lex_brackstack[PL_lex_brackets++] = XTERM;
                else
@@ -3377,7 +3372,7 @@ Perl_yylex(pTHX)
                                && !isALNUM(*t))))
                    {
                        /* skip q//-like construct */
-                       char *tmps;
+                       const char *tmps;
                        char open, close, term;
                        I32 brackets = 1;
 
@@ -3543,7 +3538,7 @@ Perl_yylex(pTHX)
            goto retry;
        }
        if (PL_lex_brackets < PL_lex_formbrack) {
-           char *t;
+           const char *t;
 #ifdef PERL_STRICT_CR
            for (t = s; SPACE_OR_TAB(*t); t++) ;
 #else
@@ -3565,7 +3560,7 @@ Perl_yylex(pTHX)
              * warn on m:!=~\s+([/?]|[msy]\W|tr\W): */
 
             if (*s == '~' && ckWARN(WARN_SYNTAX)) {
-                char *t = s+1;
+               const char *t = s+1;
 
                 while (t < PL_bufend && isSPACE(*t))
                     ++t;
@@ -3687,9 +3682,9 @@ Perl_yylex(pTHX)
                    (t = strchr(s, '}')) && (t = strchr(t, '=')))
                {
                    char tmpbuf[sizeof PL_tokenbuf];
-                   STRLEN len;
                    for (t++; isSPACE(*t); t++) ;
                    if (isIDFIRST_lazy_if(t,UTF)) {
+                       STRLEN len;
                        t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
                        for (; isSPACE(*t); t++) ;
                        if (*t == ';' && get_cv(tmpbuf, FALSE))
@@ -3702,7 +3697,7 @@ Perl_yylex(pTHX)
 
        PL_expect = XOPERATOR;
        if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
-           bool islop = (PL_last_lop == PL_oldoldbufptr);
+           const bool islop = (PL_last_lop == PL_oldoldbufptr);
            if (!islop || PL_last_lop_op == OP_GREPSTART)
                PL_expect = XOPERATOR;
            else if (strchr("$@\"'`q", *s))
@@ -3766,7 +3761,7 @@ Perl_yylex(pTHX)
            /* Warn about @ where they meant $. */
            if (ckWARN(WARN_SYNTAX)) {
                if (*s == '[' || *s == '{') {
-                   char *t = s + 1;
+                   const char *t = s + 1;
                    while (*t && (isALNUM_lazy_if(t,UTF) || strchr(" \t$#+-'\"", *t)))
                        t++;
                    if (*t == '}' || *t == ']') {
@@ -3925,9 +3920,7 @@ Perl_yylex(pTHX)
 
     case 'v':
        if (isDIGIT(s[1]) && PL_expect != XOPERATOR) {
-           char *start = s;
-           start++;
-           start++;
+           char *start = s + 2;
            while (isDIGIT(*start) || *start == '_')
                start++;
            if (*start == '.' && isDIGIT(start[1])) {
@@ -3938,7 +3931,7 @@ Perl_yylex(pTHX)
            else if (!isALPHA(*start) && (PL_expect == XTERM
                        || PL_expect == XREF || PL_expect == XSTATE
                        || PL_expect == XTERMORDORDOR)) {
-               char c = *start;
+               const char c = *start;
                GV *gv;
                *start = '\0';
                gv = gv_fetchpv(s, FALSE, SVt_PVCV);
@@ -4094,7 +4087,7 @@ Perl_yylex(pTHX)
          just_a_word: {
                SV *sv;
                int pkgname = 0;
-               char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
+               const char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
 
                /* Get the rest if it looks like a package qualifier */
 
@@ -4354,7 +4347,7 @@ Perl_yylex(pTHX)
                IoIFP(GvIOp(gv)) = PL_rsfp;
 #if defined(HAS_FCNTL) && defined(F_SETFD)
                {
-                   int fd = PerlIO_fileno(PL_rsfp);
+                   const int fd = PerlIO_fileno(PL_rsfp);
                    fcntl(fd,F_SETFD,fd >= 3);
                }
 #endif
@@ -4873,7 +4866,7 @@ Perl_yylex(pTHX)
        case KEY_open:
            s = skipspace(s);
            if (isIDFIRST_lazy_if(s,UTF)) {
-               char *t;
+               const char *t;
                for (d = s; isALNUM_lazy_if(d,UTF); d++) ;
                for (t=d; *t && isSPACE(*t); t++) ;
                if ( *t && strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_PRECEDENCE)
@@ -4953,7 +4946,7 @@ Perl_yylex(pTHX)
                    SV *sv;
                    for (; isSPACE(*d) && len; --len, ++d) ;
                    if (len) {
-                       char *b = d;
+                       const char *b = d;
                        if (!warned && ckWARN(WARN_QW)) {
                            for (; !isSPACE(*d) && len; --len, ++d) {
                                if (*d == ',') {
@@ -5211,7 +5204,7 @@ Perl_yylex(pTHX)
                SSize_t tboffset = 0;
                expectation attrful;
                bool have_name, have_proto, bad_proto;
-               int key = tmp;
+               const int key = tmp;
 
                s = skipspace(s);
 
@@ -8893,9 +8886,9 @@ unknown:
 }
 
 STATIC void
-S_checkcomma(pTHX_ register char *s, char *name, const char *what)
+S_checkcomma(pTHX_ register char *s, const char *name, const char *what)
 {
-    char *w;
+    const char *w;
 
     if (*s == ' ' && s[1] == '(') {    /* XXX gotta be a better way */
        if (ckWARN(WARN_SYNTAX)) {
@@ -8927,7 +8920,7 @@ S_checkcomma(pTHX_ register char *s, char *name, const char *what)
            s++;
        if (*s == ',') {
            int kw;
-           *s = '\0';
+           *s = '\0'; /* XXX If we didn't do this, we could const a lot of toke.c */
            kw = keyword(w, s - w) || get_cv(w, FALSE) != 0;
            *s = ',';
            if (kw)
@@ -9079,7 +9072,7 @@ S_scan_word(pTHX_ register char *s, char *dest, STRLEN destlen, int allow_packag
 }
 
 STATIC char *
-S_scan_ident(pTHX_ register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
+S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRLEN destlen, I32 ck_uni)
 {
     register char *d;
     register char *e;
@@ -9154,7 +9147,7 @@ S_scan_ident(pTHX_ register char *s, register char *send, char *dest, STRLEN des
     if (bracket) {
        if (isSPACE(s[-1])) {
            while (s < send) {
-               char ch = *s++;
+               const char ch = *s++;
                if (!SPACE_OR_TAB(ch)) {
                    *d = ch;
                    break;
@@ -9258,9 +9251,8 @@ STATIC char *
 S_scan_pat(pTHX_ char *start, I32 type)
 {
     PMOP *pm;
-    char *s;
+    char *s = scan_str(start,FALSE,FALSE);
 
-    s = scan_str(start,FALSE,FALSE);
     if (!s)
        Perl_croak(aTHX_ "Search pattern not terminated");
 
@@ -9431,7 +9423,7 @@ S_scan_heredoc(pTHX_ register char *s)
     register char *d;
     register char *e;
     char *peek;
-    int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
+    const int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
 
     s += 2;
     d = PL_tokenbuf;
@@ -9903,7 +9895,7 @@ S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
                else {
                    /* handle quoted delimiters */
                    if (SvCUR(sv) > 1 && *(svlast-1) == '\\') {
-                       char *t;
+                       const char *t;
                        for (t = svlast-2; t >= SvPVX(sv) && *t == '\\';)
                            t--;
                        if ((svlast-1 - t) % 2) {
@@ -9919,10 +9911,11 @@ S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
                        cont = FALSE;
                    }
                    else {
-                       char *t, *w;
+                       const char *t;
+                       char *w;
                        if (!last)
                            last = SvPVX(sv);
-                       for (w = t = last; t < svlast; w++, t++) {
+                       for (t = w = last; t < svlast; w++, t++) {
                            /* At here, all closes are "was quoted" one,
                               so we don't check PL_multi_close. */
                            if (*t == '\\') {
@@ -10743,8 +10736,7 @@ Perl_yyerror(pTHX_ const char *s)
 STATIC char*
 S_swallow_bom(pTHX_ U8 *s)
 {
-    STRLEN slen;
-    slen = SvCUR(PL_linestr);
+    const STRLEN slen = SvCUR(PL_linestr);
     switch (s[0]) {
     case 0xFF:
        if (s[1] == 0xFE) {
@@ -10856,8 +10848,8 @@ restore_rsfp(pTHX_ void *f)
 static I32
 utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
 {
-    STRLEN old = SvCUR(sv);
-    I32 count = FILTER_READ(idx+1, sv, maxlen);
+    const STRLEN old = SvCUR(sv);
+    const I32 count = FILTER_READ(idx+1, sv, maxlen);
     DEBUG_P(PerlIO_printf(Perl_debug_log,
                          "utf16_textfilter(%p): %d %d (%d)\n",
                          utf16_textfilter, idx, maxlen, (int) count));
@@ -10877,8 +10869,8 @@ utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
 static I32
 utf16rev_textfilter(pTHX_ int idx, SV *sv, int maxlen)
 {
-    STRLEN old = SvCUR(sv);
-    I32 count = FILTER_READ(idx+1, sv, maxlen);
+    const STRLEN old = SvCUR(sv);
+    const I32 count = FILTER_READ(idx+1, sv, maxlen);
     DEBUG_P(PerlIO_printf(Perl_debug_log,
                          "utf16rev_textfilter(%p): %d %d (%d)\n",
                          utf16rev_textfilter, idx, maxlen, (int) count));
diff --git a/utf8.c b/utf8.c
index 0ac044e..b75ad23 100644 (file)
--- a/utf8.c
+++ b/utf8.c
@@ -1400,7 +1400,6 @@ The "normal" is a string like "ToLower" which means the swash
 UV
 Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, const char *normal, const char *special)
 {
-    UV uv1;
     U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
     STRLEN len = 0;
 
@@ -1408,7 +1407,7 @@ Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, const
     /* The NATIVE_TO_UNI() and UNI_TO_NATIVE() mappings
      * are necessary in EBCDIC, they are redundant no-ops
      * in ASCII-ish platforms, and hopefully optimized away. */
-    uv1 = NATIVE_TO_UNI(uv0);
+    const UV uv1 = NATIVE_TO_UNI(uv0);
     uvuni_to_utf8(tmpbuf, uv1);
 
     if (!*swashp) /* load on-demand */