cvs commit: ponie/perl sv.c
[email protected] (Nicholas Clark) 11 Apr 2005 14:41:49 -0000
| Newsgroups | perl.ponie.changes |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 05/04/11 07:41:49
Modified: perl sv.c
Log:
Due to the rearranging of the sv_head/sv_body, sv_replace needs some tweaking.
Revision Changes Path
1.59 +7 -0 ponie/perl/sv.c
Index: sv.c
===================================================================
RCS file: /cvs/public/ponie/perl/sv.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -r1.58 -r1.59
--- sv.c 10 Apr 2005 04:17:49 -0000 1.58
+++ sv.c 11 Apr 2005 14:41:48 -0000 1.59
@@ -5979,6 +5979,8 @@
Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
{
U32 refcnt = SvREFCNT(sv);
+ int type = SvTYPE(nsv);
+
SV_CHECK_THINKFIRST_COW_DROP(sv);
if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Reference miscount in sv_replace()");
@@ -5998,6 +6000,11 @@
SvREFCNT(sv) = SvREFCNT(nsv);
SvFLAGS(sv) = SvFLAGS(nsv);
SvANY(sv) = SvANY(nsv);
+ /* Because the SV data structure is rearranged */
+ if (type == SVt_IV || type >= SVt_PVIV)
+ SvIV_set(sv, SvIVX(nsv));
+ if (type == SVt_NV || type >= SVt_PVNV)
+ SvNV_set(sv, SvNVX(nsv));
#ifdef PERL_COPY_ON_WRITE
if (SvIsCOW_normal(nsv)) {