Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }