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:
authorCampbell Barton <ideasman42@gmail.com>2011-01-05 17:49:08 +0300
committerCampbell Barton <ideasman42@gmail.com>2011-01-05 17:49:08 +0300
commit978bc0d8ace0ea10339afb25b50ef396e9cc1c8d (patch)
tree439e1df1c4af7367eda88f326416cd622043e703 /source/blender/makesrna/intern/makesrna.c
parent26024445ac8a4af76d6399fbb896772d26a65ddf (diff)
fix for py/rna mesh.materials[:] where empty materials exist, would raise a runtime exception.
problem was there was no way to tell the difference between getting an empty item from a collection or the item not being found.
Diffstat (limited to 'source/blender/makesrna/intern/makesrna.c')
-rw-r--r--source/blender/makesrna/intern/makesrna.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 6fbaa76e9df..9be61cdb8dd 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -965,16 +965,16 @@ static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, Property
func= rna_alloc_function_name(srna->identifier, prop->identifier, "lookup_int");
- fprintf(f, "PointerRNA %s(PointerRNA *ptr, int index)\n", func);
+ fprintf(f, "int %s(PointerRNA *ptr, int index, PointerRNA *r_ptr)\n", func);
fprintf(f, "{\n");
if(manualfunc) {
- fprintf(f, "\n return %s(ptr, index);\n", manualfunc);
+ fprintf(f, "\n return %s(ptr, index, r_ptr);\n", manualfunc);
fprintf(f, "}\n\n");
return func;
}
- fprintf(f, " PointerRNA r_ptr;\n");
+ fprintf(f, " int found= FALSE;\n");
fprintf(f, " CollectionPropertyIterator iter;\n\n");
fprintf(f, " %s_%s_begin(&iter, ptr);\n\n", srna->identifier, prop->identifier);
@@ -998,6 +998,7 @@ static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, Property
fprintf(f, " }\n");
fprintf(f, " else {\n");
fprintf(f, " internal->ptr += internal->itemsize*index;\n");
+ fprintf(f, " found= TRUE;\n");
fprintf(f, " }\n");
}
else if(strcmp(nextfunc, "rna_iterator_listbase_next") == 0) {
@@ -1013,14 +1014,15 @@ static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, Property
fprintf(f, " while(index-- > 0 && internal->link)\n");
fprintf(f, " internal->link= internal->link->next;\n");
fprintf(f, " }\n");
+ fprintf(f, " found= (index == -1);\n");
}
fprintf(f, " }\n\n");
- fprintf(f, " r_ptr = %s_%s_get(&iter);\n", srna->identifier, prop->identifier);
+ fprintf(f, " if(found) *r_ptr = %s_%s_get(&iter);\n", srna->identifier, prop->identifier);
fprintf(f, " %s_%s_end(&iter);\n\n", srna->identifier, prop->identifier);
- fprintf(f, " return r_ptr;\n");
+ fprintf(f, " return found;\n");
#if 0
rna_print_data_get(f, dp);