Change 25390 by [EMAIL PROTECTED] on 2005/09/12 16:18:42

        Integrate:
        (the sv_upgrade change from)
        [ 22934]
        Assert that SV type has magic member when reading/writing.
        Will catch buggy code.
        
        [ 24199]
        Subject: [PATCH] Refactoring to Sv*_set() macros - patch #1
        From: Steve Peters <[EMAIL PROTECTED]>
        Message-ID: <[EMAIL PROTECTED]>
        Date: Wed, 6 Apr 2005 18:21:10 -0500
        
        [ 24204]
        Subject: [PATCH] Refactoring to Sv*_set() macros - patch #2
        From: Steve Peters <[EMAIL PROTECTED]>
        Date: Thu, 7 Apr 2005 13:51:49 -0500
        Message-ID: <[EMAIL PROTECTED]>
        
        [ 24206]
        Add SvIVX() to PERL_DEBUG_COW, and change pad.c to SvIVset()
        
        [ 24229]
        Subject: [PATCH] Refactoring to Sv*_set() macros - patch #3
        From: Steve Peters <[EMAIL PROTECTED]>
        Message-ID: <[EMAIL PROTECTED]>
        Date: Sun, 10 Apr 2005 21:37:36 -0500
        
        (with correction to SvUV_set)
        
        [ 24230]
        Don't PERL_HASH(SvUVX(...)...) as it's actually a set.
        Plus add an editor block
        
        [ 24239]
        Subject: [PATCH] Refactoring to Sv*_set() macros - patch #4
        Message-ID: <[EMAIL PROTECTED]>
        From: Steve Peters <[EMAIL PROTECTED]>
        Date: Sat, 16 Apr 2005 11:05:02 -0500
        
        plus fix to Perl_rvpv_dup assigning to an RV with SvPVX
        
        [ 24240]
        Two more uses of lvalue SvIVX()
        
        [ 24246]
        PERL_DEBUG_COW for SvUVX and SvPVX

Affected files ...

... //depot/maint-5.8/perl/av.c#18 integrate
... //depot/maint-5.8/perl/cop.h#14 integrate
... //depot/maint-5.8/perl/doio.c#33 integrate
... //depot/maint-5.8/perl/ext/ByteLoader/byterun.c#8 integrate
... //depot/maint-5.8/perl/ext/DynaLoader/dl_dyld.xs#5 integrate
... //depot/maint-5.8/perl/ext/List/Util/Util.xs#13 integrate
... //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.xs#4 integrate
... //depot/maint-5.8/perl/ext/Storable/Storable.xs#25 integrate
... //depot/maint-5.8/perl/ext/threads/threads.xs#24 integrate
... //depot/maint-5.8/perl/gv.c#28 integrate
... //depot/maint-5.8/perl/lib/ExtUtils/t/Constant.t#5 integrate
... //depot/maint-5.8/perl/malloc.c#11 integrate
... //depot/maint-5.8/perl/op.c#78 integrate
... //depot/maint-5.8/perl/pad.c#26 integrate
... //depot/maint-5.8/perl/perl.c#103 integrate
... //depot/maint-5.8/perl/pp.c#54 integrate
... //depot/maint-5.8/perl/pp_ctl.c#69 integrate
... //depot/maint-5.8/perl/pp_hot.c#58 integrate
... //depot/maint-5.8/perl/pp_sort.c#16 integrate
... //depot/maint-5.8/perl/scope.c#24 integrate
... //depot/maint-5.8/perl/sv.c#134 integrate
... //depot/maint-5.8/perl/sv.h#35 edit
... //depot/maint-5.8/perl/toke.c#62 integrate
... //depot/maint-5.8/perl/util.c#58 integrate

Differences ...

==== //depot/maint-5.8/perl/av.c#18 (text) ====
Index: perl/av.c
--- perl/av.c#17~24156~ Tue Apr  5 04:07:15 2005
+++ perl/av.c   Mon Sep 12 09:18:42 2005
@@ -88,7 +88,7 @@
            tmp = AvARRAY(av) - AvALLOC(av);
            Move(AvARRAY(av), AvALLOC(av), AvFILLp(av)+1, SV*);
            AvMAX(av) += tmp;
-           SvPVX(av) = (char*)AvALLOC(av);
+           SvPV_set(av, (char*)AvALLOC(av));
            if (AvREAL(av)) {
                while (tmp)
                    ary[--tmp] = &PL_sv_undef;
@@ -165,7 +165,7 @@
                    ary[--tmp] = &PL_sv_undef;
            }
            
-           SvPVX(av) = (char*)AvALLOC(av);
+           SvPV_set(av, (char*)AvALLOC(av));
            AvMAX(av) = newmax;
        }
     }
@@ -361,7 +361,7 @@
     sv_upgrade((SV *)av, SVt_PVAV);
     AvREAL_on(av);
     AvALLOC(av) = 0;
-    SvPVX(av) = 0;
+    SvPV_set(av, (char*)0);
     AvMAX(av) = AvFILLp(av) = -1;
     return av;
 }
@@ -389,7 +389,7 @@
     if (size) {                /* `defined' was returning undef for size==0 
anyway. */
        New(4,ary,size,SV*);
        AvALLOC(av) = ary;
-       SvPVX(av) = (char*)ary;
+       SvPV_set(av, (char*)ary);
        AvFILLp(av) = size - 1;
        AvMAX(av) = size - 1;
        for (i = 0; i < size; i++) {
@@ -414,7 +414,7 @@
     AvALLOC(av) = ary;
     Copy(strp,ary,size,SV*);
     AvFLAGS(av) = AVf_REIFY;
-    SvPVX(av) = (char*)ary;
+    SvPV_set(av, (char*)ary);
     AvFILLp(av) = size - 1;
     AvMAX(av) = size - 1;
     while (size--) {
@@ -472,7 +472,7 @@
     }
     if ((key = AvARRAY(av) - AvALLOC(av))) {
        AvMAX(av) += key;
-       SvPVX(av) = (char*)AvALLOC(av);
+       SvPV_set(av, (char*)AvALLOC(av));
     }
     AvFILLp(av) = -1;
 
@@ -506,7 +506,7 @@
     }
     Safefree(AvALLOC(av));
     AvALLOC(av) = 0;
-    SvPVX(av) = 0;
+    SvPV_set(av, (char*)0);
     AvMAX(av) = AvFILLp(av) = -1;
     if (AvARYLEN(av)) {
        SvREFCNT_dec(AvARYLEN(av));
@@ -645,7 +645,7 @@
     
        AvMAX(av) += i;
        AvFILLp(av) += i;
-       SvPVX(av) = (char*)(AvARRAY(av) - i);
+       SvPV_set(av, (char*)(AvARRAY(av) - i));
     }
     if (num) {
        i = AvFILLp(av);
@@ -662,7 +662,7 @@
        /* Make extra elements into a buffer */
        AvMAX(av) -= slide;
        AvFILLp(av) -= slide;
-       SvPVX(av) = (char*)(AvARRAY(av) + slide);
+       SvPV_set(av, (char*)(AvARRAY(av) + slide));
     }
 }
 
@@ -705,7 +705,7 @@
     retval = *AvARRAY(av);
     if (AvREAL(av))
        *AvARRAY(av) = &PL_sv_undef;
-    SvPVX(av) = (char*)(AvARRAY(av) + 1);
+    SvPV_set(av, (char*)(AvARRAY(av) + 1));
     AvMAX(av)--;
     AvFILLp(av)--;
     if (SvSMAGICAL(av))

==== //depot/maint-5.8/perl/cop.h#14 (text) ====
Index: perl/cop.h
--- perl/cop.h#13~22555~        Mon Mar 22 11:57:32 2004
+++ perl/cop.h  Mon Sep 12 09:18:42 2005
@@ -171,7 +171,7 @@
 #define CLEAR_ARGARRAY(ary) \
     STMT_START {                                                       \
        AvMAX(ary) += AvARRAY(ary) - AvALLOC(ary);                      \
-       SvPVX(ary) = (char*)AvALLOC(ary);                               \
+       SvPV_set(ary, (char*)AvALLOC(ary));                             \
        AvFILLp(ary) = -1;                                              \
     } STMT_END
 

