diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2008-11-16 04:01:01 +0000 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2008-11-16 04:01:01 +0000 |
commit | 6132a511c2523d278536228015fbc9a592f5503e (patch) | |
tree | 85ec8084deacd0b6853f9d4c8729f4321bfb33e7 /numpy/core/src/ufuncobject.c | |
parent | 357672c78191754310fa670da735f10e961c9bd3 (diff) | |
download | numpy-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.c | 22 |
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; } |