public object visitTernaryExpr(Expr.TernaryExpr ternaryExpr) { resolve(ternaryExpr.comparisonExpression); resolve(ternaryExpr.falseExpression); resolve(ternaryExpr.trueExpression); return(null); }
public object visitTernaryExpr(Expr.TernaryExpr ternaryExpr) { bool comparisonExpression = (bool)evaluate(ternaryExpr.comparisonExpression); if (comparisonExpression) { return(evaluate(ternaryExpr.trueExpression)); } else { return(evaluate(ternaryExpr.falseExpression)); } }
private Expr ternaryExpression() { Expr expr = isNull(); //Comparison expression Expr trueExpression; //Result if comparison is true if (match(TokenType.TERNARY_QUESTION)) { trueExpression = isNull(); if (match(TokenType.TERNARY_COLON)) { Expr falseExpression = isNull(); //Result if comparison is false. Expr temp = expr; expr = new Expr.TernaryExpr(temp, trueExpression, falseExpression); } } return(expr); }
private Expr call() { Expr expr = primary(); while (true) { if (match(TokenType.LEFT_PAREN)) { expr = finishCall(expr); } else if (match(TokenType.DOT)) { Token name = consume(TokenType.IDENTIFIER, "Expect property name after '.'."); expr = new Expr.Get(expr, name, false); } else if (match(TokenType.QUESTION_DOT)) { Token nil = new Token(TokenType.NIL, "nil", null, -1, -1); Expr callIfNotNull = new Expr.Get(expr, consume(TokenType.IDENTIFIER, "Expect property after '?."), false); if (match(TokenType.LEFT_PAREN)) { callIfNotNull = finishCall(callIfNotNull); } expr = new Expr.TernaryExpr( new Expr.BinaryExpr(expr, new Token(TokenType.EQUALS_EQUALS, "==", null, -1, -1), new Expr.Literal(null, nil)), // ? new Expr.Literal(null, nil), // : callIfNotNull); // new Expr.Get(expr, consume(TokenType.IDENTIFIER, "Expect property after '?."), false)); ((Expr.TernaryExpr)expr).isNullAccessor = true; } else { break; } } return(expr); }
public string visitTernaryExpr(Expr.TernaryExpr expr) { return(parenthesize("?:", new Expr[] { expr.comparisonExpression, expr.trueExpression, expr.falseExpression })); }