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) { } else if (array_for->for_type == DSMArrayFor::Array) {
unsigned int a_index = 0; unsigned int a_index = 0;
while (true) { VarMapT::iterator v = sc_sess->
VarMapT::iterator v = sc_sess->var.find(array_name+"["+int2str(a_index)+"]"); var.lower_bound(array_name+"["+int2str(a_index)+"]");
if (v == sc_sess->var.end())
break; 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, "")); cnt_values.push_back(make_pair(v->second, ""));
DBG(" '%s'\n", v->second.c_str()); DBG(" '%s'\n", v->second.c_str());
a_index++; v++;
} }
} }
// save counter k // save counter k

Loading…
Cancel
Save