==== //depot/maint-5.8/perl/doio.c#33 (text) ====
Index: perl/doio.c
--- perl/doio.c#32~25385~       Sun Sep 11 13:36:26 2005
+++ perl/doio.c Mon Sep 12 09:18:42 2005
@@ -674,10 +674,10 @@
                 sv = *av_fetch(PL_fdpid,fd,TRUE);
                 (void)SvUPGRADE(sv, SVt_IV);
                 pid = SvIVX(sv);
-                SvIVX(sv) = 0;
+                SvIV_set(sv, 0);
                 sv = *av_fetch(PL_fdpid,savefd,TRUE);
                 (void)SvUPGRADE(sv, SVt_IV);
-                SvIVX(sv) = pid;
+                SvIV_set(sv, pid);
                 UNLOCK_FDPID_MUTEX;
             }
 #endif

==== //depot/maint-5.8/perl/ext/ByteLoader/byterun.c#8 (text+w) ====
Index: perl/ext/ByteLoader/byterun.c
--- perl/ext/ByteLoader/byterun.c#7~21053~      Fri Sep  5 13:45:41 2003
+++ perl/ext/ByteLoader/byterun.c       Mon Sep 12 09:18:42 2005
@@ -242,14 +242,14 @@
            {
                IV arg;
                BGET_IV(arg);
-               SvIVX(bstate->bs_sv) = arg;
+               SvIV_set(bstate->bs_sv, arg);
                break;
            }
          case INSN_XNV:                /* 26 */
            {
                NV arg;
                BGET_NV(arg);
-               SvNVX(bstate->bs_sv) = arg;
+               SvNV_set(bstate->bs_sv, arg);
                break;
            }
          case INSN_XLV_TARGOFF:                /* 27 */

==== //depot/maint-5.8/perl/ext/DynaLoader/dl_dyld.xs#5 (text) ====
Index: perl/ext/DynaLoader/dl_dyld.xs
--- perl/ext/DynaLoader/dl_dyld.xs#4~24197~     Fri Apr  8 02:05:27 2005
+++ perl/ext/DynaLoader/dl_dyld.xs      Mon Sep 12 09:18:42 2005
@@ -97,8 +97,7 @@
                     path, number, type);
        break;
     }
-    safefree(dl_last_error);
-    dl_last_error = savepv(error);
+    sv_setpv(MY_CXT.x_dl_last_error, error);
 }
 
 static char *dlopen(char *path, int mode /* mode is ignored */)

==== //depot/maint-5.8/perl/ext/List/Util/Util.xs#13 (text) ====
Index: perl/ext/List/Util/Util.xs
--- perl/ext/List/Util/Util.xs#12~22862~        Sun May 30 03:09:57 2004
+++ perl/ext/List/Util/Util.xs  Mon Sep 12 09:18:42 2005
@@ -352,18 +352,18 @@
     (void)SvUPGRADE(ST(0),SVt_PVNV);
     sv_setpvn(ST(0),ptr,len);
     if(SvNOK(num) || SvPOK(num) || SvMAGICAL(num)) {
-       SvNVX(ST(0)) = SvNV(num);
+       SvNV_set(ST(0), SvNV(num));
        SvNOK_on(ST(0));
     }
 #ifdef SVf_IVisUV
     else if (SvUOK(num)) {
-       SvUVX(ST(0)) = SvUV(num);
+       SvUV_set(ST(0), SvUV(num));
        SvIOK_on(ST(0));
        SvIsUV_on(ST(0));
     }
 #endif
     else {
-       SvIVX(ST(0)) = SvIV(num);
+       SvIV_set(ST(0), SvIV(num));
        SvIOK_on(ST(0));
     }
     if(PL_tainting && (SvTAINTED(num) || SvTAINTED(str)))

==== //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.xs#4 (text) ====
Index: perl/ext/PerlIO/encoding/encoding.xs
--- perl/ext/PerlIO/encoding/encoding.xs#3~19611~       Sat May 24 00:50:43 2003
+++ perl/ext/PerlIO/encoding/encoding.xs        Mon Sep 12 09:18:42 2005
@@ -321,7 +321,7 @@
               use = e->base.bufsiz;
            }
            }
-           SvPVX(e->dataSV) = (char *) ptr;
+           SvPV_set(e->dataSV, (char *) ptr);
            SvLEN(e->dataSV) = 0;  /* Hands off sv.c - it isn't yours */
            SvCUR_set(e->dataSV,use);
            SvPOK_only(e->dataSV);
@@ -462,7 +462,7 @@
                SAVETMPS;
                str = sv_newmortal();
                sv_upgrade(str, SVt_PV);
-               SvPVX(str) = (char*)e->base.ptr;
+               SvPV_set(str, (char*)e->base.ptr);
                SvLEN(str) = 0;
                SvCUR_set(str, e->base.end - e->base.ptr);
                SvPOK_only(str);

==== //depot/maint-5.8/perl/ext/Storable/Storable.xs#25 (text) ====
Index: perl/ext/Storable/Storable.xs
--- perl/ext/Storable/Storable.xs#24~25385~     Sun Sep 11 13:36:26 2005
+++ perl/ext/Storable/Storable.xs       Mon Sep 12 09:18:42 2005
@@ -5829,7 +5829,7 @@
                                   bytes_from_utf8 returned us.  */
                                SvUPGRADE(in, SVt_PV);
                                SvPOK_on(in);
-                               SvPVX(in) = asbytes;
+                               SvPV_set(in, asbytes);
                                SvLEN(in) = klen_tmp;
                                SvCUR(in) = klen_tmp - 1;
                        }

==== //depot/maint-5.8/perl/ext/threads/threads.xs#24 (xtext) ====
Index: perl/ext/threads/threads.xs
--- perl/ext/threads/threads.xs#23~23304~       Thu Sep  9 23:04:43 2004
+++ perl/ext/threads/threads.xs Mon Sep 12 09:18:42 2005
@@ -205,7 +205,7 @@
 ithread_mg_get(pTHX_ SV *sv, MAGIC *mg)
 {
     ithread *thread = (ithread *) mg->mg_ptr;
-    SvIVX(sv) = PTR2IV(thread);
+    SvIV_set(sv, PTR2IV(thread));
     SvIOK_on(sv);
     return 0;
 }

==== //depot/maint-5.8/perl/gv.c#28 (text) ====
Index: perl/gv.c
--- perl/gv.c#27~25385~ Sun Sep 11 13:36:26 2005
+++ perl/gv.c   Mon Sep 12 09:18:42 2005
@@ -112,7 +112,7 @@
     sv_upgrade((SV*)gv, SVt_PVGV);
     if (SvLEN(gv)) {
        if (proto) {
-           SvPVX(gv) = NULL;
+           SvPV_set(gv, NULL);
            SvLEN(gv) = 0;
            SvPOK_off(gv);
        } else
@@ -531,7 +531,7 @@
          * pass along the same data via some unused fields in the CV
          */
         CvSTASH(cv) = stash;
-        SvPVX(cv) = (char *)name; /* cast to lose constness warning */
+        SvPV_set(cv, (char *)name); /* cast to lose constness warning */
         SvCUR(cv) = len;
         return gv;
     }

==== //depot/maint-5.8/perl/lib/ExtUtils/t/Constant.t#5 (text) ====
Index: perl/lib/ExtUtils/t/Constant.t
--- perl/lib/ExtUtils/t/Constant.t#4~24168~     Tue Apr  5 09:22:01 2005
+++ perl/lib/ExtUtils/t/Constant.t      Mon Sep 12 09:18:42 2005
@@ -508,7 +508,7 @@
                {name=>"RFC1149", type=>"SV", value=>"sv_2mortal(temp_sv)",
                 pre=>"SV *temp_sv = newSVpv(RFC1149, 0); "
                 . "(void) SvUPGRADE(temp_sv,SVt_PVIV); SvIOK_on(temp_sv); "
-                . "SvIVX(temp_sv) = 1149;"},
+                . "SvIV_set(temp_sv, 1149);"},
               );
 
   push @items, $_ foreach keys %compass;

