fix for parsing python args to rna functions, was using allocated size as argument count.
(commit 27670 by Campbell from render25 branch)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
parms->data= MEM_callocN(tot, "RNA_parameter_list_create");
|
||||
if(parm->flag & PROP_OUTPUT)
|
||||
parms->ret_count++;
|
||||
else
|
||||
parms->arg_count++;
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user