Change 25390 by [EMAIL PROTECTED] on 2005/09/12 16:18:42
Integrate:
(the sv_upgrade change from)
[ 22934]
Assert that SV type has magic member when reading/writing.
Will catch buggy code.
[ 24199]
Subject: [PATCH] Refactoring to Sv*_set() macros - patch #1
From: Steve Peters <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>
Date: Wed, 6 Apr 2005 18:21:10 -0500
[ 24204]
Subject: [PATCH] Refactoring to Sv*_set() macros - patch #2
From: Steve Peters <[EMAIL PROTECTED]>
Date: Thu, 7 Apr 2005 13:51:49 -0500
Message-ID: <[EMAIL PROTECTED]>
[ 24206]
Add SvIVX() to PERL_DEBUG_COW, and change pad.c to SvIVset()
[ 24229]
Subject: [PATCH] Refactoring to Sv*_set() macros - patch #3
From: Steve Peters <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>
Date: Sun, 10 Apr 2005 21:37:36 -0500
(with correction to SvUV_set)
[ 24230]
Don't PERL_HASH(SvUVX(...)...) as it's actually a set.
Plus add an editor block
[ 24239]
Subject: [PATCH] Refactoring to Sv*_set() macros - patch #4
Message-ID: <[EMAIL PROTECTED]>
From: Steve Peters <[EMAIL PROTECTED]>
Date: Sat, 16 Apr 2005 11:05:02 -0500
plus fix to Perl_rvpv_dup assigning to an RV with SvPVX
[ 24240]
Two more uses of lvalue SvIVX()
[ 24246]
PERL_DEBUG_COW for SvUVX and SvPVX
Affected files ...
... //depot/maint-5.8/perl/av.c#18 integrate
... //depot/maint-5.8/perl/cop.h#14 integrate
... //depot/maint-5.8/perl/doio.c#33 integrate
... //depot/maint-5.8/perl/ext/ByteLoader/byterun.c#8 integrate
... //depot/maint-5.8/perl/ext/DynaLoader/dl_dyld.xs#5 integrate
... //depot/maint-5.8/perl/ext/List/Util/Util.xs#13 integrate
... //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.xs#4 integrate
... //depot/maint-5.8/perl/ext/Storable/Storable.xs#25 integrate
... //depot/maint-5.8/perl/ext/threads/threads.xs#24 integrate
... //depot/maint-5.8/perl/gv.c#28 integrate
... //depot/maint-5.8/perl/lib/ExtUtils/t/Constant.t#5 integrate
... //depot/maint-5.8/perl/malloc.c#11 integrate
... //depot/maint-5.8/perl/op.c#78 integrate
... //depot/maint-5.8/perl/pad.c#26 integrate
... //depot/maint-5.8/perl/perl.c#103 integrate
... //depot/maint-5.8/perl/pp.c#54 integrate
... //depot/maint-5.8/perl/pp_ctl.c#69 integrate
... //depot/maint-5.8/perl/pp_hot.c#58 integrate
... //depot/maint-5.8/perl/pp_sort.c#16 integrate
... //depot/maint-5.8/perl/scope.c#24 integrate
... //depot/maint-5.8/perl/sv.c#134 integrate
... //depot/maint-5.8/perl/sv.h#35 edit
... //depot/maint-5.8/perl/toke.c#62 integrate
... //depot/maint-5.8/perl/util.c#58 integrate
Differences ...
==== //depot/maint-5.8/perl/av.c#18 (text) ====
Index: perl/av.c
--- perl/av.c#17~24156~ Tue Apr 5 04:07:15 2005
+++ perl/av.c Mon Sep 12 09:18:42 2005
@@ -88,7 +88,7 @@
tmp = AvARRAY(av) - AvALLOC(av);
Move(AvARRAY(av), AvALLOC(av), AvFILLp(av)+1, SV*);
AvMAX(av) += tmp;
- SvPVX(av) = (char*)AvALLOC(av);
+ SvPV_set(av, (char*)AvALLOC(av));
if (AvREAL(av)) {
while (tmp)
ary[--tmp] = &PL_sv_undef;
@@ -165,7 +165,7 @@
ary[--tmp] = &PL_sv_undef;
}
- SvPVX(av) = (char*)AvALLOC(av);
+ SvPV_set(av, (char*)AvALLOC(av));
AvMAX(av) = newmax;
}
}
@@ -361,7 +361,7 @@
sv_upgrade((SV *)av, SVt_PVAV);
AvREAL_on(av);
AvALLOC(av) = 0;
- SvPVX(av) = 0;
+ SvPV_set(av, (char*)0);
AvMAX(av) = AvFILLp(av) = -1;
return av;
}
@@ -389,7 +389,7 @@
if (size) { /* `defined' was returning undef for size==0
anyway. */
New(4,ary,size,SV*);
AvALLOC(av) = ary;
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
AvFILLp(av) = size - 1;
AvMAX(av) = size - 1;
for (i = 0; i < size; i++) {
@@ -414,7 +414,7 @@
AvALLOC(av) = ary;
Copy(strp,ary,size,SV*);
AvFLAGS(av) = AVf_REIFY;
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
AvFILLp(av) = size - 1;
AvMAX(av) = size - 1;
while (size--) {
@@ -472,7 +472,7 @@
}
if ((key = AvARRAY(av) - AvALLOC(av))) {
AvMAX(av) += key;
- SvPVX(av) = (char*)AvALLOC(av);
+ SvPV_set(av, (char*)AvALLOC(av));
}
AvFILLp(av) = -1;
@@ -506,7 +506,7 @@
}
Safefree(AvALLOC(av));
AvALLOC(av) = 0;
- SvPVX(av) = 0;
+ SvPV_set(av, (char*)0);
AvMAX(av) = AvFILLp(av) = -1;
if (AvARYLEN(av)) {
SvREFCNT_dec(AvARYLEN(av));
@@ -645,7 +645,7 @@
AvMAX(av) += i;
AvFILLp(av) += i;
- SvPVX(av) = (char*)(AvARRAY(av) - i);
+ SvPV_set(av, (char*)(AvARRAY(av) - i));
}
if (num) {
i = AvFILLp(av);
@@ -662,7 +662,7 @@
/* Make extra elements into a buffer */
AvMAX(av) -= slide;
AvFILLp(av) -= slide;
- SvPVX(av) = (char*)(AvARRAY(av) + slide);
+ SvPV_set(av, (char*)(AvARRAY(av) + slide));
}
}
@@ -705,7 +705,7 @@
retval = *AvARRAY(av);
if (AvREAL(av))
*AvARRAY(av) = &PL_sv_undef;
- SvPVX(av) = (char*)(AvARRAY(av) + 1);
+ SvPV_set(av, (char*)(AvARRAY(av) + 1));
AvMAX(av)--;
AvFILLp(av)--;
if (SvSMAGICAL(av))
==== //depot/maint-5.8/perl/cop.h#14 (text) ====
Index: perl/cop.h
--- perl/cop.h#13~22555~ Mon Mar 22 11:57:32 2004
+++ perl/cop.h Mon Sep 12 09:18:42 2005
@@ -171,7 +171,7 @@
#define CLEAR_ARGARRAY(ary) \
STMT_START { \
AvMAX(ary) += AvARRAY(ary) - AvALLOC(ary); \
- SvPVX(ary) = (char*)AvALLOC(ary); \
+ SvPV_set(ary, (char*)AvALLOC(ary)); \
AvFILLp(ary) = -1; \
} STMT_END
==== //depot/maint-5.8/perl/doio.c#33 (text) ====
Index: perl/doio.c
--- perl/doio.c#32~25385~ Sun Sep 11 13:36:26 2005
+++ perl/doio.c Mon Sep 12 09:18:42 2005
@@ -674,10 +674,10 @@
sv = *av_fetch(PL_fdpid,fd,TRUE);
(void)SvUPGRADE(sv, SVt_IV);
pid = SvIVX(sv);
- SvIVX(sv) = 0;
+ SvIV_set(sv, 0);
sv = *av_fetch(PL_fdpid,savefd,TRUE);
(void)SvUPGRADE(sv, SVt_IV);
- SvIVX(sv) = pid;
+ SvIV_set(sv, pid);
UNLOCK_FDPID_MUTEX;
}
#endif
==== //depot/maint-5.8/perl/ext/ByteLoader/byterun.c#8 (text+w) ====
Index: perl/ext/ByteLoader/byterun.c
--- perl/ext/ByteLoader/byterun.c#7~21053~ Fri Sep 5 13:45:41 2003
+++ perl/ext/ByteLoader/byterun.c Mon Sep 12 09:18:42 2005
@@ -242,14 +242,14 @@
{
IV arg;
BGET_IV(arg);
- SvIVX(bstate->bs_sv) = arg;
+ SvIV_set(bstate->bs_sv, arg);
break;
}
case INSN_XNV: /* 26 */
{
NV arg;
BGET_NV(arg);
- SvNVX(bstate->bs_sv) = arg;
+ SvNV_set(bstate->bs_sv, arg);
break;
}
case INSN_XLV_TARGOFF: /* 27 */
==== //depot/maint-5.8/perl/ext/DynaLoader/dl_dyld.xs#5 (text) ====
Index: perl/ext/DynaLoader/dl_dyld.xs
--- perl/ext/DynaLoader/dl_dyld.xs#4~24197~ Fri Apr 8 02:05:27 2005
+++ perl/ext/DynaLoader/dl_dyld.xs Mon Sep 12 09:18:42 2005
@@ -97,8 +97,7 @@
path, number, type);
break;
}
- safefree(dl_last_error);
- dl_last_error = savepv(error);
+ sv_setpv(MY_CXT.x_dl_last_error, error);
}
static char *dlopen(char *path, int mode /* mode is ignored */)
==== //depot/maint-5.8/perl/ext/List/Util/Util.xs#13 (text) ====
Index: perl/ext/List/Util/Util.xs
--- perl/ext/List/Util/Util.xs#12~22862~ Sun May 30 03:09:57 2004
+++ perl/ext/List/Util/Util.xs Mon Sep 12 09:18:42 2005
@@ -352,18 +352,18 @@
(void)SvUPGRADE(ST(0),SVt_PVNV);
sv_setpvn(ST(0),ptr,len);
if(SvNOK(num) || SvPOK(num) || SvMAGICAL(num)) {
- SvNVX(ST(0)) = SvNV(num);
+ SvNV_set(ST(0), SvNV(num));
SvNOK_on(ST(0));
}
#ifdef SVf_IVisUV
else if (SvUOK(num)) {
- SvUVX(ST(0)) = SvUV(num);
+ SvUV_set(ST(0), SvUV(num));
SvIOK_on(ST(0));
SvIsUV_on(ST(0));
}
#endif
else {
- SvIVX(ST(0)) = SvIV(num);
+ SvIV_set(ST(0), SvIV(num));
SvIOK_on(ST(0));
}
if(PL_tainting && (SvTAINTED(num) || SvTAINTED(str)))
==== //depot/maint-5.8/perl/ext/PerlIO/encoding/encoding.xs#4 (text) ====
Index: perl/ext/PerlIO/encoding/encoding.xs
--- perl/ext/PerlIO/encoding/encoding.xs#3~19611~ Sat May 24 00:50:43 2003
+++ perl/ext/PerlIO/encoding/encoding.xs Mon Sep 12 09:18:42 2005
@@ -321,7 +321,7 @@
use = e->base.bufsiz;
}
}
- SvPVX(e->dataSV) = (char *) ptr;
+ SvPV_set(e->dataSV, (char *) ptr);
SvLEN(e->dataSV) = 0; /* Hands off sv.c - it isn't yours */
SvCUR_set(e->dataSV,use);
SvPOK_only(e->dataSV);
@@ -462,7 +462,7 @@
SAVETMPS;
str = sv_newmortal();
sv_upgrade(str, SVt_PV);
- SvPVX(str) = (char*)e->base.ptr;
+ SvPV_set(str, (char*)e->base.ptr);
SvLEN(str) = 0;
SvCUR_set(str, e->base.end - e->base.ptr);
SvPOK_only(str);
==== //depot/maint-5.8/perl/ext/Storable/Storable.xs#25 (text) ====
Index: perl/ext/Storable/Storable.xs
--- perl/ext/Storable/Storable.xs#24~25385~ Sun Sep 11 13:36:26 2005
+++ perl/ext/Storable/Storable.xs Mon Sep 12 09:18:42 2005
@@ -5829,7 +5829,7 @@
bytes_from_utf8 returned us. */
SvUPGRADE(in, SVt_PV);
SvPOK_on(in);
- SvPVX(in) = asbytes;
+ SvPV_set(in, asbytes);
SvLEN(in) = klen_tmp;
SvCUR(in) = klen_tmp - 1;
}
==== //depot/maint-5.8/perl/ext/threads/threads.xs#24 (xtext) ====
Index: perl/ext/threads/threads.xs
--- perl/ext/threads/threads.xs#23~23304~ Thu Sep 9 23:04:43 2004
+++ perl/ext/threads/threads.xs Mon Sep 12 09:18:42 2005
@@ -205,7 +205,7 @@
ithread_mg_get(pTHX_ SV *sv, MAGIC *mg)
{
ithread *thread = (ithread *) mg->mg_ptr;
- SvIVX(sv) = PTR2IV(thread);
+ SvIV_set(sv, PTR2IV(thread));
SvIOK_on(sv);
return 0;
}
==== //depot/maint-5.8/perl/gv.c#28 (text) ====
Index: perl/gv.c
--- perl/gv.c#27~25385~ Sun Sep 11 13:36:26 2005
+++ perl/gv.c Mon Sep 12 09:18:42 2005
@@ -112,7 +112,7 @@
sv_upgrade((SV*)gv, SVt_PVGV);
if (SvLEN(gv)) {
if (proto) {
- SvPVX(gv) = NULL;
+ SvPV_set(gv, NULL);
SvLEN(gv) = 0;
SvPOK_off(gv);
} else
@@ -531,7 +531,7 @@
* pass along the same data via some unused fields in the CV
*/
CvSTASH(cv) = stash;
- SvPVX(cv) = (char *)name; /* cast to lose constness warning */
+ SvPV_set(cv, (char *)name); /* cast to lose constness warning */
SvCUR(cv) = len;
return gv;
}
==== //depot/maint-5.8/perl/lib/ExtUtils/t/Constant.t#5 (text) ====
Index: perl/lib/ExtUtils/t/Constant.t
--- perl/lib/ExtUtils/t/Constant.t#4~24168~ Tue Apr 5 09:22:01 2005
+++ perl/lib/ExtUtils/t/Constant.t Mon Sep 12 09:18:42 2005
@@ -508,7 +508,7 @@
{name=>"RFC1149", type=>"SV", value=>"sv_2mortal(temp_sv)",
pre=>"SV *temp_sv = newSVpv(RFC1149, 0); "
. "(void) SvUPGRADE(temp_sv,SVt_PVIV); SvIOK_on(temp_sv); "
- . "SvIVX(temp_sv) = 1149;"},
+ . "SvIV_set(temp_sv, 1149);"},
);
push @items, $_ foreach keys %compass;
==== //depot/maint-5.8/perl/malloc.c#11 (text) ====
Index: perl/malloc.c
--- perl/malloc.c#10~24156~ Tue Apr 5 04:07:15 2005
+++ perl/malloc.c Mon Sep 12 09:18:42 2005
@@ -1175,7 +1175,7 @@
}
SvPOK_off(sv);
- SvPVX(sv) = Nullch;
+ SvPV_set(sv, Nullch);
SvCUR(sv) = SvLEN(sv) = 0;
*size = malloced_size(pv) + M_OVERHEAD;
return pv - sizeof(union overhead);
==== //depot/maint-5.8/perl/op.c#78 (text) ====
Index: perl/op.c
--- perl/op.c#77~25385~ Sun Sep 11 13:36:26 2005
+++ perl/op.c Mon Sep 12 09:18:42 2005
@@ -1629,7 +1629,11 @@
meth = newSVpvn("import", 6);
(void)SvUPGRADE(meth, SVt_PVIV);
(void)SvIOK_on(meth);
- PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
+ {
+ U32 hash;
+ PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
+ SvUV_set(meth, hash);
+ }
imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
append_elem(OP_LIST,
prepend_elem(OP_LIST, pack, list(arg)),
@@ -3025,7 +3029,11 @@
meth = newSVpvn("VERSION",7);
sv_upgrade(meth, SVt_PVIV);
(void)SvIOK_on(meth);
- PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
+ {
+ U32 hash;
+ PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
+ SvUV_set(meth, hash);
+ }
veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
append_elem(OP_LIST,
prepend_elem(OP_LIST, pack,
list(version)),
@@ -3049,7 +3057,11 @@
meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);
(void)SvUPGRADE(meth, SVt_PVIV);
(void)SvIOK_on(meth);
- PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
+ {
+ U32 hash;
+ PERL_HASH(hash, SvPVX(meth), SvCUR(meth));
+ SvUV_set(meth, hash);
+ }
imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
append_elem(OP_LIST,
prepend_elem(OP_LIST, pack, list(arg)),
@@ -3475,7 +3487,7 @@
SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
if (svp && *svp != &PL_sv_undef ) {
(void)SvIOK_on(*svp);
- SvIVX(*svp) = PTR2IV(cop);
+ SvIV_set(*svp, PTR2IV(cop));
}
}
@@ -7071,3 +7083,13 @@
ST(0) = (SV*)XSANY.any_ptr;
XSRETURN(1);
}
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vim: shiftwidth=4:
+*/
==== //depot/maint-5.8/perl/pad.c#26 (text) ====
Index: perl/pad.c
--- perl/pad.c#25~25370~ Sat Sep 10 06:47:01 2005
+++ perl/pad.c Mon Sep 12 09:18:42 2005
@@ -359,8 +359,8 @@
SvFAKE_on(namesv);
else {
/* not yet introduced */
- SvNVX(namesv) = (NV)PAD_MAX; /* min */
- SvIVX(namesv) = 0; /* max */
+ SvNV_set(namesv, (NV)PAD_MAX); /* min */
+ SvIV_set(namesv, 0); /* max */
if (!PL_min_intro_pending)
PL_min_intro_pending = offset;
@@ -459,8 +459,8 @@
name = NEWSV(1106, 0);
sv_upgrade(name, SVt_PVNV);
sv_setpvn(name, "&", 1);
- SvIVX(name) = -1;
- SvNVX(name) = 1;
+ SvIV_set(name, -1);
+ SvNV_set(name, 1);
ix = pad_alloc(op_type, SVs_PADMY);
av_store(PL_comppad_name, ix, name);
/* XXX DAPM use PL_curpad[] ? */
@@ -925,8 +925,8 @@
if ((sv = svp[i]) && sv != &PL_sv_undef
&& !SvFAKE(sv) && !SvIVX(sv))
{
- SvIVX(sv) = PAD_MAX; /* Don't know scope end yet. */
- SvNVX(sv) = (NV)PL_cop_seqmax;
+ SvIV_set(sv, PAD_MAX); /* Don't know scope end yet. */
+ SvNV_set(sv, (NV)PL_cop_seqmax);
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
"Pad intromy: %ld \"%s\", (%lu,%lu)\n",
(long)i, SvPVX(sv),
@@ -974,7 +974,7 @@
if ((sv = svp[off]) && sv != &PL_sv_undef
&& !SvFAKE(sv) && SvIVX(sv) == PAD_MAX)
{
- SvIVX(sv) = PL_cop_seqmax;
+ SvIV_set(sv, PL_cop_seqmax);
DEBUG_Xv(PerlIO_printf(Perl_debug_log,
"Pad leavemy: %ld \"%s\", (%lu,%lu)\n",
(long)off, SvPVX(sv),
==== //depot/maint-5.8/perl/perl.c#103 (text) ====
Index: perl/perl.c
--- perl/perl.c#102~25385~ Sun Sep 11 13:36:26 2005
+++ perl/perl.c Mon Sep 12 09:18:42 2005
@@ -4654,7 +4654,7 @@
SvFLAGS(PL_thrsv) = SVt_PV;
SvANY(PL_thrsv) = (void*)xpv;
SvREFCNT(PL_thrsv) = 1 << 30; /* practically infinite */
- SvPVX(PL_thrsv) = (char*)thr;
+ SvPV_set(PL_thrsvr, (char*)thr);
SvCUR_set(PL_thrsv, sizeof(thr));
SvLEN_set(PL_thrsv, sizeof(thr));
*SvEND(PL_thrsv) = '\0'; /* in the trailing_nul field */
==== //depot/maint-5.8/perl/pp.c#54 (text) ====
Index: perl/pp.c
--- perl/pp.c#53~24483~ Mon May 16 08:19:24 2005
+++ perl/pp.c Mon Sep 12 09:18:42 2005
@@ -850,7 +850,7 @@
if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
&& SvIVX(TOPs) != IV_MIN)
{
- --SvIVX(TOPs);
+ SvIV_set(TOPs, SvIVX(TOPs) - 1);
SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
}
else
@@ -868,7 +868,7 @@
if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
&& SvIVX(TOPs) != IV_MAX)
{
- ++SvIVX(TOPs);
+ SvIV_set(TOPs, SvIVX(TOPs) + 1);
SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
}
else
@@ -890,7 +890,7 @@
if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
&& SvIVX(TOPs) != IV_MIN)
{
- --SvIVX(TOPs);
+ SvIV_set(TOPs, SvIVX(TOPs) - 1);
SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
}
else
@@ -4276,7 +4276,7 @@
*dst-- = *src--;
}
dst = AvARRAY(ary);
- SvPVX(ary) = (char*)(AvARRAY(ary) - diff); /* diff is negative */
+ SvPV_set(ary, (char*)(AvARRAY(ary) - diff)); /* diff is negative */
AvMAX(ary) += diff;
}
else {
@@ -4313,7 +4313,7 @@
dst = src - diff;
Move(src, dst, offset, SV*);
}
- SvPVX(ary) = (char*)(AvARRAY(ary) - diff);/* diff is positive */
+ SvPV_set(ary, (char*)(AvARRAY(ary) - diff));/* diff is positive
*/
AvMAX(ary) += diff;
AvFILLp(ary) += diff;
}
==== //depot/maint-5.8/perl/pp_ctl.c#69 (text) ====
Index: perl/pp_ctl.c
--- perl/pp_ctl.c#68~25385~ Sun Sep 11 13:36:26 2005
+++ perl/pp_ctl.c Mon Sep 12 09:18:42 2005
@@ -210,12 +210,12 @@
SvOOK_off(targ);
if (SvLEN(targ))
Safefree(SvPVX(targ));
- SvPVX(targ) = SvPVX(dstr);
+ SvPV_set(targ, SvPVX(dstr));
SvCUR_set(targ, SvCUR(dstr));
SvLEN_set(targ, SvLEN(dstr));
if (DO_UTF8(dstr))
SvUTF8_on(targ);
- SvPVX(dstr) = 0;
+ SvPV_set(dstr, (char*)0);
sv_free(dstr);
TAINT_IF(cx->sb_rxtainted & 1);
@@ -2322,13 +2322,13 @@
ary = AvALLOC(av);
if (AvARRAY(av) != ary) {
AvMAX(av) += AvARRAY(av) - AvALLOC(av);
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
}
if (items >= AvMAX(av) + 1) {
AvMAX(av) = items - 1;
Renew(ary,items+1,SV*);
AvALLOC(av) = ary;
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
}
}
++mark;
@@ -2360,7 +2360,7 @@
if (type < SVt_PVIV && type != SVt_IV)
sv_upgrade(sv, SVt_PVIV);
(void)SvIOK_on(sv);
- SvIVX(sv) = PTR2IV(cv); /* Do it the quickest way */
+ SvIV_set(sv, PTR2IV(cv)); /* Do it the quickest way */
} else {
gv_efullname3(sv, CvGV(cv), Nullch);
}
==== //depot/maint-5.8/perl/pp_hot.c#58 (text) ====
Index: perl/pp_hot.c
--- perl/pp_hot.c#57~25385~ Sun Sep 11 13:36:26 2005
+++ perl/pp_hot.c Mon Sep 12 09:18:42 2005
@@ -319,7 +319,7 @@
if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
&& SvIVX(TOPs) != IV_MAX)
{
- ++SvIVX(TOPs);
+ SvIV_set(TOPs, SvIVX(TOPs) + 1);
SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
}
else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
@@ -2265,11 +2265,11 @@
SvOOK_off(TARG);
if (SvLEN(TARG))
Safefree(SvPVX(TARG));
- SvPVX(TARG) = SvPVX(dstr);
+ SvPV_set(TARG, SvPVX(dstr));
SvCUR_set(TARG, SvCUR(dstr));
SvLEN_set(TARG, SvLEN(dstr));
doutf8 |= DO_UTF8(dstr);
- SvPVX(dstr) = 0;
+ SvPV_set(dstr, (char*)0);
sv_free(dstr);
TAINT_IF(rxtainted & 1);
@@ -2582,7 +2582,7 @@
if (type < SVt_PVIV && type != SVt_IV)
sv_upgrade(dbsv, SVt_PVIV);
(void)SvIOK_on(dbsv);
- SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
+ SvIV_set(dbsv, PTR2IV(cv)); /* Do it the quickest way */
}
if (CvXSUB(cv))
==== //depot/maint-5.8/perl/pp_sort.c#16 (text) ====
Index: perl/pp_sort.c
--- perl/pp_sort.c#15~24202~ Fri Apr 8 03:58:39 2005
+++ perl/pp_sort.c Mon Sep 12 09:18:42 2005
@@ -1758,12 +1758,12 @@
SV** ary = AvALLOC(av);
if (AvARRAY(av) != ary) {
AvMAX(av) += AvARRAY(av) - AvALLOC(av);
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
}
if (AvMAX(av) < 1) {
AvMAX(av) = 1;
Renew(ary,2,SV*);
- SvPVX(av) = (char*)ary;
+ SvPV_set(av, (char*)ary);
}
}
AvFILLp(av) = 1;
==== //depot/maint-5.8/perl/scope.c#24 (text) ====
Index: perl/scope.c
--- perl/scope.c#23~23830~ Wed Jan 19 15:42:51 2005
+++ perl/scope.c Mon Sep 12 09:18:42 2005
@@ -873,7 +873,7 @@
if (SvPVX(gv) && SvLEN(gv) > 0) {
Safefree(SvPVX(gv));
}
- SvPVX(gv) = (char *)SSPOPPTR;
+ SvPV_set(gv, (char *)SSPOPPTR);
SvCUR(gv) = (STRLEN)SSPOPIV;
SvLEN(gv) = (STRLEN)SSPOPIV;
gp_free(gv);
==== //depot/maint-5.8/perl/sv.c#134 (text) ====
Index: perl/sv.c
--- perl/sv.c#133~25385~ Sun Sep 11 13:36:26 2005
+++ perl/sv.c Mon Sep 12 09:18:42 2005
@@ -1392,16 +1392,19 @@
Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
}
+ SvFLAGS(sv) &= ~SVTYPEMASK;
+ SvFLAGS(sv) |= mt;
+
switch (mt) {
case SVt_NULL:
Perl_croak(aTHX_ "Can't upgrade to undef");
case SVt_IV:
SvANY(sv) = new_XIV();
- SvIVX(sv) = iv;
+ SvIV_set(sv, iv);
break;
case SVt_NV:
SvANY(sv) = new_XNV();
- SvNVX(sv) = nv;
+ SvNV_set(sv, nv);
break;
case SVt_RV:
SvANY(sv) = new_XRV();
@@ -1409,45 +1412,45 @@
break;
case SVt_PV:
SvANY(sv) = new_XPV();
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
break;
case SVt_PVIV:
SvANY(sv) = new_XPVIV();
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
+ SvIV_set(sv, iv);
if (SvNIOK(sv))
(void)SvIOK_on(sv);
SvNOK_off(sv);
break;
case SVt_PVNV:
SvANY(sv) = new_XPVNV();
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
break;
case SVt_PVMG:
SvANY(sv) = new_XPVMG();
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
break;
case SVt_PVLV:
SvANY(sv) = new_XPVLV();
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
LvTARGOFF(sv) = 0;
@@ -1459,11 +1462,11 @@
SvANY(sv) = new_XPVAV();
if (pv)
Safefree(pv);
- SvPVX(sv) = 0;
+ SvPV_set(sv, (char*)0);
AvMAX(sv) = -1;
AvFILLp(sv) = -1;
- SvIVX(sv) = 0;
- SvNVX(sv) = 0.0;
+ SvIV_set(sv, 0);
+ SvNV_set(sv, 0.0);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
AvALLOC(sv) = 0;
@@ -1474,7 +1477,7 @@
SvANY(sv) = new_XPVHV();
if (pv)
Safefree(pv);
- SvPVX(sv) = 0;
+ SvPV_set(sv, (char*)0);
HvFILL(sv) = 0;
HvMAX(sv) = 0;
HvTOTALKEYS(sv) = 0;
@@ -1489,21 +1492,21 @@
case SVt_PVCV:
SvANY(sv) = new_XPVCV();
Zero(SvANY(sv), 1, XPVCV);
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
break;
case SVt_PVGV:
SvANY(sv) = new_XPVGV();
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
GvGP(sv) = 0;
@@ -1514,11 +1517,11 @@
break;
case SVt_PVBM:
SvANY(sv) = new_XPVBM();
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
BmRARE(sv) = 0;
@@ -1528,29 +1531,27 @@
case SVt_PVFM:
SvANY(sv) = new_XPVFM();
Zero(SvANY(sv), 1, XPVFM);
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
break;
case SVt_PVIO:
SvANY(sv) = new_XPVIO();
Zero(SvANY(sv), 1, XPVIO);
- SvPVX(sv) = pv;
+ SvPV_set(sv, pv);
SvCUR(sv) = cur;
SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
+ SvIV_set(sv, iv);
+ SvNV_set(sv, nv);
SvMAGIC(sv) = magic;
SvSTASH(sv) = stash;
IoPAGE_LEN(sv) = 60;
break;
}
- SvFLAGS(sv) &= ~SVTYPEMASK;
- SvFLAGS(sv) |= mt;
return TRUE;
}
@@ -1570,7 +1571,7 @@
if (SvIVX(sv)) {
char *s = SvPVX(sv);
SvLEN(sv) += SvIVX(sv);
- SvPVX(sv) -= SvIVX(sv);
+ SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
SvIV_set(sv, 0);
Move(s, SvPVX(sv), SvCUR(sv)+1, char);
}
@@ -1685,7 +1686,7 @@
OP_DESC(PL_op));
}
(void)SvIOK_only(sv); /* validate number */
- SvIVX(sv) = i;
+ SvIV_set(sv, i);
SvTAINT(sv);
}
@@ -1730,7 +1731,7 @@
}
sv_setiv(sv, 0);
SvIsUV_on(sv);
- SvUVX(sv) = u;
+ SvUV_set(sv, u);
}
/*
@@ -1795,7 +1796,7 @@
Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
OP_NAME(PL_op));
}
- SvNVX(sv) = num;
+ SvNV_set(sv, num);
(void)SvNOK_only(sv); /* validate number */
SvTAINT(sv);
}
@@ -2006,14 +2007,14 @@
if (SvNVX(sv) < (NV)IV_MIN) {
(void)SvIOKp_on(sv);
(void)SvNOK_on(sv);
- SvIVX(sv) = IV_MIN;
+ SvIV_set(sv, IV_MIN);
return IS_NUMBER_UNDERFLOW_IV;
}
if (SvNVX(sv) > (NV)UV_MAX) {
(void)SvIOKp_on(sv);
(void)SvNOK_on(sv);
SvIsUV_on(sv);
- SvUVX(sv) = UV_MAX;
+ SvUV_set(sv, UV_MAX);
return IS_NUMBER_OVERFLOW_UV;
}
(void)SvIOKp_on(sv);
@@ -2021,7 +2022,7 @@
/* Can't use strtol etc to convert this string. (See truth table in
sv_2iv */
if (SvNVX(sv) <= (UV)IV_MAX) {
- SvIVX(sv) = I_V(SvNVX(sv));
+ SvIV_set(sv, I_V(SvNVX(sv)));
if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
SvIOK_on(sv); /* Integer is precise. NOK, IOK */
} else {
@@ -2030,7 +2031,7 @@
return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
}
SvIsUV_on(sv);
- SvUVX(sv) = U_V(SvNVX(sv));
+ SvUV_set(sv, U_V(SvNVX(sv)));
if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
if (SvUVX(sv) == UV_MAX) {
/* As we know that NVs don't preserve UVs, UV_MAX cannot
@@ -2117,7 +2118,7 @@
answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
cases go to UV */
if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
- SvIVX(sv) = I_V(SvNVX(sv));
+ SvIV_set(sv, I_V(SvNVX(sv)));
if (SvNVX(sv) == (NV) SvIVX(sv)
#ifndef NV_PRESERVES_UV
&& (((UV)1 << NV_PRESERVES_UV_BITS) >
@@ -2155,7 +2156,7 @@
0x8000000000000000 which will be exact. NWC */
}
else {
- SvUVX(sv) = U_V(SvNVX(sv));
+ SvUV_set(sv, U_V(SvNVX(sv)));
if (
(SvNVX(sv) == (NV) SvUVX(sv))
#ifndef NV_PRESERVES_UV
@@ -2218,15 +2219,15 @@
if (!(numtype & IS_NUMBER_NEG)) {
/* positive */;
if (value <= (UV)IV_MAX) {
- SvIVX(sv) = (IV)value;
+ SvIV_set(sv, (IV)value);
} else {
- SvUVX(sv) = value;
+ SvUV_set(sv, value);
SvIsUV_on(sv);
}
} else {
/* 2s complement assumption */
if (value <= (UV)IV_MIN) {
- SvIVX(sv) = -(IV)value;
+ SvIV_set(sv, -(IV)value);
} else {
/* Too negative for an IV. This is a double upgrade, but
I'm assuming it will be rare. */
@@ -2235,8 +2236,8 @@
SvNOK_on(sv);
SvIOK_off(sv);
SvIOKp_on(sv);
- SvNVX(sv) = -(NV)value;
- SvIVX(sv) = IV_MIN;
+ SvNV_set(sv, -(NV)value);
+ SvIV_set(sv, IV_MIN);
}
}
}
@@ -2247,7 +2248,7 @@
if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
!= IS_NUMBER_IN_UV) {
/* It wasn't an (integer that doesn't overflow the UV). */
- SvNVX(sv) = Atof(SvPVX(sv));
+ SvNV_set(sv, Atof(SvPVX(sv)));
if (! numtype && ckWARN(WARN_NUMERIC))
not_a_number(sv);
@@ -2265,7 +2266,7 @@
(void)SvIOKp_on(sv);
(void)SvNOK_on(sv);
if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
- SvIVX(sv) = I_V(SvNVX(sv));
+ SvIV_set(sv, I_V(SvNVX(sv)));
if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
SvIOK_on(sv);
} else {
@@ -2276,10 +2277,10 @@
if (SvNVX(sv) > (NV)UV_MAX) {
SvIsUV_on(sv);
/* Integer is inaccurate. NOK, IOKp, is UV */
- SvUVX(sv) = UV_MAX;
+ SvUV_set(sv, UV_MAX);
SvIsUV_on(sv);
} else {
- SvUVX(sv) = U_V(SvNVX(sv));
+ SvUV_set(sv, U_V(SvNVX(sv)));
/* 0xFFFFFFFFFFFFFFFF not an issue in here */
if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
SvIOK_on(sv);
@@ -2305,7 +2306,7 @@
/* Small enough to preserve all bits. */
(void)SvIOKp_on(sv);
SvNOK_on(sv);
- SvIVX(sv) = I_V(SvNVX(sv));
+ SvIV_set(sv, I_V(SvNVX(sv)));
if ((NV)(SvIVX(sv)) == SvNVX(sv))
SvIOK_on(sv);
/* Assumption: first non-preserved integer is < IV_MAX,
@@ -2411,7 +2412,7 @@
(void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
- SvIVX(sv) = I_V(SvNVX(sv));
+ SvIV_set(sv, I_V(SvNVX(sv)));
if (SvNVX(sv) == (NV) SvIVX(sv)
#ifndef NV_PRESERVES_UV
&& (((UV)1 << NV_PRESERVES_UV_BITS) >
@@ -2449,7 +2450,7 @@
0x8000000000000000 which will be exact. NWC */
}
else {
- SvUVX(sv) = U_V(SvNVX(sv));
+ SvUV_set(sv, U_V(SvNVX(sv)));
if (
(SvNVX(sv) == (NV) SvUVX(sv))
#ifndef NV_PRESERVES_UV
@@ -2508,16 +2509,16 @@
if (!(numtype & IS_NUMBER_NEG)) {
/* positive */;
if (value <= (UV)IV_MAX) {
- SvIVX(sv) = (IV)value;
+ SvIV_set(sv, (IV)value);
} else {
/* it didn't overflow, and it was positive. */
- SvUVX(sv) = value;
+ SvUV_set(sv, value);
SvIsUV_on(sv);
}
} else {
/* 2s complement assumption */
if (value <= (UV)IV_MIN) {
- SvIVX(sv) = -(IV)value;
+ SvIV_set(sv, -(IV)value);
} else {
/* Too negative for an IV. This is a double upgrade, but
I'm assuming it will be rare. */
@@ -2526,8 +2527,8 @@
SvNOK_on(sv);
SvIOK_off(sv);
SvIOKp_on(sv);
- SvNVX(sv) = -(NV)value;
- SvIVX(sv) = IV_MIN;
+ SvNV_set(sv, -(NV)value);
+ SvIV_set(sv, IV_MIN);
}
}
}
@@ -2535,7 +2536,7 @@
if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
!= IS_NUMBER_IN_UV) {
/* It wasn't an integer, or it overflowed the UV. */
- SvNVX(sv) = Atof(SvPVX(sv));
+ SvNV_set(sv, Atof(SvPVX(sv)));
if (! numtype && ckWARN(WARN_NUMERIC))
not_a_number(sv);
@@ -2552,7 +2553,7 @@
(void)SvIOKp_on(sv);
(void)SvNOK_on(sv);
if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
- SvIVX(sv) = I_V(SvNVX(sv));
+ SvIV_set(sv, I_V(SvNVX(sv)));
if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
SvIOK_on(sv);
} else {
@@ -2563,10 +2564,10 @@
if (SvNVX(sv) > (NV)UV_MAX) {
SvIsUV_on(sv);
/* Integer is inaccurate. NOK, IOKp, is UV */
- SvUVX(sv) = UV_MAX;
+ SvUV_set(sv, UV_MAX);
SvIsUV_on(sv);
} else {
- SvUVX(sv) = U_V(SvNVX(sv));
+ SvUV_set(sv, U_V(SvNVX(sv)));
/* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
NV preservse UV so can do correct comparison. */
if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
@@ -2592,7 +2593,7 @@
/* Small enough to preserve all bits. */
(void)SvIOKp_on(sv);
SvNOK_on(sv);
- SvIVX(sv) = I_V(SvNVX(sv));
+ SvIV_set(sv, I_V(SvNVX(sv)));
if ((NV)(SvIVX(sv)) == SvNVX(sv))
SvIOK_on(sv);
/* Assumption: first non-preserved integer is < IV_MAX,
@@ -2707,7 +2708,7 @@
return SvNVX(sv);
}
if (SvIOKp(sv)) {
- SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
+ SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
#ifdef NV_PRESERVES_UV
SvNOK_on(sv);
#else
@@ -2729,12 +2730,12 @@
if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
== IS_NUMBER_IN_UV) {
/* It's definitely an integer */
- SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
+ SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
} else
- SvNVX(sv) = Atof(SvPVX(sv));
+ SvNV_set(sv, Atof(SvPVX(sv)));
SvNOK_on(sv);
#else
- SvNVX(sv) = Atof(SvPVX(sv));
+ SvNV_set(sv, Atof(SvPVX(sv)));
/* Only set the public NV OK flag if this NV preserves the value in
the PV at least as well as an IV/UV would.
Not sure how to do this 100% reliably. */
@@ -2758,11 +2759,11 @@
SvIOKp_on(sv);
if (numtype & IS_NUMBER_NEG) {
- SvIVX(sv) = -(IV)value;
+ SvIV_set(sv, -(IV)value);
} else if (value <= (UV)IV_MAX) {
- SvIVX(sv) = (IV)value;
+ SvIV_set(sv, (IV)value);
} else {
- SvUVX(sv) = value;
+ SvUV_set(sv, value);
SvIsUV_on(sv);
}
@@ -3478,7 +3479,7 @@
(void)SvOOK_off(sv);
s = (U8*)SvPVX(sv);
len = SvCUR(sv) + 1; /* Plus the \0 */
- SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
+ SvPV_set(sv, (char*)bytes_to_utf8((U8*)s, &len));
SvCUR(sv) = len - 1;
if (SvLEN(sv) != 0)
Safefree(s); /* No longer using what was there before. */
@@ -3691,7 +3692,7 @@
break;
}
(void)SvIOK_only(dstr);
- SvIVX(dstr) = SvIVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
if (SvIsUV(sstr))
SvIsUV_on(dstr);
if (SvTAINTED(sstr))
@@ -3713,7 +3714,7 @@
sv_upgrade(dstr, SVt_PVNV);
break;
}
- SvNVX(dstr) = SvNVX(sstr);
+ SvNV_set(dstr, SvNVX(sstr));
(void)SvNOK_only(dstr);
if (SvTAINTED(sstr))
SvTAINT(dstr);
@@ -3976,7 +3977,7 @@
/* Only set the public OK flag if the source has public OK. */
if (sflags & SVf_NOK)
SvFLAGS(dstr) |= SVf_NOK;
- SvNVX(dstr) = SvNVX(sstr);
+ SvNV_set(dstr, SvNVX(sstr));
}
if (sflags & SVp_IOK) {
(void)SvIOKp_on(dstr);
@@ -3984,7 +3985,7 @@
SvFLAGS(dstr) |= SVf_IOK;
if (sflags & SVf_IVisUV)
SvIsUV_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
}
if (SvAMAGIC(sstr)) {
SvAMAGIC_on(dstr);
@@ -4042,7 +4043,7 @@
SvNOKp_on(dstr);
if (sflags & SVf_NOK)
SvFLAGS(dstr) |= SVf_NOK;
- SvNVX(dstr) = SvNVX(sstr);
+ SvNV_set(dstr, SvNVX(sstr));
}
if (sflags & SVp_IOK) {
(void)SvIOKp_on(dstr);
@@ -4050,7 +4051,7 @@
SvFLAGS(dstr) |= SVf_IOK;
if (sflags & SVf_IVisUV)
SvIsUV_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
}
if ( SvVOK(sstr) ) {
MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
@@ -4069,13 +4070,13 @@
/* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
if (sflags & SVf_IVisUV)
SvIsUV_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
if (sflags & SVp_NOK) {
if (sflags & SVf_NOK)
(void)SvNOK_on(dstr);
else
(void)SvNOKp_on(dstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvNV_set(dstr, SvNVX(sstr));
}
}
else if (sflags & SVp_NOK) {
@@ -4085,7 +4086,7 @@
(void)SvOK_off(dstr);
SvNOKp_on(dstr);
}
- SvNVX(dstr) = SvNVX(sstr);
+ SvNV_set(dstr, SvNVX(sstr));
}
else {
if (dtype == SVt_PVGV) {
@@ -4237,7 +4238,7 @@
if (SvPVX(sv) && SvLEN(sv))
Safefree(SvPVX(sv));
Renew(ptr, len+1, char);
- SvPVX(sv) = ptr;
+ SvPV_set(sv, ptr);
SvCUR_set(sv, len);
SvLEN_set(sv, len+1);
*SvEND(sv) = '\0';
@@ -4343,7 +4344,7 @@
Move(pvx,SvPVX(sv),len,char);
*SvEND(sv) = '\0';
}
- SvIVX(sv) = 0;
+ SvIV_set(sv, 0);
/* Same SvOOK_on but SvOOK_on does a SvIOK_off
and we do that anyway inside the SvNIOK_off
*/
@@ -4352,8 +4353,8 @@
SvNIOK_off(sv);
SvLEN(sv) -= delta;
SvCUR(sv) -= delta;
- SvPVX(sv) += delta;
- SvIVX(sv) += delta;
+ SvPV_set(sv, SvPVX(sv) + delta);
+ SvIV_set(sv, SvIVX(sv) + delta);
}
/* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
@@ -6532,20 +6533,20 @@
sv_setnv(sv, UV_MAX_P1);
else
(void)SvIOK_only_UV(sv);
- ++SvUVX(sv);
+ SvUV_set(sv, SvUVX(sv) + 1);
} else {
if (SvIVX(sv) == IV_MAX)
sv_setuv(sv, (UV)IV_MAX + 1);
else {
(void)SvIOK_only(sv);
- ++SvIVX(sv);
+ SvIV_set(sv, SvIVX(sv) + 1);
}
}
return;
}
if (flags & SVp_NOK) {
(void)SvNOK_only(sv);
- SvNVX(sv) += 1.0;
+ SvNV_set(sv, SvNVX(sv) + 1.0);
return;
}
@@ -6553,7 +6554,7 @@
if ((flags & SVTYPEMASK) < SVt_PVIV)
sv_upgrade(sv, SVt_IV);
(void)SvIOK_only(sv);
- SvIVX(sv) = 1;
+ SvIV_set(sv, 1);
return;
}
d = SvPVX(sv);
@@ -6580,7 +6581,7 @@
/* sv_2iv *should* have made this an NV */
if (flags & SVp_NOK) {
(void)SvNOK_only(sv);
- SvNVX(sv) += 1.0;
+ SvNV_set(sv, SvNVX(sv) + 1.0);
return;
}
/* I don't think we can get here. Maybe I should assert this
@@ -6682,24 +6683,24 @@
if (SvIsUV(sv)) {
if (SvUVX(sv) == 0) {
(void)SvIOK_only(sv);
- SvIVX(sv) = -1;
+ SvIV_set(sv, -1);
}
else {
(void)SvIOK_only_UV(sv);
- --SvUVX(sv);
+ SvUV_set(sv, SvUVX(sv) + 1);
}
} else {
if (SvIVX(sv) == IV_MIN)
sv_setnv(sv, (NV)IV_MIN - 1.0);
else {
(void)SvIOK_only(sv);
- --SvIVX(sv);
+ SvIV_set(sv, SvIVX(sv) - 1);
}
}
return;
}
if (flags & SVp_NOK) {
- SvNVX(sv) -= 1.0;
+ SvNV_set(sv, SvNVX(sv) - 1.0);
(void)SvNOK_only(sv);
return;
}
@@ -6728,7 +6729,7 @@
/* sv_2iv *should* have made this an NV */
if (flags & SVp_NOK) {
(void)SvNOK_only(sv);
- SvNVX(sv) -= 1.0;
+ SvNV_set(sv, SvNVX(sv) - 1.0);
return;
}
/* I don't think we can get here. Maybe I should assert this
@@ -6895,9 +6896,9 @@
PERL_HASH(hash, src, len);
new_SV(sv);
sv_upgrade(sv, SVt_PVIV);
- SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
+ SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
SvCUR(sv) = len;
- SvUVX(sv) = hash;
+ SvUV_set(sv, hash);
SvLEN(sv) = 0;
SvREADONLY_on(sv);
SvFAKE_on(sv);
@@ -9908,12 +9909,13 @@
SvRV(dstr) = SvWEAKREF(sstr)
? sv_dup(SvRV(sstr), param)
: sv_dup_inc(SvRV(sstr), param);
+
}
else if (SvPVX(sstr)) {
/* Has something there */
if (SvLEN(sstr)) {
/* Normal PV - clone whole allocated space */
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
+ SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1));
}
else {
/* Special case - not normally malloced for some reason */
@@ -9924,25 +9926,28 @@
and they should not have these flags
turned off */
- SvPVX(dstr) = sharepvn(SvPVX(sstr), SvCUR(sstr),
- SvUVX(sstr));
- SvUVX(dstr) = SvUVX(sstr);
+ SvPV_set(dstr, sharepvn(SvPVX(sstr), SvCUR(sstr),
+ SvUVX(sstr)));
+ SvUV_set(dstr, SvUVX(sstr));
} else {
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvCUR(sstr));
+ SvPV_set(dstr, SAVEPVN(SvPVX(sstr), SvCUR(sstr)));
SvFAKE_off(dstr);
SvREADONLY_off(dstr);
}
}
else {
/* Some other special case - random pointer */
- SvPVX(dstr) = SvPVX(sstr);
+ SvPV_set(dstr, SvPVX(sstr));
}
}
}
else {
/* Copy the Null */
- SvPVX(dstr) = SvPVX(sstr);
+ if (SvTYPE(dstr) == SVt_RV)
+ SvRV(dstr) = 0;
+ else
+ SvPV_set(dstr, 0);
}
}
@@ -9998,11 +10003,11 @@
break;
case SVt_IV:
SvANY(dstr) = new_XIV();
- SvIVX(dstr) = SvIVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
break;
case SVt_NV:
SvANY(dstr) = new_XNV();
- SvNVX(dstr) = SvNVX(sstr);
+ SvNV_set(dstr, SvNVX(sstr));
break;
case SVt_RV:
SvANY(dstr) = new_XRV();
@@ -10018,23 +10023,23 @@
SvANY(dstr) = new_XPVIV();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
break;
case SVt_PVNV:
SvANY(dstr) = new_XPVNV();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
break;
case SVt_PVMG:
SvANY(dstr) = new_XPVMG();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10043,8 +10048,8 @@
SvANY(dstr) = new_XPVBM();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10056,8 +10061,8 @@
SvANY(dstr) = new_XPVLV();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10088,8 +10093,8 @@
SvANY(dstr) = new_XPVGV();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10104,8 +10109,8 @@
SvANY(dstr) = new_XPVIO();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10146,8 +10151,8 @@
SvANY(dstr) = new_XPVAV();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param);
@@ -10159,7 +10164,7 @@
src_ary = AvARRAY((AV*)sstr);
Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
ptr_table_store(PL_ptr_table, src_ary, dst_ary);
- SvPVX(dstr) = (char*)dst_ary;
+ SvPV_set(dstr, (char*)dst_ary);
AvALLOC((AV*)dstr) = dst_ary;
if (AvREAL((AV*)sstr)) {
while (items-- > 0)
@@ -10175,7 +10180,7 @@
}
}
else {
- SvPVX(dstr) = Nullch;
+ SvPV_set(dstr, Nullch);
AvALLOC((AV*)dstr) = (SV**)NULL;
}
break;
@@ -10183,8 +10188,8 @@
SvANY(dstr) = new_XPVHV();
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
@@ -10204,7 +10209,7 @@
(bool)!!HvSHAREKEYS(sstr), param);
}
else {
- SvPVX(dstr) = Nullch;
+ SvPV_set(dstr, Nullch);
HvEITER((HV*)dstr) = (HE*)NULL;
}
HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
@@ -10223,8 +10228,8 @@
dup_pvcv:
SvCUR(dstr) = SvCUR(sstr);
SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
+ SvIV_set(dstr, SvIVX(sstr));
+ SvNV_set(dstr, SvNVX(sstr));
SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr), param);
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr), param);
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
@@ -10927,22 +10932,22 @@
SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
SvFLAGS(&PL_sv_no) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
- SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
+ SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
SvCUR(&PL_sv_no) = 0;
SvLEN(&PL_sv_no) = 1;
- SvIVX(&PL_sv_no) = 0;
- SvNVX(&PL_sv_no) = 0;
+ SvIV_set(&PL_sv_no, 0);
+ SvNV_set(&PL_sv_no, 0);
ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
SvANY(&PL_sv_yes) = new_XPVNV();
SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
SvFLAGS(&PL_sv_yes) = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
- SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
+ SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
SvCUR(&PL_sv_yes) = 1;
SvLEN(&PL_sv_yes) = 2;
- SvIVX(&PL_sv_yes) = 1;
- SvNVX(&PL_sv_yes) = 1;
+ SvIV_set(&PL_sv_yes, 1);
+ SvNV_set(&PL_sv_yes, 1);
ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
/* create (a non-shared!) shared string table */
==== //depot/maint-5.8/perl/sv.h#35 (text) ====
Index: perl/sv.h
--- perl/sv.h#34~24332~ Tue Apr 26 09:02:43 2005
+++ perl/sv.h Mon Sep 12 09:18:42 2005
@@ -763,13 +763,16 @@
(void) SvIV(sv); } STMT_END
#define SvIV_set(sv, val) \
STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
- (SvIVX(sv) = (val)); } STMT_END
+ (((XPVIV*) SvANY(sv))->xiv_iv = (val)); } STMT_END
#define SvNV_set(sv, val) \
STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \
(SvNVX(sv) = (val)); } STMT_END
#define SvPV_set(sv, val) \
STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
- (SvPVX(sv) = (val)); } STMT_END
+ (((XPV*) SvANY(sv))->xpv_pv = (val)); } STMT_END
+#define SvUV_set(sv, val) \
+ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
+ (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END
#define SvCUR_set(sv, val) \
STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
(SvCUR(sv) = (val)); } STMT_END
==== //depot/maint-5.8/perl/toke.c#62 (text) ====
Index: perl/toke.c
--- perl/toke.c#61~25385~ Sun Sep 11 13:36:26 2005
+++ perl/toke.c Mon Sep 12 09:18:42 2005
@@ -650,7 +650,7 @@
sv_upgrade(sv, SVt_PVMG);
sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
(void)SvIOK_on(sv);
- SvIVX(sv) = 0;
+ SvIV_set(sv, 0);
av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
}
}
@@ -878,7 +878,7 @@
ver = cSVOPx(version)->op_sv;
if (SvPOK(ver) && !SvNIOK(ver)) {
(void)SvUPGRADE(ver, SVt_PVNV);
- SvNVX(ver) = str_to_version(ver);
+ SvNV_set(ver, str_to_version(ver));
SvNOK_on(ver); /* hint that it is a version */
}
}
@@ -2504,7 +2504,7 @@
sv_upgrade(sv, SVt_PVMG);
sv_setsv(sv,PL_linestr);
(void)SvIOK_on(sv);
- SvIVX(sv) = 0;
+ SvIV_set(sv, 0);
av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
}
goto retry;
@@ -2591,7 +2591,7 @@
sv_upgrade(sv, SVt_PVMG);
sv_setsv(sv,PL_linestr);
(void)SvIOK_on(sv);
- SvIVX(sv) = 0;
+ SvIV_set(sv, 0);
av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
}
PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
@@ -4808,7 +4808,7 @@
missingterm((char*)0);
yylval.ival = OP_STRINGIFY;
if (SvIVX(PL_lex_stuff) == '\'')
- SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
+ SvIV_set(PL_lex_stuff, 0); /* qq'$foo' should intepolate */
TERM(sublex_start());
case KEY_qr:
@@ -9307,11 +9307,11 @@
sv_upgrade(tmpstr, SVt_PVIV);
if (term == '\'') {
op_type = OP_CONST;
- SvIVX(tmpstr) = -1;
+ SvIV_set(tmpstr, -1);
}
else if (term == '`') {
op_type = OP_BACKTICK;
- SvIVX(tmpstr) = '\\';
+ SvIV_set(tmpstr, '\\');
}
CLINE;
@@ -9397,7 +9397,7 @@
sv_upgrade(sv, SVt_PVMG);
sv_setsv(sv,PL_linestr);
(void)SvIOK_on(sv);
- SvIVX(sv) = 0;
+ SvIV_set(sv, 0);
av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop),sv);
}
if (*s == term && memEQ(s,PL_tokenbuf,len)) {
@@ -9683,7 +9683,7 @@
assuming. 79 is the SV's initial length. What a random number. */
sv = NEWSV(87,79);
sv_upgrade(sv, SVt_PVIV);
- SvIVX(sv) = termcode;
+ SvIV_set(sv, termcode);
(void)SvPOK_only(sv); /* validate pointer */
/* move past delimiter and try to read a complete string */
@@ -9869,7 +9869,7 @@
sv_upgrade(sv, SVt_PVMG);
sv_setsv(sv,PL_linestr);
(void)SvIOK_on(sv);
- SvIVX(sv) = 0;
+ SvIV_set(sv, 0);
av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop), sv);
}
==== //depot/maint-5.8/perl/util.c#58 (text) ====
Index: perl/util.c
--- perl/util.c#57~25385~ Sun Sep 11 13:36:26 2005
+++ perl/util.c Mon Sep 12 09:18:42 2005
@@ -2038,7 +2038,7 @@
sv = *av_fetch(PL_fdpid,p[This],TRUE);
UNLOCK_FDPID_MUTEX;
(void)SvUPGRADE(sv,SVt_IV);
- SvIVX(sv) = pid;
+ SvIV_set(sv, pid);
PL_forkprocess = pid;
/* If we managed to get status pipe check for exec fail */
if (did_pipes && pid > 0) {
@@ -2191,7 +2191,7 @@
sv = *av_fetch(PL_fdpid,p[This],TRUE);
UNLOCK_FDPID_MUTEX;
(void)SvUPGRADE(sv,SVt_IV);
- SvIVX(sv) = pid;
+ SvIV_set(sv, pid);
PL_forkprocess = pid;
if (did_pipes && pid > 0) {
int errkid;
@@ -2648,7 +2648,7 @@
sprintf(spid, "%"IVdf, (IV)pid);
sv = *hv_fetch(PL_pidstatus,spid,strlen(spid),TRUE);
(void)SvUPGRADE(sv,SVt_IV);
- SvIVX(sv) = status;
+ SvIV_set(sv, status);
return;
}
End of Patch.