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

[email protected] (Steve Peters) Wed, 20 Apr 2005 06:27:20 -0500
Newsgroups perl.perl5.porters,perl.ponie.dev
Message-ID <[email protected]>
--IJpNTDwzlM2Ie8A6
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Argh!  I spoke too soon again.  This patch is mainly clean up of a file
missed in the previous patch, lvalue assignments that showed up when an
additional -D flag was set, and changes to bytecode.pl and 
ext/Byteloader/bytecode.h since I hadn't realized that byterun.c was a
generated file.

Questions and comments are welcome.

Steve Peters
[email protected]

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

--- ext/ByteLoader/bytecode.h.orig	2003-09-04 13:45:58.000000000 -0500
+++ ext/ByteLoader/bytecode.h	2005-04-19 23:52:22.801862984 -0500
@@ -126,12 +126,19 @@
 #define BSET_mg_namex(mg, arg)			\
 	(mg->mg_ptr = (char*)SvREFCNT_inc((SV*)arg),	\
 	 mg->mg_len = HEf_SVKEY)
+#define BSET_xmg_stash(sv, arg) SvSTASH_set(sv, arg)
 #define BSET_sv_upgrade(sv, arg)	(void)SvUPGRADE(sv, arg)
+#define BSET_xrv(sv, arg) SvRV_set(sv, arg)
 #define BSET_xpv(sv)	do {	\
 	SvPV_set(sv, bstate->bs_pv.xpv_pv);	\
 	SvCUR_set(sv, bstate->bs_pv.xpv_cur);	\
 	SvLEN_set(sv, bstate->bs_pv.xpv_len);	\
     } while (0)
+#define BSET_xpv_cur(sv, arg) SvCUR_set(sv, arg)
+#define BSET_xpv_len(sv, arg) SvLEN_set(sv, arg)
+#define BSET_xiv(sv, arg) SvIV_set(sv, arg)
+#define BSET_xnv(sv, arg) SvNV_set(sv, arg)
+
 #define BSET_av_extend(sv, arg)	av_extend((AV*)sv, arg)
 
 #define BSET_av_push(sv, arg)	av_push((AV*)sv, arg)
--- bytecode.pl.orig	2004-11-16 05:24:36.000000000 -0600
+++ bytecode.pl	2005-04-19 23:50:28.577227768 -0500
@@ -368,12 +368,12 @@
 sv_refcnt	SvREFCNT(bstate->bs_sv)			U32
 sv_refcnt_add	SvREFCNT(bstate->bs_sv)			I32		x
 sv_flags	SvFLAGS(bstate->bs_sv)			U32
-xrv		SvRV(bstate->bs_sv)			svindex
+xrv		bstate->bs_sv				svindex		x
 xpv		bstate->bs_sv				none		x
-xpv_cur		SvCUR(bstate->bs_sv)			STRLEN
-xpv_len		SvLEN(bstate->bs_sv)			STRLEN
-xiv		SvIVX(bstate->bs_sv)			IV
-xnv		SvNVX(bstate->bs_sv)			NV
+xpv_cur		bstate->bs_sv	 			STRLEN		x
+xpv_len		bstate->bs_sv				STRLEN		x
+xiv		bstate->bs_sv				IV		x
+xnv		bstate->bs_sv				NV		x
 xlv_targoff	LvTARGOFF(bstate->bs_sv)		STRLEN
 xlv_targlen	LvTARGLEN(bstate->bs_sv)		STRLEN
 xlv_targ	LvTARG(bstate->bs_sv)			svindex
@@ -422,7 +422,7 @@
 mg_flags	SvMAGIC(bstate->bs_sv)->mg_flags	U8
 mg_name		SvMAGIC(bstate->bs_sv)			pvcontents	x
 mg_namex	SvMAGIC(bstate->bs_sv)			svindex		x
-xmg_stash	*(SV**)&SvSTASH(bstate->bs_sv)		svindex
+xmg_stash	bstate->bs_sv				svindex		X
 gv_fetchpv	bstate->bs_sv				strconst	x
 gv_fetchpvx	bstate->bs_sv				strconst	x
 gv_stashpv	bstate->bs_sv				strconst	x
--- malloc.c.orig	2005-04-18 07:44:18.000000000 -0500
+++ malloc.c	2005-04-19 21:34:07.160992088 -0500
@@ -1176,7 +1176,8 @@
 
     SvPOK_off(sv);
     SvPV_set(sv, Nullch);
-    SvCUR(sv) = SvLEN(sv) = 0;
+    SvCUR_set(sv, 0);
+    SvLEN_set(sv, 0);
     *size = malloced_size(pv) + M_OVERHEAD;
     return pv - sizeof(union overhead);
 }
--- sv.c.orig	2005-04-19 17:22:16.000000000 -0500
+++ sv.c	2005-04-19 22:02:41.536367416 -0500
@@ -4586,8 +4586,8 @@
                                       (sflags & SVf_UTF8?-cur:cur), hash));
                     SvUV_set(dstr, hash);
                 }
-                SvLEN(dstr) = len;
-                SvCUR(dstr) = cur;
+                SvLEN_set(dstr, len);
+                SvCUR_set(dstr, cur);
                 SvREADONLY_on(dstr);
                 SvFAKE_on(dstr);
                 /* Relesase a global SV mutex.  */
@@ -4748,8 +4748,8 @@
     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
     if (SvUTF8(sstr))
 	SvUTF8_on(dstr);
-    SvLEN(dstr) = len;
-    SvCUR(dstr) = cur;
+    SvLEN_set(dstr, len);
+    SvCUR_set(dstr, cur);
     if (DEBUG_C_TEST) {
 	sv_dump(dstr);
     }
@@ -4989,14 +4989,14 @@
             SvREADONLY_off(sv);
             /* This SV doesn't own the buffer, so need to New() a new one:  */
             SvPV_set(sv, (char*)0);
-            SvLEN(sv) = 0;
+            SvLEN_set(sv, 0);
             if (flags & SV_COW_DROP_PV) {
                 /* OK, so we don't need to copy our buffer.  */
                 SvPOK_off(sv);
             } else {
                 SvGROW(sv, cur + 1);
                 Move(pvx,SvPVX(sv),cur,char);
-                SvCUR(sv) = cur;
+                SvCUR_set(sv, cur);
                 *SvEND(sv) = '\0';
             }
             sv_release_COW(sv, pvx, cur, len, hash, next);

--IJpNTDwzlM2Ie8A6--