summaryrefslogtreecommitdiff
path: root/numpy/core/src/scalarmathmodule.c.src
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/core/src/scalarmathmodule.c.src')
-rw-r--r--numpy/core/src/scalarmathmodule.c.src18
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;
}