==== //depot/maint-5.8/perl/malloc.c#11 (text) ====
Index: perl/malloc.c
--- perl/malloc.c#10~24156~     Tue Apr  5 04:07:15 2005
+++ perl/malloc.c       Mon Sep 12 09:18:42 2005
@@ -1175,7 +1175,7 @@
     }
 
     SvPOK_off(sv);
-    SvPVX(sv) = Nullch;
+    SvPV_set(sv, Nullch);
     SvCUR(sv) = SvLEN(sv) = 0;
     *size = malloced_size(pv) + M_OVERHEAD;
     return pv - sizeof(union overhead);

==== //depot/maint-5.8/perl/op.c#78 (text) ====
Index: perl/op.c
--- perl/op.c#77~25385~ Sun Sep 11 13:36:26 2005
+++ perl/op.c   Mon Sep 12 09:18:42 2005
@@ -1629,7 +1629,11 @@
     meth = newSVpvn("import", 6);
     (void)SvUPGRADE(meth, SVt_PVIV);
     (void)SvIOK_on(meth);
-    PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
+    {
+       U32 hash;
+       PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
+       SvUV_set(meth, hash);
+    }
     imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
                   append_elem(OP_LIST,
                               prepend_elem(OP_LIST, pack, list(arg)),
@@ -3025,7 +3029,11 @@
            meth = newSVpvn("VERSION",7);
            sv_upgrade(meth, SVt_PVIV);
            (void)SvIOK_on(meth);
-           PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
+           {
+               U32 hash;
+               PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
+               SvUV_set(meth, hash);
+           }
            veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
                            append_elem(OP_LIST,
                                        prepend_elem(OP_LIST, pack, 
list(version)),
@@ -3049,7 +3057,11 @@
        meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
        (void)SvUPGRADE(meth, SVt_PVIV);
        (void)SvIOK_on(meth);
-       PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
+       {
+           U32 hash;
+           PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
+           SvUV_set(meth, hash);
+       }
        imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
                       append_elem(OP_LIST,
                                   prepend_elem(OP_LIST, pack, list(arg)),
@@ -3475,7 +3487,7 @@
        SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
         if (svp && *svp != &PL_sv_undef ) {
            (void)SvIOK_on(*svp);
-           SvIVX(*svp) = PTR2IV(cop);
+           SvIV_set(*svp, PTR2IV(cop));
        }
     }
 
@@ -7071,3 +7083,13 @@
     ST(0) = (SV*)XSANY.any_ptr;
     XSRETURN(1);
 }
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vim: shiftwidth=4:
+*/

==== //depot/maint-5.8/perl/pad.c#26 (text) ====
Index: perl/pad.c
--- perl/pad.c#25~25370~        Sat Sep 10 06:47:01 2005
+++ perl/pad.c  Mon Sep 12 09:18:42 2005
@@ -359,8 +359,8 @@
        SvFAKE_on(namesv);
     else {
        /* not yet introduced */
-       SvNVX(namesv) = (NV)PAD_MAX;    /* min */
-       SvIVX(namesv) = 0;              /* max */
+       SvNV_set(namesv, (NV)PAD_MAX);  /* min */
+       SvIV_set(namesv, 0);            /* max */
 
        if (!PL_min_intro_pending)
            PL_min_intro_pending = offset;
@@ -459,8 +459,8 @@
     name = NEWSV(1106, 0);
     sv_upgrade(name, SVt_PVNV);
     sv_setpvn(name, "&", 1);
-    SvIVX(name) = -1;
-    SvNVX(name) = 1;
+    SvIV_set(name, -1);
+    SvNV_set(name, 1);
     ix = pad_alloc(op_type, SVs_PADMY);
     av_store(PL_comppad_name, ix, name);
     /* XXX DAPM use PL_curpad[] ? */
@@ -925,8 +925,8 @@
        if ((sv = svp[i]) && sv != &PL_sv_undef
                && !SvFAKE(sv) && !SvIVX(sv))
        {
-           SvIVX(sv) = PAD_MAX;        /* Don't know scope end yet. */
-           SvNVX(sv) = (NV)PL_cop_seqmax;
+           SvIV_set(sv, PAD_MAX);      /* Don't know scope end yet. */
+           SvNV_set(sv, (NV)PL_cop_seqmax);
            DEBUG_Xv(PerlIO_printf(Perl_debug_log,
                "Pad intromy: %ld \"%s\", (%lu,%lu)\n",
                (long)i, SvPVX(sv),
@@ -974,7 +974,7 @@
        if ((sv = svp[off]) && sv != &PL_sv_undef
                && !SvFAKE(sv) && SvIVX(sv) == PAD_MAX)
        {
-           SvIVX(sv) = PL_cop_seqmax;
+           SvIV_set(sv, PL_cop_seqmax);
            DEBUG_Xv(PerlIO_printf(Perl_debug_log,
                "Pad leavemy: %ld \"%s\", (%lu,%lu)\n",
                (long)off, SvPVX(sv),

==== //depot/maint-5.8/perl/perl.c#103 (text) ====
Index: perl/perl.c
--- perl/perl.c#102~25385~      Sun Sep 11 13:36:26 2005
+++ perl/perl.c Mon Sep 12 09:18:42 2005
@@ -4654,7 +4654,7 @@
     SvFLAGS(PL_thrsv) = SVt_PV;
     SvANY(PL_thrsv) = (void*)xpv;
     SvREFCNT(PL_thrsv) = 1 << 30;      /* practically infinite */
-    SvPVX(PL_thrsv) = (char*)thr;
+    SvPV_set(PL_thrsvr, (char*)thr);
     SvCUR_set(PL_thrsv, sizeof(thr));
     SvLEN_set(PL_thrsv, sizeof(thr));
     *SvEND(PL_thrsv) = '\0';   /* in the trailing_nul field */

==== //depot/maint-5.8/perl/pp.c#54 (text) ====
Index: perl/pp.c
--- perl/pp.c#53~24483~ Mon May 16 08:19:24 2005
+++ perl/pp.c   Mon Sep 12 09:18:42 2005
@@ -850,7 +850,7 @@
     if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
         && SvIVX(TOPs) != IV_MIN)
     {
-       --SvIVX(TOPs);
+       SvIV_set(TOPs, SvIVX(TOPs) - 1);
        SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
     }
     else
@@ -868,7 +868,7 @@
     if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
         && SvIVX(TOPs) != IV_MAX)
     {
-       ++SvIVX(TOPs);
+       SvIV_set(TOPs, SvIVX(TOPs) + 1);
        SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
     }
     else
@@ -890,7 +890,7 @@
     if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
         && SvIVX(TOPs) != IV_MIN)
     {
-       --SvIVX(TOPs);
+       SvIV_set(TOPs, SvIVX(TOPs) - 1);
        SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
     }
     else
@@ -4276,7 +4276,7 @@
                    *dst-- = *src--;
            }
            dst = AvARRAY(ary);
-           SvPVX(ary) = (char*)(AvARRAY(ary) - diff); /* diff is negative */
+           SvPV_set(ary, (char*)(AvARRAY(ary) - diff)); /* diff is negative */
            AvMAX(ary) += diff;
        }
        else {
@@ -4313,7 +4313,7 @@
                    dst = src - diff;
                    Move(src, dst, offset, SV*);
                }
-               SvPVX(ary) = (char*)(AvARRAY(ary) - diff);/* diff is positive */
+               SvPV_set(ary, (char*)(AvARRAY(ary) - diff));/* diff is positive 
*/
                AvMAX(ary) += diff;
                AvFILLp(ary) += diff;
            }

==== //depot/maint-5.8/perl/pp_ctl.c#69 (text) ====
Index: perl/pp_ctl.c
--- perl/pp_ctl.c#68~25385~     Sun Sep 11 13:36:26 2005
+++ perl/pp_ctl.c       Mon Sep 12 09:18:42 2005
@@ -210,12 +210,12 @@
            SvOOK_off(targ);
            if (SvLEN(targ))
                Safefree(SvPVX(targ));
-           SvPVX(targ) = SvPVX(dstr);
+           SvPV_set(targ, SvPVX(dstr));
            SvCUR_set(targ, SvCUR(dstr));
            SvLEN_set(targ, SvLEN(dstr));
            if (DO_UTF8(dstr))
                SvUTF8_on(targ);
-           SvPVX(dstr) = 0;
+           SvPV_set(dstr, (char*)0);
            sv_free(dstr);
 
            TAINT_IF(cx->sb_rxtainted & 1);
@@ -2322,13 +2322,13 @@
                        ary = AvALLOC(av);
                        if (AvARRAY(av) != ary) {
                            AvMAX(av) += AvARRAY(av) - AvALLOC(av);
-                           SvPVX(av) = (char*)ary;
+                           SvPV_set(av, (char*)ary);
                        }
                        if (items >= AvMAX(av) + 1) {
                            AvMAX(av) = items - 1;
                            Renew(ary,items+1,SV*);
                            AvALLOC(av) = ary;
-                           SvPVX(av) = (char*)ary;
+                           SvPV_set(av, (char*)ary);
                        }
                    }
                    ++mark;
@@ -2360,7 +2360,7 @@
                        if (type < SVt_PVIV && type != SVt_IV)
                            sv_upgrade(sv, SVt_PVIV);
                        (void)SvIOK_on(sv);
-                       SvIVX(sv) = PTR2IV(cv); /* Do it the quickest way */
+                       SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
                    } else {
                        gv_efullname3(sv, CvGV(cv), Nullch);
                    }

