diff options
Diffstat (limited to 'numpy/core/src/scalarmathmodule.c.src')
-rw-r--r-- | numpy/core/src/scalarmathmodule.c.src | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/numpy/core/src/scalarmathmodule.c.src b/numpy/core/src/scalarmathmodule.c.src index e48b6e14e..6b2fa5b0f 100644 --- a/numpy/core/src/scalarmathmodule.c.src +++ b/numpy/core/src/scalarmathmodule.c.src @@ -551,24 +551,28 @@ _@name@_convert_to_ctype(PyObject *a, @name@ *arg1) } else if (PyArray_IsScalar(a, Generic)) { PyArray_Descr *descr1; - int ret; + if (!PyArray_IsScalar(a, Number)) { return -1; } descr1 = PyArray_DescrFromTypeObject((PyObject *)(a->ob_type)); if (PyArray_CanCastSafely(descr1->type_num, PyArray_@NAME@)) { PyArray_CastScalarDirect(a, descr1, arg1, PyArray_@NAME@); - ret = 0; + Py_DECREF(descr1); + return 0; } else { - ret = -1; + Py_DECREF(descr1); + return -1; } - Py_DECREF(descr1); - return ret; + } + else if (PyArray_GetPriority(a, PyArray_SUBTYPE_PRIORITY) > + PyArray_SUBTYPE_PRIORITY) { + return -2; } else if ((temp = PyArray_ScalarFromObject(a)) != NULL) { - int retval; - retval = _@name@_convert_to_ctype(temp, arg1); + int retval = _@name@_convert_to_ctype(temp, arg1); + Py_DECREF(temp); return retval; } |