Change 25396 by [EMAIL PROTECTED] on 2005/09/12 22:33:56

        Integrate:
        [ 24201]
        Add a macro PERL_DEBUG_COW, for aggressive compile time tests of
        Copy-On-Write related source changes.
        Fix the problem this revealed.
        
        [ 24998]
        Fix sv_dec of undefined PVs to (a) not downgrade to NV
        (b) give -1, rather than +1
        
        [ 25102]
        sv_dec is supposed to go *down*, m'kay.

Affected files ...

... //depot/maint-5.8/perl/sv.c#137 integrate
... //depot/maint-5.8/perl/sv.h#38 edit
... //depot/maint-5.8/perl/t/op/inc.t#3 integrate

Differences ...

==== //depot/maint-5.8/perl/sv.c#137 (text) ====
Index: perl/sv.c
--- perl/sv.c#136~25394~        Mon Sep 12 14:21:39 2005
+++ perl/sv.c   Mon Sep 12 15:33:56 2005
@@ -6676,7 +6676,7 @@
            }
            else {
                (void)SvIOK_only_UV(sv);
-               SvUV_set(sv, SvUVX(sv) + 1);
+               SvUV_set(sv, SvUVX(sv) - 1);
            }   
        } else {
            if (SvIVX(sv) == IV_MIN)
@@ -6694,10 +6694,10 @@
        return;
     }
     if (!(flags & SVp_POK)) {
-       if ((flags & SVTYPEMASK) < SVt_PVNV)
-           sv_upgrade(sv, SVt_NV);
-       SvNVX(sv) = -1.0;
-       (void)SvNOK_only(sv);
+       if ((flags & SVTYPEMASK) < SVt_PVIV)
+           sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
+       SvIV_set(sv, -1);
+       (void)SvIOK_only(sv);
        return;
     }
 #ifdef PERL_PRESERVE_IVUV

==== //depot/maint-5.8/perl/sv.h#38 (text) ====
Index: perl/sv.h
--- perl/sv.h#37~25394~ Mon Sep 12 14:21:39 2005
+++ perl/sv.h   Mon Sep 12 15:33:56 2005
@@ -740,17 +740,18 @@
 #define SvRVx(sv) SvRV(sv)
 
 #define SvIVX(sv) ((XPVIV*)  SvANY(sv))->xiv_iv
-#define SvIVXx(sv) SvIVX(sv)
 #define SvUVX(sv) ((XPVUV*)  SvANY(sv))->xuv_uv
-#define SvUVXx(sv) SvUVX(sv)
 #define SvNVX(sv)  ((XPVNV*)SvANY(sv))->xnv_nv
-#define SvNVXx(sv) SvNVX(sv)
 #define SvPVX(sv)  ((XPV*)  SvANY(sv))->xpv_pv
-#define SvPVXx(sv) SvPVX(sv)
 #define SvCUR(sv) ((XPV*)  SvANY(sv))->xpv_cur
 #define SvLEN(sv) ((XPV*)  SvANY(sv))->xpv_len
-#define SvLENx(sv) SvLEN(sv)
 #define SvEND(sv)(((XPV*)  SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur)
+
+#define SvIVXx(sv) SvIVX(sv)
+#define SvUVXx(sv) SvUVX(sv)
+#define SvNVXx(sv) SvNVX(sv)
+#define SvPVXx(sv) SvPVX(sv)
+#define SvLENx(sv) SvLEN(sv)
 #define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))
 #define SvMAGIC(sv)    ((XPVMG*)  SvANY(sv))->xmg_magic
 #define SvSTASH(sv)    ((XPVMG*)  SvANY(sv))->xmg_stash
@@ -768,7 +769,7 @@
                (((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
+               (((XPVNV*)SvANY(sv))->xnv_nv = (val)); } STMT_END
 /* assert(SvTYPE(sv) >= SVt_PV); */
 #define SvPV_set(sv, val) \
        STMT_START { \

==== //depot/maint-5.8/perl/t/op/inc.t#3 (xtext) ====
Index: perl/t/op/inc.t
--- perl/t/op/inc.t#2~19029~    Wed Mar 19 07:42:44 2003
+++ perl/t/op/inc.t     Mon Sep 12 15:33:56 2005
@@ -2,7 +2,7 @@
 
 # use strict;
 
-print "1..26\n";
+print "1..32\n";
 
 my $test = 1;
 
@@ -157,3 +157,31 @@
 }
 
 check_same (\%orig, \%postdec);
+
+{
+    no warnings 'uninitialized';
+    my $x, $y;
+    eval {
+       $y ="$x\n";
+       ++$x;
+    };
+    ok($x == 1, $x);
+    ok($@ eq '', $@);
+
+    my $p, $q;
+    eval {
+       $q ="$p\n";
+       --$p;
+    };
+    ok($p == -1, $p);
+    ok($@ eq '', $@);
+}
+
+$a = 2147483648;
+$c=--$a;
+ok ($a == 2147483647, $a);
+
+
+$a = 2147483648;
+$c=$a--;
+ok ($a == 2147483647, $a);
End of Patch.

Reply via email to