]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue 2440: revert r62269 and r62279. These changes were made in an effort to fix...
authorTrent Nelson <trent.nelson@snakebite.org>
Fri, 11 Apr 2008 23:02:37 +0000 (23:02 +0000)
committerTrent Nelson <trent.nelson@snakebite.org>
Fri, 11 Apr 2008 23:02:37 +0000 (23:02 +0000)
Lib/test/test_getargs2.py
Objects/abstract.c
Python/getargs.c

index d8f63092398b812946e2290c053ce46e3a3a3cd0..19183867f9da5bed081f467b3e3668cddd9c810b 100644 (file)
@@ -63,10 +63,6 @@ class Int:
     def __int__(self):
         return 99
 
-class InvalidLongAsString:
-    def __int__(self):
-        return 'foobar'
-
 class Unsigned_TestCase(unittest.TestCase):
     def test_b(self):
         from _testcapi import getargs_b
@@ -203,7 +199,6 @@ class Signed_TestCase(unittest.TestCase):
         self.failUnlessEqual(42, getargs_n(42))
         self.assertRaises(OverflowError, getargs_n, VERY_LARGE)
 
-        self.assertRaises(TypeError, getargs_n, InvalidLongAsString())
 
 class LongLong_TestCase(unittest.TestCase):
     def test_L(self):
index 684b0b4abd273af610c56212c632955f34dacbe8..dac80d92fa0de729edde970fc0977041b3a76571 100644 (file)
@@ -1220,7 +1220,6 @@ PyNumber_Absolute(PyObject *o)
 PyObject *
 PyNumber_Index(PyObject *item)
 {
-       PyNumberMethods *m;
        PyObject *result = NULL;
        if (item == NULL)
                return null_error();
@@ -1228,9 +1227,8 @@ PyNumber_Index(PyObject *item)
                Py_INCREF(item);
                return item;
        }
-       m = item->ob_type->tp_as_number;
        if (PyIndex_Check(item)) {
-               result = m->nb_index(item);
+               result = item->ob_type->tp_as_number->nb_index(item);
                if (result && !PyLong_Check(result)) {
                        PyErr_Format(PyExc_TypeError,
                                     "__index__ returned non-int "
@@ -1240,17 +1238,7 @@ PyNumber_Index(PyObject *item)
                        return NULL;
                }
        }
-       else if (m && m->nb_int != NULL && m->nb_float == NULL) {
-               result = m->nb_int(item);
-               if (result && !PyLong_Check(result)) {
-                       PyErr_Format(PyExc_TypeError,
-                                    "__int__ returned non-int "
-                                    "(type %.200s)",
-                                    result->ob_type->tp_name);
-                       Py_DECREF(result);
-                       return NULL;
-               }
-       } else {
+       else {
                PyErr_Format(PyExc_TypeError,
                             "'%.200s' object cannot be interpreted "
                             "as an integer", item->ob_type->tp_name);
index 960c68c93c8764270131e530e66cbcf519a6fe61..1370e098adcd44908f55a70916e448998b5a2827 100644 (file)
@@ -663,6 +663,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
        }
 
        case 'n': /* Py_ssize_t */
+#if SIZEOF_SIZE_T != SIZEOF_LONG
        {
                PyObject *iobj;
                Py_ssize_t *p = va_arg(*p_va, Py_ssize_t *);
@@ -671,13 +672,14 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
                        return converterr("integer<n>", arg, msgbuf, bufsize);
                iobj = PyNumber_Index(arg);
                if (iobj != NULL)
-                       ival = PyLong_AsSsize_t(iobj);
+                       ival = PyLong_AsSsize_t(arg);
                if (ival == -1 && PyErr_Occurred())
                        return converterr("integer<n>", arg, msgbuf, bufsize);
                *p = ival;
                break;
        }
-
+#endif
+       /* Fall through from 'n' to 'l' if Py_ssize_t is int */
        case 'l': {/* long int */
                long *p = va_arg(*p_va, long *);
                long ival;