[PATCH] Refactoring to Sv*_set() macros - patch #5

[email protected] (Steve Peters) Mon, 18 Apr 2005 19:09:25 -0500
Newsgroups perl.perl5.porters,perl.ponie.dev
Message-ID <[email protected]>
--UlVJffcvxoiEqYs2
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

My cruel taskmaster reminded me that SvRV(), SvSTASH(), SvMAGIC(), SvLEN(),
SvCUR(), and SvEND() all needed to changed as well.  So, I'm taking care
of all of them all in one patch.  

Amongst the highlights of this patch...
* new SvRV_set(), SvSTASH_set(), and SvMAGIC_set() macros in sv.h
* new PAD_COMPNAME_GEN_set() macro (and apidocs too!)
* version bumps on all modules affected by patchs one through five

Still outstanding are apidocs for most of the SV*_set() macros and patches to
Devel::PPPort.  Also, I will be sending patches off to the maintainers of
List::Util and Encode for the current versions in blead.

Steve Peters
[email protected]

--UlVJffcvxoiEqYs2
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="SV_set.patch"

--- ext/ByteLoader/ByteLoader.pm.orig	Fri Aug  1 08:59:49 2003
+++ ext/ByteLoader/ByteLoader.pm	Mon Apr 18 18:00:15 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
--- ext/Data/Dumper/Dumper.pm.orig	Fri Jan 21 10:18:10 2005
+++ ext/Data/Dumper/Dumper.pm	Mon Apr 18 18:01:12 2005
@@ -9,7 +9,7 @@
 
 package Data::Dumper;
 
-$VERSION = '2.121_04';
+$VERSION = '2.121_05';
 
 #$| = 1;
 
--- ext/Data/Dumper/Dumper.xs.orig	Thu Dec 23 09:49:04 2004
+++ ext/Data/Dumper/Dumper.xs	Mon Apr 18 17:16:41 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));
 			
--- ext/Devel/Peek/Peek.pm.orig	Mon Apr 18 18:15:02 2005
+++ ext/Devel/Peek/Peek.pm	Mon Apr 18 18:19:01 2005
@@ -3,7 +3,7 @@
 
 package Devel::Peek;
 
-$VERSION = '1.02';
+$VERSION = '1.03';
 $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
--- ext/Devel/Peek/Peek.xs.orig	Sun Apr 21 15:59:10 2002
+++ ext/Devel/Peek/Peek.xs	Mon Apr 18 11:15:04 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);
--- ext/Encode/Encode.pm.orig	Tue Apr 12 11:00:27 2005
+++ ext/Encode/Encode.pm	Mon Apr 18 18:19:52 2005
@@ -4,7 +4,7 @@
 package Encode;
 use strict;
 # our $VERSION = do { my @r = (q$Revision: 2.9 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
-our $VERSION = '2.0902';
+our $VERSION = '2.0902_01';
 sub DEBUG () { 0 }
 use XSLoader ();
 XSLoader::load(__PACKAGE__, $VERSION);
--- ext/Encode/Encode.xs.orig	Tue Apr 12 11:00:27 2005
+++ ext/Encode/Encode.xs	Mon Apr 18 12:09:08 2005
@@ -524,7 +524,7 @@
     }
     sv_catsv(dst, encode_method(aTHX_ enc, enc->t_utf8, src, check,
 				&offset, term, &code));
-    SvIVX(off) = (IV)offset;
+    SvIV_set(off, (IV)offset);
     if (code == ENCODE_FOUND_TERM) {
 	ST(0) = &PL_sv_yes;
     }else{
--- ext/PerlIO/encoding/encoding.pm.orig	Fri May 23 10:38:36 2003
+++ ext/PerlIO/encoding/encoding.pm	Mon Apr 18 18:03:55 2005
@@ -1,6 +1,6 @@
 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";
 
--- ext/PerlIO/encoding/encoding.xs.orig	Mon Apr 18 07:44:18 2005
+++ ext/PerlIO/encoding/encoding.xs	Mon Apr 18 17:34:15 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);
--- ext/PerlIO/scalar/scalar.pm.orig	Mon Sep  8 01:26:16 2003
+++ ext/PerlIO/scalar/scalar.pm	Mon Apr 18 18:04:59 2005
@@ -1,5 +1,5 @@
 package PerlIO::scalar;
