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:
Brecht Van Lommel
2010-03-23 15:04:06 +00:00
parent 33e0ea0e59
commit 5bc2d53507
4 changed files with 32 additions and 9 deletions

View File

@@ -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);

View File

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

View File

@@ -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)

View File

@@ -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) {