[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34262] trunk/blender/source/blender/ makesrna/intern/makesrna.c: bugfix - collection index lookups was not working correctly when some items were skipped .
Campbell Barton
ideasman42 at gmail.com
Tue Jan 11 18:01:12 CET 2011
Revision: 34262
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34262
Author: campbellbarton
Date: 2011-01-11 17:01:12 +0000 (Tue, 11 Jan 2011)
Log Message:
-----------
bugfix - collection index lookups was not working correctly when some items were skipped.
Modified Paths:
--------------
trunk/blender/source/blender/makesrna/intern/makesrna.c
Modified: trunk/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/makesrna.c 2011-01-11 14:39:14 UTC (rev 34261)
+++ trunk/blender/source/blender/makesrna/intern/makesrna.c 2011-01-11 17:01:12 UTC (rev 34262)
@@ -978,7 +978,7 @@
fprintf(f, " CollectionPropertyIterator iter;\n\n");
fprintf(f, " %s_%s_begin(&iter, ptr);\n\n", srna->identifier, prop->identifier);
- fprintf(f, " {\n");
+ fprintf(f, " if(iter.valid){\n");
if(strcmp(nextfunc, "rna_iterator_array_next") == 0) {
fprintf(f, " ArrayIterator *internal= iter.internal;\n");
@@ -990,12 +990,10 @@
fprintf(f, "#endif\n");
fprintf(f, " }\n");
fprintf(f, " else if(internal->skip) {\n");
- fprintf(f, " while(index-- > 0) {\n");
- fprintf(f, " do {\n");
- fprintf(f, " internal->ptr += internal->itemsize;\n");
- fprintf(f, " } while(internal->skip(&iter, internal->ptr));\n");
+ fprintf(f, " while(index-- > 0 && iter.valid) {\n");
+ fprintf(f, " rna_iterator_array_next(&iter);\n");
fprintf(f, " }\n");
- fprintf(f, " found= 1;\n");
+ fprintf(f, " found= (index == -1 && iter.valid);\n");
fprintf(f, " }\n");
fprintf(f, " else {\n");
fprintf(f, " internal->ptr += internal->itemsize*index;\n");
@@ -1005,22 +1003,20 @@
else if(strcmp(nextfunc, "rna_iterator_listbase_next") == 0) {
fprintf(f, " ListBaseIterator *internal= iter.internal;\n");
fprintf(f, " if(internal->skip) {\n");
- fprintf(f, " while(index-- > 0) {\n");
- fprintf(f, " do {\n");
- fprintf(f, " internal->link= internal->link->next;\n");
- fprintf(f, " } while(internal->skip(&iter, internal->link));\n");
+ fprintf(f, " while(index-- > 0 && iter.valid) {\n");
+ fprintf(f, " rna_iterator_listbase_next(&iter);\n");
fprintf(f, " }\n");
+ fprintf(f, " found= (index == -1 && iter.valid);\n");
fprintf(f, " }\n");
fprintf(f, " else {\n");
fprintf(f, " while(index-- > 0 && internal->link)\n");
fprintf(f, " internal->link= internal->link->next;\n");
+ fprintf(f, " found= 1;\n");
fprintf(f, " }\n");
- fprintf(f, " found= (index == -1);\n");
}
+ fprintf(f, " if(found) *r_ptr = %s_%s_get(&iter);\n", srna->identifier, prop->identifier);
fprintf(f, " }\n\n");
-
- 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 found;\n");
More information about the Bf-blender-cvs
mailing list