Change 25391 by [EMAIL PROTECTED] on 2005/09/12 19:50:36

        Integrate:
        [ 24248]
        Subject: [PATCH] Refactoring to Sv*_set() macros - patch #5
        From: Steve Peters <[EMAIL PROTECTED]>
        Message-ID: <[EMAIL PROTECTED]>
        Date: Mon, 18 Apr 2005 19:09:25 -0500
        
        [ 24249]
        Simplify PERL_DEBUG_PAD_ZERO so it continues to expand to
        valid C code
        
        [ 24253]
        Restore SvEND_set

Affected files ...

... //depot/maint-5.8/perl/dump.c#34 integrate
... //depot/maint-5.8/perl/ext/ByteLoader/ByteLoader.pm#4 integrate
... //depot/maint-5.8/perl/ext/Data/Dumper/Dumper.pm#12 integrate
... //depot/maint-5.8/perl/ext/Data/Dumper/Dumper.xs#9 integrate
... //depot/maint-5.8/perl/ext/Devel/Peek/Peek.pm#4 integrate
... //depot/maint-5.8/perl/ext/Devel/Peek/Peek.xs#2 integrate
... //depot/maint-5.8/perl/ext/List/Util/lib/List/Util.pm#9 integrate
... //depot/maint-5.8/perl/ext/POSIX/POSIX.pm#10 integrate
... //depot/maint-5.8/perl/ext/POSIX/POSIX.xs#20 integrate
... //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.pm#5 integrate
... //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.xs#5 integrate
... //depot/maint-5.8/perl/ext/PerlIO/scalar/scalar.pm#4 integrate
... //depot/maint-5.8/perl/ext/PerlIO/scalar/scalar.xs#10 integrate
... //depot/maint-5.8/perl/ext/Storable/Storable.pm#11 integrate
... //depot/maint-5.8/perl/ext/Storable/Storable.xs#26 integrate
... //depot/maint-5.8/perl/ext/threads/shared/shared.xs#20 integrate
... //depot/maint-5.8/perl/ext/threads/threads.pm#11 integrate
... //depot/maint-5.8/perl/gv.c#29 integrate
... //depot/maint-5.8/perl/mg.c#56 integrate
... //depot/maint-5.8/perl/op.c#79 integrate
... //depot/maint-5.8/perl/pad.c#27 integrate
... //depot/maint-5.8/perl/pad.h#8 integrate
... //depot/maint-5.8/perl/perl.h#74 integrate
... //depot/maint-5.8/perl/pp.c#55 integrate
... //depot/maint-5.8/perl/pp.h#12 integrate
... //depot/maint-5.8/perl/pp_hot.c#59 integrate
... //depot/maint-5.8/perl/regcomp.c#37 integrate
... //depot/maint-5.8/perl/scope.c#25 integrate
... //depot/maint-5.8/perl/sv.c#135 integrate
... //depot/maint-5.8/perl/sv.h#36 edit
... //depot/maint-5.8/perl/toke.c#63 integrate

Differences ...

==== //depot/maint-5.8/perl/dump.c#34 (text) ====
Index: perl/dump.c
--- perl/dump.c#33~25385~       Sun Sep 11 13:36:26 2005
+++ perl/dump.c Mon Sep 12 12:50:36 2005
@@ -227,7 +227,7 @@
     if (SvROK(sv)) {
        sv_catpv(t, "\\");
        if (SvCUR(t) + unref > 10) {
-           SvCUR(t) = unref + 3;
+           SvCUR_set(t, unref + 3);
            *SvEND(t) = '\0';
            sv_catpv(t, "...");
            goto finish;
@@ -1084,8 +1084,10 @@
     if ((type != SVt_PVHV) && SvUTF8(sv))
         sv_catpv(d, "UTF8");
 
-    if (*(SvEND(d) - 1) == ',')
-       SvPVX(d)[--SvCUR(d)] = '\0';
+    if (*(SvEND(d) - 1) == ',') {
+        SvCUR_set(d, SvCUR(d) - 1);
+       SvPVX(d)[SvCUR(d)] = '\0';
+    }
     sv_catpv(d, ")");
     s = SvPVX(d);
 

==== //depot/maint-5.8/perl/ext/ByteLoader/ByteLoader.pm#4 (text) ====
Index: perl/ext/ByteLoader/ByteLoader.pm
--- perl/ext/ByteLoader/ByteLoader.pm#3~20427~  Fri Aug  1 05:46:35 2003
+++ perl/ext/ByteLoader/ByteLoader.pm   Mon Sep 12 12:50:36 2005
@@ -2,7 +2,7 @@
 
 use XSLoader ();
 
-our $VERSION = '0.05';
+our $VERSION = '0.06';
 
 XSLoader::load 'ByteLoader', $VERSION;
 
@@ -15,7 +15,7 @@
 
 =head1 SYNOPSIS
 
-  use ByteLoader 0.04;
+  use ByteLoader 0.06;
   <byte code>
 
   or just

==== //depot/maint-5.8/perl/ext/Data/Dumper/Dumper.pm#12 (text) ====
Index: perl/ext/Data/Dumper/Dumper.pm
--- perl/ext/Data/Dumper/Dumper.pm#11~24296~    Fri Apr 22 08:13:08 2005
+++ perl/ext/Data/Dumper/Dumper.pm      Mon Sep 12 12:50:36 2005
@@ -9,7 +9,7 @@
 
 package Data::Dumper;
 
-$VERSION = '2.121_04';
+$VERSION = '2.121_05';
 
 #$| = 1;
 

==== //depot/maint-5.8/perl/ext/Data/Dumper/Dumper.xs#9 (text) ====
Index: perl/ext/Data/Dumper/Dumper.xs
--- perl/ext/Data/Dumper/Dumper.xs#8~24295~     Fri Apr 22 07:59:04 2005
+++ perl/ext/Data/Dumper/Dumper.xs      Mon Sep 12 12:50:36 2005
@@ -215,7 +215,7 @@
        SvGROW(sv, len*n + SvCUR(sv) + 1);
        if (len == 1) {
            char *start = SvPVX(sv) + SvCUR(sv);
-           SvCUR(sv) += n;
+           SvCUR_set(sv, SvCUR(sv) + n);
            start[n] = '\0';
            while (n > 0)
                start[--n] = str[0];
@@ -855,7 +855,7 @@
                        av_push(postav, postentry);
                        e = newRV_inc(e);
                        
-                       SvCUR(newapad) = 0;
+                       SvCUR_set(newapad, 0);
                        if (indent >= 2)
                            (void)sv_x(aTHX_ newapad, " ", 1, SvCUR(postentry));
                        

==== //depot/maint-5.8/perl/ext/Devel/Peek/Peek.pm#4 (text) ====
Index: perl/ext/Devel/Peek/Peek.pm
--- perl/ext/Devel/Peek/Peek.pm#3~23454~        Mon Nov  1 04:38:48 2004
+++ perl/ext/Devel/Peek/Peek.pm Mon Sep 12 12:50:36 2005
@@ -3,7 +3,7 @@
 
 package Devel::Peek;
 
-$VERSION = '1.02';
+$VERSION = '1.03';
 $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 

==== //depot/maint-5.8/perl/ext/Devel/Peek/Peek.xs#2 (text) ====
Index: perl/ext/Devel/Peek/Peek.xs
--- perl/ext/Devel/Peek/Peek.xs#1~17645~        Fri Jul 19 12:29:57 2002
+++ perl/ext/Devel/Peek/Peek.xs Mon Sep 12 12:50:36 2005
@@ -240,7 +240,7 @@
        if (!SvOK(*svp)) {
            av = newAV();
            (void)SvUPGRADE(*svp, SVt_RV);
-           SvRV(*svp) = (SV*)av;
+           SvRV_set(*svp, (SV*)av);
            SvROK_on(*svp);
        } else
            av = (AV*)SvRV(*svp);

==== //depot/maint-5.8/perl/ext/List/Util/lib/List/Util.pm#9 (text) ====
Index: perl/ext/List/Util/lib/List/Util.pm
--- perl/ext/List/Util/lib/List/Util.pm#8~22862~        Sun May 30 03:09:57 2004
+++ perl/ext/List/Util/lib/List/Util.pm Mon Sep 12 12:50:36 2005
@@ -10,7 +10,7 @@
 
 @ISA        = qw(Exporter);
 @EXPORT_OK  = qw(first min max minstr maxstr reduce sum shuffle);
-$VERSION    = "1.14";
+$VERSION    = "1.14_01";
 $XS_VERSION = $VERSION;
 $VERSION    = eval $VERSION;
 

==== //depot/maint-5.8/perl/ext/POSIX/POSIX.pm#10 (text) ====
Index: perl/ext/POSIX/POSIX.pm
--- perl/ext/POSIX/POSIX.pm#9~22558~    Mon Mar 22 13:01:52 2004
+++ perl/ext/POSIX/POSIX.pm     Mon Sep 12 12:50:36 2005
@@ -2,7 +2,7 @@
 
 our(@ISA, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD) = ();
 
-our $VERSION = "1.08";
+our $VERSION = "1.09";
 
 use AutoLoader;
 

==== //depot/maint-5.8/perl/ext/POSIX/POSIX.xs#20 (text) ====
Index: perl/ext/POSIX/POSIX.xs
--- perl/ext/POSIX/POSIX.xs#19~23272~   Sun Sep  5 14:47:13 2004
+++ perl/ext/POSIX/POSIX.xs     Mon Sep 12 12:50:36 2005
@@ -1476,7 +1476,7 @@
         char *          buffer = sv_grow( sv_buffer, nbytes+1 );
     CLEANUP:
         if (RETVAL >= 0) {
-            SvCUR(sv_buffer) = RETVAL;
+            SvCUR_set(sv_buffer, RETVAL);
             SvPOK_only(sv_buffer);
             *SvEND(sv_buffer) = '\0';
             SvTAINTED_on(sv_buffer);
@@ -1652,7 +1652,7 @@
               strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
               dstlen--;
           }
-          SvCUR(ST(0)) = dstlen;
+          SvCUR_set(ST(0), dstlen);
            SvPOK_only(ST(0));
        }
 

==== //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.pm#5 (text) ====
Index: perl/ext/PerlIO/encoding/encoding.pm
--- perl/ext/PerlIO/encoding/encoding.pm#4~25370~       Sat Sep 10 06:47:01 2005
+++ perl/ext/PerlIO/encoding/encoding.pm        Mon Sep 12 12:50:36 2005
@@ -1,7 +1,7 @@
 package PerlIO::encoding;
 
 use strict;
-our $VERSION = '0.07';
+our $VERSION = '0.08';
 our $DEBUG = 0;
 $DEBUG and warn __PACKAGE__, " called by ", join(", ", caller), "\n";
 

==== //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.xs#5 (text) ====
Index: perl/ext/PerlIO/encoding/encoding.xs
--- perl/ext/PerlIO/encoding/encoding.xs#4~25390~       Mon Sep 12 09:18:42 2005
+++ perl/ext/PerlIO/encoding/encoding.xs        Mon Sep 12 12:50:36 2005
@@ -322,7 +322,7 @@
            }
            }
            SvPV_set(e->dataSV, (char *) ptr);
-           SvLEN(e->dataSV) = 0;  /* Hands off sv.c - it isn't yours */
+           SvLEN_set(e->dataSV, 0);  /* Hands off sv.c - it isn't yours */
            SvCUR_set(e->dataSV,use);
            SvPOK_only(e->dataSV);
        }
@@ -463,7 +463,7 @@
                str = sv_newmortal();
                sv_upgrade(str, SVt_PV);
                SvPV_set(str, (char*)e->base.ptr);
-               SvLEN(str) = 0;
+               SvLEN_set(str, 0);
                SvCUR_set(str, e->base.end - e->base.ptr);
                SvPOK_only(str);
                SvUTF8_on(str);

==== //depot/maint-5.8/perl/ext/PerlIO/scalar/scalar.pm#4 (text) ====
Index: perl/ext/PerlIO/scalar/scalar.pm
--- perl/ext/PerlIO/scalar/scalar.pm#3~21075~   Mon Sep  8 01:15:50 2003
+++ perl/ext/PerlIO/scalar/scalar.pm    Mon Sep 12 12:50:36 2005
@@ -1,5 +1,5 @@
 package PerlIO::scalar;
-our $VERSION = '0.02';
+our $VERSION = '0.03';
 use XSLoader ();
 XSLoader::load 'PerlIO::scalar';
 1;

==== //depot/maint-5.8/perl/ext/PerlIO/scalar/scalar.xs#10 (text) ====
Index: perl/ext/PerlIO/scalar/scalar.xs
--- perl/ext/PerlIO/scalar/scalar.xs#9~23388~   Tue Oct 19 11:26:52 2004
+++ perl/ext/PerlIO/scalar/scalar.xs    Mon Sep 12 12:50:36 2005
@@ -40,7 +40,7 @@
     SvUPGRADE(s->var, SVt_PV);
     code = PerlIOBase_pushed(aTHX_ f, mode, Nullsv, tab);
     if (!SvOK(s->var) || (PerlIOBase(f)->flags) & PERLIO_F_TRUNCATE)
-       SvCUR(s->var) = 0;
+       SvCUR_set(s->var, 0);
     if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND)
        s->posn = SvCUR(s->var);
     else

==== //depot/maint-5.8/perl/ext/Storable/Storable.xs#26 (text) ====
Index: perl/ext/Storable/Storable.xs
--- perl/ext/Storable/Storable.xs#25~25390~     Mon Sep 12 09:18:42 2005
+++ perl/ext/Storable/Storable.xs       Mon Sep 12 12:50:36 2005
@@ -976,7 +976,7 @@
        stash = gv_stashpv((p), TRUE);                  \
        ref = newRV_noinc(s);                                   \
        (void) sv_bless(ref, stash);                    \
-       SvRV(ref) = 0;                                                  \
+       SvRV_set(ref, NULL);                                            \
        SvREFCNT_dec(ref);                                              \
   } STMT_END
 /*
@@ -2839,7 +2839,7 @@
 
        ref = newRV_noinc(sv);                          /* Temporary reference 
*/
        av = array_call(aTHX_ ref, hook, clone);        /* @a = 
$object->STORABLE_freeze($c) */
-       SvRV(ref) = 0;
+       SvRV_set(ref, NULL);
        SvREFCNT_dec(ref);                                      /* Reclaim 
temporary reference */
 
        count = AvFILLp(av) + 1;
@@ -4293,7 +4293,7 @@
                sv_upgrade(rv, SVt_RV);
        }
 
-       SvRV(rv) = sv;                          /* $rv = \$sv */
+       SvRV_set(rv, sv);                               /* $rv = \$sv */
        SvROK_on(rv);
 
        TRACEME(("ok (retrieve_ref at 0x%"UVxf")", PTR2UV(rv)));
@@ -4330,7 +4330,7 @@
         */
 
        sv_upgrade(rv, SVt_RV);
-       SvRV(rv) = sv;                          /* $rv = \$sv */
+       SvRV_set(rv, sv);                               /* $rv = \$sv */
        SvROK_on(rv);
 
        /*
@@ -5830,8 +5830,8 @@
                                SvUPGRADE(in, SVt_PV);
                                SvPOK_on(in);
                                SvPV_set(in, asbytes);
-                               SvLEN(in) = klen_tmp;
-                               SvCUR(in) = klen_tmp - 1;
+                               SvLEN_set(in, klen_tmp);
+                               SvCUR_set(in, klen_tmp - 1);
                        }
                }
 #endif

==== //depot/maint-5.8/perl/ext/threads/shared/shared.xs#20 (text) ====
Index: perl/ext/threads/shared/shared.xs
--- perl/ext/threads/shared/shared.xs#19~24195~ Thu Apr  7 09:05:43 2005
+++ perl/ext/threads/shared/shared.xs   Mon Sep 12 12:50:36 2005
@@ -361,7 +361,7 @@
                  char* stash_ptr = SvPV((SV*) SvSTASH(ssv), len);
                  HV* stash = gv_stashpvn(stash_ptr, len, TRUE);
                  SvOBJECT_on(sv);
-                 SvSTASH(sv) = (HV*)SvREFCNT_inc(stash);
+                 SvSTASH_set(sv, (HV*)SvREFCNT_inc(stash));
                }
            }
            break;
@@ -503,7 +503,7 @@
            SV *obj = Nullsv;
            Perl_sharedsv_associate(aTHX_ &obj, SvRV(SHAREDSvPTR(shared)), 
NULL);
            sv_setsv_nomg(sv, &PL_sv_undef);
-           SvRV(sv) = obj;
+           SvRV_set(sv, obj);
            SvROK_on(sv);
            
        }
@@ -531,7 +531,7 @@
            if(SvOBJECT(SvRV(sv))) {
              SV* fake_stash = newSVpv(HvNAME(SvSTASH(SvRV(sv))),0);
              SvOBJECT_on(SHAREDSvPTR(target));
-             SvSTASH(SHAREDSvPTR(target)) = (HV*)fake_stash;
+             SvSTASH_set(SHAREDSvPTR(target), (HV*)fake_stash);
            }
            CALLER_CONTEXT;
        }
@@ -546,7 +546,7 @@
        if(SvOBJECT(sv)) {
          SV* fake_stash = newSVpv(HvNAME(SvSTASH(sv)),0);
          SvOBJECT_on(SHAREDSvPTR(shared));
-         SvSTASH(SHAREDSvPTR(shared)) = (HV*)fake_stash;
+         SvSTASH_set(SHAREDSvPTR(shared), (HV*)fake_stash);
        }
        CALLER_CONTEXT;
     }
@@ -643,7 +643,7 @@
            SV *obj = Nullsv;
            Perl_sharedsv_associate(aTHX_ &obj, SvRV(*svp), NULL);
            sv_setsv_nomg(sv, &PL_sv_undef);
-           SvRV(sv) = obj;
+           SvRV_set(sv, obj);
            SvROK_on(sv);
            SvSETMAGIC(sv);
        }

==== //depot/maint-5.8/perl/ext/threads/threads.pm#11 (xtext) ====
Index: perl/ext/threads/threads.pm
--- perl/ext/threads/threads.pm#10~23133~       Sat Jul 17 02:36:41 2004
+++ perl/ext/threads/threads.pm Mon Sep 12 12:50:36 2005
@@ -50,7 +50,7 @@
 our @EXPORT = qw(
 async  
 );
-our $VERSION = '1.05';
+our $VERSION = '1.06';
 
 
 # || 0 to ensure compatibility with previous versions

==== //depot/maint-5.8/perl/gv.c#29 (text) ====
Index: perl/gv.c
--- perl/gv.c#28~25390~ Mon Sep 12 09:18:42 2005
+++ perl/gv.c   Mon Sep 12 12:50:36 2005
@@ -113,7 +113,7 @@
     if (SvLEN(gv)) {
        if (proto) {
            SvPV_set(gv, NULL);
-           SvLEN(gv) = 0;
+           SvLEN_set(gv, 0);
            SvPOK_off(gv);
        } else
            Safefree(SvPVX(gv));
@@ -532,7 +532,7 @@
          */
         CvSTASH(cv) = stash;
         SvPV_set(cv, (char *)name); /* cast to lose constness warning */
-        SvCUR(cv) = len;
+        SvCUR_set(cv, len);
         return gv;
     }
 #endif
@@ -1189,7 +1189,7 @@
     /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
     if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
       iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
-    SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
+    SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
     return io;
 }
 
@@ -1569,7 +1569,7 @@
                 */
                SV* newref = newSVsv(tmpRef);
                SvOBJECT_on(newref);
-               SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
+               SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
                return newref;
             }
           }

==== //depot/maint-5.8/perl/mg.c#56 (text) ====
Index: perl/mg.c
--- perl/mg.c#55~25385~ Sun Sep 11 13:36:26 2005
+++ perl/mg.c   Mon Sep 12 12:50:36 2005
@@ -420,7 +420,7 @@
            SvREFCNT_dec(mg->mg_obj);
        Safefree(mg);
     }
