Change 32725 by [EMAIL PROTECTED] on 2007/12/26 11:55:15

        Swap SVt_RV and SVt_NV in the SV ordering.

Affected files ...

... //depot/perl/dump.c#283 edit
... //depot/perl/ext/B/B.xs#141 edit
... //depot/perl/ext/Storable/Storable.xs#132 edit
... //depot/perl/pp.c#606 edit
... //depot/perl/pp_hot.c#533 edit
... //depot/perl/sv.c#1450 edit
... //depot/perl/sv.h#326 edit

Differences ...

==== //depot/perl/dump.c#283 (text) ====
Index: perl/dump.c
--- perl/dump.c#282~32105~      2007-10-12 08:21:14.000000000 -0700
+++ perl/dump.c 2007-12-26 03:55:15.000000000 -0800
@@ -31,8 +31,8 @@
     "NULL",
     "BIND",
     "IV",
-    "NV",
     "RV",
+    "NV",
     "PV",
     "PVIV",
     "PVNV",
@@ -51,8 +51,8 @@
     "UNDEF",
     "BIND",
     "IV",
-    "NV",
     "RV",
+    "NV",
     "PV",
     "PVIV",
     "PVNV",

==== //depot/perl/ext/B/B.xs#141 (text) ====
Index: perl/ext/B/B.xs
--- perl/ext/B/B.xs#140~32164~  2007-10-22 04:33:23.000000000 -0700
+++ perl/ext/B/B.xs     2007-12-26 03:55:15.000000000 -0800
@@ -25,8 +25,8 @@
     "B::BIND",
 #endif
     "B::IV",
-    "B::NV",
     "B::RV",
+    "B::NV",
     "B::PV",
     "B::PVIV",
     "B::PVNV",

==== //depot/perl/ext/Storable/Storable.xs#132 (text) ====
Index: perl/ext/Storable/Storable.xs
--- perl/ext/Storable/Storable.xs#131~32693~    2007-12-21 19:58:49.000000000 
-0800
+++ perl/ext/Storable/Storable.xs       2007-12-26 03:55:15.000000000 -0800
@@ -4497,7 +4497,7 @@
 
        if (cname) {
                /* No need to do anything, as rv will already be PVMG.  */
-               assert (SvTYPE(rv) >= SVt_RV);
+               assert (SvTYPE(rv) == SVt_RV || SvTYPE(rv) >= SVt_PV);
        } else {
                sv_upgrade(rv, SVt_RV);
        }

==== //depot/perl/pp.c#606 (text) ====
Index: perl/pp.c
--- perl/pp.c#605~32680~        2007-12-20 13:15:57.000000000 -0800
+++ perl/pp.c   2007-12-26 03:55:15.000000000 -0800
@@ -172,7 +172,7 @@
                        const char * const name = CopSTASHPV(PL_curcop);
                        gv = newGVgen(name);
                    }