==== //depot/maint-5.8/perl/pp_hot.c#58 (text) ====
Index: perl/pp_hot.c
--- perl/pp_hot.c#57~25385~     Sun Sep 11 13:36:26 2005
+++ perl/pp_hot.c       Mon Sep 12 09:18:42 2005
@@ -319,7 +319,7 @@
     if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
         && SvIVX(TOPs) != IV_MAX)
     {
-       ++SvIVX(TOPs);
+       SvIV_set(TOPs, SvIVX(TOPs) + 1);
        SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
     }
     else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
@@ -2265,11 +2265,11 @@
        SvOOK_off(TARG);
        if (SvLEN(TARG))
            Safefree(SvPVX(TARG));
-       SvPVX(TARG) = SvPVX(dstr);
+       SvPV_set(TARG, SvPVX(dstr));
        SvCUR_set(TARG, SvCUR(dstr));
        SvLEN_set(TARG, SvLEN(dstr));
        doutf8 |= DO_UTF8(dstr);
-       SvPVX(dstr) = 0;
+       SvPV_set(dstr, (char*)0);
        sv_free(dstr);
 
        TAINT_IF(rxtainted & 1);
@@ -2582,7 +2582,7 @@
        if (type < SVt_PVIV && type != SVt_IV)
            sv_upgrade(dbsv, SVt_PVIV);
        (void)SvIOK_on(dbsv);
-       SvIVX(dbsv) = PTR2IV(cv);       /* Do it the quickest way  */
+       SvIV_set(dbsv, PTR2IV(cv));     /* Do it the quickest way  */
     }
 
     if (CvXSUB(cv))

==== //depot/maint-5.8/perl/pp_sort.c#16 (text) ====
Index: perl/pp_sort.c
--- perl/pp_sort.c#15~24202~    Fri Apr  8 03:58:39 2005
+++ perl/pp_sort.c      Mon Sep 12 09:18:42 2005
@@ -1758,12 +1758,12 @@
        SV** ary = AvALLOC(av);
        if (AvARRAY(av) != ary) {
            AvMAX(av) += AvARRAY(av) - AvALLOC(av);
-           SvPVX(av) = (char*)ary;
+           SvPV_set(av, (char*)ary);
        }
        if (AvMAX(av) < 1) {
            AvMAX(av) = 1;
            Renew(ary,2,SV*);
-           SvPVX(av) = (char*)ary;
+           SvPV_set(av, (char*)ary);
        }
     }
     AvFILLp(av) = 1;

==== //depot/maint-5.8/perl/scope.c#24 (text) ====
Index: perl/scope.c
--- perl/scope.c#23~23830~      Wed Jan 19 15:42:51 2005
+++ perl/scope.c        Mon Sep 12 09:18:42 2005
@@ -873,7 +873,7 @@
            if (SvPVX(gv) && SvLEN(gv) > 0) {
                Safefree(SvPVX(gv));
            }
-           SvPVX(gv) = (char *)SSPOPPTR;
+           SvPV_set(gv, (char *)SSPOPPTR);
            SvCUR(gv) = (STRLEN)SSPOPIV;
            SvLEN(gv) = (STRLEN)SSPOPIV;
            gp_free(gv);

==== //depot/maint-5.8/perl/sv.c#134 (text) ====
Index: perl/sv.c
--- perl/sv.c#133~25385~        Sun Sep 11 13:36:26 2005
+++ perl/sv.c   Mon Sep 12 09:18:42 2005
@@ -1392,16 +1392,19 @@
        Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
     }
 
+    SvFLAGS(sv) &= ~SVTYPEMASK;
+    SvFLAGS(sv) |= mt;
+
     switch (mt) {
     case SVt_NULL:
        Perl_croak(aTHX_ "Can't upgrade to undef");
     case SVt_IV:
        SvANY(sv) = new_XIV();
-       SvIVX(sv)       = iv;
+       SvIV_set(sv, iv);
        break;
     case SVt_NV:
        SvANY(sv) = new_XNV();
-       SvNVX(sv)       = nv;
+       SvNV_set(sv, nv);
        break;
     case SVt_RV:
        SvANY(sv) = new_XRV();
@@ -1409,45 +1412,45 @@
        break;
     case SVt_PV:
        SvANY(sv) = new_XPV();
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
        break;
     case SVt_PVIV:
        SvANY(sv) = new_XPVIV();
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
+       SvIV_set(sv, iv);
        if (SvNIOK(sv))
            (void)SvIOK_on(sv);
        SvNOK_off(sv);
        break;
     case SVt_PVNV:
        SvANY(sv) = new_XPVNV();
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        break;
     case SVt_PVMG:
        SvANY(sv) = new_XPVMG();
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        break;
     case SVt_PVLV:
        SvANY(sv) = new_XPVLV();
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        LvTARGOFF(sv)   = 0;
@@ -1459,11 +1462,11 @@
        SvANY(sv) = new_XPVAV();
        if (pv)
            Safefree(pv);
-       SvPVX(sv)       = 0;
+       SvPV_set(sv, (char*)0);
        AvMAX(sv)       = -1;
        AvFILLp(sv)     = -1;
-       SvIVX(sv)       = 0;
-       SvNVX(sv)       = 0.0;
+       SvIV_set(sv, 0);
+       SvNV_set(sv, 0.0);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        AvALLOC(sv)     = 0;
@@ -1474,7 +1477,7 @@
        SvANY(sv) = new_XPVHV();
        if (pv)
            Safefree(pv);
-       SvPVX(sv)       = 0;
+       SvPV_set(sv, (char*)0);
        HvFILL(sv)      = 0;
        HvMAX(sv)       = 0;
        HvTOTALKEYS(sv) = 0;
@@ -1489,21 +1492,21 @@
     case SVt_PVCV:
        SvANY(sv) = new_XPVCV();
        Zero(SvANY(sv), 1, XPVCV);
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        break;
     case SVt_PVGV:
        SvANY(sv) = new_XPVGV();
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        GvGP(sv)        = 0;
@@ -1514,11 +1517,11 @@
        break;
     case SVt_PVBM:
        SvANY(sv) = new_XPVBM();
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        BmRARE(sv)      = 0;
@@ -1528,29 +1531,27 @@
     case SVt_PVFM:
        SvANY(sv) = new_XPVFM();
        Zero(SvANY(sv), 1, XPVFM);
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        break;
     case SVt_PVIO:
        SvANY(sv) = new_XPVIO();
        Zero(SvANY(sv), 1, XPVIO);
-       SvPVX(sv)       = pv;
+       SvPV_set(sv, pv);
        SvCUR(sv)       = cur;
        SvLEN(sv)       = len;
-       SvIVX(sv)       = iv;
-       SvNVX(sv)       = nv;
+       SvIV_set(sv, iv);
+       SvNV_set(sv, nv);
        SvMAGIC(sv)     = magic;
        SvSTASH(sv)     = stash;
        IoPAGE_LEN(sv)  = 60;
        break;
     }
