Todo: current label set
function evaluate(do Statement while ( Expression ) ;) {
var V = undefined;
var iterating = true;
while (iterating) {
var stmt = evaluate(Statement);
if (stmt.value !== undefined) V = stmt.value;
// todo: figure out interface for (current) label set
if (stmt.type != 'continue' || labels.indexOf(stmt.target) < 0) {
// target is found but unused?
if (stmt.type == 'break' && labels.indexOf(stmt.target) >= 0) return Completion('normal', V, undefined);
if (stmt.isAbrubt()) return stmt;
}
var exprRef = evaluate(Expression);
if (!ToBoolean(GetValue(exprRef))) iterating = false;
}
return Completion('normal', V, undefined);
}