[Python-checkins] r69499 - in python/branches/py3k: Doc/c-api/long.rst Lib/test/test_struct.py Misc/ACKS Misc/NEWS Modules/testcapi_long.h Objects/longobject.c

mark.dickinson python-checkins at python.org
Tue Feb 10 17:13:26 CET 2009


Author: mark.dickinson
Date: Tue Feb 10 17:13:25 2009
New Revision: 69499

Log:
Merged revisions 69498 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r69498 | mark.dickinson | 2009-02-10 15:46:50 +0000 (Tue, 10 Feb 2009) | 6 lines
  
  Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError for
  negative arguments.  Previously, it raised TypeError.
  
  Thanks Lisandro Dalcin.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Doc/c-api/long.rst
   python/branches/py3k/Lib/test/test_struct.py
   python/branches/py3k/Misc/ACKS
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Modules/testcapi_long.h
   python/branches/py3k/Objects/longobject.c

Modified: python/branches/py3k/Doc/c-api/long.rst
==============================================================================
--- python/branches/py3k/Doc/c-api/long.rst	(original)
+++ python/branches/py3k/Doc/c-api/long.rst	Tue Feb 10 17:13:25 2009
@@ -168,17 +168,26 @@
 
 .. cfunction:: PY_LONG_LONG PyLong_AsLongLong(PyObject *pylong)
 
-   Return a C :ctype:`long long` from a Python integer.  If *pylong* cannot be
-   represented as a :ctype:`long long`, an :exc:`OverflowError` will be raised.
+   .. index::
+      single: OverflowError (built-in exception)
 
+   Return a C :ctype:`long long` from a Python integer.  If *pylong*
+   cannot be represented as a :ctype:`long long`, an
+   :exc:`OverflowError` is raised and ``-1`` is returned.
 
 .. cfunction:: unsigned PY_LONG_LONG PyLong_AsUnsignedLongLong(PyObject *pylong)
 
-   Return a C :ctype:`unsigned long long` from a Python integer. If *pylong*
-   cannot be represented as an :ctype:`unsigned long long`, an :exc:`OverflowError`
-   will be raised if the value is positive, or a :exc:`TypeError` will be raised if
-   the value is negative.
+   .. index::
+      single: OverflowError (built-in exception)
 
+   Return a C :ctype:`unsigned long long` from a Python integer. If
+   *pylong* cannot be represented as an :ctype:`unsigned long long`,
+   an :exc:`OverflowError` is raised and ``(unsigned long long)-1`` is
+   returned.
+
+   .. versionchanged:: 3.1
+      A negative *pylong* now raises :exc:`OverflowError`, not
+      :exc:`TypeError`.
 
 .. cfunction:: unsigned long PyLong_AsUnsignedLongMask(PyObject *io)
 

Modified: python/branches/py3k/Lib/test/test_struct.py
==============================================================================
--- python/branches/py3k/Lib/test/test_struct.py	(original)
+++ python/branches/py3k/Lib/test/test_struct.py	Tue Feb 10 17:13:25 2009
@@ -48,7 +48,7 @@
 def deprecated_err(func, *args):
     try:
         func(*args)
-    except (struct.error, TypeError):
+    except (struct.error, OverflowError):
         pass
     except DeprecationWarning:
         if not PY_STRUCT_OVERFLOW_MASKING:
@@ -191,7 +191,7 @@
 
     def test_native_qQ(self):
         # can't pack -1 as unsigned regardless
-        self.assertRaises((struct.error, TypeError), struct.pack, "Q", -1)
+        self.assertRaises((struct.error, OverflowError), struct.pack, "Q", -1)
         # can't pack string as 'q' regardless
         self.assertRaises(struct.error, struct.pack, "q", "a")
         # ditto, but 'Q'

Modified: python/branches/py3k/Misc/ACKS
==============================================================================
--- python/branches/py3k/Misc/ACKS	(original)
+++ python/branches/py3k/Misc/ACKS	Tue Feb 10 17:13:25 2009
@@ -152,6 +152,7 @@
 Drew Csillag
 John Cugini
 Tom Culliton
+Lisandro Dalcin
 Andrew Dalke
 Lars Damerow
 Eric Daniel

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Tue Feb 10 17:13:25 2009
@@ -467,6 +467,9 @@
 C-API
 -----
 
+- Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError
+  for negative arguments.  Previously, it raised TypeError.
+
 - Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'.
 
 - Issue #3632: from the gdb debugger, the 'pyo' macro can now be called when

Modified: python/branches/py3k/Modules/testcapi_long.h
==============================================================================
--- python/branches/py3k/Modules/testcapi_long.h	(original)
+++ python/branches/py3k/Modules/testcapi_long.h	Tue Feb 10 17:13:25 2009
@@ -97,6 +97,10 @@
 		if (uout != (unsigned TYPENAME)-1 || !PyErr_Occurred())
 			return error(
 				"PyLong_AsUnsignedXXX(-1) didn't complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsUnsignedXXX(-1) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 		UNBIND(x);
 
@@ -112,11 +116,15 @@
 			return error(
 				"unexpected NULL from PyNumber_Lshift");
 
-  		uout = F_PY_TO_U(x);
+		uout = F_PY_TO_U(x);
 		if (uout != (unsigned TYPENAME)-1 || !PyErr_Occurred())
 			return error(
 				"PyLong_AsUnsignedXXX(2**NBITS) didn't "
 				"complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsUnsignedXXX(2**NBITS) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 
 		/* Signed complains about 2**(NBITS-1)?
@@ -132,6 +140,10 @@
 			return error(
 				"PyLong_AsXXX(2**(NBITS-1)) didn't "
 				"complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsXXX(2**(NBITS-1)) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 
 		/* Signed complains about -2**(NBITS-1)-1?;
@@ -153,6 +165,10 @@
 			return error(
 				"PyLong_AsXXX(-2**(NBITS-1)-1) didn't "
 				"complain");
+		if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+			return error(
+				"PyLong_AsXXX(-2**(NBITS-1)-1) raised "
+				"something other than OverflowError");
 		PyErr_Clear();
 		UNBIND(y);
 

Modified: python/branches/py3k/Objects/longobject.c
==============================================================================
--- python/branches/py3k/Objects/longobject.c	(original)
+++ python/branches/py3k/Objects/longobject.c	Tue Feb 10 17:13:25 2009
@@ -786,7 +786,7 @@
 	if (Py_SIZE(v) < 0) {
 		ndigits = -(Py_SIZE(v));
 		if (!is_signed) {
-			PyErr_SetString(PyExc_TypeError,
+			PyErr_SetString(PyExc_OverflowError,
 				"can't convert negative int to unsigned");
 			return -1;
 		}


More information about the Python-checkins mailing list