summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2005-12-05 23:57:51 +0000
committerNicholas Clark <nick@ccl4.org>2005-12-05 23:57:51 +0000
commitd8eae41ed6c62a8f34922d4cd7ac5baaf5ee54f0 (patch)
tree4721eec956a73d07b3fd04ec5fc264cd7be60ed8 /sv.c
parent69c71a440db2ed4aec5ba500863ee61ef46bd67a (diff)
downloadperl-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.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/sv.c b/sv.c
index 5654c58e74..0378b1f7c2 100644
--- a/sv.c
+++ b/sv.c
@@ -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))