diff options
author | Mark Spruiell <mes@zeroc.com> | 2004-01-26 22:47:09 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2004-01-26 22:47:09 +0000 |
commit | f7f8873c0e40f01e55fa2939474837cc3d783a0e (patch) | |
tree | 68293064fdd5e5347518e593fce638419ba4b278 /cpp/src/FreezeScript/DumpDescriptors.cpp | |
parent | allow insertion/removal in sequences (diff) | |
download | ice-f7f8873c0e40f01e55fa2939474837cc3d783a0e.tar.bz2 ice-f7f8873c0e40f01e55fa2939474837cc3d783a0e.tar.xz ice-f7f8873c0e40f01e55fa2939474837cc3d783a0e.zip |
<iterate> fix
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; } } } |