-    SvFLAGS(sv) &= ~SVTYPEMASK;
-    SvFLAGS(sv) |= mt;
     return TRUE;
 }
 
@@ -1570,7 +1571,7 @@
     if (SvIVX(sv)) {
        char *s = SvPVX(sv);
        SvLEN(sv) += SvIVX(sv);
-       SvPVX(sv) -= SvIVX(sv);
+       SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
        SvIV_set(sv, 0);
        Move(s, SvPVX(sv), SvCUR(sv)+1, char);
     }
@@ -1685,7 +1686,7 @@
                   OP_DESC(PL_op));
     }
     (void)SvIOK_only(sv);                      /* validate number */
-    SvIVX(sv) = i;
+    SvIV_set(sv, i);
     SvTAINT(sv);
 }
 
@@ -1730,7 +1731,7 @@
     }
     sv_setiv(sv, 0);
     SvIsUV_on(sv);
-    SvUVX(sv) = u;
+    SvUV_set(sv, u);
 }
 
 /*
@@ -1795,7 +1796,7 @@
        Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
                   OP_NAME(PL_op));
     }
-    SvNVX(sv) = num;
+    SvNV_set(sv, num);
     (void)SvNOK_only(sv);                      /* validate number */
     SvTAINT(sv);
 }
@@ -2006,14 +2007,14 @@
     if (SvNVX(sv) < (NV)IV_MIN) {
        (void)SvIOKp_on(sv);
        (void)SvNOK_on(sv);
-       SvIVX(sv) = IV_MIN;
+       SvIV_set(sv, IV_MIN);
        return IS_NUMBER_UNDERFLOW_IV;
     }
     if (SvNVX(sv) > (NV)UV_MAX) {
        (void)SvIOKp_on(sv);
        (void)SvNOK_on(sv);
        SvIsUV_on(sv);
-       SvUVX(sv) = UV_MAX;
+       SvUV_set(sv, UV_MAX);
        return IS_NUMBER_OVERFLOW_UV;
     }
     (void)SvIOKp_on(sv);
@@ -2021,7 +2022,7 @@
     /* Can't use strtol etc to convert this string.  (See truth table in
        sv_2iv  */
     if (SvNVX(sv) <= (UV)IV_MAX) {
-        SvIVX(sv) = I_V(SvNVX(sv));
+        SvIV_set(sv, I_V(SvNVX(sv)));
         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
         } else {
@@ -2030,7 +2031,7 @@
         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
     }
     SvIsUV_on(sv);
