summaryrefslogtreecommitdiff
path: root/cpp/src/FreezeScript/Transformer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/FreezeScript/Transformer.cpp')
-rw-r--r--cpp/src/FreezeScript/Transformer.cpp10
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;
}
}
}