diff options
-rw-r--r-- | source/blender/makesrna/RNA_access.h | 2 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_types.h | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_access.c | 31 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 2 |
4 files changed, 32 insertions, 9 deletions
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 9240a5f8995..cb792a8d7d8 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -891,6 +891,8 @@ const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func); ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr, FunctionRNA *func); void RNA_parameter_list_free(ParameterList *parms); int RNA_parameter_list_size(ParameterList *parms); +int RNA_parameter_list_arg_count(ParameterList *parms); +int RNA_parameter_list_ret_count(ParameterList *parms); void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter); void RNA_parameter_list_next(ParameterIterator *iter); diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h index e09bd19774c..6eecd091b7f 100644 --- a/source/blender/makesrna/RNA_types.h +++ b/source/blender/makesrna/RNA_types.h @@ -245,8 +245,10 @@ typedef struct ParameterList { /* storage for parameters */ void *data; - /* store the parameter count */ - int tot; + /* store the parameter size */ + int alloc_size; + + int arg_count, ret_count; /* function passed at creation time */ struct FunctionRNA *func; diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 09b4371fa20..1b5ab861556 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -3758,15 +3758,24 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr, { PropertyRNA *parm; void *data; - int tot= 0, size; + int alloc_size= 0, size; + parms->arg_count= 0; + parms->ret_count= 0; + /* allocate data */ - for(parm= func->cont.properties.first; parm; parm= parm->next) - tot+= rna_parameter_size_alloc(parm); + for(parm= func->cont.properties.first; parm; parm= parm->next) { + alloc_size += rna_parameter_size_alloc(parm); + + if(parm->flag & PROP_OUTPUT) + parms->ret_count++; + else + parms->arg_count++; + } - parms->data= MEM_callocN(tot, "RNA_parameter_list_create"); + parms->data= MEM_callocN(alloc_size, "RNA_parameter_list_create"); parms->func= func; - parms->tot= tot; + parms->alloc_size= alloc_size; /* set default values */ data= parms->data; @@ -3840,7 +3849,17 @@ void RNA_parameter_list_free(ParameterList *parms) int RNA_parameter_list_size(ParameterList *parms) { - return parms->tot; + return parms->alloc_size; +} + +int RNA_parameter_list_arg_count(ParameterList *parms) +{ + return parms->arg_count; +} + +int RNA_parameter_list_ret_count(ParameterList *parms) +{ + return parms->ret_count; } void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter) diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 6382a555880..6e2c33ce26d 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -2976,7 +2976,7 @@ static PyObject * pyrna_func_call(PyObject *self, PyObject *args, PyObject *kw) RNA_parameter_list_create(&parms, self_ptr, self_func); RNA_parameter_list_begin(&parms, &iter); - parms_len= RNA_parameter_list_size(&parms); + parms_len= RNA_parameter_list_arg_count(&parms); ret_len= 0; if(pyargs_len + pykw_len > parms_len) { |