private static IObject EvalWhileExpression(Ast.WhileExpression we, Environment env) { var condition = Eval(we.Condition, env); if (IsError(condition)) { return(condition); } IObject result = Null; while (IsTruthy(condition)) { result = Eval(we.Consequence, env); condition = Eval(we.Condition, env); } return(result); }
private Ast.WhileExpression ParseWhileExpression() { var expression = new Ast.WhileExpression() { Token = _curToken }; NextToken(); expression.Condition = ParseExpression(Precedence.Lowest); if (!ExpectPeek(TokenType.Lbrace)) { return(null); } expression.Consequence = ParseBlockStatement(); return(expression); }