private MObject EvalIfExpression(IfExpression node, Environment env) { var condition = Eval(node.Condition, env); if (IsError(condition)) { return(condition); } if (IsTruthy(condition)) { return(Eval(node.Consequence, env)); } else if (node.Alternative != null) { return(Eval(node.Alternative, env)); } else { return(NIL); } }
private Expression ParseIfExpression() { var expr = new IfExpression(); expr.Token = curToken; if (!ExpectPeek(TokenType.LPAREN)) { return(null); } NextToken(); expr.Condition = ParseExpression(Precedence.LOWEST); if (!ExpectPeek(TokenType.RPAREN)) { return(null); } expr.Consequence = ParseBlockStatement(); if (PeekTokenIs(TokenType.ELSE)) { NextToken(); if (!ExpectPeek(TokenType.LBRACE)) { return(null); } expr.Alternative = ParseBlockStatement(); } return(expr); }