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) \
- if (PyFloat_Check(obj)) \
- dbl = PyFloat_AS_DOUBLE(obj); \
- else if (convert_to_double(&(obj), &(dbl)) < 0) \
- return obj;
+#define CONVERT_TO_DOUBLE(obj, dbl) \
+ if (PyFloat_Check(obj)) \
+ dbl = PyFloat_AS_DOUBLE(obj); \
+ else if (convert_to_double((PyObject **)&(obj), &(dbl)) < 0) \
+ return (PyObject *)(obj);
static int
convert_to_double(PyObject **v, double *dbl)
int i, exp, n;
char *conv_str;
- CONVERT_TO_DOUBLE(((PyObject *)v), x);
+ CONVERT_TO_DOUBLE(v, x);
if (!Py_IS_FINITE(x))
return PyObject_Repr((PyObject *)v);
fr = frexp(x, &exp);