-our $VERSION = '0.02';
+our $VERSION = '0.03';
 use XSLoader ();
 XSLoader::load 'PerlIO::scalar';
 1;
--- ext/PerlIO/scalar/scalar.xs.orig	Thu Sep 30 10:36:18 2004
+++ ext/PerlIO/scalar/scalar.xs	Mon Apr 18 17:38:25 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
--- ext/POSIX/POSIX.pm.orig	Tue Mar 16 16:18:14 2004
+++ ext/POSIX/POSIX.pm	Mon Apr 18 18:02:49 2005
@@ -2,7 +2,7 @@
 
 our(@ISA, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD) = ();
 
-our $VERSION = "1.08";
+our $VERSION = "1.09";
 
 use AutoLoader;
 
--- ext/POSIX/POSIX.xs.orig	Tue Aug 10 02:22:14 2004
+++ ext/POSIX/POSIX.xs	Mon Apr 18 17:30:27 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));
 	}
 
--- ext/Storable/Storable.pm.orig	Sun Jul 11 01:09:19 2004
+++ ext/Storable/Storable.pm	Mon Apr 18 18:12:26 2005
@@ -21,7 +21,7 @@
 use AutoLoader;
 use vars qw($canonical $forgive_me $VERSION);
 
-$VERSION = '2.14';
+$VERSION = '2.15';
 *AUTOLOAD = \&AutoLoader::AUTOLOAD;		# Grrr...
 
 #
--- ext/Storable/Storable.xs.orig	Mon Apr 18 07:44:18 2005
+++ ext/Storable/Storable.xs	Mon Apr 18 17:41:49 2005
@@ -973,7 +973,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
 /*
@@ -2849,7 +2849,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;
@@ -4303,7 +4303,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)));
@@ -4363,7 +4363,7 @@
 	 */
 
 	sv_upgrade(rv, SVt_RV);
-	SvRV(rv) = sv;				/* $rv = \$sv */
+	SvRV_set(rv, sv);				/* $rv = \$sv */
 	SvROK_on(rv);
 
 	/*
@@ -5886,8 +5886,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
--- ext/ByteLoader/byterun.c.orig	Fri Apr  8 05:33:56 2005
+++ ext/ByteLoader/byterun.c	Mon Apr 18 17:12:55 2005
@@ -216,7 +216,7 @@
 	    {
 		svindex arg;
 		BGET_svindex(arg);
-		SvRV(bstate->bs_sv) = arg;
+		SvRV_set(bstate->bs_sv, arg);
 		break;
 	    }
 	  case INSN_XPV:		/* 22 */
@@ -228,21 +228,21 @@
 	    {
 		STRLEN arg;
 		BGET_PADOFFSET(arg);
-		SvCUR(bstate->bs_sv) = arg;
+		SvCUR_set(bstate->bs_sv, arg);
 		break;
 	    }
 	  case INSN_XPV_LEN:		/* 24 */
 	    {
 		STRLEN arg;
 		BGET_PADOFFSET(arg);
-		SvLEN(bstate->bs_sv) = arg;
+		SvLEN_set(bstate->bs_sv, arg);
 		break;
 	    }
 	  case INSN_XIV:		/* 25 */
 	    {
 		IV arg;
 		BGET_IV(arg);
-		SvIVX(bstate->bs_sv) = arg;
+		SvIV_set(bstate->bs_sv, arg);
 		break;
 	    }
 	  case INSN_XNV:		/* 26 */
--- dump.c.orig	Mon Apr  4 09:49:42 2005
+++ dump.c	Mon Apr 18 15:44:27 2005
@@ -229,7 +229,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;
@@ -1198,8 +1198,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);
 
--- gv.c.orig	Mon Apr 18 07:44:18 2005
+++ gv.c	Mon Apr 18 15:24:52 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));
@@ -526,7 +526,7 @@
          */
         CvSTASH(cv) = stash;
         SvPV_set(cv, (char *)name); /* cast to lose constness warning */
-        SvCUR(cv) = len;
+        SvCUR_set(cv, len);
         return gv;
     }
 
@@ -1190,7 +1190,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;
 }
 
@@ -1572,7 +1572,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;
 	     }
 	   }
