X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doop.c;h=20dc68b868bf9f2abda95ba193c0bc10ba773b3a;hb=e568f1a0c324be00c66a63ff9480ccd16934f37e;hp=f4f012f78cd37cfa46b7d4be4e324dcce4601656;hpb=eb160463266f58ba83ae9bb9ae8bbdc8f0c3027b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doop.c b/doop.c index f4f012f..20dc68b 100644 --- a/doop.c +++ b/doop.c @@ -600,18 +600,19 @@ Perl_do_trans(pTHX_ SV *sv) (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)); if (SvREADONLY(sv)) { - if (SvFAKE(sv)) - sv_force_normal(sv); + if (SvIsCOW(sv)) + sv_force_normal_flags(sv, 0); if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL)) Perl_croak(aTHX_ PL_no_modify); } (void)SvPV(sv, len); if (!len) return 0; - if (!SvPOKp(sv)) - (void)SvPV_force(sv, len); - if (!(PL_op->op_private & OPpTRANS_IDENTICAL)) + if (!(PL_op->op_private & OPpTRANS_IDENTICAL)) { + if (!SvPOKp(sv)) + (void)SvPV_force(sv, len); (void)SvPOK_only_UTF8(sv); + } DEBUG_t( Perl_deb(aTHX_ "2.TBL\n")); @@ -1280,7 +1281,6 @@ Perl_do_kv(pTHX) I32 gimme = GIMME_V; I32 dokeys = (PL_op->op_type == OP_KEYS); I32 dovalues = (PL_op->op_type == OP_VALUES); - I32 realhv = (SvTYPE(hv) == SVt_PVHV); if (PL_op->op_type == OP_RV2HV || PL_op->op_type == OP_PADHV) dokeys = dovalues = TRUE; @@ -1295,7 +1295,7 @@ Perl_do_kv(pTHX) RETURN; } - keys = realhv ? hv : avhv_keys((AV*)hv); + keys = hv; (void)hv_iterinit(keys); /* always reset iterator regardless */ if (gimme == G_VOID) @@ -1342,8 +1342,7 @@ Perl_do_kv(pTHX) } if (dovalues) { PUTBACK; - tmpstr = realhv ? - hv_iterval(hv,entry) : avhv_iterval((AV*)hv,entry); + tmpstr = hv_iterval(hv,entry); DEBUG_H(Perl_sv_setpvf(aTHX_ tmpstr, "%lu%%%d=%lu", (unsigned long)HeHASH(entry), HvMAX(keys)+1,