[Python-checkins] cpython: Issue #15480: Remove the deprecated and unused TYPE_INT64 code from marshal.

antoine.pitrou python-checkins at python.org
Sat Apr 13 22:41:19 CEST 2013


http://hg.python.org/cpython/rev/74a440984b20
changeset:   83313:74a440984b20
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Sat Apr 13 22:41:09 2013 +0200
summary:
  Issue #15480: Remove the deprecated and unused TYPE_INT64 code from marshal.
Initial patch by Daniel Riti.

files:
  Lib/test/test_marshal.py |  30 +----------------
  Misc/ACKS                |   1 +
  Misc/NEWS                |   3 +
  Python/marshal.c         |  47 +---------------------------
  4 files changed, 8 insertions(+), 73 deletions(-)


diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -23,36 +23,12 @@
 
 class IntTestCase(unittest.TestCase, HelperMixin):
     def test_ints(self):
-        # Test the full range of Python ints.
-        n = sys.maxsize
+        # Test a range of Python ints larger than the machine word size.
+        n = sys.maxsize ** 2
         while n:
             for expected in (-n, n):
                 self.helper(expected)
-            n = n >> 1
-
-    def test_int64(self):
-        # Simulate int marshaling on a 64-bit box.  This is most interesting if
-        # we're running the test on a 32-bit box, of course.
-
-        def to_little_endian_string(value, nbytes):
-            b = bytearray()
-            for i in range(nbytes):
-                b.append(value & 0xff)
-                value >>= 8
-            return b
-
-        maxint64 = (1 << 63) - 1
-        minint64 = -maxint64-1
-
-        for base in maxint64, minint64, -maxint64, -(minint64 >> 1):
-            while base:
-                s = b'I' + to_little_endian_string(base, 8)
-                got = marshal.loads(s)
-                self.assertEqual(base, got)
-                if base == -1:  # a fixed-point for shifting right 1
-                    base = 0
-                else:
-                    base >>= 1
+                n = n >> 1
 
     def test_bool(self):
         for b in (True, False):
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1024,6 +1024,7 @@
 Jean-Claude Rimbault
 Vlad Riscutia
 Wes Rishel
+Daniel Riti
 Juan M. Bello Rivas
 Davide Rizzo
 Anthony Roach
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -44,6 +44,9 @@
 Library
 -------
 
+- Issue #15480: Remove the deprecated and unused TYPE_INT64 code from marshal.
+  Initial patch by Daniel Riti.
+
 - Issue #2118: SMTPException is now a subclass of IOError.
 
 - Issue #17016: Get rid of possible pointer wraparounds and integer overflows
diff --git a/Python/marshal.c b/Python/marshal.c
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -33,10 +33,6 @@
 #define TYPE_STOPITER           'S'
 #define TYPE_ELLIPSIS           '.'
 #define TYPE_INT                'i'
-/* TYPE_INT64 is deprecated. It is not
-   generated anymore, and support for reading it
-   will be removed in Python 3.4. */
-#define TYPE_INT64              'I'
 #define TYPE_FLOAT              'f'
 #define TYPE_BINARY_FLOAT       'g'
 #define TYPE_COMPLEX            'x'
@@ -638,42 +634,6 @@
     return x;
 }
 
-/* r_long64 deals with the TYPE_INT64 code.  On a machine with
-   sizeof(long) > 4, it returns a Python int object, else a Python long
-   object.  Note that w_long64 writes out TYPE_INT if 32 bits is enough,
-   so there's no inefficiency here in returning a PyLong on 32-bit boxes
-   for everything written via TYPE_INT64 (i.e., if an int is written via
-   TYPE_INT64, it *needs* more than 32 bits).
-*/
-static PyObject *
-r_long64(RFILE *p)
-{
-    PyObject *result = NULL;
-    long lo4 = r_long(p);
-    long hi4 = r_long(p);
-
-    if (!PyErr_Occurred()) {
-#if SIZEOF_LONG > 4
-        long x = (hi4 << 32) | (lo4 & 0xFFFFFFFFL);
-        result = PyLong_FromLong(x);
-#else
-        unsigned char buf[8];
-        int one = 1;
-        int is_little_endian = (int)*(char*)&one;
-        if (is_little_endian) {
-            memcpy(buf, &lo4, 4);
-            memcpy(buf+4, &hi4, 4);
-        }
-        else {
-            memcpy(buf, &hi4, 4);
-            memcpy(buf+4, &lo4, 4);
-        }
-        result = _PyLong_FromByteArray(buf, 8, is_little_endian, 1);
-#endif
-    }
-    return result;
-}
-
 static PyObject *
 r_PyLong(RFILE *p)
 {
@@ -871,11 +831,6 @@
         R_REF(retval);
         break;
 
-    case TYPE_INT64:
-        retval = r_long64(p);
-        R_REF(retval);
-        break;
-
     case TYPE_LONG:
         retval = r_PyLong(p);
         R_REF(retval);
@@ -1201,7 +1156,7 @@
             PyObject *name = NULL;
             int firstlineno;
             PyObject *lnotab = NULL;
-            
+
             idx = r_ref_reserve(flag, p);
             if (idx < 0) {
                 retval = NULL;

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list