private IValue traverseMapOnce(IValue subject, CaseBlockList casesOrRules,
DIRECTION direction, PROGRESS progress, FIXEDPOINT fixedpoint, TraverseResult tr) {
IMap map = (IMap) subject;
if(!map.isEmpty()){
IMapWriter w = eval.getValueFactory().mapWriter(map.getType());
Iterator<Entry<IValue,IValue>> iter = map.entryIterator();
boolean hasChanged = false;
boolean hasMatched = false;
while (iter.hasNext()) {
Entry<IValue,IValue> entry = iter.next();