}
@Override
public Result<IValue> interpret(IEvaluator<Result<IValue>> __eval) {
Result<IValue> subject = this.getSubject().interpret(__eval);
TraversalEvaluator te = new TraversalEvaluator(__eval);
try {
__eval.__pushTraversalEvaluator(te);
IValue val = te.traverse(subject.getValue(),
blocks, DIRECTION.BottomUp,
PROGRESS.Continuing, FIXEDPOINT.No);
if (!val.getType().isSubtypeOf(subject.getType())) {
// this is not a static error but an extra run-time sanity check