-    SvUVX(sv) = U_V(SvNVX(sv));
+    SvUV_set(sv, U_V(SvNVX(sv)));
     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
         if (SvUVX(sv) == UV_MAX) {
             /* As we know that NVs don't preserve UVs, UV_MAX cannot
@@ -2117,7 +2118,7 @@
           answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
           cases go to UV */
        if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
-           SvIVX(sv) = I_V(SvNVX(sv));
+           SvIV_set(sv, I_V(SvNVX(sv)));
            if (SvNVX(sv) == (NV) SvIVX(sv)
 #ifndef NV_PRESERVES_UV
                && (((UV)1 << NV_PRESERVES_UV_BITS) >
@@ -2155,7 +2156,7 @@
               0x8000000000000000 which will be exact. NWC */
        }
        else {
-           SvUVX(sv) = U_V(SvNVX(sv));
+           SvUV_set(sv, U_V(SvNVX(sv)));
            if (
                (SvNVX(sv) == (NV) SvUVX(sv))
 #ifndef  NV_PRESERVES_UV
@@ -2218,15 +2219,15 @@
            if (!(numtype & IS_NUMBER_NEG)) {
                /* positive */;
                if (value <= (UV)IV_MAX) {
-                   SvIVX(sv) = (IV)value;
+                   SvIV_set(sv, (IV)value);
                } else {
-                   SvUVX(sv) = value;
+                   SvUV_set(sv, value);
                    SvIsUV_on(sv);
                }
            } else {
                /* 2s complement assumption  */
                if (value <= (UV)IV_MIN) {
-                   SvIVX(sv) = -(IV)value;
+                   SvIV_set(sv, -(IV)value);
                } else {
                    /* Too negative for an IV.  This is a double upgrade, but
                       I'm assuming it will be rare.  */
@@ -2235,8 +2236,8 @@
                    SvNOK_on(sv);
                    SvIOK_off(sv);
                    SvIOKp_on(sv);
-                   SvNVX(sv) = -(NV)value;
-                   SvIVX(sv) = IV_MIN;
+                   SvNV_set(sv, -(NV)value);
+                   SvIV_set(sv, IV_MIN);
                }
            }
        }
@@ -2247,7 +2248,7 @@
        if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
            != IS_NUMBER_IN_UV) {
            /* It wasn't an (integer that doesn't overflow the UV). */
-           SvNVX(sv) = Atof(SvPVX(sv));
+           SvNV_set(sv, Atof(SvPVX(sv)));
 
            if (! numtype && ckWARN(WARN_NUMERIC))
                not_a_number(sv);
@@ -2265,7 +2266,7 @@
            (void)SvIOKp_on(sv);
            (void)SvNOK_on(sv);
            if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
-               SvIVX(sv) = I_V(SvNVX(sv));
+               SvIV_set(sv, I_V(SvNVX(sv)));
                if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
                    SvIOK_on(sv);
                } else {
@@ -2276,10 +2277,10 @@
                if (SvNVX(sv) > (NV)UV_MAX) {
                    SvIsUV_on(sv);
                    /* Integer is inaccurate. NOK, IOKp, is UV */
-                   SvUVX(sv) = UV_MAX;
+                   SvUV_set(sv, UV_MAX);
                    SvIsUV_on(sv);
                } else {
-                   SvUVX(sv) = U_V(SvNVX(sv));
+                   SvUV_set(sv, U_V(SvNVX(sv)));
                    /* 0xFFFFFFFFFFFFFFFF not an issue in here */
                    if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
                        SvIOK_on(sv);
@@ -2305,7 +2306,7 @@
                     /* Small enough to preserve all bits. */
                     (void)SvIOKp_on(sv);
                     SvNOK_on(sv);
-                    SvIVX(sv) = I_V(SvNVX(sv));
+                    SvIV_set(sv, I_V(SvNVX(sv)));
                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
                         SvIOK_on(sv);
                     /* Assumption: first non-preserved integer is < IV_MAX,
@@ -2411,7 +2412,7 @@
 
        (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
        if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
-           SvIVX(sv) = I_V(SvNVX(sv));
+           SvIV_set(sv, I_V(SvNVX(sv)));
            if (SvNVX(sv) == (NV) SvIVX(sv)
 #ifndef NV_PRESERVES_UV
                && (((UV)1 << NV_PRESERVES_UV_BITS) >
@@ -2449,7 +2450,7 @@
               0x8000000000000000 which will be exact. NWC */
        }
        else {
-           SvUVX(sv) = U_V(SvNVX(sv));
+           SvUV_set(sv, U_V(SvNVX(sv)));
            if (
                (SvNVX(sv) == (NV) SvUVX(sv))
 #ifndef  NV_PRESERVES_UV
@@ -2508,16 +2509,16 @@
            if (!(numtype & IS_NUMBER_NEG)) {
                /* positive */;
                if (value <= (UV)IV_MAX) {
-                   SvIVX(sv) = (IV)value;
+                   SvIV_set(sv, (IV)value);
                } else {
                    /* it didn't overflow, and it was positive. */
-                   SvUVX(sv) = value;
+                   SvUV_set(sv, value);
                    SvIsUV_on(sv);
                }
            } else {
                /* 2s complement assumption  */
                if (value <= (UV)IV_MIN) {
-                   SvIVX(sv) = -(IV)value;
+                   SvIV_set(sv, -(IV)value);
                } else {
                    /* Too negative for an IV.  This is a double upgrade, but
                       I'm assuming it will be rare.  */
@@ -2526,8 +2527,8 @@
                    SvNOK_on(sv);
                    SvIOK_off(sv);
                    SvIOKp_on(sv);
-                   SvNVX(sv) = -(NV)value;
-                   SvIVX(sv) = IV_MIN;
+                   SvNV_set(sv, -(NV)value);
+                   SvIV_set(sv, IV_MIN);
                }
            }
        }
@@ -2535,7 +2536,7 @@
        if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
            != IS_NUMBER_IN_UV) {
            /* It wasn't an integer, or it overflowed the UV. */
-           SvNVX(sv) = Atof(SvPVX(sv));
+           SvNV_set(sv, Atof(SvPVX(sv)));
 
             if (! numtype && ckWARN(WARN_NUMERIC))
                    not_a_number(sv);
@@ -2552,7 +2553,7 @@
             (void)SvIOKp_on(sv);
             (void)SvNOK_on(sv);
             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
-                SvIVX(sv) = I_V(SvNVX(sv));
+                SvIV_set(sv, I_V(SvNVX(sv)));
                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
                     SvIOK_on(sv);
                 } else {
@@ -2563,10 +2564,10 @@
                 if (SvNVX(sv) > (NV)UV_MAX) {
                     SvIsUV_on(sv);
                     /* Integer is inaccurate. NOK, IOKp, is UV */
-                    SvUVX(sv) = UV_MAX;
+                    SvUV_set(sv, UV_MAX);
                     SvIsUV_on(sv);
                 } else {
-                    SvUVX(sv) = U_V(SvNVX(sv));
+                    SvUV_set(sv, U_V(SvNVX(sv)));
                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
                        NV preservse UV so can do correct comparison.  */
                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
@@ -2592,7 +2593,7 @@
                     /* Small enough to preserve all bits. */
                     (void)SvIOKp_on(sv);
                     SvNOK_on(sv);
-                    SvIVX(sv) = I_V(SvNVX(sv));
+                    SvIV_set(sv, I_V(SvNVX(sv)));
                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
                         SvIOK_on(sv);
                     /* Assumption: first non-preserved integer is < IV_MAX,
@@ -2707,7 +2708,7 @@
         return SvNVX(sv);
     }
     if (SvIOKp(sv)) {
-       SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
+       SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
 #ifdef NV_PRESERVES_UV
        SvNOK_on(sv);
 #else
@@ -2729,12 +2730,12 @@
        if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
            == IS_NUMBER_IN_UV) {
            /* It's definitely an integer */
-           SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
+           SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
        } else
-           SvNVX(sv) = Atof(SvPVX(sv));
+           SvNV_set(sv, Atof(SvPVX(sv)));
        SvNOK_on(sv);
 #else
-       SvNVX(sv) = Atof(SvPVX(sv));
+       SvNV_set(sv, Atof(SvPVX(sv)));
        /* Only set the public NV OK flag if this NV preserves the value in
           the PV at least as well as an IV/UV would.
           Not sure how to do this 100% reliably. */
@@ -2758,11 +2759,11 @@
                 SvIOKp_on(sv);
 
                 if (numtype & IS_NUMBER_NEG) {
-                    SvIVX(sv) = -(IV)value;
+                    SvIV_set(sv, -(IV)value);
                 } else if (value <= (UV)IV_MAX) {
-                   SvIVX(sv) = (IV)value;
+                   SvIV_set(sv, (IV)value);
                } else {
-                   SvUVX(sv) = value;
+                   SvUV_set(sv, value);
                    SvIsUV_on(sv);
                }
 
@@ -3478,7 +3479,7 @@
              (void)SvOOK_off(sv);
              s = (U8*)SvPVX(sv);
              len = SvCUR(sv) + 1; /* Plus the \0 */
-             SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
+             SvPV_set(sv, (char*)bytes_to_utf8((U8*)s, &len));
              SvCUR(sv) = len - 1;
              if (SvLEN(sv) != 0)
                   Safefree(s); /* No longer using what was there before. */
@@ -3691,7 +3692,7 @@
                break;
            }
            (void)SvIOK_only(dstr);
-           SvIVX(dstr) = SvIVX(sstr);
+           SvIV_set(dstr,  SvIVX(sstr));
            if (SvIsUV(sstr))
                SvIsUV_on(dstr);
            if (SvTAINTED(sstr))
@@ -3713,7 +3714,7 @@
                sv_upgrade(dstr, SVt_PVNV);
                break;
            }
-           SvNVX(dstr) = SvNVX(sstr);
+           SvNV_set(dstr, SvNVX(sstr));
            (void)SvNOK_only(dstr);
            if (SvTAINTED(sstr))
                SvTAINT(dstr);
@@ -3976,7 +3977,7 @@
            /* Only set the public OK flag if the source has public OK.  */
            if (sflags & SVf_NOK)
                SvFLAGS(dstr) |= SVf_NOK;
-           SvNVX(dstr) = SvNVX(sstr);
+           SvNV_set(dstr, SvNVX(sstr));
        }
        if (sflags & SVp_IOK) {
            (void)SvIOKp_on(dstr);
@@ -3984,7 +3985,7 @@
                SvFLAGS(dstr) |= SVf_IOK;
            if (sflags & SVf_IVisUV)
                SvIsUV_on(dstr);
-           SvIVX(dstr) = SvIVX(sstr);
+           SvIV_set(dstr, SvIVX(sstr));
        }
        if (SvAMAGIC(sstr)) {
            SvAMAGIC_on(dstr);
@@ -4042,7 +4043,7 @@
            SvNOKp_on(dstr);
            if (sflags & SVf_NOK)
                SvFLAGS(dstr) |= SVf_NOK;
-           SvNVX(dstr) = SvNVX(sstr);
+           SvNV_set(dstr, SvNVX(sstr));
        }
        if (sflags & SVp_IOK) {
            (void)SvIOKp_on(dstr);
@@ -4050,7 +4051,7 @@
                SvFLAGS(dstr) |= SVf_IOK;
            if (sflags & SVf_IVisUV)
                SvIsUV_on(dstr);
-           SvIVX(dstr) = SvIVX(sstr);
+           SvIV_set(dstr, SvIVX(sstr));
        }
        if ( SvVOK(sstr) ) {
            MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
@@ -4069,13 +4070,13 @@
        /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
        if (sflags & SVf_IVisUV)
            SvIsUV_on(dstr);
-       SvIVX(dstr) = SvIVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
        if (sflags & SVp_NOK) {
            if (sflags & SVf_NOK)
                (void)SvNOK_on(dstr);
            else
                (void)SvNOKp_on(dstr);
-           SvNVX(dstr) = SvNVX(sstr);
+           SvNV_set(dstr, SvNVX(sstr));
        }
     }
     else if (sflags & SVp_NOK) {
@@ -4085,7 +4086,7 @@
            (void)SvOK_off(dstr);
            SvNOKp_on(dstr);
        }
-       SvNVX(dstr) = SvNVX(sstr);
+       SvNV_set(dstr, SvNVX(sstr));
     }
     else {
        if (dtype == SVt_PVGV) {
@@ -4237,7 +4238,7 @@
     if (SvPVX(sv) && SvLEN(sv))
        Safefree(SvPVX(sv));
     Renew(ptr, len+1, char);
-    SvPVX(sv) = ptr;
+    SvPV_set(sv, ptr);
     SvCUR_set(sv, len);
     SvLEN_set(sv, len+1);
     *SvEND(sv) = '\0';
@@ -4343,7 +4344,7 @@
            Move(pvx,SvPVX(sv),len,char);
            *SvEND(sv) = '\0';
        }
-       SvIVX(sv) = 0;
+       SvIV_set(sv, 0);
        /* Same SvOOK_on but SvOOK_on does a SvIOK_off
           and we do that anyway inside the SvNIOK_off
        */
@@ -4352,8 +4353,8 @@
     SvNIOK_off(sv);
     SvLEN(sv) -= delta;
     SvCUR(sv) -= delta;
-    SvPVX(sv) += delta;
-    SvIVX(sv) += delta;
+    SvPV_set(sv, SvPVX(sv) + delta);
+    SvIV_set(sv, SvIVX(sv) + delta);
 }
 
 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
