Fix RNA parameter passing issue with dynamic arrays, was computing the wrong

size in some cases.
This commit is contained in:
Brecht Van Lommel 2013-08-11 15:49:27 +00:00
parent 48ae40ccdf
commit 33686720f2
4 changed files with 11 additions and 24 deletions

@ -2292,7 +2292,7 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
}
if (dparm->next)
fprintf(f, "\t_data += %d;\n", rna_parameter_size_alloc(dparm->prop));
fprintf(f, "\t_data += %d;\n", rna_parameter_size(dparm->prop));
}
if (dfunc->call) {

@ -5378,7 +5378,7 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *UNUSE
/* allocate data */
for (parm = func->cont.properties.first; parm; parm = parm->next) {
alloc_size += rna_parameter_size_alloc(parm);
alloc_size += rna_parameter_size(parm);
if (parm->flag & PROP_OUTPUT)
parms->ret_count++;
@ -5440,7 +5440,7 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *UNUSE
}
}
data = ((char *)data) + rna_parameter_size_alloc(parm);
data = ((char *)data) + rna_parameter_size(parm);
}
return parms;
@ -5462,7 +5462,7 @@ void RNA_parameter_list_free(ParameterList *parms)
MEM_freeN(data_alloc->array);
}
tot += rna_parameter_size_alloc(parm);
tot += rna_parameter_size(parm);
}
MEM_freeN(parms->data);
@ -5497,7 +5497,7 @@ void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter)
iter->offset = 0;
if (iter->valid) {
iter->size = rna_parameter_size_alloc(iter->parm);
iter->size = rna_parameter_size(iter->parm);
iter->data = (((char *)iter->parms->data)); /* +iter->offset, always 0 */
}
}
@ -5509,7 +5509,7 @@ void RNA_parameter_list_next(ParameterIterator *iter)
iter->valid = iter->parm != NULL;
if (iter->valid) {
iter->size = rna_parameter_size_alloc(iter->parm);
iter->size = rna_parameter_size(iter->parm);
iter->data = (((char *)iter->parms->data) + iter->offset);
}
}

@ -3039,13 +3039,13 @@ void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
int rna_parameter_size(PropertyRNA *parm)
{
PropertyType ptype = parm->type;
int len = parm->totarraylength; /* only supports fixed length at the moment */
int len = parm->totarraylength;
/* XXX in other parts is mentioned that strings can be dynamic as well */
if (parm->flag & PROP_DYNAMIC)
return sizeof(ParameterDynAlloc);
if (len > 0) {
/* XXX in other parts is mentioned that strings can be dynamic as well */
if (parm->flag & PROP_DYNAMIC)
return sizeof(void *);
switch (ptype) {
case PROP_BOOLEAN:
case PROP_INT:
@ -3106,18 +3106,6 @@ int rna_parameter_size(PropertyRNA *parm)
return sizeof(void *);
}
/* this function returns the size of the memory allocated for the parameter,
* useful for instance for memory alignment or for storing additional information */
int rna_parameter_size_alloc(PropertyRNA *parm)
{
int size = rna_parameter_size(parm);
if (parm->flag & PROP_DYNAMIC)
size += sizeof(((ParameterDynAlloc *)NULL)->array_tot);
return size;
}
/* Dynamic Enums */
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)

@ -402,7 +402,6 @@ PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *
/* Functions */
int rna_parameter_size(struct PropertyRNA *parm);
int rna_parameter_size_alloc(struct PropertyRNA *parm);
struct Mesh *rna_Main_meshes_new_from_object(
struct Main *bmain, struct ReportList *reports, struct Scene *sce,