DSM: fix for ($bar in array) for structs

Example:
 set($foo[0].a="a0");
 set($foo[0].b="b0");
 set($foo[1].a="a1");
 set($foo[1].b="b1");

 for ($bar in $foo) {
    log(1, $bar);
 }
sayer/1.4-spce2.6
Stefan Sayer 15 years ago
parent c7c96a2f5e
commit d5ebf27e02

@ -338,14 +338,24 @@ bool DSMStateEngine::runactions(vector<DSMElement*>::iterator from,
}
} else if (array_for->for_type == DSMArrayFor::Array) {
unsigned int a_index = 0;
while (true) {
VarMapT::iterator v = sc_sess->var.find(array_name+"["+int2str(a_index)+"]");
if (v == sc_sess->var.end())
break;
VarMapT::iterator v = sc_sess->
var.lower_bound(array_name+"["+int2str(a_index)+"]");
while (v != sc_sess->var.end()) {
string this_index = array_name+"["+int2str(a_index)+"]";
if (v->first.substr(0, this_index.length()) != this_index) {
a_index++;
this_index = array_name+"["+int2str(a_index)+"]";
if (v->first.substr(0, this_index.length()) != this_index) {
break;
}
}
cnt_values.push_back(make_pair(v->second, ""));
DBG(" '%s'\n", v->second.c_str());
a_index++;
v++;
}
}
// save counter k

Loading…
Cancel
Save