@@ -4634,7 +4634,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dsv, SV* ssv, const I32 flags)
4634
4634
4635
4635
(void)SvOK_off(dsv);
4636
4636
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);
4638
4638
4639
4639
if ( !(flags & SV_NOSTEAL) && S_SvPV_can_swipe_buf(ssv, sflags, cur, len) )
4640
4640
{ /* Passes the swipe test. */
@@ -4733,8 +4733,6 @@ Perl_sv_setsv_flags(pTHX_ SV *dsv, SV* ssv, const I32 flags)
4733
4733
}
4734
4734
if (sflags & SVp_IOK) {
4735
4735
SvIV_set(dsv, SvIVX(ssv));
4736
- if (sflags & SVf_IVisUV)
4737
- SvIsUV_on(dsv);
4738
4736
if ((sflags & SVf_IOK) && !(sflags & SVf_POK)) {
4739
4737
/* Source was SVf_IOK|SVp_IOK|SVp_POK but not SVf_POK, meaning
4740
4738
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)
4787
4785
* The missing case is implemented in S_sv_freshcopy_PVxx.
4788
4786
* This function is marked for inlining, also to benefit the hot SVt_PV case.
4789
4787
*/
4790
- PERL_STATIC_FORCE_INLINE void
4788
+ PERL_STATIC_FORCE_INLINE SV*
4791
4789
S_sv_freshcopy_POK(pTHX_ SV* dsv, SV* ssv, const I32 flags)
4792
4790
{
4793
4791
/* 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)
4800
4798
4801
4799
if (!(flags & SV_NOSTEAL) && S_SvPV_can_swipe_buf(ssv, sflags, cur, len) ) {
4802
4800
/* Passes the swipe test. */
4801
+ char * buf = SvPVX_mutable(ssv);
4803
4802
SvLEN_set(dsv, len);
4804
4803
SvCUR_set(dsv, cur);
4805
- SvPV_set(dsv, SvPVX_mutable(ssv) );
4804
+ SvPV_set(dsv, buf );
4806
4805
4807
4806
assert(!SvOOK(ssv)); /* According to S_SvPV_can_swipe_buf() */
4808
4807
/* (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)
4811
4810
SvPV_set(ssv, NULL);
4812
4811
SvLEN_set(ssv, 0);
4813
4812
SvCUR_set(ssv, 0);
4814
- return;
4813
+ return dsv ;
4815
4814
}
4816
4815
4817
4816
ASSUME(!(SvFLAGS(dsv) & SVf_BREAK));
@@ -4868,7 +4867,7 @@ S_sv_freshcopy_POK(pTHX_ SV* dsv, SV* ssv, const I32 flags)
4868
4867
*(dsv->sv_u.svu_pv + cur) = '\0';
4869
4868
}
4870
4869
SvCUR_set(dsv, cur);
4871
- return;
4870
+ return dsv ;
4872
4871
}
4873
4872
4874
4873
/* 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)
4879
4878
* Perl_sv_setsv_flags essentially ignores magic, except for
4880
4879
* taint and vstring magic, which are also handled here. */
4881
4880
4882
- static void
4881
+ static SV*
4883
4882
S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
4884
4883
{
4885
4884
assert(ssv);
@@ -4905,7 +4904,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
4905
4904
}
4906
4905
SvCUR_set(dsv, 0);
4907
4906
SvLEN_set(dsv, 0);
4908
- return;
4907
+ return dsv ;
4909
4908
case SVt_PVIV:
4910
4909
SvANY(dsv) = new_XPVIV();
4911
4910
SvFLAGS(dsv) = SVt_PVIV;
@@ -4939,10 +4938,10 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
4939
4938
PL_tmps_stack[orig_ix] = &PL_sv_undef;
4940
4939
}
4941
4940
sv_setsv_flags(dsv, ssv, flags & ~SV_GMAGIC);
4942
- return;
4941
+ return dsv ;
4943
4942
case SVt_INVLIST:
4944
4943
invlist_clone(ssv, dsv);
4945
- return;
4944
+ return dsv ;
4946
4945
/* The following cases seem relatively rare, so have been kept out of
4947
4946
* Perl_sv_freshcopy_flags. */
4948
4947
case SVt_IV:
@@ -4958,7 +4957,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
4958
4957
assert(!SvOK(ssv));
4959
4958
SvFLAGS(dsv) = SVt_IV;
4960
4959
}
4961
- return;
4960
+ return dsv ;
4962
4961
case SVt_NV:
4963
4962
assert(!SvOK(ssv));
4964
4963
#if NVSIZE <= IVSIZE
@@ -4967,7 +4966,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
4967
4966
SvANY(dsv) = new_XNV();
4968
4967
#endif
4969
4968
SvFLAGS(dsv) = SVt_NV;
4970
- return;
4969
+ return dsv ;
4971
4970
}
4972
4971
assert(SvTYPE(dsv) == SVt_PVIV || SvTYPE(dsv) == SVt_PVNV || SvTYPE(dsv) == SVt_PVMG);
4973
4972
@@ -5001,7 +5000,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
5001
5000
SvCUR_set(dsv, 0);
5002
5001
SvLEN_set(dsv, 0);
5003
5002
SvPV_set(dsv, NULL);
5004
- return;
5003
+ return dsv ;
5005
5004
case SVp_POK|SVp_IOK|SVp_NOK|SVppv_STATIC: /* e.g. PL_sv_yes, PL_sv_no */
5006
5005
ASSUME(!(SvFLAGS(dsv) & SVf_BREAK));
5007
5006
ASSUME(SvTYPE(dsv) >= SVt_PVNV);
@@ -5013,19 +5012,19 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
5013
5012
5014
5013
SvIV_set(dsv, SvIVX(ssv));
5015
5014
SvNV_set(dsv, SvNVX(ssv));
5016
- return;
5015
+ return dsv ;
5017
5016
case SVf_ROK:
5018
5017
SvRV_set(dsv, SvREFCNT_inc(SvRV(ssv)));
5019
5018
SvCUR_set(dsv, 0);
5020
5019
SvLEN_set(dsv, 0);
5021
- return;
5020
+ return dsv ;
5022
5021
default:
5023
5022
SvCUR_set(dsv, 0);
5024
5023
SvLEN_set(dsv, 0);
5025
5024
SvPV_set(dsv, NULL);
5026
5025
5027
5026
if(!SvOK(ssv))
5028
- return;
5027
+ return dsv ;
5029
5028
/* Some cases seem so rare that we may as well let
5030
5029
* sv_setsv_flags deal with them. For example:
5031
5030
* SVp_IOK|SVp_NOK
@@ -5038,14 +5037,14 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
5038
5037
* Other cases are also rare but also trickier to handle,
5039
5038
* so keeps this function smaller to not even try. */
5040
5039
sv_setsv_flags(dsv,ssv,flags);
5041
- return;
5040
+ return dsv ;
5042
5041
case SVp_NOK:
5043
5042
ASSUME(SvTYPE(dsv) != SVt_PVIV);
5044
5043
SvNV_set(dsv, SvNVX(ssv));
5045
5044
SvCUR_set(dsv, 0);
5046
5045
SvLEN_set(dsv, 0);
5047
5046
SvPV_set(dsv, NULL);
5048
- return;
5047
+ return dsv ;
5049
5048
}
5050
5049
assert(SVp_POK); /* All other cases should have returned */
5051
5050
@@ -5072,7 +5071,7 @@ S_sv_freshcopy_PVxx(pTHX_ SV* dsv, SV* ssv, const I32 flags)
5072
5071
}
5073
5072
if (SvTAINTED(ssv))
5074
5073
SvTAINT(dsv);
5075
- return;
5074
+ return dsv ;
5076
5075
}
5077
5076
5078
5077
/*
@@ -5131,18 +5130,17 @@ Perl_sv_freshcopy_flags(pTHX_ SV *const old, I32 flags)
5131
5130
break;
5132
5131
case SVt_IV|SVf_ROK: /* [12%] */
5133
5132
assert(SvANY(dsv));
5133
+ SvFLAGS(dsv) = SVt_IV|SVf_ROK;
5134
5134
#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));
5136
5136
#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 );
5138
5138
#endif
5139
- SvFLAGS(dsv) = SVt_IV|SVf_ROK;
5140
5139
break;
5141
5140
case SVt_PV|SVf_POK: /* [32%] */
5142
5141
SvANY(dsv) = new_XPV();
5143
5142
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);
5146
5144
case SVt_NV|SVf_NOK: /* [< 1%] - but won't be in float-heavy code! */
5147
5145
#if NVSIZE <= IVSIZE
5148
5146
SET_SVANY_FOR_BODYLESS_NV(dsv);
@@ -5191,8 +5189,7 @@ Perl_sv_freshcopy_flags(pTHX_ SV *const old, I32 flags)
5191
5189
default:
5192
5190
SvANY(dsv) = NULL;
5193
5191
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);
5196
5193
}
5197
5194
5198
5195
return dsv;
0 commit comments