From fdac8c4b6a76b1f9f55bfbb8ff41574787263d5f Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Tue, 31 May 2005 04:55:43 -0500 Subject: [PATCH] Integrate: [ 24670] Subject: [PATCH] SvPVX_const() - part 3 ... and const'ing Storable Date: Tue, 31 May 2005 09:55:43 -0500 Message-Id: <20050531145543.GA8051@mccoy.peters.homeunix.org> [ 24682] Subject: [PATCH] SvPVX_const() - patch #4 From: Steve Peters Date: Thu, 2 Jun 2005 13:41:35 -0500 Message-ID: <20050602184135.GA13682@mccoy.peters.homeunix.org> p4raw-link: @24682 on //depot/perl: 3f7c398ef4badd9c6ec5b40ea29141484c160f63 p4raw-link: @24670 on //depot/perl: aa07b2f68da542daf881aa4d73a68f7bc8c114b1 p4raw-id: //depot/maint-5.8/perl@25501 p4raw-integrated: from //depot/perl@25500 'merge in' ext/PerlIO/via/via.xs (@24526..) p4raw-integrated: from //depot/perl@24682 'edit in' sv.c (@24676..) 'ignore' embed.fnc proto.h (@24625..) 'merge in' pod/perlapi.pod (@24592..) regcomp.c regexec.c (@24666..) p4raw-integrated: from //depot/perl@24670 'copy in' ext/PerlIO/encoding/encoding.xs (@24248..) ext/Devel/DProf/DProf.xs (@24526..) 'edit in' pp_hot.c (@24594..) 'merge in' ext/POSIX/POSIX.xs (@24521..) ext/Data/Dumper/Dumper.xs (@24526..) ext/B/B.xs ext/Opcode/Opcode.xs (@24622..) scope.c (@24625..) pp_sys.c (@24666..) --- ext/B/B.xs | 4 +- ext/Data/Dumper/Dumper.xs | 42 +++++------ ext/Devel/DProf/DProf.xs | 4 +- ext/Opcode/Opcode.xs | 2 +- ext/POSIX/POSIX.xs | 4 +- ext/PerlIO/encoding/encoding.xs | 4 +- ext/PerlIO/via/via.xs | 2 +- pod/perlapi.pod | 6 +- pp_hot.c | 10 +-- pp_sys.c | 12 ++-- regcomp.c | 18 ++--- regexec.c | 34 ++++----- scope.c | 8 +-- sv.c | 156 ++++++++++++++++++++-------------------- 14 files changed, 153 insertions(+), 153 deletions(-) diff --git a/ext/B/B.xs b/ext/B/B.xs index 94d24eb..f24443f 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -1215,7 +1215,7 @@ SvPV(sv) CODE: ST(0) = sv_newmortal(); if( SvPOK(sv) ) { - sv_setpvn(ST(0), SvPVX(sv), SvCUR(sv)); + sv_setpvn(ST(0), SvPVX_const(sv), SvCUR(sv)); SvFLAGS(ST(0)) |= SvUTF8(sv); } else { @@ -1229,7 +1229,7 @@ SvPVBM(sv) B::PV sv CODE: ST(0) = sv_newmortal(); - sv_setpvn(ST(0), SvPVX(sv), + sv_setpvn(ST(0), SvPVX_const(sv), SvCUR(sv) + (SvTYPE(sv) == SVt_PVBM ? 257 : 0)); diff --git a/ext/Data/Dumper/Dumper.xs b/ext/Data/Dumper/Dumper.xs index 7f0fb10..cc4a130 100644 --- a/ext/Data/Dumper/Dumper.xs +++ b/ext/Data/Dumper/Dumper.xs @@ -6,8 +6,8 @@ static I32 num_q (char *s, STRLEN slen); static I32 esc_q (char *dest, char *src, STRLEN slen); static I32 esc_q_utf8 (pTHX_ SV *sv, char *src, STRLEN slen); -static SV *sv_x (pTHX_ SV *sv, char *str, STRLEN len, I32 n); -static I32 DD_dump (pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, +static SV *sv_x (pTHX_ SV *sv, const char *str, STRLEN len, I32 n); +static I32 DD_dump (pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv, AV *postav, I32 *levelp, I32 indent, SV *pad, SV *xpad, SV *apad, SV *sep, SV *pair, SV *freezer, SV *toaster, @@ -208,7 +208,7 @@ esc_q_utf8(pTHX_ SV* sv, register char *src, register STRLEN slen) /* append a repeated string to an SV */ static SV * -sv_x(pTHX_ SV *sv, register char *str, STRLEN len, I32 n) +sv_x(pTHX_ SV *sv, const char *str, STRLEN len, I32 n) { if (sv == Nullsv) sv = newSVpvn("", 0); @@ -239,7 +239,7 @@ sv_x(pTHX_ SV *sv, register char *str, STRLEN len, I32 n) * efficiency raisins.) Ugggh! */ static I32 -DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, +DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv, AV *postav, I32 *levelp, I32 indent, SV *pad, SV *xpad, SV *apad, SV *sep, SV *pair, SV *freezer, SV *toaster, I32 purity, I32 deepcopy, I32 quotekeys, SV *bless, I32 maxdepth, SV *sortkeys) @@ -268,12 +268,12 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, it. Warn on errors. */ if (SvOBJECT(SvRV(val)) && freezer && SvPOK(freezer) && SvCUR(freezer) && - gv_fetchmeth(SvSTASH(SvRV(val)), SvPVX(freezer), + gv_fetchmeth(SvSTASH(SvRV(val)), SvPVX_const(freezer), SvCUR(freezer), -1) != NULL) { dSP; ENTER; SAVETMPS; PUSHMARK(sp); XPUSHs(val); PUTBACK; - i = perl_call_method(SvPVX(freezer), G_EVAL|G_VOID); + i = perl_call_method(SvPVX_const(freezer), G_EVAL|G_VOID); SPAGAIN; if (SvTRUE(ERRSV)) warn("WARNING(Freezer method call failed): %"SVf"", ERRSV); @@ -316,9 +316,9 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, } else { if (name[0] == '@' || name[0] == '%') { - if ((SvPVX(othername))[0] == '\\' && - (SvPVX(othername))[1] == name[0]) { - sv_catpvn(retval, SvPVX(othername)+1, + if ((SvPVX_const(othername))[0] == '\\' && + (SvPVX_const(othername))[1] == name[0]) { + sv_catpvn(retval, SvPVX_const(othername)+1, SvCUR(othername)-1); } else { @@ -405,7 +405,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, } (*levelp)++; - ipad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp); + ipad = sv_x(aTHX_ Nullsv, SvPVX_const(xpad), SvCUR(xpad), *levelp); if (realtype <= SVt_PVBM) { /* scalar ref */ SV *namesv = newSVpvn("${", 2); @@ -413,7 +413,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, sv_catpvn(namesv, "}", 1); if (realpack) { /* blessed */ sv_catpvn(retval, "do{\\(my $o = ", 13); - DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, + DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv, postav, levelp, indent, pad, xpad, apad, sep, pair, freezer, toaster, purity, deepcopy, quotekeys, bless, maxdepth, sortkeys); @@ -421,7 +421,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, } /* plain */ else { sv_catpvn(retval, "\\", 1); - DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, + DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv, postav, levelp, indent, pad, xpad, apad, sep, pair, freezer, toaster, purity, deepcopy, quotekeys, bless, maxdepth, sortkeys); @@ -433,7 +433,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, sv_catpvn(namesv, name, namelen); sv_catpvn(namesv, "}", 1); sv_catpvn(retval, "\\", 1); - DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, + DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv, postav, levelp, indent, pad, xpad, apad, sep, pair, freezer, toaster, purity, deepcopy, quotekeys, bless, maxdepth, sortkeys); @@ -510,7 +510,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, sv_catpvn(retval, ",", 1); } if (ixmax >= 0) { - SV *opad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), (*levelp)-1); + SV *opad = sv_x(aTHX_ Nullsv, SvPVX_const(xpad), SvCUR(xpad), (*levelp)-1); sv_catsv(retval, totpad); sv_catsv(retval, opad); SvREFCNT_dec(opad); @@ -707,7 +707,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, else newapad = apad; - DD_dump(aTHX_ hval, SvPVX(sname), SvCUR(sname), retval, seenhv, + DD_dump(aTHX_ hval, SvPVX_const(sname), SvCUR(sname), retval, seenhv, postav, levelp, indent, pad, xpad, newapad, sep, pair, freezer, toaster, purity, deepcopy, quotekeys, bless, maxdepth, sortkeys); @@ -717,7 +717,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, SvREFCNT_dec(newapad); } if (i) { - SV *opad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp-1); + SV *opad = sv_x(aTHX_ Nullsv, SvPVX_const(xpad), SvCUR(xpad), *levelp-1); sv_catsv(retval, totpad); sv_catsv(retval, opad); SvREFCNT_dec(opad); @@ -863,7 +863,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, if (indent >= 2) (void)sv_x(aTHX_ newapad, " ", 1, SvCUR(postentry)); - DD_dump(aTHX_ e, SvPVX(nname), SvCUR(nname), postentry, + DD_dump(aTHX_ e, SvPVX_const(nname), SvCUR(nname), postentry, seenhv, postav, &nlevel, indent, pad, xpad, newapad, sep, pair, freezer, toaster, purity, deepcopy, quotekeys, bless, maxdepth, @@ -1047,7 +1047,7 @@ Data_Dumper_Dumpxs(href, ...) (void)SvOK_off(name); if (SvOK(name)) { - if ((SvPVX(name))[0] == '*') { + if ((SvPVX_const(name))[0] == '*') { if (SvROK(val)) { switch (SvTYPE(SvRV(val))) { case SVt_PVAV: @@ -1067,7 +1067,7 @@ Data_Dumper_Dumpxs(href, ...) else (SvPVX(name))[0] = '$'; } - else if ((SvPVX(name))[0] != '$') + else if ((SvPVX_const(name))[0] != '$') sv_insert(name, 0, 0, "$", 1); } else { @@ -1088,7 +1088,7 @@ Data_Dumper_Dumpxs(href, ...) else newapad = apad; - DD_dump(aTHX_ val, SvPVX(name), SvCUR(name), valstr, seenhv, + DD_dump(aTHX_ val, SvPVX_const(name), SvCUR(name), valstr, seenhv, postav, &level, indent, pad, xpad, newapad, sep, pair, freezer, toaster, purity, deepcopy, quotekeys, bless, maxdepth, sortkeys); @@ -1099,7 +1099,7 @@ Data_Dumper_Dumpxs(href, ...) postlen = av_len(postav); if (postlen >= 0 || !terse) { sv_insert(valstr, 0, 0, " = ", 3); - sv_insert(valstr, 0, 0, SvPVX(name), SvCUR(name)); + sv_insert(valstr, 0, 0, SvPVX_const(name), SvCUR(name)); sv_catpvn(valstr, ";", 1); } sv_catsv(retval, pad); diff --git a/ext/Devel/DProf/DProf.xs b/ext/Devel/DProf/DProf.xs index c840b24..39a604d 100644 --- a/ext/Devel/DProf/DProf.xs +++ b/ext/Devel/DProf/DProf.xs @@ -24,7 +24,7 @@ db_get_cv(pTHX_ SV *sv) cv = INT2PTR(CV*,SvIVX(sv)); } else { if (SvPOK(sv)) { - cv = get_cv(SvPVX(sv), TRUE); + cv = get_cv(SvPVX_const(sv), TRUE); } else if (SvROK(sv)) { cv = (CV*)SvRV(sv); } else { @@ -376,7 +376,7 @@ prof_mark(pTHX_ opcode ptype) gname = GvNAME(gv); set_cv_key(aTHX_ cv, pname, gname); - svp = hv_fetch(g_cv_hash, SvPVX(g_key_hash), SvCUR(g_key_hash), TRUE); + svp = hv_fetch(g_cv_hash, SvPVX_const(g_key_hash), SvCUR(g_key_hash), TRUE); if (!SvOK(*svp)) { sv_setiv(*svp, id = ++g_lastid); if (CvXSUB(cv) == XS_Devel__DProf_END) diff --git a/ext/Opcode/Opcode.xs b/ext/Opcode/Opcode.xs index 805c1e2..3b6dddb 100644 --- a/ext/Opcode/Opcode.xs +++ b/ext/Opcode/Opcode.xs @@ -133,7 +133,7 @@ new_opset(pTHX_ SV *old_opset) } else { opset = NEWSV(1156, opset_len); - Zero(SvPVX(opset), opset_len + 1, char); + Zero(SvPVX_const(opset), opset_len + 1, char); SvCUR_set(opset, opset_len); (void)SvPOK_only(opset); } diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs index 0db1971..fa64a34 100644 --- a/ext/POSIX/POSIX.xs +++ b/ext/POSIX/POSIX.xs @@ -1259,7 +1259,7 @@ sigaction(sig, optaction, oldaction = 0) SV** svp; SV** sigsvp; if (sig == 0 && SvPOK(ST(0))) { - char *s = SvPVX(ST(0)); + const char *s = SvPVX_const(ST(0)); int i = whichsig(s); if (i < 0 && memEQ(s, "SIG", 3)) @@ -1364,7 +1364,7 @@ sigaction(sig, optaction, oldaction = 0) /* And here again we duplicate -- DEFAULT/IGNORE checking. */ if(SvPOK(*svp)) { - char *s=SvPVX(*svp); + const char *s=SvPVX_const(*svp); if(strEQ(s,"IGNORE")) { act.sa_handler = SIG_IGN; } diff --git a/ext/PerlIO/encoding/encoding.xs b/ext/PerlIO/encoding/encoding.xs index e743f3f..125978b 100644 --- a/ext/PerlIO/encoding/encoding.xs +++ b/ext/PerlIO/encoding/encoding.xs @@ -308,8 +308,8 @@ PerlIOEncode_fill(pTHX_ PerlIO * f) } else { /* Create a "dummy" SV to represent the available data from layer below */ - if (SvLEN(e->dataSV) && SvPVX(e->dataSV)) { - Safefree(SvPVX(e->dataSV)); + if (SvLEN(e->dataSV) && SvPVX_const(e->dataSV)) { + Safefree(SvPVX_const(e->dataSV)); } if (use > (SSize_t)e->base.bufsiz) { if (e->flags & NEEDS_LINES) { diff --git a/ext/PerlIO/via/via.xs b/ext/PerlIO/via/via.xs index 7ed7335..9ca4a8f 100644 --- a/ext/PerlIO/via/via.xs +++ b/ext/PerlIO/via/via.xs @@ -141,7 +141,7 @@ PerlIOVia_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg, newSVpvn(Perl_form(aTHX_ "PerlIO::via::%s", pkg), pkglen + 13); SvREFCNT_dec(arg); - s->stash = gv_stashpvn(SvPVX(s->obj), pkglen + 13, FALSE); + s->stash = gv_stashpvn(SvPVX_const(s->obj), pkglen + 13, FALSE); } if (s->stash) { char lmode[8]; diff --git a/pod/perlapi.pod b/pod/perlapi.pod index 9d8c76c..397a7f5 100644 --- a/pod/perlapi.pod +++ b/pod/perlapi.pod @@ -2839,12 +2839,12 @@ Found in file sv.c =item newSVpvn_share -Creates a new SV with its SvPVX pointing to a shared string in the string +Creates a new SV with its SvPVX_const pointing to a shared string in the string table. If the string does not already exist in the table, it is created first. Turns on READONLY and FAKE. The string's hash is stored in the UV slot of the SV; if the C parameter is non-zero, that value is used; otherwise the hash is computed. The idea here is that as the string table -is used for shared hash keys these strings will have SvPVX == HeKEY and +is used for shared hash keys these strings will have SvPVX_const == HeKEY and hash lookup will avoid string compare. SV* newSVpvn_share(const char* s, I32 len, U32 hash) @@ -3981,7 +3981,7 @@ Efficient removal of characters from the beginning of the string buffer. SvPOK(sv) must be true and the C must be a pointer to somewhere inside the string buffer. The C becomes the first character of the adjusted string. Uses the "OOK hack". -Beware: after this function returns, C and SvPVX(sv) may no longer +Beware: after this function returns, C and SvPVX_const(sv) may no longer refer to the same chunk of data. void sv_chop(SV* sv, char* ptr) diff --git a/pp_hot.c b/pp_hot.c index 4d458ad..7d28d33 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -1636,7 +1636,7 @@ Perl_do_readline(pTHX) if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) { tmps = SvEND(sv) - 1; - if (*tmps == *SvPVX(PL_rs)) { + if (*tmps == *SvPVX_const(PL_rs)) { *tmps = '\0'; SvCUR_set(sv, SvCUR(sv) - 1); } @@ -1645,7 +1645,7 @@ Perl_do_readline(pTHX) if (!isALPHA(*tmps) && !isDIGIT(*tmps) && strchr("$&*(){}[]'\";\\|?<>~`", *tmps)) break; - if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) { + if (*tmps && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) { (void)POPs; /* Unmatched wildcard? Chuck it... */ continue; } @@ -1883,7 +1883,7 @@ PP(pp_iter) *itersvp = newSVsv(cur); SvREFCNT_dec(oldsv); } - if (strEQ(SvPVX(cur), max)) + if (strEQ(SvPVX_const(cur), max)) sv_setiv(cur, 0); /* terminate next time */ else sv_inc(cur); @@ -2187,7 +2187,7 @@ PP(pp_subst) REXEC_NOT_FIRST|REXEC_IGNOREPOS)); if (s != d) { i = strend - s; - SvCUR_set(TARG, d - SvPVX(TARG) + i); + SvCUR_set(TARG, d - SvPVX_const(TARG) + i); Move(s, d, i+1, char); /* include the NUL */ } TAINT_IF(rxtainted & 1); @@ -2609,7 +2609,7 @@ PP(pp_entersub) mg_get(sv); if (SvROK(sv)) goto got_rv; - sym = SvPOKp(sv) ? SvPVX(sv) : Nullch; + sym = SvPOKp(sv) ? SvPVX_const(sv) : Nullch; } else { STRLEN n_a; diff --git a/pp_sys.c b/pp_sys.c index d0e4bbd..35b1e13 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -1233,7 +1233,7 @@ PP(pp_getc) *SvPVX(TARG) = PerlIO_getc(IoIFP(GvIOp(gv))); /* should never be EOF */ if (PerlIO_isutf8(IoIFP(GvIOp(gv)))) { /* Find out how many bytes the char needs */ - Size_t len = UTF8SKIP(SvPVX(TARG)); + Size_t len = UTF8SKIP(SvPVX_const(TARG)); if (len > 1) { SvGROW(TARG,len+1); len = PerlIO_read(IoIFP(GvIOp(gv)),SvPVX(TARG)+1,len-1); @@ -1367,7 +1367,7 @@ PP(pp_leavewrite) } if (s) { const STRLEN save = SvCUR(PL_formtarget); - SvCUR_set(PL_formtarget, s - SvPVX(PL_formtarget)); + SvCUR_set(PL_formtarget, s - SvPVX_const(PL_formtarget)); do_print(PL_formtarget, ofp); SvCUR_set(PL_formtarget, save); sv_chop(PL_formtarget, s); @@ -1736,7 +1736,7 @@ PP(pp_sysread) report_evil_fh(gv, io, OP_phoney_OUTPUT_ONLY); goto say_undef; } - SvCUR_set(read_target, count+(buffer - SvPVX(read_target))); + SvCUR_set(read_target, count+(buffer - SvPVX_const(read_target))); *SvEND(read_target) = '\0'; (void)SvPOK_only(read_target); if (fp_utf8 && !IN_BYTES) { @@ -1750,7 +1750,7 @@ PP(pp_sysread) if (buffer - charskip + skip > bend) { /* partial character - try for rest of it */ length = skip - (bend-buffer); - offset = bend - SvPVX(bufsv); + offset = bend - SvPVX_const(bufsv); charstart = FALSE; charskip += count; goto more_bytes; @@ -1767,7 +1767,7 @@ PP(pp_sysread) */ if (got < wanted && count == length) { length = wanted - got; - offset = bend - SvPVX(bufsv); + offset = bend - SvPVX_const(bufsv); goto more_bytes; } /* return value is character count */ @@ -3388,7 +3388,7 @@ PP(pp_fttext) PL_statgv = Nullgv; PL_laststype = OP_STAT; sv_setpv(PL_statname, SvPV(sv, n_a)); - if (!(fp = PerlIO_open(SvPVX(PL_statname), "r"))) { + if (!(fp = PerlIO_open(SvPVX_const(PL_statname), "r"))) { if (ckWARN(WARN_NEWLINE) && strchr(SvPV(PL_statname, n_a), '\n')) Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "open"); RETPUSHUNDEF; diff --git a/regcomp.c b/regcomp.c index 3e95cdf..c52ad75 100644 --- a/regcomp.c +++ b/regcomp.c @@ -1308,7 +1308,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap, reg if (mincount > 1) { SvGROW(last_str, (mincount * l) + 1); repeatcpy(SvPVX(last_str) + l, - SvPVX(last_str), l, mincount - 1); + SvPVX_const(last_str), l, mincount - 1); SvCUR_set(last_str, SvCUR(last_str) * mincount); /* Add additional parts. */ SvCUR_set(data->last_found, @@ -2054,7 +2054,7 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm) regprop(sv, (regnode*)data.start_class); PerlIO_printf(Perl_debug_log, "synthetic stclass \"%s\".\n", - SvPVX(sv));}); + SvPVX_const(sv));}); } /* A temporary algorithm prefers floated substr to fixed one to dig more info. */ @@ -2109,7 +2109,7 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm) regprop(sv, (regnode*)data.start_class); PerlIO_printf(Perl_debug_log, "synthetic stclass \"%s\".\n", - SvPVX(sv));}); + SvPVX_const(sv));}); } } @@ -4604,7 +4604,7 @@ S_dumpuntil(pTHX_ regnode *start, regnode *node, regnode *last, SV* sv, I32 l) goto after_print; regprop(sv, node); PerlIO_printf(Perl_debug_log, "%4"IVdf":%*s%s", (IV)(node - start), - (int)(2*l + 1), "", SvPVX(sv)); + (int)(2*l + 1), "", SvPVX_const(sv)); if (next == NULL) /* Next ptr. */ PerlIO_printf(Perl_debug_log, "(0)"); else @@ -4675,7 +4675,7 @@ Perl_regdump(pTHX_ regexp *r) "anchored \"%s%.*s%s\"%s at %"IVdf" ", PL_colors[0], (int)(SvCUR(r->anchored_substr) - (SvTAIL(r->anchored_substr)!=0)), - SvPVX(r->anchored_substr), + SvPVX_const(r->anchored_substr), PL_colors[1], SvTAIL(r->anchored_substr) ? "$" : "", (IV)r->anchored_offset); @@ -4684,7 +4684,7 @@ Perl_regdump(pTHX_ regexp *r) "anchored utf8 \"%s%.*s%s\"%s at %"IVdf" ", PL_colors[0], (int)(SvCUR(r->anchored_utf8) - (SvTAIL(r->anchored_utf8)!=0)), - SvPVX(r->anchored_utf8), + SvPVX_const(r->anchored_utf8), PL_colors[1], SvTAIL(r->anchored_utf8) ? "$" : "", (IV)r->anchored_offset); @@ -4693,7 +4693,7 @@ Perl_regdump(pTHX_ regexp *r) "floating \"%s%.*s%s\"%s at %"IVdf"..%"UVuf" ", PL_colors[0], (int)(SvCUR(r->float_substr) - (SvTAIL(r->float_substr)!=0)), - SvPVX(r->float_substr), + SvPVX_const(r->float_substr), PL_colors[1], SvTAIL(r->float_substr) ? "$" : "", (IV)r->float_min_offset, (UV)r->float_max_offset); @@ -4702,7 +4702,7 @@ Perl_regdump(pTHX_ regexp *r) "floating utf8 \"%s%.*s%s\"%s at %"IVdf"..%"UVuf" ", PL_colors[0], (int)(SvCUR(r->float_utf8) - (SvTAIL(r->float_utf8)!=0)), - SvPVX(r->float_utf8), + SvPVX_const(r->float_utf8), PL_colors[1], SvTAIL(r->float_utf8) ? "$" : "", (IV)r->float_min_offset, (UV)r->float_max_offset); @@ -4720,7 +4720,7 @@ Perl_regdump(pTHX_ regexp *r) if (r->regstclass) { regprop(sv, r->regstclass); - PerlIO_printf(Perl_debug_log, "stclass \"%s\" ", SvPVX(sv)); + PerlIO_printf(Perl_debug_log, "stclass \"%s\" ", SvPVX_const(sv)); } if (r->reganch & ROPT_ANCH) { PerlIO_printf(Perl_debug_log, "anchored"); diff --git a/regexec.c b/regexec.c index 0401dd3..910fa68 100644 --- a/regexec.c +++ b/regexec.c @@ -363,7 +363,7 @@ S_cache_re(pTHX_ regexp *prog) /* Assumptions: if ANCH_GPOS, then strpos is anchored. XXXX Check GPOS logic */ -/* If SCREAM, then SvPVX(sv) should be compatible with strpos and strend. +/* If SCREAM, then SvPVX_const(sv) should be compatible with strpos and strend. Otherwise, only SvCUR(sv) is used to get strbeg. */ /* XXXX We assume that strpos is strbeg unless sv. */ @@ -474,7 +474,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos, if (!ml_anch) { if ( !(prog->reganch & (ROPT_ANCH_GPOS /* Checked by the caller */ | ROPT_IMPLICIT)) /* not a real BOL */ - /* SvCUR is not set on references: SvRV and SvPVX overlap */ + /* SvCUR is not set on references: SvRV and SvPVX_const overlap */ && sv && !SvROK(sv) && (strpos != strbeg)) { DEBUG_r(PerlIO_printf(Perl_debug_log, "Not at start...\n")); @@ -496,17 +496,17 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos, } /* Now should match s[0..slen-2] */ slen--; - if (slen && (*SvPVX(check) != *s + if (slen && (*SvPVX_const(check) != *s || (slen > 1 - && memNE(SvPVX(check), s, slen)))) { + && memNE(SvPVX_const(check), s, slen)))) { report_neq: DEBUG_r(PerlIO_printf(Perl_debug_log, "String not equal...\n")); goto fail_finish; } } - else if (*SvPVX(check) != *s + else if (*SvPVX_const(check) != *s || ((slen = SvCUR(check)) > 1 - && memNE(SvPVX(check), s, slen))) + && memNE(SvPVX_const(check), s, slen))) goto report_neq; goto success_at_start; } @@ -556,7 +556,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos, goto fail_finish; /* we may be pointing at the wrong string */ if (s && RX_MATCH_COPIED(prog)) - s = strbeg + (s - SvPVX(sv)); + s = strbeg + (s - SvPVX_const(sv)); if (data) *data->scream_olds = s; } @@ -578,7 +578,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos, (check == (do_utf8 ? prog->anchored_utf8 : prog->anchored_substr) ? "anchored" : "floating"), PL_colors[0], (int)(SvCUR(check) - (SvTAIL(check)!=0)), - SvPVX(check), + SvPVX_const(check), PL_colors[1], (SvTAIL(check) ? "$" : ""), (s ? " at offset " : "...\n") ) ); @@ -645,7 +645,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos, PL_colors[0], (int)(SvCUR(must) - (SvTAIL(must)!=0)), - SvPVX(must), + SvPVX_const(must), PL_colors[1], (SvTAIL(must) ? "$" : ""))); if (!s) { if (last1 >= last2) { @@ -704,7 +704,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos, (s ? "Found" : "Contradicts"), PL_colors[0], (int)(SvCUR(must) - (SvTAIL(must)!=0)), - SvPVX(must), + SvPVX_const(must), PL_colors[1], (SvTAIL(must) ? "$" : ""))); if (!s) { if (last1 == last) { @@ -1804,7 +1804,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char * #endif if (!(do_utf8 ? prog->anchored_utf8 : prog->anchored_substr)) do_utf8 ? to_utf8_substr(prog) : to_byte_substr(prog); - ch = SvPVX(do_utf8 ? prog->anchored_utf8 : prog->anchored_substr)[0]; + ch = SvPVX_const(do_utf8 ? prog->anchored_utf8 : prog->anchored_substr)[0]; if (do_utf8) { while (s < strend) { @@ -1887,7 +1887,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char * PL_multiline ? FBMrf_MULTILINE : 0))) ) { /* we may be pointing at the wrong string */ if ((flags & REXEC_SCREAM) && RX_MATCH_COPIED(prog)) - s = strbeg + (s - SvPVX(sv)); + s = strbeg + (s - SvPVX_const(sv)); DEBUG_r( did_match = 1 ); if (HOPc(s, -back_max) > last1) { last1 = HOPc(s, -back_min); @@ -1921,7 +1921,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char * ? "anchored" : "floating"), PL_colors[0], (int)(SvCUR(must) - (SvTAIL(must)!=0)), - SvPVX(must), + SvPVX_const(must), PL_colors[1], (SvTAIL(must) ? "$" : "")) ); goto phooey; @@ -1942,7 +1942,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char * regprop(prop, c); s0 = UTF ? - pv_uni_display(dsv0, (U8*)SvPVX(prop), SvCUR(prop), 60, + pv_uni_display(dsv0, (U8*)SvPVX_const(prop), SvCUR(prop), 60, UNI_DISPLAY_REGEX) : SvPVX(prop); len0 = UTF ? SvCUR(dsv0) : SvCUR(prop); @@ -1976,7 +1976,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char * last = scream_olds; /* Only one occurrence. */ /* we may be pointing at the wrong string */ else if (RX_MATCH_COPIED(prog)) - s = strbeg + (s - SvPVX(sv)); + s = strbeg + (s - SvPVX_const(sv)); } else { STRLEN len; @@ -2388,7 +2388,7 @@ S_regmatch(pTHX_ regnode *prog) 15 - l - pref_len + 1, "", (IV)(scan - PL_regprogram), PL_regindent*2, "", - SvPVX(prop)); + SvPVX_const(prop)); } }); @@ -4275,7 +4275,7 @@ S_regrepeat(pTHX_ const regnode *p, I32 max) regprop(prop, p); PerlIO_printf(Perl_debug_log, "%*s %s can match %"IVdf" times out of %"IVdf"...\n", - REPORT_CODE_OFF+1, "", SvPVX(prop),(IV)c,(IV)max); + REPORT_CODE_OFF+1, "", SvPVX_const(prop),(IV)c,(IV)max); }); return(c); diff --git a/scope.c b/scope.c index 0ac91c2..5de33c9 100644 --- a/scope.c +++ b/scope.c @@ -295,7 +295,7 @@ Perl_save_gp(pTHX_ GV *gv, I32 empty) SSPUSHIV((IV)SvLEN(gv)); SvLEN_set(gv, 0); /* forget that anything was allocated here */ SSPUSHIV((IV)SvCUR(gv)); - SSPUSHPTR(SvPVX(gv)); + SSPUSHPTR(SvPVX_const(gv)); SvPOK_off(gv); SSPUSHPTR(SvREFCNT_inc(gv)); SSPUSHPTR(GvGP(gv)); @@ -873,8 +873,8 @@ Perl_leave_scope(pTHX_ I32 base) case SAVEt_GP: /* scalar reference */ ptr = SSPOPPTR; gv = (GV*)SSPOPPTR; - if (SvPVX(gv) && SvLEN(gv) > 0) { - Safefree(SvPVX(gv)); + if (SvPVX_const(gv) && SvLEN(gv) > 0) { + Safefree(SvPVX_const(gv)); } SvPV_set(gv, (char *)SSPOPPTR); SvCUR_set(gv, (STRLEN)SSPOPIV); @@ -1112,7 +1112,7 @@ Perl_cx_dump(pTHX_ PERL_CONTEXT *cx) PL_op_desc[cx->blk_eval.old_op_type]); if (cx->blk_eval.old_namesv) PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_NAME = %s\n", - SvPVX(cx->blk_eval.old_namesv)); + SvPVX_const(cx->blk_eval.old_namesv)); PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_EVAL_ROOT = 0x%"UVxf"\n", PTR2UV(cx->blk_eval.old_eval_root)); break; diff --git a/sv.c b/sv.c index 5e86681..cab35f5 100644 --- a/sv.c +++ b/sv.c @@ -1628,7 +1628,7 @@ Perl_sv_backoff(pTHX_ register SV *sv) { assert(SvOOK(sv)); if (SvIVX(sv)) { - char *s = SvPVX(sv); + const char *s = SvPVX_const(sv); SvLEN_set(sv, SvLEN(sv) + SvIVX(sv)); SvPV_set(sv, SvPVX(sv) - SvIVX(sv)); SvIV_set(sv, 0); @@ -1701,8 +1701,8 @@ Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen) SvREADONLY_off(sv); } s = safemalloc(newlen); - if (SvPVX(sv) && SvCUR(sv)) { - Move(SvPVX(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char); + if (SvPVX_const(sv) && SvCUR(sv)) { + Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char); } } SvPV_set(sv, s); @@ -1966,7 +1966,7 @@ Perl_looks_like_number(pTHX_ SV *sv) STRLEN len; if (SvPOK(sv)) { - sbegin = SvPVX(sv); + sbegin = SvPVX_const(sv); len = SvCUR(sv); } else if (SvPOKp(sv)) @@ -2063,7 +2063,7 @@ Perl_looks_like_number(pTHX_ SV *sv) STATIC int S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype) { - DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype)); + DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype)); if (SvNVX(sv) < (NV)IV_MIN) { (void)SvIOKp_on(sv); (void)SvNOK_on(sv); @@ -2308,7 +2308,7 @@ Perl_sv_2iv(pTHX_ register SV *sv) if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) != IS_NUMBER_IN_UV) { /* It wasn't an (integer that doesn't overflow the UV). */ - SvNV_set(sv, Atof(SvPVX(sv))); + SvNV_set(sv, Atof(SvPVX_const(sv))); if (! numtype && ckWARN(WARN_NUMERIC)) not_a_number(sv); @@ -2596,7 +2596,7 @@ Perl_sv_2uv(pTHX_ register SV *sv) if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) != IS_NUMBER_IN_UV) { /* It wasn't an integer, or it overflowed the UV. */ - SvNV_set(sv, Atof(SvPVX(sv))); + SvNV_set(sv, Atof(SvPVX_const(sv))); if (! numtype && ckWARN(WARN_NUMERIC)) not_a_number(sv); @@ -2707,7 +2707,7 @@ Perl_sv_2nv(pTHX_ register SV *sv) if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !grok_number(SvPVX_const(sv), SvCUR(sv), NULL)) not_a_number(sv); - return Atof(SvPVX(sv)); + return Atof(SvPVX_const(sv)); } if (SvIOKp(sv)) { if (SvIsUV(sv)) @@ -2783,7 +2783,7 @@ Perl_sv_2nv(pTHX_ register SV *sv) } else if (SvPOKp(sv) && SvLEN(sv)) { UV value; - const int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value); + const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value); if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype) not_a_number(sv); #ifdef NV_PRESERVES_UV @@ -2792,10 +2792,10 @@ Perl_sv_2nv(pTHX_ register SV *sv) /* It's definitely an integer */ SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value); } else - SvNV_set(sv, Atof(SvPVX(sv))); + SvNV_set(sv, Atof(SvPVX_const(sv))); SvNOK_on(sv); #else - SvNV_set(sv, Atof(SvPVX(sv))); + SvNV_set(sv, Atof(SvPVX_const(sv))); /* Only set the public NV OK flag if this NV preserves the value in the PV at least as well as an IV/UV would. Not sure how to do this 100% reliably. */ @@ -2900,7 +2900,7 @@ STATIC IV S_asIV(pTHX_ SV *sv) { UV value; - int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value); + int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value); if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) == IS_NUMBER_IN_UV) { @@ -2917,7 +2917,7 @@ S_asIV(pTHX_ SV *sv) if (ckWARN(WARN_NUMERIC)) not_a_number(sv); } - return I_V(Atof(SvPVX(sv))); + return I_V(Atof(SvPVX_const(sv))); } /* asUV(): extract an unsigned integer from the string value of an SV @@ -2939,7 +2939,7 @@ S_asUV(pTHX_ SV *sv) if (ckWARN(WARN_NUMERIC)) not_a_number(sv); } - return U_V(Atof(SvPVX(sv))); + return U_V(Atof(SvPVX_const(sv))); } /* @@ -3261,11 +3261,11 @@ Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags) sv_upgrade(sv, SVt_PV); return (char *)""; } - *lp = s - SvPVX(sv); + *lp = s - SvPVX_const(sv); SvCUR_set(sv, *lp); SvPOK_on(sv); DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n", - PTR2UV(sv),SvPVX(sv))); + PTR2UV(sv),SvPVX_const(sv))); return SvPVX(sv); tokensave: @@ -3285,7 +3285,7 @@ Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags) if (tsv) { sv_2mortal(tsv); - t = SvPVX(tsv); + t = SvPVX_const(tsv); len = SvCUR(tsv); } else { @@ -4013,7 +4013,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags) SvTAINT(dstr); return; } - if (SvPVX(dstr)) { + if (SvPVX_const(dstr)) { SvPV_free(dstr); SvLEN_set(dstr, 0); SvCUR_set(dstr, 0); @@ -4046,8 +4046,8 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags) /* * Check to see if we can just swipe the string. If so, it's a * possible small lose on short strings, but a big win on long ones. - * It might even be a win on short strings if SvPVX(dstr) - * has to be allocated and SvPVX(sstr) has to be freed. + * It might even be a win on short strings if SvPVX_const(dstr) + * has to be allocated and SvPVX_const(sstr) has to be freed. */ if (SvTEMP(sstr) && /* slated for free anyway? */ @@ -4058,13 +4058,13 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags) /* and won't be needed again, potentially */ !(PL_op && PL_op->op_type == OP_AASSIGN)) { - if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */ + if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */ if (SvOOK(dstr)) { SvFLAGS(dstr) &= ~SVf_OOK; - Safefree(SvPVX(dstr) - SvIVX(dstr)); + Safefree(SvPVX_const(dstr) - SvIVX(dstr)); } else if (SvLEN(dstr)) - Safefree(SvPVX(dstr)); + Safefree(SvPVX_const(dstr)); } (void)SvPOK_only(dstr); SvPV_set(dstr, SvPVX(sstr)); @@ -4081,7 +4081,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags) else { /* have to copy actual string */ STRLEN len = SvCUR(sstr); SvGROW(dstr, len + 1); /* inlined from sv_setpvn */ - Move(SvPVX(sstr),SvPVX(dstr),len,char); + Move(SvPVX_const(sstr),SvPVX(dstr),len,char); SvCUR_set(dstr, len); *SvEND(dstr) = '\0'; (void)SvPOK_only(dstr); @@ -4285,7 +4285,7 @@ Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len) (void)SvOK_off(sv); return; } - if (SvPVX(sv)) + if (SvPVX_const(sv)) SvPV_free(sv); allocate = PERL_STRLEN_ROUNDUP(len + 1); @@ -4329,13 +4329,13 @@ Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags) { if (SvREADONLY(sv)) { if (SvFAKE(sv)) { - char *pvx = SvPVX(sv); + char *pvx = SvPVX_const(sv); STRLEN len = SvCUR(sv); U32 hash = SvUVX(sv); SvFAKE_off(sv); SvREADONLY_off(sv); SvGROW(sv, len + 1); - Move(pvx,SvPVX(sv),len,char); + Move(pvx,SvPVX_const(sv),len,char); *SvEND(sv) = '\0'; unsharepvn(pvx, SvUTF8(sv) ? -(I32)len : len, hash); } @@ -4371,7 +4371,7 @@ Efficient removal of characters from the beginning of the string buffer. SvPOK(sv) must be true and the C must be a pointer to somewhere inside the string buffer. The C becomes the first character of the adjusted string. Uses the "OOK hack". -Beware: after this function returns, C and SvPVX(sv) may no longer +Beware: after this function returns, C and SvPVX_const(sv) may no longer refer to the same chunk of data. =cut @@ -4383,17 +4383,17 @@ Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) register STRLEN delta; if (!ptr || !SvPOKp(sv)) return; - delta = ptr - SvPVX(sv); + delta = ptr - SvPVX_const(sv); SV_CHECK_THINKFIRST(sv); if (SvTYPE(sv) < SVt_PVIV) sv_upgrade(sv,SVt_PVIV); if (!SvOOK(sv)) { if (!SvLEN(sv)) { /* make copy of shared string */ - const char *pvx = SvPVX(sv); + const char *pvx = SvPVX_const(sv); STRLEN len = SvCUR(sv); SvGROW(sv, len + 1); - Move(pvx,SvPVX(sv),len,char); + Move(pvx,SvPVX_const(sv),len,char); *SvEND(sv) = '\0'; } SvIV_set(sv, 0); @@ -4447,7 +4447,7 @@ Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register SvGROW(dsv, dlen + slen + 1); if (sstr == dstr) - sstr = SvPVX(dsv); + sstr = SvPVX_const(dsv); Move(sstr, SvPVX(dsv) + dlen, slen, char); SvCUR_set(dsv, SvCUR(dsv) + slen); *SvEND(dsv) = '\0'; @@ -4570,7 +4570,7 @@ Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr) len = strlen(ptr); SvGROW(sv, tlen + len + 1); if (ptr == junk) - ptr = SvPVX(sv); + ptr = SvPVX_const(sv); Move(ptr,SvPVX(sv)+tlen,len+1,char); SvCUR_set(sv, SvCUR(sv) + len); (void)SvPOK_only_UTF8(sv); /* validate pointer */ @@ -5039,7 +5039,7 @@ Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN (void)SvPOK_only_UTF8(bigstr); if (offset + len > curlen) { SvGROW(bigstr, offset+len+1); - Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char); + Zero(SvPVX_const(bigstr)+curlen, offset+len-curlen, char); SvCUR_set(bigstr, offset+len); } @@ -5291,10 +5291,10 @@ Perl_sv_clear(pTHX_ register SV *sv) else SvREFCNT_dec(SvRV(sv)); } - else if (SvPVX(sv) && SvLEN(sv)) - Safefree(SvPVX(sv)); - else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) { - unsharepvn(SvPVX(sv), + else if (SvPVX_const(sv) && SvLEN(sv)) + Safefree(SvPVX_const(sv)); + else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) { + unsharepvn(SvPVX_const(sv), SvUTF8(sv) ? -(I32)SvCUR(sv) : SvCUR(sv), SvUVX(sv)); SvFAKE_off(sv); @@ -6359,7 +6359,7 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append) } else shortbuffered = 0; - bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */ + bp = (STDCHAR*)SvPVX_const(sv) + append; /* move these two too to registers */ ptr = (STDCHAR*)PerlIO_get_ptr(fp); DEBUG_P(PerlIO_printf(Perl_debug_log, "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt)); @@ -6388,10 +6388,10 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append) if (shortbuffered) { /* oh well, must extend */ cnt = shortbuffered; shortbuffered = 0; - bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */ + bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */ SvCUR_set(sv, bpx); SvGROW(sv, SvLEN(sv) + append + cnt + 2); - bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */ + bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */ continue; } @@ -6423,10 +6423,10 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append) if (i == EOF) /* all done for ever? */ goto thats_really_all_folks; - bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */ + bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */ SvCUR_set(sv, bpx); SvGROW(sv, bpx + cnt + 2); - bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */ + bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */ *bp++ = (STDCHAR)i; /* store character from PerlIO_getc */ @@ -6435,7 +6435,7 @@ Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append) } thats_all_folks: - if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX(sv)) < rslen) || + if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) || memNE((char*)bp - rslen, rsptr, rslen)) goto screamer; /* go back to the fray */ thats_really_all_folks: @@ -6449,10 +6449,10 @@ thats_really_all_folks: PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp), PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0))); *bp = '\0'; - SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */ + SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv)); /* set length */ DEBUG_P(PerlIO_printf(Perl_debug_log, "Screamer: done, len=%ld, string=|%.*s|\n", - (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv))); + (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv))); } else { @@ -6504,7 +6504,7 @@ screamer2: if (i != EOF && /* joy */ (!rslen || SvCUR(sv) < rslen || - memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen))) + memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen))) { append = -1; /* @@ -6610,7 +6610,7 @@ Perl_sv_inc(pTHX_ register SV *sv) return; } - if (!(flags & SVp_POK) || !*SvPVX(sv)) { + if (!(flags & SVp_POK) || !*SvPVX_const(sv)) { if ((flags & SVTYPEMASK) < SVt_PVIV) sv_upgrade(sv, SVt_IV); (void)SvIOK_only(sv); @@ -6649,18 +6649,18 @@ Perl_sv_inc(pTHX_ register SV *sv) Fall through. */ #if defined(USE_LONG_DOUBLE) DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n", - SvPVX(sv), SvIVX(sv), SvNVX(sv))); + SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); #else DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n", - SvPVX(sv), SvIVX(sv), SvNVX(sv))); + SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); #endif } #endif /* PERL_PRESERVE_IVUV */ - sv_setnv(sv,Atof(SvPVX(sv)) + 1.0); + sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0); return; } d--; - while (d >= SvPVX(sv)) { + while (d >= SvPVX_const(sv)) { if (isDIGIT(*d)) { if (++*d <= '9') return; @@ -6690,7 +6690,7 @@ Perl_sv_inc(pTHX_ register SV *sv) /* oh,oh, the number grew */ SvGROW(sv, SvCUR(sv) + 2); SvCUR_set(sv, SvCUR(sv) + 1); - for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--) + for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--) *d = d[-1]; if (isDIGIT(d[1])) *d = '1'; @@ -6797,15 +6797,15 @@ Perl_sv_dec(pTHX_ register SV *sv) Fall through. */ #if defined(USE_LONG_DOUBLE) DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n", - SvPVX(sv), SvIVX(sv), SvNVX(sv))); + SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); #else DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n", - SvPVX(sv), SvIVX(sv), SvNVX(sv))); + SvPVX_const(sv), SvIVX(sv), SvNVX(sv))); #endif } } #endif /* PERL_PRESERVE_IVUV */ - sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */ + sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0); /* punt */ } /* @@ -6929,12 +6929,12 @@ Perl_newSVpvn(pTHX_ const char *s, STRLEN len) /* =for apidoc newSVpvn_share -Creates a new SV with its SvPVX pointing to a shared string in the string +Creates a new SV with its SvPVX_const pointing to a shared string in the string table. If the string does not already exist in the table, it is created first. Turns on READONLY and FAKE. The string's hash is stored in the UV slot of the SV; if the C parameter is non-zero, that value is used; otherwise the hash is computed. The idea here is that as the string table -is used for shared hash keys these strings will have SvPVX == HeKEY and +is used for shared hash keys these strings will have SvPVX_const == HeKEY and hash lookup will avoid string compare. =cut @@ -7200,7 +7200,7 @@ Perl_sv_reset(pTHX_ register char *s, HV *stash) SvOK_off(sv); if (SvTYPE(sv) >= SVt_PV) { SvCUR_set(sv, 0); - if (SvPVX(sv) != Nullch) + if (SvPVX_const(sv) != Nullch) *SvPVX(sv) = '\0'; SvTAINT(sv); } @@ -7542,14 +7542,14 @@ Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags) } else s = sv_2pv_flags(sv, lp, flags); - if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */ + if (s != SvPVX_const(sv)) { /* Almost, but not quite, sv_setpvn() */ const STRLEN len = *lp; if (SvROK(sv)) sv_unref(sv); (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */ SvGROW(sv, len + 1); - Move(s,SvPVX(sv),len,char); + Move(s,SvPVX_const(sv),len,char); SvCUR_set(sv, len); *SvEND(sv) = '\0'; } @@ -7557,7 +7557,7 @@ Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags) SvPOK_on(sv); /* validate pointer */ SvTAINT(sv); DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n", - PTR2UV(sv),SvPVX(sv))); + PTR2UV(sv),SvPVX_const(sv))); } } return SvPVX(sv); @@ -9356,7 +9356,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV Copy(eptr, p, elen, char); p += elen; *p = '\0'; - SvCUR_set(sv, p - SvPVX(sv)); + SvCUR_set(sv, p - SvPVX_const(sv)); svix = osvix; continue; /* not "break" */ } @@ -9429,7 +9429,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV if (has_utf8) SvUTF8_on(sv); *p = '\0'; - SvCUR_set(sv, p - SvPVX(sv)); + SvCUR_set(sv, p - SvPVX_const(sv)); if (vectorize) { esignlen = 0; goto vector; @@ -9976,11 +9976,11 @@ Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param) : sv_dup_inc(SvRV(sstr), param)); } - else if (SvPVX(sstr)) { + else if (SvPVX_const(sstr)) { /* Has something there */ if (SvLEN(sstr)) { /* Normal PV - clone whole allocated space */ - SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1)); + SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1)); } else { /* Special case - not normally malloced for some reason */ @@ -9991,12 +9991,12 @@ Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param) and they should not have these flags turned off */ - SvPV_set(dstr, sharepvn(SvPVX(sstr), SvCUR(sstr), + SvPV_set(dstr, sharepvn(SvPVX_const(sstr), SvCUR(sstr), SvUVX(sstr))); SvUV_set(dstr, SvUVX(sstr)); } else { - SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvCUR(sstr))); + SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvCUR(sstr))); SvFAKE_off(dstr); SvREADONLY_off(dstr); } @@ -10051,9 +10051,9 @@ Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param) SvREFCNT(dstr) = 0; /* must be before any other dups! */ #ifdef DEBUGGING - if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx) + if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx) PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n", - PL_watch_pvx, SvPVX(sstr)); + PL_watch_pvx, SvPVX_const(sstr)); #endif /* don't clone objects whose class has asked us not to */ @@ -11299,13 +11299,13 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, */ if (SvANY(proto_perl->Ilinestr)) { PL_linestr = sv_dup_inc(proto_perl->Ilinestr, param); - i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr); + i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr); PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i); - i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr); + i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr); PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i); - i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr); + i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr); PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i); - i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr); + i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr); PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i); } else { @@ -11331,9 +11331,9 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, /* XXX See comment on SvANY(proto_perl->Ilinestr) above */ if (SvANY(proto_perl->Ilinestr)) { - i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr); + i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr); PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i); - i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr); + i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr); PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i); PL_last_lop_op = proto_perl->Ilast_lop_op; } @@ -11740,9 +11740,9 @@ Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding) uni = POPs; PUTBACK; s = SvPV(uni, len); - if (s != SvPVX(sv)) { + if (s != SvPVX_const(sv)) { SvGROW(sv, len + 1); - Move(s, SvPVX(sv), len, char); + Move(s, SvPVX_const(sv), len, char); SvCUR_set(sv, len); SvPVX(sv)[len] = 0; } -- 1.8.3.1