diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-02-04 15:35:23 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-02-04 15:35:23 +0300 |
commit | ff2dd59d4a12a118eda5dc73ad692dae39cd702c (patch) | |
tree | ef9a5d822bd21375c01ad238f48389e1643d54ad /source/blender/python/intern/bpy_rna.c | |
parent | 6b2a91efff20691ad50b4aefc197eac1b1223c78 (diff) |
PyAPI: use _PyObject_LookupAttr
Unlike PyObject_GetAttr, this avoids setting the attribute error
only to clear it - under some conditions.
Diffstat (limited to 'source/blender/python/intern/bpy_rna.c')
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index e257aa26d33..e8fcb62ba91 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -8253,16 +8253,20 @@ static PyObject *pyrna_register_class(PyObject *UNUSED(self), PyObject *py_class return NULL; /* call classed register method () */ - py_cls_meth = PyObject_GetAttr(py_class, bpy_intern_str_register); - if (py_cls_meth == NULL) { - PyErr_Clear(); - } - else { - PyObject *ret = PyObject_CallObject(py_cls_meth, NULL); - if (ret) { - Py_DECREF(ret); + switch (_PyObject_LookupAttr(py_class, bpy_intern_str_register, &py_cls_meth)) { + case 1: + { + PyObject *ret = PyObject_CallObject(py_cls_meth, NULL); + if (ret) { + Py_DECREF(ret); + } + else { + return NULL; + } + break; } - else { + case -1: + { return NULL; } } @@ -8353,16 +8357,20 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla } /* call classed unregister method */ - py_cls_meth = PyObject_GetAttr(py_class, bpy_intern_str_unregister); - if (py_cls_meth == NULL) { - PyErr_Clear(); - } - else { - PyObject *ret = PyObject_CallObject(py_cls_meth, NULL); - if (ret) { - Py_DECREF(ret); + switch (_PyObject_LookupAttr(py_class, bpy_intern_str_unregister, &py_cls_meth)) { + case 1: + { + PyObject *ret = PyObject_CallObject(py_cls_meth, NULL); + if (ret) { + Py_DECREF(ret); + } + else { + return NULL; + } + break; } - else { + case -1: + { return NULL; } } |