package org.rascalmpl.interpreter.cursors;
import org.rascalmpl.library.util.Cursor;
import org.rascalmpl.value.IList;
import org.rascalmpl.value.IMap;
import org.rascalmpl.value.IValue;
import org.rascalmpl.value.IValueFactory;
public class MapContext extends Context {
// todo: pull up ctx
private final Context ctx;
private final IValue key;
private final IMap map;
public MapContext(Context ctx, IValue key, IMap map) {
this.ctx = ctx;
this.key = key;
this.map = map;
}
@Override
public IValue up(IValue focus) {
return new MapCursor(map.put(key, focus), ctx);
}
@Override
public IList toPath(IValueFactory vf) {
return ctx.toPath(vf).append(vf.constructor(Cursor.Nav_lookup, key));
}
}