Skip to content

Commit 8a5da3f

Browse files
committed
bulk88 comments
1 parent bf95ea0 commit 8a5da3f

File tree

1 file changed

+24
-27
lines changed

1 file changed

+24
-27
lines changed

sv.c

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4634,7 +4634,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dsv, SV* ssv, const I32 flags)
46344634

46354635
(void)SvOK_off(dsv);
46364636
SvFLAGS(dsv) |= sflags &
4637-
(SVf_POK|SVp_POK|SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4637+
(SVf_POK|SVp_POK|SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK|SVf_UTF8);
46384638

46394639
if ( !(flags & SV_NOSTEAL) && S_SvPV_can_swipe_buf(ssv, sflags, cur, len) )
46404640
{ /* Passes the swipe test. */
@@ -4733,8 +4733,6 @@ Perl_sv_setsv_flags(pTHX_ SV *dsv, SV* ssv, const I32 flags)
47334733
}
47344734
if (sflags & SVp_IOK) {
47354735
SvIV_set(dsv, SvIVX(ssv));
4736-
if (sflags & SVf_IVisUV)
4737-
SvIsUV_on(dsv);
47384736
if ((sflags & SVf_IOK) && !(sflags & SVf_POK)) {
47394737
/* Source was SVf_IOK|SVp_IOK|SVp_POK but not SVf_POK, meaning
47404738
a value set as an integer and later stringified. So confirm
@@ -4787,7 +4785,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dsv, SV* ssv, const I32 flags)
47874785
* The missing case is implemented in S_sv_freshcopy_PVxx.
47884786
* This function is marked for inlining, also to benefit the hot SVt_PV case.
47894787
*/
4790-
PERL_STATIC_FORCE_INLINE void
4788+
PERL_STATIC_FORCE_INLINE SV*
47914789
S_sv_freshcopy_POK(pTHX_ SV* dsv, SV* ssv, const I32 flags)
47924790
{
47934791
/* SvLEN, SvCUR, SvPVX for dsv are all uninitialized at this point */
@@ -4800,9 +4798,10 @@ S_sv_freshcopy_POK(pTHX_ SV* dsv, SV* ssv, const I32 flags)
48004798

48014799
if (!(flags & SV_NOSTEAL) && S_SvPV_can_swipe_buf(ssv, sflags, cur, len) ) {
48024800
/* Passes the swipe test. */
4801+
char * buf = SvPVX_mutable(ssv);
48034802
SvLEN_set(dsv, len);
48044803
SvCUR_set(dsv, cur);
4805-
SvPV_set(dsv, SvPVX_mutable(ssv));
4804+
SvPV_set(dsv, buf);
48064805

48074806
assert(!SvOOK(ssv)); /* According to S_SvPV_can_swipe_buf() */
48084807
/* (void)SvOK_off(ssv); but without the superfluous SvOOK_off(ssv)) */
@@ -4811,7 +4810,7 @@ S_sv_freshcopy_POK(pTHX_ SV* dsv, SV* ssv, const I32 flags)
48114810
SvPV_set(ssv, NULL);
48124811
SvLEN_set(ssv, 0);
48134812
SvCUR_set(ssv, 0);
4814-
return;
4813+
return dsv;
48154814
}
48164815

48174816
ASSUME(!(SvFLAGS(dsv) & SVf_BREAK));
@@ -4868,7 +4867,7 @@ S_sv_freshcopy_POK(pTHX_ SV* dsv, SV* ssv, const I32 flags)
48684867
*(dsv->sv_u.svu_pv + cur) = '\0';
48694868
}
48704869
SvCUR_set(dsv, cur);
4871-
return;
4870+
return dsv;
48724871
}
48734872

48744873
/* S_sv_freshcopy_PVxx mainly handles source SV types above SVt_PV
@@ -4879,7 +4878,7 @@ S_sv_freshcopy_POK(pTHX_ SV* dsv, SV* ssv, const I32 flags)
48794878
* Perl_sv_setsv_flags essentially ignores magic, except for
48804879
* taint and vstring magic, which are also handled here. */
48814880

4882-
static void
4881+
static SV*
48834882
S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
48844883
{
48854884
assert(ssv);
@@ -4905,7 +4904,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
49054904
}
49064905
SvCUR_set(dsv, 0);
49074906
SvLEN_set(dsv, 0);
4908-
return;
4907+
return dsv;
49094908
case SVt_PVIV:
49104909
SvANY(dsv) = new_XPVIV();
49114910
SvFLAGS(dsv) = SVt_PVIV;
@@ -4939,10 +4938,10 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
49394938
PL_tmps_stack[orig_ix] = &PL_sv_undef;
49404939
}
49414940
sv_setsv_flags(dsv, ssv, flags & ~SV_GMAGIC);
4942-
return;
4941+
return dsv;
49434942
case SVt_INVLIST:
49444943
invlist_clone(ssv, dsv);
4945-
return;
4944+
return dsv;
49464945
/* The following cases seem relatively rare, so have been kept out of
49474946
* Perl_sv_freshcopy_flags. */
49484947
case SVt_IV:
@@ -4958,7 +4957,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
49584957
assert(!SvOK(ssv));
49594958
SvFLAGS(dsv) = SVt_IV;
49604959
}
4961-
return;
4960+
return dsv;
49624961
case SVt_NV:
49634962
assert(!SvOK(ssv));
49644963
#if NVSIZE <= IVSIZE
@@ -4967,7 +4966,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
49674966
SvANY(dsv) = new_XNV();
49684967
#endif
49694968
SvFLAGS(dsv) = SVt_NV;
4970-
return;
4969+
return dsv;
49714970
}
49724971
assert(SvTYPE(dsv) == SVt_PVIV || SvTYPE(dsv) == SVt_PVNV || SvTYPE(dsv) == SVt_PVMG);
49734972

