/* Iteration. */
public static SixModelObject iter(SixModelObject agg, ThreadContext tc) {
if (agg.st.REPR instanceof VMArray) {
SixModelObject iterType = tc.curFrame.codeRef.staticInfo.compUnit.hllConfig.arrayIteratorType;
VMIterInstance iter = (VMIterInstance)iterType.st.REPR.allocate(tc, iterType.st);
iter.target = agg;
iter.idx = -1;
iter.limit = agg.elems(tc);
switch (agg.st.REPR.get_value_storage_spec(tc, agg.st).boxed_primitive) {
case StorageSpec.BP_INT:
iter.iterMode = VMIterInstance.MODE_ARRAY_INT;
break;
case StorageSpec.BP_NUM:
iter.iterMode = VMIterInstance.MODE_ARRAY_NUM;
break;
case StorageSpec.BP_STR:
iter.iterMode = VMIterInstance.MODE_ARRAY_STR;
break;
default:
iter.iterMode = VMIterInstance.MODE_ARRAY;
}
return iter;
}
else if (agg.st.REPR instanceof VMHash) {
SixModelObject iterType = tc.curFrame.codeRef.staticInfo.compUnit.hllConfig.hashIteratorType;
VMIterInstance iter = (VMIterInstance)iterType.st.REPR.allocate(tc, iterType.st);
iter.target = agg;
iter.hashKeyIter = ((VMHashInstance)agg).storage.keySet().iterator();
iter.iterMode = VMIterInstance.MODE_HASH;
return iter;
}