-    SvMAGIC(sv) = 0;
+    SvMAGIC_set(sv, NULL);
     return 0;
 }
 
@@ -778,11 +778,11 @@
                            MAGIC* mg = SvMAGIC(sv);
                            MAGIC* mgt;
                            PL_tainted = 1;
-                           SvMAGIC(sv) = mg->mg_moremagic;
+                           SvMAGIC_set(sv, mg->mg_moremagic);
                            SvTAINT(sv);
                            if ((mgt = SvMAGIC(sv))) {
                                mg->mg_moremagic = mgt;
-                               SvMAGIC(sv) = mg;
+                               SvMAGIC_set(sv, mg);
                            }
                        } else
                            SvTAINTED_off(sv);
@@ -1985,7 +1985,7 @@
            if (!SvWEAKREF(svp[i]))
                Perl_croak(aTHX_ "panic: magic_killbackrefs");
            /* XXX Should we check that it hasn't changed? */
-           SvRV(svp[i]) = 0;
+           SvRV_set(svp[i], 0);
            SvOK_off(svp[i]);
            SvWEAKREF_off(svp[i]);
            svp[i] = Nullsv;

==== //depot/maint-5.8/perl/op.c#79 (text) ====
Index: perl/op.c
--- perl/op.c#78~25390~ Mon Sep 12 09:18:42 2005
+++ perl/op.c   Mon Sep 12 12:50:36 2005
@@ -3324,7 +3324,7 @@
                        GV *gv = cGVOPx_gv(curop);
                        if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
                            break;
-                       SvCUR(gv) = PL_generation;
+                       SvCUR_set(gv, PL_generation);
                    }
                    else if (curop->op_type == OP_PADSV ||
                             curop->op_type == OP_PADAV ||
@@ -3334,8 +3334,7 @@
                        if ((int)PAD_COMPNAME_GEN(curop->op_targ)
                                                    == PL_generation)
                            break;
-                       PAD_COMPNAME_GEN(curop->op_targ)
-                                                       = PL_generation;
+                       PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
 
                    }
                    else if (curop->op_type == OP_RV2CV)
@@ -3357,7 +3356,7 @@
 #endif
                            if (gv == PL_defgv || (int)SvCUR(gv) == 
PL_generation)
                                break;
-                           SvCUR(gv) = PL_generation;
+                           SvCUR_set(gv, PL_generation);
                        }
                    }
                    else
@@ -5879,7 +5878,7 @@
                if (*s == ':' && s[1] == ':') {
                    *s = '/';
                    Move(s+2, s+1, strlen(s+2)+1, char);
-                   --SvCUR(kid->op_sv);
+                   SvCUR_set(kid->op_sv, SvCUR(kid->op_sv) - 1);
                }
            }
            if (SvREADONLY(kid->op_sv)) {

==== //depot/maint-5.8/perl/pad.c#27 (text) ====
Index: perl/pad.c
--- perl/pad.c#26~25390~        Mon Sep 12 09:18:42 2005
+++ perl/pad.c  Mon Sep 12 12:50:36 2005
@@ -347,7 +347,7 @@
 
     if (typestash) {
        SvFLAGS(namesv) |= SVpad_TYPED;
-       SvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*) typestash);
+       SvSTASH_set(namesv, (HV*)SvREFCNT_inc((SV*) typestash));
     }
     if (ourstash) {
        SvFLAGS(namesv) |= SVpad_OUR;

==== //depot/maint-5.8/perl/pad.h#8 (text) ====
Index: perl/pad.h
--- perl/pad.h#7~21492~ Sun Oct 19 10:17:40 2003
+++ perl/pad.h  Mon Sep 12 12:50:36 2005
@@ -205,7 +205,12 @@
 The generation number of the name at offset C<po> in the current
 compiling pad (lvalue). Note that C<SvCUR> is hijacked for this purpose.
 
+=for apidoc m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
+Sets the generation number of the name at offset C<po> in the current
+ling pad (lvalue) to C<gen>.  Note that C<SvCUR_set> is hijacked for this 
purpose.
+
 =cut
+
 */
 
 #define PAD_COMPNAME_FLAGS(po) SvFLAGS(*av_fetch(PL_comppad_name, (po), FALSE))
@@ -221,7 +226,7 @@
 
 #define PAD_COMPNAME_GEN(po) SvCUR(AvARRAY(PL_comppad_name)[po])
 
-
+#define PAD_COMPNAME_GEN_set(po, gen) SvCUR_set(AvARRAY(PL_comppad_name)[po], 
gen)
 
 
 /*

==== //depot/maint-5.8/perl/perl.h#74 (text) ====
Index: perl/perl.h
--- perl/perl.h#73~24415~       Sat May  7 22:45:28 2005
+++ perl/perl.h Mon Sep 12 12:50:36 2005
@@ -3669,7 +3669,9 @@
 };
 
 #define PERL_DEBUG_PAD(i)      &(PL_debug_pad.pad[i])
-#define PERL_DEBUG_PAD_ZERO(i) (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, 
SvCUR(PERL_DEBUG_PAD(i)) = 0, PERL_DEBUG_PAD(i))
+#define PERL_DEBUG_PAD_ZERO(i) (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, \
+       (((XPV*) SvANY(PERL_DEBUG_PAD(i)))->xpv_cur = 0), \
+       PERL_DEBUG_PAD(i))
 
 /* Enable variables which are pointers to functions */
 typedef void (CPERLscope(*peep_t))(pTHX_ OP* o);

==== //depot/maint-5.8/perl/pp.c#55 (text) ====
Index: perl/pp.c
--- perl/pp.c#54~25390~ Mon Sep 12 09:18:42 2005
+++ perl/pp.c   Mon Sep 12 12:50:36 2005
@@ -181,9 +181,10 @@
                        SvOOK_off(sv);          /* backoff */
                        if (SvLEN(sv))
                            Safefree(SvPVX(sv));
-                       SvLEN(sv)=SvCUR(sv)=0;
+                       SvLEN_set(sv, 0);
+                        SvCUR_set(sv, 0);
                    }
-                   SvRV(sv) = (SV*)gv;
+                   SvRV_set(sv, (SV*)gv);
                    SvROK_on(sv);
                    SvSETMAGIC(sv);
                    goto wasref;
@@ -500,7 +501,7 @@
     }
     rv = sv_newmortal();
     sv_upgrade(rv, SVt_RV);
-    SvRV(rv) = sv;
+    SvRV_set(rv, sv);
     SvROK_on(rv);
     return rv;
 }
@@ -1500,7 +1501,7 @@
                MEM_WRAP_CHECK_1(max, char, oom_string_extend);
                SvGROW(TARG, max + 1);
                repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
