summaryrefslogtreecommitdiff
path: root/numpy/core/src/ufuncobject.c
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2008-11-16 04:01:01 +0000
committerCharles Harris <charlesr.harris@gmail.com>2008-11-16 04:01:01 +0000
commit6132a511c2523d278536228015fbc9a592f5503e (patch)
tree85ec8084deacd0b6853f9d4c8729f4321bfb33e7 /numpy/core/src/ufuncobject.c
parent357672c78191754310fa670da735f10e961c9bd3 (diff)
downloadnumpy-6132a511c2523d278536228015fbc9a592f5503e.tar.gz
Add error checking to Object loops.
Fix reference leak in Sign Object loop. Define a binary version of PyNumber_Power so that the generic object loop doesn't have to check for that function. Clean up generic object loops.
Diffstat (limited to 'numpy/core/src/ufuncobject.c')
-rw-r--r--numpy/core/src/ufuncobject.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/numpy/core/src/ufuncobject.c b/numpy/core/src/ufuncobject.c
index 078dd1295..22df5e86a 100644
--- a/numpy/core/src/ufuncobject.c
+++ b/numpy/core/src/ufuncobject.c
@@ -268,12 +268,7 @@ PyUFunc_O_O(char **args, intp *dimensions, intp *steps, void *func)
UNARY_LOOP {
PyObject *in1 = *(PyObject **)ip1;
PyObject **out = (PyObject **)op1;
- PyObject *ret;
-
- if (in1 == NULL) {
- return;
- }
- ret = f(in1);
+ PyObject *ret = f(in1);
if ((ret == NULL) || PyErr_Occurred()) {
return;
}
@@ -291,7 +286,6 @@ PyUFunc_O_O_method(char **args, intp *dimensions, intp *steps, void *func)
PyObject *in1 = *(PyObject **)ip1;
PyObject **out = (PyObject **)op1;
PyObject *ret = PyObject_CallMethod(in1, meth, NULL);
-
if (ret == NULL) {
return;
}
@@ -304,21 +298,12 @@ PyUFunc_O_O_method(char **args, intp *dimensions, intp *steps, void *func)
static void
PyUFunc_OO_O(char **args, intp *dimensions, intp *steps, void *func)
{
+ binaryfunc f = (binaryfunc)func;
BINARY_LOOP {
PyObject *in1 = *(PyObject **)ip1;
PyObject *in2 = *(PyObject **)ip2;
PyObject **out = (PyObject **)op1;
- PyObject *ret;
-
- if ((in1 == NULL) || (in2 == NULL)) {
- return;
- }
- if ( (void *) func == (void *) PyNumber_Power) {
- ret = ((ternaryfunc)func)(in1, in2, Py_None);
- }
- else {
- ret = ((binaryfunc)func)(in1, in2);
- }
+ PyObject *ret = f(in1, in2);
if (PyErr_Occurred()) {
return;
}
@@ -337,7 +322,6 @@ PyUFunc_OO_O_method(char **args, intp *dimensions, intp *steps, void *func)
PyObject *in2 = *(PyObject **)ip2;
PyObject **out = (PyObject **)op1;
PyObject *ret = PyObject_CallMethod(in1, meth, "(O)", in2);
-
if (ret == NULL) {
return;
}