break;
case SVt_RV:
SvANY(dstr) = new_XRV();
- SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ SvRV(dstr) = SvRV(sstr) && SvWEAKREF(SvRV(sstr))
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
break;
case SVt_PV:
SvANY(dstr) = new_XPV();
SvLEN(dstr) = SvLEN(sstr);
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvIVX(dstr) = SvIVX(sstr);
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvNVX(dstr) = SvNVX(sstr);
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else