]> granicus.if.org Git - python/commitdiff
Merged revisions 77275 via svnmerge from
authorMark Dickinson <dickinsm@gmail.com>
Sun, 3 Jan 2010 12:16:06 +0000 (12:16 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sun, 3 Jan 2010 12:16:06 +0000 (12:16 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r77275 | mark.dickinson | 2010-01-03 12:03:03 +0000 (Sun, 03 Jan 2010) | 1 line

  Make use of PyLong_AsLongAndOverflow in math_ldexp.
........

Modules/mathmodule.c

index ee479ea0dae641705708f424f44033e60eb6f33a..87afdabb6b32968252011b95aff671ae59ca77b7 100644 (file)
@@ -1251,28 +1251,18 @@ math_ldexp(PyObject *self, PyObject *args)
        double x, r;
        PyObject *oexp;
        long exp;
+       int overflow;
        if (! PyArg_ParseTuple(args, "dO:ldexp", &x, &oexp))
                return NULL;
 
        if (PyLong_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;
-                       }
-               }
+               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,