diff options
Diffstat (limited to 'Objects/longobject.c')
-rw-r--r-- | Objects/longobject.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c index 7374fce9dd..5038823334 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -2517,20 +2517,31 @@ long_coerce(PyObject **pv, PyObject **pw) } static PyObject * -long_int(PyObject *v) +long_long(PyObject *v) { - long x; - x = PyLong_AsLong(v); - if (PyErr_Occurred()) - return NULL; - return PyInt_FromLong(x); + Py_INCREF(v); + return v; } static PyObject * -long_long(PyObject *v) +long_int(PyObject *v) { - Py_INCREF(v); - return v; + long x; + x = PyLong_AsLong(v); + if (PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_OverflowError)) { + PyErr_Clear(); + if (PyLong_CheckExact(v)) { + Py_INCREF(v); + return v; + } + else + return _PyLong_Copy((PyLongObject *)v); + } + else + return NULL; + } + return PyInt_FromLong(x); } static PyObject * |