mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
float_floor_div: An expression like 3.//1j crashed the interpreter, or
delivered bizarre results. Check float_divmod for a Py_NotImplemented return and pass it along (instead of treating Py_NotImplemented as a 2-tuple). CONVERT_TO_DOUBLE: Added comments; this macro is obscure.
This commit is contained in:
parent
63a3571e17
commit
77d8a4fc91
1 changed files with 12 additions and 9 deletions
|
@ -265,8 +265,11 @@ PyFloat_AsStringEx(char *buf, PyFloatObject *v, int precision)
|
||||||
|
|
||||||
/* Macro and helper that convert PyObject obj to a C double and store
|
/* Macro and helper that convert PyObject obj to a C double and store
|
||||||
the value in dbl; this replaces the functionality of the coercion
|
the value in dbl; this replaces the functionality of the coercion
|
||||||
slot function */
|
slot function. If conversion to double raises an exception, obj is
|
||||||
|
set to NULL, and the function invoking this macro returns NULL. If
|
||||||
|
obj is not of float, int or long type, Py_NotImplemented is incref'ed,
|
||||||
|
stored in obj, and returned from the function invoking this macro.
|
||||||
|
*/
|
||||||
#define CONVERT_TO_DOUBLE(obj, dbl) \
|
#define CONVERT_TO_DOUBLE(obj, dbl) \
|
||||||
if (PyFloat_Check(obj)) \
|
if (PyFloat_Check(obj)) \
|
||||||
dbl = PyFloat_AS_DOUBLE(obj); \
|
dbl = PyFloat_AS_DOUBLE(obj); \
|
||||||
|
@ -519,13 +522,13 @@ float_floor_div(PyObject *v, PyObject *w)
|
||||||
PyObject *t, *r;
|
PyObject *t, *r;
|
||||||
|
|
||||||
t = float_divmod(v, w);
|
t = float_divmod(v, w);
|
||||||
if (t != NULL) {
|
if (t == NULL || t == Py_NotImplemented)
|
||||||
|
return t;
|
||||||
|
assert(PyTuple_CheckExact(t));
|
||||||
r = PyTuple_GET_ITEM(t, 0);
|
r = PyTuple_GET_ITEM(t, 0);
|
||||||
Py_INCREF(r);
|
Py_INCREF(r);
|
||||||
Py_DECREF(t);
|
Py_DECREF(t);
|
||||||
return r;
|
return r;
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue