X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp.c;h=97a5cfba8a90f8ea51dbacebcdab49aa4c6e75d1;hb=a3874608cd3bf4e33ccd66b8bb03b2aeda20af14;hp=0761ff1eaba0149052c8cbfa599317406122ab5d;hpb=ce5030a2e3d52efc311b379279a2db8219fc84b1;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp.c b/pp.c index 0761ff1..97a5cfb 100644 --- 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,22 +167,21 @@ 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) sv_upgrade(sv, SVt_RV); - if (SvPVX(sv)) { + if (SvPVX_const(sv)) { SvPV_free(sv); SvLEN_set(sv, 0); SvCUR_set(sv, 0); @@ -296,13 +295,13 @@ PP(pp_av2arylen) { dSP; AV *av = (AV*)TOPs; - SV *sv = AvARYLEN(av); - if (!sv) { - AvARYLEN(av) = sv = NEWSV(0,0); - sv_upgrade(sv, SVt_IV); - sv_magic(sv, (SV*)av, PERL_MAGIC_arylen, Nullch, 0); + SV **sv = Perl_av_arylen_p(aTHX_ (AV*)av); + if (!*sv) { + *sv = NEWSV(0,0); + sv_upgrade(*sv, SVt_PVMG); + sv_magic(*sv, (SV*)av, PERL_MAGIC_arylen, Nullch, 0); } - SETs(sv); + SETs(*sv); RETURN; } @@ -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_const(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; @@ -430,7 +427,7 @@ PP(pp_prototype) } cv = sv_2cv(TOPs, &stash, &gv, FALSE); if (cv && SvPOK(cv)) - ret = sv_2mortal(newSVpvn(SvPVX(cv), SvCUR(cv))); + ret = sv_2mortal(newSVpvn(SvPVX_const(cv), SvCUR(cv))); set: SETs(ret); RETURN; @@ -603,8 +600,9 @@ PP(pp_gelem) break; case 'P': if (strEQ(elem2, "ACKAGE")) { - const char *name = HvNAME(GvSTASH(gv)); - sv = newSVpv(name ? name : "__ANON__", 0); + const char *name = HvNAME_get(GvSTASH(gv)); + sv = newSVpvn(name ? name : "__ANON__", + name ? HvNAMELEN_get(GvSTASH(gv)) : 8); } break; case 'S': @@ -829,7 +827,7 @@ PP(pp_undef) } break; default: - if (SvTYPE(sv) >= SVt_PV && SvPVX(sv) && SvLEN(sv)) { + if (SvTYPE(sv) >= SVt_PV && SvPVX_const(sv) && SvLEN(sv)) { SvPV_free(sv); SvPV_set(sv, Nullch); SvLEN_set(sv, 0); @@ -3855,7 +3853,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 +3892,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 +4523,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; @@ -4674,11 +4672,9 @@ PP(pp_split) } } else { -#ifndef lint while (s < strend && --limit && (m = fbm_instr((unsigned char*)s, (unsigned char*)strend, csv, multiline ? FBMrf_MULTILINE : 0)) ) -#endif { dstr = newSVpvn(s, m-s); if (make_mortal) @@ -4837,5 +4833,5 @@ PP(pp_threadsv) * indent-tabs-mode: t * End: * - * vim: shiftwidth=4: -*/ + * ex: set ts=8 sts=4 sw=4 noet: + */