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:
-rw-r--r--source/blender/makesrna/RNA_access.h2
-rw-r--r--source/blender/makesrna/RNA_types.h6
-rw-r--r--source/blender/makesrna/intern/rna_access.c31
-rw-r--r--source/blender/python/intern/bpy_rna.c2
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) {