function evaluate(while ( Expression ) Statement) {
var V = undefined;
while (true) { // repeat
var exprRef = evaluate(Expression);
if (!ToBoolean(GetValue(exprRef))) return Completion('normal', V, undefined);
var stmt = evaluate(Statement);
if (stmt.value !== undefined) V = stmt.value;
// if continue with known label, just continue by looping. this is meta!
if (stmt.type != 'continue || labels.indexOf(stmt.target) < 0) {
if (stmt.type == 'break' & labels.indexOf(stmt.target) >= 0) return Completion('normal', V, undefined);
if (stmt.isAbrubt()) return stmt;
}
}
}