--- lib/List/Util.pm.orig	Sat May 22 03:02:24 2004
+++ lib/List/Util.pm	Mon Apr 18 18:26:54 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;
 
--- mg.c.orig	Tue Apr  5 10:22:35 2005
+++ mg.c	Mon Apr 18 11:41:22 2005
@@ -417,7 +417,7 @@
 	    SvREFCNT_dec(mg->mg_obj);
 	Safefree(mg);
     }
-    SvMAGIC(sv) = 0;
+    SvMAGIC_set(sv, NULL);
     return 0;
 }
 
@@ -777,11 +777,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);
@@ -1980,7 +1980,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;
--- op.c.orig	Thu Apr 14 11:42:42 2005
+++ op.c	Mon Apr 18 15:39:03 2005
@@ -3293,7 +3293,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 ||
@@ -3303,8 +3303,7 @@
 			if (PAD_COMPNAME_GEN(curop->op_targ)
 						    == (STRLEN)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)
@@ -3326,7 +3325,7 @@
 #endif
 			    if (gv == PL_defgv || (int)SvCUR(gv) == PL_generation)
 				break;
-			    SvCUR(gv) = PL_generation;
+			    SvCUR_set(gv, PL_generation);
 			}
 		    }
 		    else
@@ -5884,7 +5883,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)) {
--- pad.c.orig	Fri Apr  8 08:45:19 2005
+++ pad.c	Mon Apr 18 10:30:34 2005
@@ -337,7 +337,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;
--- pad.h.orig	Wed Apr  6 10:34:26 2005
+++ pad.h	Mon Apr 18 15:36:42 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)
 
 
 /*
--- perl.h.orig	Wed Apr  6 10:04:17 2005
+++ perl.h	Mon Apr 18 17:49:20 2005
@@ -3611,7 +3611,7 @@
 };
 
 #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, SvCUR_set(PERL_DEBUG_PAD(i), 0), PERL_DEBUG_PAD(i))
 
 /* Enable variables which are pointers to functions */
 typedef void (CPERLscope(*peep_t))(pTHX_ OP* o);
--- pp.c.orig	Mon Apr 18 07:44:18 2005
+++ pp.c	Mon Apr 18 17:00:16 2005
@@ -178,9 +178,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;
@@ -493,7 +494,7 @@
     }
     rv = sv_newmortal();
     sv_upgrade(rv, SVt_RV);
-    SvRV(rv) = sv;
+    SvRV_set(rv, sv);
     SvROK_on(rv);
     return rv;
 }
@@ -1494,7 +1495,7 @@
 	        MEM_WRAP_CHECK_1(max, char, oom_string_extend);
 		SvGROW(TARG, (count * len) + 1);
 		repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
-		SvCUR(TARG) *= count;
+		SvCUR_set(TARG, SvCUR(TARG) * count);
 	    }
 	    *SvEND(TARG) = '\0';
 	}
--- pp.h.orig	Wed Mar 30 09:10:25 2005
+++ pp.h	Mon Apr 18 12:47:26 2005
@@ -476,7 +476,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
 
--- pp_hot.c.orig	Mon Apr 18 07:44:18 2005
+++ pp_hot.c	Mon Apr 18 15:46:47 2005
@@ -1599,7 +1599,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++)
@@ -2938,17 +2940,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);
--- pp_pack.c.orig	Mon Apr 18 07:44:18 2005
+++ pp_pack.c	Mon Apr 18 17:09:55 2005
@@ -708,7 +708,7 @@
     if (utf8) gl *= UTF8_EXPAND;		\
     if ((cur) + gl >= (start) + SvLEN(cat)) {	\
         *cur = '\0';				\
-        SvCUR(cat) = (cur) - (start);		\
+        SvCUR_set((cat), (cur) - (start));	\
 	(start) = sv_exp_grow(aTHX_ cat, gl);	\
 	(cur) = (start) + SvCUR(cat);		\
     }						\
@@ -2444,7 +2444,7 @@
 
     if (SvOOK(sv)) {
 	if (SvIVX(sv)) {
-	    SvLEN(sv)  += SvIVX(sv);
+	    SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
 	    from_start -= SvIVX(sv);
 	    SvIV_set(sv, 0);
 	}
@@ -2453,8 +2453,8 @@
     if (SvLEN(sv) != 0)
 	Safefree(from_start);
     SvPV_set(sv, to_start);
-    SvCUR(sv) = to_ptr - to_start;
-    SvLEN(sv) = len;
+    SvCUR_set(sv, to_ptr - to_start);
+    SvLEN_set(sv, len);
     SvUTF8_on(sv);
 }
 
@@ -2980,7 +2980,7 @@
 		  W_utf8:
 		    if (cur > end) {
 			*cur = '\0';
-			SvCUR(cat) = cur - start;
+			SvCUR_set(cat, cur - start);
 
 			GROWING(0, cat, start, cur, len+UTF8_MAXLEN);
 			end = start+SvLEN(cat)-UTF8_MAXLEN;
@@ -2993,7 +2993,7 @@
 		    if (auv >= 0x100) {
 			if (!SvUTF8(cat)) {
 			    *cur = '\0';
-			    SvCUR(cat) = cur - start;
+			    SvCUR_set(cat, cur - start);
 			    marked_upgrade(aTHX_ cat, symptr);
 			    lookahead.flags |= FLAG_DO_UTF8;
 			    lookahead.strbeg = symptr->strbeg;
@@ -3010,7 +3010,7 @@
 		    }
 		    if (cur >= end) {
 			*cur = '\0';
-			SvCUR(cat) = cur - start;
+			SvCUR_set(cat, cur - start);
 			GROWING(0, cat, start, cur, len+1);
 			end = start+SvLEN(cat)-1;
 		    }
@@ -3045,7 +3045,7 @@
 					       0 : UNICODE_ALLOW_ANY);
 		    if (cur+(endb-buffer)*UTF8_EXPAND >= end) {
 			*cur = '\0';
-			SvCUR(cat) = cur - start;
+			SvCUR_set(cat, cur - start);
 			GROWING(0, cat, start, cur,
 				len+(endb-buffer)*UTF8_EXPAND);
 			end = start+SvLEN(cat);
@@ -3054,7 +3054,7 @@
 		} else {
 		    if (cur >= end) {
 			*cur = '\0';
-			SvCUR(cat) = cur - start;
+			SvCUR_set(cat, cur - start);
 			GROWING(0, cat, start, cur, len+UTF8_MAXLEN);
 			end = start+SvLEN(cat)-UTF8_MAXLEN;
 		    }
@@ -3287,7 +3287,7 @@
 
 		if (anv < 0) {
 		    *cur = '\0';
-		    SvCUR(cat) = cur - start;
+		    SvCUR_set(cat, cur - start);
 		    Perl_croak(aTHX_ "Cannot compress negative numbers in pack");
 		}
 
@@ -3533,7 +3533,7 @@
 		    if (!uni_to_bytes(aTHX_ &aptr, aend, buffer, todo,
 				      'u' | TYPE_IS_PACK)) {
 			*cur = '\0';
-			SvCUR(cat) = cur - start;
+			SvCUR_set(cat, cur - start);
 			Perl_croak(aTHX_ "Assertion: string is shorter than advertised");
 		    }
 		    end = doencodes(hunk, buffer, todo);
@@ -3548,7 +3548,7 @@
 	}
 	}
 	*cur = '\0';
-	SvCUR(cat) = cur - start;
+	SvCUR_set(cat, cur - start);
       no_change:
 	*symptr = lookahead;
     }
--- regcomp.c.orig	Wed Apr 13 03:56:03 2005
+++ regcomp.c	Mon Apr 18 15:40:56 2005
@@ -2386,7 +2386,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);
--- scope.c.orig	Mon Apr 18 07:44:18 2005
+++ scope.c	Mon Apr 18 17:01:17 2005
@@ -170,7 +170,7 @@
 	       (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
 	    PL_tainted = oldtainted;
 	}
-	SvMAGIC(sv) = SvMAGIC(osv);
+	SvMAGIC_set(sv, SvMAGIC(osv));
 	/* if it's a special scalar or if it has no 'set' magic,
 	 * propagate the SvREADONLY flag. --rgs 20030922 */
 	for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
@@ -265,7 +265,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);
@@ -314,10 +314,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;
@@ -338,10 +338,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;
@@ -725,10 +725,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
@@ -743,7 +743,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);
@@ -759,10 +759,10 @@
 	    gv = (GV*)SSPOPPTR;
 	    if (GvAV(gv)) {
 		AV * const 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;
@@ -777,10 +777,10 @@
 	    gv = (GV*)SSPOPPTR;
 	    if (GvHV(gv)) {
 		HV * const 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;
@@ -846,8 +846,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))
--- sv.c.orig	Mon Apr 18 07:44:18 2005
+++ sv.c	Mon Apr 18 16:10:36 2005
@@ -416,10 +416,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);
 	}
     }
@@ -1906,19 +1906,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);
@@ -1927,30 +1927,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;
@@ -1970,8 +1970,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;
@@ -1985,8 +1985,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;
@@ -1996,22 +1996,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;
@@ -2021,12 +2021,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;
@@ -2035,23 +2035,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;
     }
@@ -2073,7 +2073,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);
@@ -3996,10 +3996,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);
@@ -4044,7 +4044,7 @@
 		        Perl_croak(aTHX_ "Wide character");
 		}
 	    }
-	    SvCUR(sv) = len;
+	    SvCUR_set(sv, len);
 	}
     }
     SvUTF8_off(sv);
@@ -4486,11 +4486,12 @@
 		(void)SvOOK_off(dstr);		/* backoff */
 		if (SvLEN(dstr))
 		    Safefree(SvPVX(dstr));
-		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);
@@ -5044,7 +5045,7 @@
 	    SvFAKE_off(sv);
 	    SvREADONLY_off(sv);
             SvPV_set(sv, (char*)0);
-            SvLEN(sv) = 0;
+            SvLEN_set(sv, 0);
 	    SvGROW(sv, len + 1);
 	    Move(pvx,SvPVX(sv),len,char);
 	    *SvEND(sv) = '\0';
@@ -5115,8 +5116,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);
 }
@@ -5162,7 +5163,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);
@@ -5285,7 +5286,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);
 }
@@ -5357,7 +5358,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
@@ -5758,7 +5759,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;
     }
@@ -5836,10 +5837,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);
@@ -5929,7 +5930,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);
@@ -7440,7 +7441,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]))
@@ -7710,9 +7711,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);
@@ -7847,7 +7848,7 @@
     new_SV(sv);
     sv_upgrade(sv, SVt_RV);
     SvTEMP_off(tmpRef);
-    SvRV(sv) = tmpRef;
+    SvRV_set(sv, tmpRef);
     SvROK_on(sv);
     return sv;
 }
@@ -8560,7 +8561,7 @@
     }
 
     SvOK_off(rv);
-    SvRV(rv) = sv;
+    SvRV_set(rv, sv);
     SvROK_on(rv);
 
     if (classname) {
@@ -8709,7 +8710,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);
@@ -8777,10 +8778,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.  */
@@ -10094,7 +10095,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" */
 	}
@@ -10160,7 +10161,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;
@@ -10672,9 +10673,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)) {
@@ -10717,7 +10718,7 @@
     else {
 	/* Copy the Null */
 	if (SvTYPE(dstr) == SVt_RV)
-	    SvRV(dstr) = 0;
+	    SvRV_set(dstr, NULL);
 	else
 	    SvPV_set(dstr, 0);
     }
@@ -10793,43 +10794,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);
@@ -10837,12 +10838,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);
@@ -10869,12 +10870,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));
@@ -10885,12 +10886,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))
@@ -10927,12 +10928,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)) {
@@ -10964,12 +10965,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;
@@ -11004,12 +11005,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);
@@ -11683,8 +11684,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);
@@ -11694,8 +11695,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);
--- sv.h.orig	Tue Apr 12 04:49:55 2005
+++ sv.h	Mon Apr 18 15:23:59 2005
@@ -733,22 +733,30 @@
 #define SvREPADTMP_off(sv)	(SvFLAGS(sv) &= ~SVf_FAKE)
 #endif
 
+#ifdef PERL_DEBUG_COW
+#define SvRV(sv) (0 + ((XRV*)  SvANY(sv))->xrv_rv)
+#else
 #define SvRV(sv) ((XRV*)  SvANY(sv))->xrv_rv
+#endif
 #define SvRVx(sv) SvRV(sv)
 
 #ifdef PERL_DEBUG_COW
 #define SvIVX(sv) (0 + ((XPVIV*)  SvANY(sv))->xiv_iv)
