Mercurial > cpython-lru_cache-weakref
diff Modules/mathmodule.c @ 58124:0f8a58792563 legacy-trunk
Make use of PyLong_AsLongAndOverflow in math_ldexp.
| author | Mark Dickinson <dickinsm@gmail.com> |
|---|---|
| date | Sun, 03 Jan 2010 12:03:03 +0000 |
| parents | 27c946ff76a3 |
| children | fd25030223b0 |
line wrap: on
line diff
--- a/Modules/mathmodule.c Sun Jan 03 09:09:55 2010 +0000 +++ b/Modules/mathmodule.c Sun Jan 03 12:03:03 2010 +0000 @@ -1175,31 +1175,18 @@ double x, r; PyObject *oexp; long exp; + int overflow; if (! PyArg_ParseTuple(args, "dO:ldexp", &x, &oexp)) return NULL; - if (PyLong_Check(oexp)) { + if (PyLong_Check(oexp) || PyInt_Check(oexp)) { /* on overflow, replace exponent with either LONG_MAX or LONG_MIN, depending on the sign. */ - exp = PyLong_AsLong(oexp); - if (exp == -1 && PyErr_Occurred()) { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) { - if (Py_SIZE(oexp) < 0) { - exp = LONG_MIN; - } - else { - exp = LONG_MAX; - } - PyErr_Clear(); - } - else { - /* propagate any unexpected exception */ - return NULL; - } - } - } - else if (PyInt_Check(oexp)) { - exp = PyInt_AS_LONG(oexp); + exp = PyLong_AsLongAndOverflow(oexp, &overflow); + if (exp == -1 && PyErr_Occurred()) + return NULL; + if (overflow) + exp = overflow < 0 ? LONG_MIN : LONG_MAX; } else { PyErr_SetString(PyExc_TypeError,
