[PATCH] bytecode.pl, bytecode.h, and sv.h fixes

[email protected] (Steve Peters) Thu, 21 Apr 2005 18:55:47 -0500
Newsgroups perl.perl5.porters,perl.ponie.dev
Message-ID <[email protected]>
--uAKRQypu60I7Lcqm
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

There were a few problems a few of the final Sv*_set() patches, but this
patch will fix the last few test failures.  Also, compiling Perl with 
-DPERL_DEBUG_COW will cause compile errors.  To make sure everything worked
OK, I did a full smoke on these patch changes.

Enjoy!

Steve Peters
[email protected]

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

--- ext/ByteLoader/bytecode.h.orig	2005-04-20 09:18:27.000000000 -0500
+++ ext/ByteLoader/bytecode.h	2005-04-21 13:46:23.285756632 -0500
@@ -126,7 +126,7 @@
 #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_xmg_stash(sv, arg) *(SV**)&(((XPVMG*)SvANY(sv))->xmg_stash) = (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 {	\
--- bytecode.pl.orig	2005-04-21 11:05:30.000000000 -0500
+++ bytecode.pl	2005-04-21 13:04:47.969102424 -0500
@@ -423,7 +423,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	bstate->bs_sv				svindex		X
+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
--- ext/ByteLoader/byterun.c.orig	2005-04-21 11:05:30.000000000 -0500
+++ ext/ByteLoader/byterun.c	2005-04-21 13:12:20.630287464 -0500
@@ -593,7 +593,7 @@
 	    {
 		svindex arg;
 		BGET_svindex(arg);
-		bstate->bs_sv = arg;
+		BSET_xmg_stash(bstate->bs_sv, arg);
 		break;
 	    }
 	  case INSN_GV_FETCHPV:		/* 77 */
--- sv.h.orig	2005-04-19 16:22:08.000000000 -0500
+++ sv.h	2005-04-21 13:16:19.826924048 -0500
@@ -750,14 +750,22 @@
 #define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len)
 #define SvEND(sv) (((XPV*)  SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur)
 
-#ifdef PERL_IN_SV_C
+#ifdef DEBUGGING
+#  ifdef PERL_IN_SV_C
 /* Can't make this RVALUE because of Perl_sv_unmagic.  */
-#define SvMAGIC(sv)	(*(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*)  SvANY(sv))->xmg_magic))
+#    define SvMAGIC(sv)	(*(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*)  SvANY(sv))->xmg_magic))
+#  else
+#    define SvMAGIC(sv)	(0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*)  SvANY(sv))->xmg_magic))
+#  endif
+#define SvSTASH(sv)	(0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*)  SvANY(sv))->xmg_stash))
 #else
-#define SvMAGIC(sv)	(0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*)  SvANY(sv))->xmg_magic))
+#  ifdef PERL_IN_SV_C
+#    define SvMAGIC(sv) ((XPVMG*)  SvANY(sv))->xmg_magic
+#  else
+#    define SvMAGIC(sv) (0 + ((XPVMG*)  SvANY(sv))->xmg_magic)
+#  endif
+#define SvSTASH(sv)     (0 + ((XPVMG*)  SvANY(sv))->xmg_stash)
 #endif
-#define SvSTASH(sv)	(0 + *(assert(SvTYPE(sv) >= SVt_PVMG), &((XPVMG*)  SvANY(sv))->xmg_stash))
-
 #else
 #define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv
 #define SvUVX(sv) ((XPVUV*) SvANY(sv))->xuv_uv

--uAKRQypu60I7Lcqm--