-               SvCUR(TARG) *= count;
+               SvCUR_set(TARG, SvCUR(TARG) * count);
            }
            *SvEND(TARG) = '\0';
        }

==== //depot/maint-5.8/perl/pp.h#12 (text) ====
Index: perl/pp.h
--- perl/pp.h#11~24156~ Tue Apr  5 04:07:15 2005
+++ perl/pp.h   Mon Sep 12 12:50:36 2005
@@ -484,7 +484,7 @@
    changed SV* ref to SV* tmpRef */
 #define RvDEEPCP(rv) STMT_START { SV* tmpRef=SvRV(rv);      \
   if (SvREFCNT(tmpRef)>1) {                 \
-    SvRV(rv)=AMG_CALLun(rv,copy);      \
+    SvRV_set(rv, AMG_CALLun(rv,copy)); \
     SvREFCNT_dec(tmpRef);                   \
   } } STMT_END
 

==== //depot/maint-5.8/perl/pp_hot.c#59 (text) ====
Index: perl/pp_hot.c
--- perl/pp_hot.c#58~25390~     Mon Sep 12 09:18:42 2005
+++ perl/pp_hot.c       Mon Sep 12 12:50:36 2005
@@ -1641,7 +1641,7 @@
                tmps = SvEND(sv) - 1;
                if (*tmps == *SvPVX(PL_rs)) {
                    *tmps = '\0';
-                   SvCUR(sv)--;
+                   SvCUR_set(sv, SvCUR(sv) - 1);
                }
            }
            for (tmps = SvPVX(sv); *tmps; tmps++)
@@ -3078,17 +3078,18 @@
        else if (SvTYPE(sv) >= SVt_PV) {
            SvOOK_off(sv);
            Safefree(SvPVX(sv));
-           SvLEN(sv) = SvCUR(sv) = 0;
+            SvLEN_set(sv, 0);
+           SvCUR_set(sv, 0);
        }
        switch (to_what) {
        case OPpDEREF_SV:
-           SvRV(sv) = NEWSV(355,0);
+           SvRV_set(sv, NEWSV(355,0));
            break;
        case OPpDEREF_AV:
-           SvRV(sv) = (SV*)newAV();
+           SvRV_set(sv, (SV*)newAV());
            break;
        case OPpDEREF_HV:
-           SvRV(sv) = (SV*)newHV();
+           SvRV_set(sv, (SV*)newHV());
            break;
        }
        SvROK_on(sv);

==== //depot/maint-5.8/perl/regcomp.c#37 (text) ====
Index: perl/regcomp.c
--- perl/regcomp.c#36~23932~    Sat Feb  5 05:47:07 2005
+++ perl/regcomp.c      Mon Sep 12 12:50:36 2005
@@ -1309,7 +1309,7 @@
                                SvGROW(last_str, (mincount * l) + 1);
                                repeatcpy(SvPVX(last_str) + l,
                                          SvPVX(last_str), l, mincount - 1);
-                               SvCUR(last_str) *= mincount;
+                               SvCUR_set(last_str, SvCUR(last_str) * mincount);
                                /* Add additional parts. */
                                SvCUR_set(data->last_found,
                                          SvCUR(data->last_found) - l);

==== //depot/maint-5.8/perl/scope.c#25 (text) ====
Index: perl/scope.c
--- perl/scope.c#24~25390~      Mon Sep 12 09:18:42 2005
+++ perl/scope.c        Mon Sep 12 12:50:36 2005
@@ -220,7 +220,7 @@
               (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
            PL_tainted = oldtainted;
        }
-       SvMAGIC(sv) = SvMAGIC(osv);
+       SvMAGIC_set(sv, SvMAGIC(osv));
        SvFLAGS(sv) |= SvMAGICAL(osv);
        /* XXX SvMAGIC() is *shared* between osv and sv.  This can
         * lead to coredumps when both SVs are destroyed without one
@@ -293,7 +293,7 @@
 {
     SSGROW(6);
     SSPUSHIV((IV)SvLEN(gv));
-    SvLEN(gv) = 0; /* forget that anything was allocated here */
+    SvLEN_set(gv, 0); /* forget that anything was allocated here */
     SSPUSHIV((IV)SvCUR(gv));
     SSPUSHPTR(SvPVX(gv));
     SvPOK_off(gv);
@@ -340,10 +340,10 @@
     GvAV(gv) = Null(AV*);
     av = GvAVn(gv);
     if (SvMAGIC(oav)) {
-       SvMAGIC(av) = SvMAGIC(oav);
+       SvMAGIC_set(av, SvMAGIC(oav));
        SvFLAGS((SV*)av) |= SvMAGICAL(oav);
        SvMAGICAL_off(oav);
-       SvMAGIC(oav) = 0;
+       SvMAGIC_set(oav, NULL);
        PL_localizing = 1;
        SvSETMAGIC((SV*)av);
        PL_localizing = 0;
@@ -364,10 +364,10 @@
     GvHV(gv) = Null(HV*);
     hv = GvHVn(gv);
     if (SvMAGIC(ohv)) {
-       SvMAGIC(hv) = SvMAGIC(ohv);
+       SvMAGIC_set(hv, SvMAGIC(ohv));
        SvFLAGS((SV*)hv) |= SvMAGICAL(ohv);
        SvMAGICAL_off(ohv);
-       SvMAGIC(ohv) = 0;
+       SvMAGIC_set(ohv, NULL);
        PL_localizing = 1;
        SvSETMAGIC((SV*)hv);
        PL_localizing = 0;
@@ -753,10 +753,10 @@
                SvTYPE(sv) != SVt_PVGV)
            {
                (void)SvUPGRADE(value, SvTYPE(sv));
-               SvMAGIC(value) = SvMAGIC(sv);
+               SvMAGIC_set(value, SvMAGIC(sv));
                SvFLAGS(value) |= SvMAGICAL(sv);
                SvMAGICAL_off(sv);
-               SvMAGIC(sv) = 0;
+               SvMAGIC_set(sv, 0);
            }
            /* XXX This branch is pretty bogus.  This code irretrievably
             * clears(!) the magic on the SV (either to avoid further
@@ -771,7 +771,7 @@
                SvMAGICAL_off(value);
                /* XXX this is a leak when we get here because the
                 * mg_get() in save_scalar_at() croaked */
-               SvMAGIC(value) = 0;
+               SvMAGIC_set(value, NULL);
            }
            *(SV**)ptr = value;
            SvREFCNT_dec(sv);
