2008-05-28-serialize.cpp.patch 2.96 KB
Index: src/serialize.cpp
===================================================================
--- src/serialize.cpp	(revision 1746)
+++ src/serialize.cpp	(working copy)
@@ -229,7 +229,7 @@
     {
       /* a small one */
       check_serial(9);        /* sign + two words */
-      put_serial_8(x&2);      /* sign bit: 0 = positive, 1 = negative */ 
+      put_serial_8(!!(x&2));      /* sign bit: 0 = positive, 1 = negative */ 
       put_serial_32(1);       /* number of bigits: 1 bigit */ 
       put_serial_32(x >> 2);  /* the bigit */
     }
@@ -241,7 +241,7 @@
       U32 i = 0; 
     
       check_serial(1+(4*(nb+1))); 
-      put_serial_8(x&2);                    /* sign bit */ 
+      put_serial_8(!!(x&2));                    /* sign bit */ 
       put_serial_32(nb);                    /* put number of bigits */
       for (i = 2; i < (nb+2); i++)          /* put the bigits */ 
         put_serial_32(seg[i]);
@@ -271,7 +271,7 @@
       U32 i = 0; 
     
       check_serial(1+(4*(nb+1))); 
-      put_serial_8(x&2);                    /* sign bit */ 
+      put_serial_8(!!(x&2));                    /* sign bit */ 
       put_serial_32(nb);                    /* put number of bigits */
       for (i = 2; i < (nb+2); i++)          /* put the bigits */ 
         put_serial_32(seg[i]);
@@ -1181,7 +1181,7 @@
               peek_serial_32(bigit);      /* get the bigit (no side effect) */
               if (bigit < 0x40000000)       /* if small Int */ 
                 {
-                  MAM(m_R) = (bigit<<2)|(sign<<1)|1;  /* make a small Nat */
+                  MAM(m_R) = (bigit<<2)|((sign&1)<<1)|1;  /* make a small Nat */
                   MAM(m_serial_next) += 4;  /* skip the bigit */
                 }
               else
@@ -1214,7 +1214,7 @@
               ((U32 *)(MAM(m_R)))[1] = nb;   /* store nb */
               for (i = 2; i < (nb+2); i++)   /* store the bigits */ 
                 get_serial_32(((U32 *)(MAM(m_R)))[i]);
-              MAM(m_R) |= (sign<<1); /* put sign bit */ 
+              MAM(m_R) |= ((sign&1)<<1); /* put sign bit */ 
             }
         }
     }
@@ -1267,7 +1267,7 @@
               peek_serial_32(bigit);      /* get the bigit (no side effect) */
               if (bigit < 0x40000000)     /* if small Int */ 
                 {
-                  *((U32 *)(*(MAM(m_SP)-1))) = (bigit<<2)|(sign<<1)|1;  /* make a small Int */
+                  *((U32 *)(*(MAM(m_SP)-1))) = (bigit<<2)|((sign&1)<<1)|1;  /* make a small Int */
                   *(MAM(m_SP)-1) += 4;
                   MAM(m_serial_next) += 4;  /* skip the bigit */
                 }
@@ -1303,7 +1303,7 @@
               ((U32 *)(seg))[1] = nb;              /* store nb */
               for (i = 2; i < (nb+2); i++)    /* store the bigits */ 
                 get_serial_32(((U32 *)(seg))[i]);
-              *((U32 *)(*(MAM(m_SP)-1))) = seg | (sign<<1);
+              *((U32 *)(*(MAM(m_SP)-1))) = seg | ((sign&1)<<1);
               *(MAM(m_SP)-1) += 4;
             }
         }