-#define SvUVX(sv) ((XPVUV*)  SvANY(sv))->xuv_uv
-#define SvNVX(sv) (0.0 + ((XPVNV*)SvANY(sv))->xnv_nv)
+#define SvUVX(sv) (0 + ((XPVUV*)  SvANY(sv))->xuv_uv)
+#define SvNVX(sv) (0 + ((XPVNV*)SvANY(sv))->xnv_nv)
+#define SvPVX(sv) (0 + ((XPV*)  SvANY(sv))->xpv_pv)
+#define SvCUR(sv) (0 + ((XPV*)  SvANY(sv))->xpv_cur)
+#define SvLEN(sv) (0 + ((XPV*)  SvANY(sv))->xpv_len)
+#define SvEND(sv) (0 + (((XPV*)  SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur))
 #else
 #define SvIVX(sv) ((XPVIV*)  SvANY(sv))->xiv_iv
 #define SvUVX(sv) ((XPVUV*)  SvANY(sv))->xuv_uv
 #define SvNVX(sv) ((XPVNV*)SvANY(sv))->xnv_nv
-#endif
 #define SvPVX(sv)  ((XPV*)  SvANY(sv))->xpv_pv
 #define SvCUR(sv) ((XPV*)  SvANY(sv))->xpv_cur
 #define SvLEN(sv) ((XPV*)  SvANY(sv))->xpv_len
 #define SvEND(sv)(((XPV*)  SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur)
+#endif
 
 #define SvIVXx(sv) SvIVX(sv)
 #define SvUVXx(sv) SvUVX(sv)
@@ -779,16 +787,25 @@
 		(((XPVNV*)SvANY(sv))->xnv_nv = (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 SvRV_set(sv, val) \
+        STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
+                (((XRV*)SvANY(sv))->xrv_rv = (val)); } STMT_END
+#define SvMAGIC_set(sv, val) \
+        STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
+                (((XPVMG*)SvANY(sv))->xmg_magic = (val)); } STMT_END
+#define SvSTASH_set(sv, val) \
+        STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
+                (((XPVMG*)  SvANY(sv))->xmg_stash = (val)); } STMT_END
 #define SvCUR_set(sv, val) \
 	STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
-		(SvCUR(sv) = (val)); } STMT_END
+		(((XPV*)  SvANY(sv))->xpv_cur = (val)); } STMT_END
 #define SvLEN_set(sv, val) \
 	STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
-		(SvLEN(sv) = (val)); } STMT_END
+		(((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
--- ext/threads/threads.pm.orig	Thu Jul 15 14:32:49 2004
+++ ext/threads/threads.pm	Mon Apr 18 18:28:27 2005
@@ -50,7 +50,7 @@
 our @EXPORT = qw(
 async	
 );
-our $VERSION = '1.05';
+our $VERSION = '1.06';
 
 
 # || 0 to ensure compatibility with previous versions
--- ext/threads/shared/shared.pm.orig	Thu Dec 18 10:40:44 2003
+++ ext/threads/shared/shared.pm	Mon Apr 18 18:06:09 2005
@@ -7,7 +7,7 @@
     require Exporter;
     our @ISA = qw(Exporter);
     our @EXPORT = qw(share cond_wait cond_timedwait cond_broadcast cond_signal);
-    our $VERSION = '0.92';
+    our $VERSION = '0.93';
 
     if ($threads::threads) {
 	*cond_wait = \&cond_wait_enabled;
--- ext/threads/shared/shared.xs.orig	Wed Apr  6 10:34:26 2005
+++ ext/threads/shared/shared.xs	Mon Apr 18 11:06:05 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);
 	}
--- toke.c.orig	Wed Apr 13 03:56:03 2005
+++ toke.c	Mon Apr 18 15:26:35 2005
@@ -5268,7 +5269,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);
@@ -10541,7 +10544,7 @@
 		    char *end = SvPVX(stuff) + SvCUR(stuff);
 		    end[-2] = '\n';
 		    end[-1] = '\0';
-		    SvCUR(stuff)--;
+		    SvCUR_set(stuff, SvCUR(stuff) - 1);
 		}
 #endif
 	    }

--UlVJffcvxoiEqYs2--