diff options
Diffstat (limited to 'cpp/src/FreezeScript/Transformer.cpp')
-rw-r--r-- | cpp/src/FreezeScript/Transformer.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/cpp/src/FreezeScript/Transformer.cpp b/cpp/src/FreezeScript/Transformer.cpp index db9a7aabdc6..98e7ddf8401 100644 --- a/cpp/src/FreezeScript/Transformer.cpp +++ b/cpp/src/FreezeScript/Transformer.cpp @@ -1689,14 +1689,18 @@ FreezeScript::IterateDescriptor::execute(const SymbolTablePtr& sym) 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, _info->factory->createInteger(i, true)); ExecutableContainerDescriptor::execute(elemSym); + ++i; } } } |