@@ -6532,20 +6533,20 @@
                sv_setnv(sv, UV_MAX_P1);
            else
                (void)SvIOK_only_UV(sv);
-               ++SvUVX(sv);
+               SvUV_set(sv, SvUVX(sv) + 1);
        } else {
            if (SvIVX(sv) == IV_MAX)
                sv_setuv(sv, (UV)IV_MAX + 1);
            else {
                (void)SvIOK_only(sv);
-               ++SvIVX(sv);
+               SvIV_set(sv, SvIVX(sv) + 1);
            }   
        }
        return;
     }
     if (flags & SVp_NOK) {
        (void)SvNOK_only(sv);
-       SvNVX(sv) += 1.0;
+        SvNV_set(sv, SvNVX(sv) + 1.0);
        return;
     }
 
@@ -6553,7 +6554,7 @@
        if ((flags & SVTYPEMASK) < SVt_PVIV)
            sv_upgrade(sv, SVt_IV);
        (void)SvIOK_only(sv);
-       SvIVX(sv) = 1;
+       SvIV_set(sv, 1);
        return;
     }
     d = SvPVX(sv);
@@ -6580,7 +6581,7 @@
            /* sv_2iv *should* have made this an NV */
            if (flags & SVp_NOK) {
                (void)SvNOK_only(sv);
-               SvNVX(sv) += 1.0;
+                SvNV_set(sv, SvNVX(sv) + 1.0);
                return;
            }
            /* I don't think we can get here. Maybe I should assert this
@@ -6682,24 +6683,24 @@
        if (SvIsUV(sv)) {
            if (SvUVX(sv) == 0) {
                (void)SvIOK_only(sv);
-               SvIVX(sv) = -1;
+               SvIV_set(sv, -1);
            }
            else {
                (void)SvIOK_only_UV(sv);
-               --SvUVX(sv);
+               SvUV_set(sv, SvUVX(sv) + 1);
            }   
        } else {
            if (SvIVX(sv) == IV_MIN)
                sv_setnv(sv, (NV)IV_MIN - 1.0);
            else {
                (void)SvIOK_only(sv);
-               --SvIVX(sv);
+               SvIV_set(sv, SvIVX(sv) - 1);
            }   
        }
        return;
     }
     if (flags & SVp_NOK) {
-       SvNVX(sv) -= 1.0;
+        SvNV_set(sv, SvNVX(sv) - 1.0);
        (void)SvNOK_only(sv);
        return;
     }
@@ -6728,7 +6729,7 @@
            /* sv_2iv *should* have made this an NV */
            if (flags & SVp_NOK) {
                (void)SvNOK_only(sv);
-               SvNVX(sv) -= 1.0;
+                SvNV_set(sv, SvNVX(sv) - 1.0);
                return;
            }
            /* I don't think we can get here. Maybe I should assert this
@@ -6895,9 +6896,9 @@
        PERL_HASH(hash, src, len);
     new_SV(sv);
     sv_upgrade(sv, SVt_PVIV);
-    SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
+    SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
     SvCUR(sv) = len;
-    SvUVX(sv) = hash;
+    SvUV_set(sv, hash);
     SvLEN(sv) = 0;
     SvREADONLY_on(sv);
     SvFAKE_on(sv);
@@ -9908,12 +9909,13 @@
         SvRV(dstr) = SvWEAKREF(sstr)
                     ? sv_dup(SvRV(sstr), param)
                     : sv_dup_inc(SvRV(sstr), param);
+
     }
     else if (SvPVX(sstr)) {
        /* Has something there */
        if (SvLEN(sstr)) {
            /* Normal PV - clone whole allocated space */
-           SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
+           SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1));
        }
        else {
            /* Special case - not normally malloced for some reason */
@@ -9924,25 +9926,28 @@
                        and they should not have these flags
                        turned off */
 
-                    SvPVX(dstr) = sharepvn(SvPVX(sstr), SvCUR(sstr),
-                                           SvUVX(sstr));
-                    SvUVX(dstr) = SvUVX(sstr);
+                    SvPV_set(dstr, sharepvn(SvPVX(sstr), SvCUR(sstr),
+                                           SvUVX(sstr)));
+                    SvUV_set(dstr, SvUVX(sstr));
                 } else {
 
-                    SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvCUR(sstr));
+                    SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvCUR(sstr)));
                     SvFAKE_off(dstr);
                     SvREADONLY_off(dstr);
                 }
            }
            else {
                /* Some other special case - random pointer */
-               SvPVX(dstr) = SvPVX(sstr);              
+               SvPV_set(dstr, SvPVX(sstr));            
             }
        }
     }
     else {
        /* Copy the Null */
-       SvPVX(dstr) = SvPVX(sstr);
+       if (SvTYPE(dstr) == SVt_RV)
+           SvRV(dstr) = 0;
+       else
+           SvPV_set(dstr, 0);
     }
 }
 
@@ -9998,11 +10003,11 @@
        break;
     case SVt_IV:
        SvANY(dstr)     = new_XIV();
-       SvIVX(dstr)     = SvIVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
        break;
     case SVt_NV:
        SvANY(dstr)     = new_XNV();
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvNV_set(dstr, SvNVX(sstr));
        break;
     case SVt_RV:
        SvANY(dstr)     = new_XRV();
@@ -10018,23 +10023,23 @@
        SvANY(dstr)     = new_XPVIV();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        break;
     case SVt_PVNV:
        SvANY(dstr)     = new_XPVNV();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        break;
     case SVt_PVMG:
        SvANY(dstr)     = new_XPVMG();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10043,8 +10048,8 @@
        SvANY(dstr)     = new_XPVBM();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10056,8 +10061,8 @@
        SvANY(dstr)     = new_XPVLV();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10088,8 +10093,8 @@
        SvANY(dstr)     = new_XPVGV();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10104,8 +10109,8 @@
        SvANY(dstr)     = new_XPVIO();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10146,8 +10151,8 @@
        SvANY(dstr)     = new_XPVAV();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
@@ -10159,7 +10164,7 @@
            src_ary = AvARRAY((AV*)sstr);
            Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
            ptr_table_store(PL_ptr_table, src_ary, dst_ary);
-           SvPVX(dstr) = (char*)dst_ary;
+           SvPV_set(dstr, (char*)dst_ary);
            AvALLOC((AV*)dstr) = dst_ary;
            if (AvREAL((AV*)sstr)) {
                while (items-- > 0)
@@ -10175,7 +10180,7 @@
            }
        }
        else {
-           SvPVX(dstr)         = Nullch;
+           SvPV_set(dstr, Nullch);
            AvALLOC((AV*)dstr)  = (SV**)NULL;
        }
        break;
@@ -10183,8 +10188,8 @@
        SvANY(dstr)     = new_XPVHV();
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        HvRITER((HV*)dstr)      = HvRITER((HV*)sstr);
@@ -10204,7 +10209,7 @@
                                     (bool)!!HvSHAREKEYS(sstr), param);
        }
        else {
-           SvPVX(dstr)         = Nullch;
+           SvPV_set(dstr, Nullch);
            HvEITER((HV*)dstr)  = (HE*)NULL;
        }
        HvPMROOT((HV*)dstr)     = HvPMROOT((HV*)sstr);          /* XXX */
