Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-02-04 15:35:23 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-02-04 15:35:23 +0300
commitff2dd59d4a12a118eda5dc73ad692dae39cd702c (patch)
treeef9a5d822bd21375c01ad238f48389e1643d54ad /source/blender/python
parent6b2a91efff20691ad50b4aefc197eac1b1223c78 (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')
-rw-r--r--source/blender/python/intern/bpy_rna.c44
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;
}
}