diff options
author | Nicholas Clark <nick@ccl4.org> | 2005-12-05 23:57:51 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2005-12-05 23:57:51 +0000 |
commit | d8eae41ed6c62a8f34922d4cd7ac5baaf5ee54f0 (patch) | |
tree | 4721eec956a73d07b3fd04ec5fc264cd7be60ed8 /sv.c | |
parent | 69c71a440db2ed4aec5ba500863ee61ef46bd67a (diff) | |
download | perl-d8eae41ed6c62a8f34922d4cd7ac5baaf5ee54f0.tar.gz |
Make all the return statements closer to the final calcuation of the
returned value in the reference stringification code. Pull variables
into tigher scope which also allows some to become const.
p4raw-id: //depot/perl@26271
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 49 |
1 files changed, 25 insertions, 24 deletions
@@ -2555,8 +2555,7 @@ Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags) if (SvTHINKFIRST(sv)) { if (SvROK(sv)) { SV* tmpstr; - SV *referent; - register const char *typestr; + if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) { /* Unwrap this: */ @@ -2580,12 +2579,15 @@ Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags) else SvUTF8_off(sv); return pv; - } - referent = (SV*)SvRV(sv); - if (!referent) - typestr = "NULLREF"; - else { + } else { MAGIC *mg; + const SV *const referent = (SV*)SvRV(sv); + + if (!referent) { + if (lp) + *lp = 7; + return (char *)"NULLREF"; + } if (SvTYPE(referent) == SVt_PVMG && ((SvFLAGS(referent) & (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG)) @@ -2668,25 +2670,24 @@ Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags) if (lp) *lp = mg->mg_len; return mg->mg_ptr; + } else { + const char *const typestr = sv_reftype(referent, 0); + + tsv = sv_newmortal(); + if (SvOBJECT(referent)) { + const char *const name = HvNAME_get(SvSTASH(referent)); + Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")", + name ? name : "__ANON__" , typestr, + PTR2UV(referent)); + } + else + Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, + PTR2UV(referent)); + if (lp) + *lp = SvCUR(tsv); + return SvPVX(tsv); } - - typestr = sv_reftype(referent, 0); - - tsv = sv_newmortal(); - if (SvOBJECT(referent)) { - const char * const name = HvNAME_get(SvSTASH(referent)); - Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")", - name ? name : "__ANON__" , typestr, PTR2UV(referent)); - } - else - Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr, PTR2UV(referent)); - if (lp) - *lp = SvCUR(tsv); - return SvPVX(tsv); } - if (lp) - *lp = strlen(typestr); - return (char *)typestr; } if (SvREADONLY(sv) && !SvOK(sv)) { if (ckWARN(WARN_UNINITIALIZED)) |