diff options
Diffstat (limited to 'cpp/src/FreezeScript/DumpDescriptors.cpp')
-rw-r--r-- | cpp/src/FreezeScript/DumpDescriptors.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/cpp/src/FreezeScript/DumpDescriptors.cpp b/cpp/src/FreezeScript/DumpDescriptors.cpp index 242997c628e..4a308c7de64 100644 --- a/cpp/src/FreezeScript/DumpDescriptors.cpp +++ b/cpp/src/FreezeScript/DumpDescriptors.cpp @@ -1129,14 +1129,18 @@ FreezeScript::IterateDescriptor::execute(const SymbolTablePtr& sym, ExecuteInfo* index = "i"; } + // + // NOTE: Don't use iterator to traverse vector because child descriptors might remove elements. + // DataList& l = seq->getElements(); - Ice::Long i = 0; - for(DataList::iterator p = l.begin(); p != l.end(); ++p, ++i) + DataList::size_type i = 0; + while(i < l.size()) { SymbolTablePtr elemSym = sym->createChild(); - elemSym->add(element, *p); + elemSym->add(element, l[i]); elemSym->add(index, _factory->createInteger(i, true)); ExecutableContainerDescriptor::execute(elemSym, info); + ++i; } } } |