@@ -10223,8 +10228,8 @@
         dup_pvcv:
        SvCUR(dstr)     = SvCUR(sstr);
        SvLEN(dstr)     = SvLEN(sstr);
-       SvIVX(dstr)     = SvIVX(sstr);
-       SvNVX(dstr)     = SvNVX(sstr);
+       SvIV_set(dstr, SvIVX(sstr));
+       SvNV_set(dstr, SvNVX(sstr));
        SvMAGIC(dstr)   = mg_dup(SvMAGIC(sstr), param);
        SvSTASH(dstr)   = hv_dup_inc(SvSTASH(sstr), param);
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10927,22 +10932,22 @@
     SvREFCNT(&PL_sv_no)                = (~(U32)0)/2;
     SvFLAGS(&PL_sv_no)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
                                  |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
-    SvPVX(&PL_sv_no)           = SAVEPVN(PL_No, 0);
+    SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
     SvCUR(&PL_sv_no)           = 0;
     SvLEN(&PL_sv_no)           = 1;
-    SvIVX(&PL_sv_no)           = 0;
-    SvNVX(&PL_sv_no)           = 0;
+    SvIV_set(&PL_sv_no, 0);
+    SvNV_set(&PL_sv_no, 0);
     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
 
     SvANY(&PL_sv_yes)          = new_XPVNV();
     SvREFCNT(&PL_sv_yes)       = (~(U32)0)/2;
     SvFLAGS(&PL_sv_yes)                = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
                                  |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
-    SvPVX(&PL_sv_yes)          = SAVEPVN(PL_Yes, 1);
+    SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
     SvCUR(&PL_sv_yes)          = 1;
     SvLEN(&PL_sv_yes)          = 2;
-    SvIVX(&PL_sv_yes)          = 1;
-    SvNVX(&PL_sv_yes)          = 1;
+    SvIV_set(&PL_sv_yes, 1);
+    SvNV_set(&PL_sv_yes, 1);
     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
 
     /* create (a non-shared!) shared string table */

==== //depot/maint-5.8/perl/sv.h#35 (text) ====
Index: perl/sv.h
--- perl/sv.h#34~24332~ Tue Apr 26 09:02:43 2005
+++ perl/sv.h   Mon Sep 12 09:18:42 2005
@@ -763,13 +763,16 @@
                (void) SvIV(sv); } STMT_END
 #define SvIV_set(sv, val) \
        STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
-               (SvIVX(sv) = (val)); } STMT_END
+               (((XPVIV*)  SvANY(sv))->xiv_iv = (val)); } STMT_END
 #define SvNV_set(sv, val) \
        STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \
                (SvNVX(sv) = (val)); } STMT_END
 #define SvPV_set(sv, val) \
        STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
-               (SvPVX(sv) = (val)); } STMT_END
+               (((XPV*)  SvANY(sv))->xpv_pv = (val)); } STMT_END
+#define SvUV_set(sv, val) \
+       STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
+               (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END
 #define SvCUR_set(sv, val) \
        STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
                (SvCUR(sv) = (val)); } STMT_END

==== //depot/maint-5.8/perl/toke.c#62 (text) ====
Index: perl/toke.c
--- perl/toke.c#61~25385~       Sun Sep 11 13:36:26 2005
+++ perl/toke.c Mon Sep 12 09:18:42 2005
@@ -650,7 +650,7 @@
            sv_upgrade(sv, SVt_PVMG);
            sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
             (void)SvIOK_on(sv);
-            SvIVX(sv) = 0;
+            SvIV_set(sv, 0);
            av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
        }
     }
@@ -878,7 +878,7 @@
            ver = cSVOPx(version)->op_sv;
            if (SvPOK(ver) && !SvNIOK(ver)) {
                (void)SvUPGRADE(ver, SVt_PVNV);
-               SvNVX(ver) = str_to_version(ver);
+               SvNV_set(ver, str_to_version(ver));
                SvNOK_on(ver);          /* hint that it is a version */
            }
         }
@@ -2504,7 +2504,7 @@
                sv_upgrade(sv, SVt_PVMG);
                sv_setsv(sv,PL_linestr);
                 (void)SvIOK_on(sv);
-                SvIVX(sv) = 0;
+                SvIV_set(sv, 0);
                av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
            }
            goto retry;
@@ -2591,7 +2591,7 @@
            sv_upgrade(sv, SVt_PVMG);
            sv_setsv(sv,PL_linestr);
             (void)SvIOK_on(sv);
-            SvIVX(sv) = 0;
+            SvIV_set(sv, 0);
            av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
        }
        PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
@@ -4808,7 +4808,7 @@
                missingterm((char*)0);
            yylval.ival = OP_STRINGIFY;
            if (SvIVX(PL_lex_stuff) == '\'')
-               SvIVX(PL_lex_stuff) = 0;        /* qq'$foo' should intepolate */
+               SvIV_set(PL_lex_stuff, 0);      /* qq'$foo' should intepolate */
            TERM(sublex_start());
 
        case KEY_qr:
@@ -9307,11 +9307,11 @@
     sv_upgrade(tmpstr, SVt_PVIV);
     if (term == '\'') {
        op_type = OP_CONST;
-       SvIVX(tmpstr) = -1;
+       SvIV_set(tmpstr, -1);
     }
     else if (term == '`') {
        op_type = OP_BACKTICK;
-       SvIVX(tmpstr) = '\\';
+       SvIV_set(tmpstr, '\\');
     }
 
     CLINE;
@@ -9397,7 +9397,7 @@
            sv_upgrade(sv, SVt_PVMG);
            sv_setsv(sv,PL_linestr);
             (void)SvIOK_on(sv);
-            SvIVX(sv) = 0;
+            SvIV_set(sv, 0);
            av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop),sv);
        }
        if (*s == term && memEQ(s,PL_tokenbuf,len)) {
@@ -9683,7 +9683,7 @@
        assuming.  79 is the SV's initial length.  What a random number. */
     sv = NEWSV(87,79);
     sv_upgrade(sv, SVt_PVIV);
-    SvIVX(sv) = termcode;
+    SvIV_set(sv, termcode);
     (void)SvPOK_only(sv);              /* validate pointer */
 
     /* move past delimiter and try to read a complete string */
@@ -9869,7 +9869,7 @@
            sv_upgrade(sv, SVt_PVMG);
            sv_setsv(sv,PL_linestr);
             (void)SvIOK_on(sv);
-            SvIVX(sv) = 0;
+            SvIV_set(sv, 0);
            av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop), sv);
        }
 

==== //depot/maint-5.8/perl/util.c#58 (text) ====
Index: perl/util.c
--- perl/util.c#57~25385~       Sun Sep 11 13:36:26 2005
+++ perl/util.c Mon Sep 12 09:18:42 2005
@@ -2038,7 +2038,7 @@
     sv = *av_fetch(PL_fdpid,p[This],TRUE);
     UNLOCK_FDPID_MUTEX;
     (void)SvUPGRADE(sv,SVt_IV);
-    SvIVX(sv) = pid;
+    SvIV_set(sv, pid);
     PL_forkprocess = pid;
     /* If we managed to get status pipe check for exec fail */
     if (did_pipes && pid > 0) {
@@ -2191,7 +2191,7 @@
     sv = *av_fetch(PL_fdpid,p[This],TRUE);
     UNLOCK_FDPID_MUTEX;
     (void)SvUPGRADE(sv,SVt_IV);
-    SvIVX(sv) = pid;
+    SvIV_set(sv, pid);
     PL_forkprocess = pid;
     if (did_pipes && pid > 0) {
        int errkid;
@@ -2648,7 +2648,7 @@
     sprintf(spid, "%"IVdf, (IV)pid);
     sv = *hv_fetch(PL_pidstatus,spid,strlen(spid),TRUE);
     (void)SvUPGRADE(sv,SVt_IV);
-    SvIVX(sv) = status;
+    SvIV_set(sv, status);
     return;
 }
 
End of Patch.

Reply via email to