@@ -5001,7 +5000,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
50015000
SvCUR_set(dsv, 0);
50025001
SvLEN_set(dsv, 0);
50035002
SvPV_set(dsv, NULL);
5004-
return;
5003+
return dsv;
50055004
case SVp_POK|SVp_IOK|SVp_NOK|SVppv_STATIC: /* e.g. PL_sv_yes, PL_sv_no */
50065005
ASSUME(!(SvFLAGS(dsv) & SVf_BREAK));
50075006
ASSUME(SvTYPE(dsv) >= SVt_PVNV);
@@ -5013,19 +5012,19 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
50135012

50145013
SvIV_set(dsv, SvIVX(ssv));
50155014
SvNV_set(dsv, SvNVX(ssv));
5016-
return;
5015+
return dsv;
50175016
case SVf_ROK:
50185017
SvRV_set(dsv, SvREFCNT_inc(SvRV(ssv)));
50195018
SvCUR_set(dsv, 0);
50205019
SvLEN_set(dsv, 0);
5021-
return;
5020+
return dsv;
50225021
default:
50235022
SvCUR_set(dsv, 0);
50245023
SvLEN_set(dsv, 0);
50255024
SvPV_set(dsv, NULL);
50265025

50275026
if(!SvOK(ssv))
5028-
return;
5027+
return dsv;
50295028
/* Some cases seem so rare that we may as well let
50305029
* sv_setsv_flags deal with them. For example:
50315030
* SVp_IOK|SVp_NOK
@@ -5038,14 +5037,14 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
50385037
* Other cases are also rare but also trickier to handle,
50395038
* so keeps this function smaller to not even try. */
50405039
sv_setsv_flags(dsv,ssv,flags);
5041-
return;
5040+
return dsv;
50425041
case SVp_NOK:
50435042
ASSUME(SvTYPE(dsv) != SVt_PVIV);
50445043
SvNV_set(dsv, SvNVX(ssv));
50455044
SvCUR_set(dsv, 0);
50465045
SvLEN_set(dsv, 0);
50475046
SvPV_set(dsv, NULL);
5048-
return;
5047+
return dsv;
50495048
}
50505049
assert(SVp_POK); /* All other cases should have returned */
50515050

@@ -5072,7 +5071,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
50725071
}
50735072
if (SvTAINTED(ssv))
50745073
SvTAINT(dsv);
5075-
return;
5074+
return dsv;
50765075
}
50775076

50785077
/*
@@ -5131,18 +5130,17 @@ Perl_sv_freshcopy_flags(pTHX_ SV *const old, I32 flags)
51315130
break;
51325131
case SVt_IV|SVf_ROK: /* [12%] */
51335132
assert(SvANY(dsv));
5133+
SvFLAGS(dsv) = SVt_IV|SVf_ROK;
51345134
#if defined (DEBUGGING) || defined (PERL_DEBUG_COW)
5135-
dsv->sv_u.svu_rv = SvREFCNT_inc(SvRV(old));
5135+
dsv->sv_u.svu_rv = SvREFCNT_inc_NN(SvRV(old));
51365136
#else
5137-
dsv->sv_u.svu_rv = SvREFCNT_inc( old->sv_u.svu_rv );
5137+
dsv->sv_u.svu_rv = SvREFCNT_inc_NN( old->sv_u.svu_rv );
51385138
#endif
5139-
SvFLAGS(dsv) = SVt_IV|SVf_ROK;
51405139
break;
51415140
case SVt_PV|SVf_POK: /* [32%] */
51425141
SvANY(dsv) = new_XPV();
51435142
SvFLAGS(dsv) = SVt_PV|SVf_POK|SVp_POK|(sflags & SVf_UTF8);
5144-
S_sv_freshcopy_POK(aTHX_ dsv, old, flags);
5145-
break;
5143+
return S_sv_freshcopy_POK(aTHX_ dsv, old, flags);
51465144
case SVt_NV|SVf_NOK: /* [< 1%] - but won't be in float-heavy code! */
51475145
#if NVSIZE <= IVSIZE
51485146
SET_SVANY_FOR_BODYLESS_NV(dsv);
@@ -5191,8 +5189,7 @@ Perl_sv_freshcopy_flags(pTHX_ SV *const old, I32 flags)
51915189
default:
51925190
SvANY(dsv) = NULL;
51935191
SvFLAGS(dsv) = SVt_NULL;
5194-
S_sv_freshcopy_PVxx(aTHX_ dsv, old, flags);
5195-
break;
5192+
return S_sv_freshcopy_PVxx(aTHX_ dsv, old, flags);
51965193
}
51975194

51985195
return dsv;

0 commit comments

Comments
 (0)