@@ -787,10 +787,10 @@
            gv = (GV*)SSPOPPTR;
            if (GvAV(gv)) {
                AV *goner = GvAV(gv);
-               SvMAGIC(av) = SvMAGIC(goner);
+               SvMAGIC_set(av, SvMAGIC(goner));
                SvFLAGS((SV*)av) |= SvMAGICAL(goner);
                SvMAGICAL_off(goner);
-               SvMAGIC(goner) = 0;
+               SvMAGIC_set(goner, NULL);
                SvREFCNT_dec(goner);
            }
            GvAV(gv) = av;
@@ -805,10 +805,10 @@
            gv = (GV*)SSPOPPTR;
            if (GvHV(gv)) {
                HV *goner = GvHV(gv);
-               SvMAGIC(hv) = SvMAGIC(goner);
+               SvMAGIC_set(hv, SvMAGIC(goner));
                SvFLAGS(hv) |= SvMAGICAL(goner);
                SvMAGICAL_off(goner);
-               SvMAGIC(goner) = 0;
+               SvMAGIC_set(goner, NULL);
                SvREFCNT_dec(goner);
            }
            GvHV(gv) = hv;
@@ -874,8 +874,8 @@
                Safefree(SvPVX(gv));
            }
            SvPV_set(gv, (char *)SSPOPPTR);
-           SvCUR(gv) = (STRLEN)SSPOPIV;
-           SvLEN(gv) = (STRLEN)SSPOPIV;
+           SvCUR_set(gv, (STRLEN)SSPOPIV);
+           SvLEN_set(gv, (STRLEN)SSPOPIV);
            gp_free(gv);
            GvGP(gv) = (GP*)ptr;
            if (GvCVu(gv))

==== //depot/maint-5.8/perl/sv.c#135 (text) ====
Index: perl/sv.c
--- perl/sv.c#134~25390~        Mon Sep 12 09:18:42 2005
+++ perl/sv.c   Mon Sep 12 12:50:36 2005
@@ -396,10 +396,10 @@
        if (SvWEAKREF(sv)) {
            sv_del_backref(sv);
            SvWEAKREF_off(sv);
-           SvRV(sv) = 0;
+           SvRV_set(sv, NULL);
        } else {
            SvROK_off(sv);
-           SvRV(sv) = 0;
+           SvRV_set(sv, NULL);
            SvREFCNT_dec(rv);
        }
     }
@@ -1408,19 +1408,19 @@
        break;
     case SVt_RV:
        SvANY(sv) = new_XRV();
-       SvRV(sv) = (SV*)pv;
+       SvRV_set(sv, (SV*)pv);
        break;
     case SVt_PV:
        SvANY(sv) = new_XPV();
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        break;
     case SVt_PVIV:
        SvANY(sv) = new_XPVIV();
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        if (SvNIOK(sv))
            (void)SvIOK_on(sv);
@@ -1429,30 +1429,30 @@
     case SVt_PVNV:
        SvANY(sv) = new_XPVNV();
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
        break;
     case SVt_PVMG:
        SvANY(sv) = new_XPVMG();
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        break;
     case SVt_PVLV:
        SvANY(sv) = new_XPVLV();
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        LvTARGOFF(sv)   = 0;
        LvTARGLEN(sv)   = 0;
        LvTARG(sv)      = 0;
@@ -1467,8 +1467,8 @@
        AvFILLp(sv)     = -1;
        SvIV_set(sv, 0);
        SvNV_set(sv, 0.0);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        AvALLOC(sv)     = 0;
        AvARYLEN(sv)    = 0;
        AvFLAGS(sv)     = AVf_REAL;
@@ -1482,8 +1482,8 @@
        HvMAX(sv)       = 0;
        HvTOTALKEYS(sv) = 0;
        HvPLACEHOLDERS(sv) = 0;
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        HvRITER(sv)     = 0;
        HvEITER(sv)     = 0;
        HvPMROOT(sv)    = 0;
@@ -1493,22 +1493,22 @@
        SvANY(sv) = new_XPVCV();
        Zero(SvANY(sv), 1, XPVCV);
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        break;
     case SVt_PVGV:
        SvANY(sv) = new_XPVGV();
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        GvGP(sv)        = 0;
        GvNAME(sv)      = 0;
        GvNAMELEN(sv)   = 0;
@@ -1518,12 +1518,12 @@
     case SVt_PVBM:
        SvANY(sv) = new_XPVBM();
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        BmRARE(sv)      = 0;
        BmUSEFUL(sv)    = 0;
        BmPREVIOUS(sv)  = 0;
@@ -1532,23 +1532,23 @@
        SvANY(sv) = new_XPVFM();
        Zero(SvANY(sv), 1, XPVFM);
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        break;
     case SVt_PVIO:
        SvANY(sv) = new_XPVIO();
        Zero(SvANY(sv), 1, XPVIO);
        SvPV_set(sv, pv);
-       SvCUR(sv)       = cur;
-       SvLEN(sv)       = len;
+       SvCUR_set(sv, cur);
+       SvLEN_set(sv, len);
        SvIV_set(sv, iv);
        SvNV_set(sv, nv);
-       SvMAGIC(sv)     = magic;
-       SvSTASH(sv)     = stash;
+       SvMAGIC_set(sv, magic);
+       SvSTASH_set(sv, stash);
        IoPAGE_LEN(sv)  = 60;
        break;
     }
@@ -1570,7 +1570,7 @@
     assert(SvOOK(sv));
     if (SvIVX(sv)) {
        char *s = SvPVX(sv);
-       SvLEN(sv) += SvIVX(sv);
+       SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
        SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
        SvIV_set(sv, 0);
        Move(s, SvPVX(sv), SvCUR(sv)+1, char);
@@ -3480,10 +3480,10 @@
              s = (U8*)SvPVX(sv);
              len = SvCUR(sv) + 1; /* Plus the \0 */
              SvPV_set(sv, (char*)bytes_to_utf8((U8*)s, &len));
-             SvCUR(sv) = len - 1;
+             SvCUR_set(sv, len - 1);
              if (SvLEN(sv) != 0)
                   Safefree(s); /* No longer using what was there before. */
-             SvLEN(sv) = len; /* No longer know the real size. */
+             SvLEN_set(sv, len); /* No longer know the real size. */
         }
         /* Mark as UTF-8 even if no hibit - saves scanning loop */
         SvUTF8_on(sv);
@@ -3527,7 +3527,7 @@
                        Perl_croak(aTHX_ "Wide character");
                }
            }
-           SvCUR(sv) = len;
+           SvCUR_set(sv, len);
        }
     }
     SvUTF8_off(sv);
@@ -3966,11 +3966,12 @@
                    }
                    Safefree(pv);
                }
-               SvLEN(dstr)=SvCUR(dstr)=0;
+               SvLEN_set(dstr, 0);
+                SvCUR_set(dstr, 0);
            }
        }
        (void)SvOK_off(dstr);
