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:
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/intern/bpy_rna.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 609c549dfcb..03e20322a59 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -6736,20 +6736,24 @@ static int rna_function_arg_count(FunctionRNA *func)
return count;
}
-static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_function)
+static int bpy_class_validate_recursive(PointerRNA *dummyptr, StructRNA *srna, void *py_data, int *have_function)
{
const ListBase *lb;
Link *link;
FunctionRNA *func;
PropertyRNA *prop;
- StructRNA *srna = dummyptr->type;
const char *class_type = RNA_struct_identifier(srna);
+ StructRNA *srna_base = RNA_struct_base(srna);
PyObject *py_class = (PyObject *)py_data;
PyObject *base_class = RNA_struct_py_type_get(srna);
PyObject *item;
int i, flag, arg_count, func_arg_count;
const char *py_class_name = ((PyTypeObject *)py_class)->tp_name; // __name__
+ if (srna_base) {
+ if (bpy_class_validate_recursive(dummyptr, srna_base, py_data, have_function) != 0)
+ return -1;
+ }
if (base_class) {
if (!PyObject_IsSubclass(py_class, base_class)) {
@@ -6884,6 +6888,11 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
return 0;
}
+static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_function)
+{
+ return bpy_class_validate_recursive(dummyptr, dummyptr->type, py_data, have_function);
+}
+
/* TODO - multiple return values like with rna functions */
static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *parms)
{