-                   if (SvTYPE(sv) < SVt_RV)
+                   if (SvTYPE(sv) < SVt_RV || SvTYPE(sv) == SVt_NV)
                        sv_upgrade(sv, SVt_RV);
                    else if (SvPVX_const(sv)) {
                        SvPV_free(sv);

==== //depot/perl/pp_hot.c#533 (text) ====
Index: perl/pp_hot.c
--- perl/pp_hot.c#532~32720~    2007-12-24 13:26:22.000000000 -0800
+++ perl/pp_hot.c       2007-12-26 03:55:15.000000000 -0800
@@ -2940,7 +2940,7 @@
     if (!SvOK(sv)) {
        if (SvREADONLY(sv))
            Perl_croak(aTHX_ PL_no_modify);
-       if (SvTYPE(sv) < SVt_RV)
+       if (SvTYPE(sv) < SVt_RV || SvTYPE(sv) == SVt_NV)
            sv_upgrade(sv, SVt_RV);
        else if (SvTYPE(sv) >= SVt_PV) {
            SvPV_free(sv);

==== //depot/perl/sv.c#1450 (text) ====
Index: perl/sv.c
--- perl/sv.c#1449~32715~       2007-12-23 03:27:25.000000000 -0800
+++ perl/sv.c   2007-12-26 03:55:15.000000000 -0800
@@ -890,13 +890,13 @@
       FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
     },
 
+    /* RVs are in the head now.  */
+    { 0, 0, 0, SVt_RV, FALSE, NONV, NOARENA, 0 },
+
     /* 8 bytes on most ILP32 with IEEE doubles */
     { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
       FIT_ARENA(0, sizeof(NV)) },
 
-    /* RVs are in the head now.  */
-    { 0, 0, 0, SVt_RV, FALSE, NONV, NOARENA, 0 },
-
     /* 8 bytes on most ILP32 with IEEE doubles */
     { sizeof(xpv_allocated),
       copy_length(XPV, xpv_len)
@@ -1235,7 +1235,11 @@
        return;
     case SVt_RV:
        assert(old_type == SVt_NULL);
-       SvANY(sv) = &sv->sv_u.svu_rv;
+       SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, 
xiv_iv));
+       /* Could leave this in, but changing it happens to make the next step
+          clearler. The key part is that SvANY(sv) is not NULL:
+          SvANY(sv) = &sv->sv_u.svu_rv;
+       */
        SvRV_set(sv, 0);
        return;
     case SVt_PVHV:
@@ -1286,7 +1290,7 @@
           The target created by newSVrv also is, and it can have magic.
           However, it never has SvPVX set.
        */
-       if (old_type >= SVt_RV) {
+       if (old_type == SVt_RV || old_type >= SVt_PV) {
            assert(SvPVX_const(sv) == 0);
        }
 
@@ -1357,7 +1361,7 @@
 
        if (new_type == SVt_PVIO)
            IoPAGE_LEN(sv) = 60;
-       if (old_type < SVt_RV)
+       if (old_type < SVt_RV || old_type == SVt_NV)
            SvPV_set(sv, NULL);
        break;
     default:
@@ -3483,7 +3487,7 @@
        goto undef_sstr;
 
     case SVt_RV:
-       if (dtype < SVt_RV)
+       if (dtype < SVt_PV && dtype != SVt_RV)
            sv_upgrade(dstr, SVt_RV);
        break;
     case SVt_PVFM:
@@ -7856,7 +7860,7 @@
        sv_upgrade(rv, SVt_RV);
     } else if (SvROK(rv)) {
        SvREFCNT_dec(SvRV(rv));
-    } else if (SvTYPE(rv) < SVt_RV)
+    } else if (SvTYPE(rv) < SVt_RV || SvTYPE(rv) == SVt_NV)
        sv_upgrade(rv, SVt_RV);
     else if (SvTYPE(rv) > SVt_RV) {
        SvPV_free(rv);

==== //depot/perl/sv.h#326 (text) ====
Index: perl/sv.h
--- perl/sv.h#325~32717~        2007-12-23 04:31:26.000000000 -0800
+++ perl/sv.h   2007-12-26 03:55:15.000000000 -0800
@@ -47,8 +47,8 @@
        SVt_NULL,       /* 0 */
        SVt_BIND,       /* 1 */
        SVt_IV,         /* 2 */
-       SVt_NV,         /* 3 */
-       SVt_RV,         /* 4 */
+       SVt_RV,         /* 3 */
+       SVt_NV,         /* 4 */
        SVt_PV,         /* 5 */
        SVt_PVIV,       /* 6 */
        SVt_PVNV,       /* 7 */
@@ -1298,7 +1298,7 @@
         }))
 #    define SvRV(sv)                                                   \
        (*({ SV *const _svi = (SV *) (sv);                              \
-           assert(SvTYPE(_svi) >= SVt_RV);                             \
+           assert(SvTYPE(_svi) >= SVt_PV || SvTYPE(_svi) == SVt_RV);   \
            assert(SvTYPE(_svi) != SVt_PVAV);                           \
            assert(SvTYPE(_svi) != SVt_PVHV);                           \
            assert(SvTYPE(_svi) != SVt_PVCV);                           \
@@ -1383,7 +1383,7 @@
                assert(!isGV_with_GP(sv));              \
                (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END
 #define SvRV_set(sv, val) \
-        STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
+        STMT_START { assert(SvTYPE(sv) >=  SVt_PV || SvTYPE(sv) ==  SVt_RV); \
                assert(SvTYPE(sv) != SVt_PVAV);         \
                assert(SvTYPE(sv) != SVt_PVHV);         \
                assert(SvTYPE(sv) != SVt_PVCV);         \
End of Patch.

Reply via email to