-       SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
+       SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
        SvROK_on(dstr);
        if (sflags & SVp_NOK) {
            SvNOKp_on(dstr);
@@ -4351,8 +4352,8 @@
        SvFLAGS(sv) |= SVf_OOK; 
     }
     SvNIOK_off(sv);
-    SvLEN(sv) -= delta;
-    SvCUR(sv) -= delta;
+    SvLEN_set(sv, SvLEN(sv) - delta);
+    SvCUR_set(sv, SvCUR(sv) - delta);
     SvPV_set(sv, SvPVX(sv) + delta);
     SvIV_set(sv, SvIVX(sv) + delta);
 }
@@ -4398,7 +4399,7 @@
     if (sstr == dstr)
        sstr = SvPVX(dsv);
     Move(sstr, SvPVX(dsv) + dlen, slen, char);
-    SvCUR(dsv) += slen;
+    SvCUR_set(dsv, SvCUR(dsv) + slen);
     *SvEND(dsv) = '\0';
     (void)SvPOK_only_UTF8(dsv);                /* validate pointer */
     SvTAINT(dsv);
@@ -4521,7 +4522,7 @@
     if (ptr == junk)
        ptr = SvPVX(sv);
     Move(ptr,SvPVX(sv)+tlen,len+1,char);
-    SvCUR(sv) += len;
+    SvCUR_set(sv, SvCUR(sv) + len);
     (void)SvPOK_only_UTF8(sv);         /* validate pointer */
     SvTAINT(sv);
 }
@@ -4593,7 +4594,7 @@
     }
     Newz(702,mg, 1, MAGIC);
     mg->mg_moremagic = SvMAGIC(sv);
-    SvMAGIC(sv) = mg;
+    SvMAGIC_set(sv, mg);
 
     /* Sometimes a magic contains a reference loop, where the sv and
        object refer to each other.  To prevent a reference loop that
@@ -4995,7 +4996,7 @@
        while (midend > mid)            /* shove everything down */
            *--bigend = *--midend;
        Move(little,big+offset,littlelen,char);
-       SvCUR(bigstr) += i;
+       SvCUR_set(bigstr, SvCUR(bigstr) + i);
        SvSETMAGIC(bigstr);
        return;
     }
@@ -5073,10 +5074,10 @@
            mg_free(nsv);
        else
            sv_upgrade(nsv, SVt_PVMG);
-       SvMAGIC(nsv) = SvMAGIC(sv);
+       SvMAGIC_set(nsv, SvMAGIC(sv));
        SvFLAGS(nsv) |= SvMAGICAL(sv);
        SvMAGICAL_off(sv);
-       SvMAGIC(sv) = 0;
+       SvMAGIC_set(sv, NULL);
     }
     SvREFCNT(sv) = 0;
     sv_clear(sv);
@@ -5137,7 +5138,7 @@
                    if(SvREFCNT(tmpref) < 2) {
                        /* tmpref is not kept alive! */
                        SvREFCNT(sv)--;
-                       SvRV(tmpref) = 0;
+                       SvRV_set(tmpref, NULL);
                        SvROK_off(tmpref);
                    }
                    SvREFCNT_dec(tmpref);
@@ -6629,7 +6630,7 @@
     }
     /* oh,oh, the number grew */
     SvGROW(sv, SvCUR(sv) + 2);
-    SvCUR(sv)++;
+    SvCUR_set(sv, SvCUR(sv) + 1);
     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
        *d = d[-1];
     if (isDIGIT(d[1]))
@@ -6897,9 +6898,9 @@
     new_SV(sv);
     sv_upgrade(sv, SVt_PVIV);
     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
-    SvCUR(sv) = len;
+    SvCUR_set(sv, len);
     SvUV_set(sv, hash);
-    SvLEN(sv) = 0;
+    SvLEN_set(sv, 0);
     SvREADONLY_on(sv);
     SvFAKE_on(sv);
     SvPOK_on(sv);
@@ -7034,7 +7035,7 @@
     new_SV(sv);
     sv_upgrade(sv, SVt_RV);
     SvTEMP_off(tmpRef);
-    SvRV(sv) = tmpRef;
+    SvRV_set(sv, tmpRef);
     SvROK_on(sv);
     return sv;
 }
@@ -7745,7 +7746,7 @@
     }
 
     SvOK_off(rv);
-    SvRV(rv) = sv;
+    SvRV_set(rv, sv);
     SvROK_on(rv);
 
     if (classname) {
@@ -7894,7 +7895,7 @@
     if (SvTYPE(tmpRef) != SVt_PVIO)
        ++PL_sv_objcount;
     (void)SvUPGRADE(tmpRef, SVt_PVMG);
-    SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
+    SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash));
 
     if (Gv_AMG(stash))
        SvAMAGIC_on(sv);
@@ -7962,10 +7963,10 @@
     if (SvWEAKREF(sv)) {
        sv_del_backref(sv);
        SvWEAKREF_off(sv);
-       SvRV(sv) = 0;
+       SvRV_set(sv, NULL);
        return;
     }
-    SvRV(sv) = 0;
+    SvRV_set(sv, NULL);
     SvROK_off(sv);
     /* You can't have a || SvREADONLY(rv) here, as $a = $$a, where $a was
        assigned to as BEGIN {$a = \"Foo"} will fail.  */
@@ -9292,7 +9293,7 @@
            Copy(eptr, p, elen, char);
            p += elen;
            *p = '\0';
-           SvCUR(sv) = p - SvPVX(sv);
+           SvCUR_set(sv, p - SvPVX(sv));
            svix = osvix;
            continue;   /* not "break" */
        }
@@ -9365,7 +9366,7 @@
        if (has_utf8)
            SvUTF8_on(sv);
        *p = '\0';
-       SvCUR(sv) = p - SvPVX(sv);
+       SvCUR_set(sv, p - SvPVX(sv));
        if (vectorize) {
            esignlen = 0;
            goto vector;
@@ -9906,9 +9907,9 @@
 Perl_rvpv_dup(pTHX_ SV *dstr, SV *sstr, CLONE_PARAMS* param)
 {
     if (SvROK(sstr)) {
-        SvRV(dstr) = SvWEAKREF(sstr)
-                    ? sv_dup(SvRV(sstr), param)
-                    : sv_dup_inc(SvRV(sstr), param);
+       SvRV_set(dstr, SvWEAKREF(sstr)
+                      ? sv_dup(SvRV(sstr), param)
+                      : sv_dup_inc(SvRV(sstr), param));
 
     }
     else if (SvPVX(sstr)) {
@@ -9945,7 +9946,7 @@
     else {
        /* Copy the Null */
        if (SvTYPE(dstr) == SVt_RV)
-           SvRV(dstr) = 0;
+           SvRV_set(dstr, NULL);
        else
            SvPV_set(dstr, 0);
     }
@@ -10015,43 +10016,43 @@
        break;
     case SVt_PV:
        SvANY(dstr)     = new_XPV();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(sstr));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        break;
     case SVt_PVIV:
        SvANY(dstr)     = new_XPVIV();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        break;
     case SVt_PVBM:
        SvANY(dstr)     = new_XPVBM();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        BmRARE(dstr)    = BmRARE(sstr);
        BmUSEFUL(dstr)  = BmUSEFUL(sstr);
@@ -10059,12 +10060,12 @@
        break;
     case SVt_PVLV:
        SvANY(dstr)     = new_XPVLV();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        LvTARGOFF(dstr) = LvTARGOFF(sstr);      /* XXX sometimes holds PMOP* 
when DEBUGGING */
        LvTARGLEN(dstr) = LvTARGLEN(sstr);
@@ -10091,12 +10092,12 @@
             }
        }
        SvANY(dstr)     = new_XPVGV();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        GvNAMELEN(dstr) = GvNAMELEN(sstr);
        GvNAME(dstr)    = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
