]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
On path with known exact float, extract the double with the fast macro. (GH-21072)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 4 Sep 2020 23:12:48 +0000 (16:12 -0700)
committerGitHub <noreply@github.com>
Fri, 4 Sep 2020 23:12:48 +0000 (16:12 -0700)
(cherry picked from commit 930f4518aea7f3f0f914ce93c3fb92831a7e1d2a)

Co-authored-by: Raymond Hettinger <rhettinger@users.noreply.github.com>
Modules/mathmodule.c

index f1d59c09e6272c8a9a899a126f124035f522fe15..4aa7e6559af557e754bb0e8321549a38092a292f 100644 (file)
@@ -1255,9 +1255,15 @@ static PyObject *
 math_floor(PyObject *module, PyObject *number)
 /*[clinic end generated code: output=c6a65c4884884b8a input=63af6b5d7ebcc3d6]*/
 {
+    double x;
+
     _Py_IDENTIFIER(__floor__);
 
-    if (!PyFloat_CheckExact(number)) {
+    if (PyFloat_CheckExact(number)) {
+        x = PyFloat_AS_DOUBLE(number);
+    }
+    else
+    {
         PyObject *method = _PyObject_LookupSpecial(number, &PyId___floor__);
         if (method != NULL) {
             PyObject *result = _PyObject_CallNoArg(method);
@@ -1266,11 +1272,10 @@ math_floor(PyObject *module, PyObject *number)
         }
         if (PyErr_Occurred())
             return NULL;
+        x = PyFloat_AsDouble(number);
+        if (x == -1.0 && PyErr_Occurred())
+            return NULL;
     }
-    double x = PyFloat_AsDouble(number);
-    if (x == -1.0 && PyErr_Occurred())
-        return NULL;
-
     return PyLong_FromDouble(floor(x));
 }