Commit: ff2dd59d4a12a118eda5dc73ad692dae39cd702c
Author: Campbell Barton
Date:   Mon Feb 4 23:35:23 2019 +1100
Branches: master
https://developer.blender.org/rBff2dd59d4a12a118eda5dc73ad692dae39cd702c

PyAPI: use _PyObject_LookupAttr

Unlike PyObject_GetAttr, this avoids setting the attribute error
only to clear it - under some conditions.

===================================================================

M       source/blender/python/intern/bpy_rna.c

===================================================================

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;
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to