@@ -10107,12 +10108,12 @@
        break;
     case SVt_PVIO:
        SvANY(dstr)     = new_XPVIO();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        IoIFP(dstr)     = fp_dup(IoIFP(sstr), IoTYPE(sstr), param);
        if (IoOFP(sstr) == IoIFP(sstr))
@@ -10149,12 +10150,12 @@
        break;
     case SVt_PVAV:
        SvANY(dstr)     = new_XPVAV();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
        AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
        if (AvARRAY((AV*)sstr)) {
@@ -10186,12 +10187,12 @@
        break;
     case SVt_PVHV:
        SvANY(dstr)     = new_XPVHV();
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        HvRITER((HV*)dstr)      = HvRITER((HV*)sstr);
        if (HvARRAY((HV*)sstr)) {
            STRLEN i = 0;
@@ -10226,12 +10227,12 @@
     case SVt_PVCV:
        SvANY(dstr)     = new_XPVCV();
         dup_pvcv:
-       SvCUR(dstr)     = SvCUR(sstr);
-       SvLEN(dstr)     = SvLEN(sstr);
+       SvCUR_set(dstr, SvCUR(sstr));
+       SvLEN_set(dstr, SvLEN(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);
+       SvMAGIC_set(dstr, mg_dup(SvMAGIC(sstr), param));
+       SvSTASH_set(dstr, hv_dup_inc(SvSTASH(sstr), param));
        Perl_rvpv_dup(aTHX_ dstr, sstr, param);
        CvSTASH(dstr)   = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted 
*/
        CvSTART(dstr)   = CvSTART(sstr);
@@ -10933,8 +10934,8 @@
     SvFLAGS(&PL_sv_no)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
                                  |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
     SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
-    SvCUR(&PL_sv_no)           = 0;
-    SvLEN(&PL_sv_no)           = 1;
+    SvCUR_set(&PL_sv_no, 0);
+    SvLEN_set(&PL_sv_no, 1);
     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);
@@ -10944,8 +10945,8 @@
     SvFLAGS(&PL_sv_yes)                = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
                                  |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
     SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
-    SvCUR(&PL_sv_yes)          = 1;
-    SvLEN(&PL_sv_yes)          = 2;
+    SvCUR_set(&PL_sv_yes, 1);
+    SvLEN_set(&PL_sv_yes, 2);
     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);

==== //depot/maint-5.8/perl/sv.h#36 (text) ====
Index: perl/sv.h
--- perl/sv.h#35~25390~ Mon Sep 12 09:18:42 2005
+++ perl/sv.h   Mon Sep 12 12:50:36 2005
@@ -761,24 +761,42 @@
 #define SvIV_please(sv) \
        STMT_START {if (!SvIOKp(sv) && (SvNOK(sv) || SvPOK(sv))) \
                (void) SvIV(sv); } STMT_END
+/* Put the asserts back at some point and figure out where they reveal bugs
+*/
 #define SvIV_set(sv, val) \
        STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
                (((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
+/* assert(SvTYPE(sv) >= SVt_PV); */
 #define SvPV_set(sv, val) \
-       STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
+       STMT_START { \
                (((XPV*)  SvANY(sv))->xpv_pv = (val)); } STMT_END
+/* assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); */
 #define SvUV_set(sv, val) \
-       STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
+       STMT_START { \
                (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END
+/* assert(SvTYPE(sv) >=  SVt_RV); */
+#define SvRV_set(sv, val) \
+        STMT_START { \
+                (((XRV*)SvANY(sv))->xrv_rv = (val)); } STMT_END
+/* assert(SvTYPE(sv) >= SVt_PVMG); */
+#define SvMAGIC_set(sv, val) \
+        STMT_START {  \
+                (((XPVMG*)SvANY(sv))->xmg_magic = (val)); } STMT_END
+/* assert(SvTYPE(sv) >= SVt_PVMG); */
+#define SvSTASH_set(sv, val) \
+        STMT_START { \
+                (((XPVMG*)  SvANY(sv))->xmg_stash = (val)); } STMT_END
+/* assert(SvTYPE(sv) >= SVt_PV); */
 #define SvCUR_set(sv, val) \
-       STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
-               (SvCUR(sv) = (val)); } STMT_END
+       STMT_START { \
+               (((XPV*)  SvANY(sv))->xpv_cur = (val)); } STMT_END
+/* assert(SvTYPE(sv) >= SVt_PV); */
 #define SvLEN_set(sv, val) \
-       STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
-               (SvLEN(sv) = (val)); } STMT_END
+       STMT_START { \
+               (((XPV*)  SvANY(sv))->xpv_len = (val)); } STMT_END
 #define SvEND_set(sv, val) \
        STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
                (SvCUR(sv) = (val) - SvPVX(sv)); } STMT_END

==== //depot/maint-5.8/perl/toke.c#63 (text) ====
Index: perl/toke.c
--- perl/toke.c#62~25390~       Mon Sep 12 09:18:42 2005
+++ perl/toke.c Mon Sep 12 12:50:36 2005
@@ -5086,7 +5086,7 @@
                        Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
                                    "Illegal character in prototype for %"SVf" 
: %s",
                                    PL_subname, d);
-                   SvCUR(PL_lex_stuff) = tmp;
+                   SvCUR_set(PL_lex_stuff, tmp);
                    have_proto = TRUE;
 
                    s = skipspace(s);
@@ -10357,7 +10357,7 @@
                    char *end = SvPVX(stuff) + SvCUR(stuff);
                    end[-2] = '\n';
                    end[-1] = '\0';
-                   SvCUR(stuff)--;
+                   SvCUR_set(stuff, SvCUR(stuff) - 1);
                }
 #endif
            }
End of Patch.

Reply via email to