__eval.setCurrentAST(this);
__eval.notifyAboutSuspension(this);
org.rascalmpl.ast.Statement body = this.getBody();
org.rascalmpl.ast.Expression generator = this.getCondition();
IBooleanResult gen;
Environment old = __eval.getCurrentEnvt();
String label = null;
if (!this.getLabel().isEmpty()) {
label = org.rascalmpl.interpreter.utils.Names.name(this
.getLabel().getName());
}
__eval.__getAccumulators().push(
new Accumulator(__eval.__getVf(), label));
IValue value = null;
try {
while (true) {
try {
try {
body.interpret(__eval);
}
catch (BreakException e) {
value = __eval.__getAccumulators().pop().done();
return org.rascalmpl.interpreter.result.ResultFactory
.makeResult(value.getType(), value, __eval);
}
catch (ContinueException e) {
// just continue;
}
gen = generator.getBacktracker(__eval);
gen.init();
if (__eval.isInterrupted()) {
throw new InterruptException(__eval.getStackTrace(), __eval.getCurrentAST().getLocation());
}
if (!(gen.hasNext() && gen.next())) {
value = __eval.__getAccumulators().pop().done();
return org.rascalmpl.interpreter.result.ResultFactory
.makeResult(value.getType(), value, __eval);
}
} finally {