public void VisitConditionMustBeBooleanType(object condition) { var target = new TypeCheckingVisitor(); var conditionExpression = new ConstantExpr(condition); var expr = new ConditionalExpr(conditionExpression, new ConstantExpr(0), new ConstantExpr(0)); target.Visit(expr, scope); }
public ValueType Visit(ConditionalExpr expr, Scope scope) { var condition = expr.Condition.Accept(this, scope); if (condition != ValueType.Boolean) { throw new TypeCheckException("Conditional operator must have a boolean condition"); } return(BinaryOperatorTypeCheck(expr.ThenExpression.Accept(this, scope), expr.ElseExpression.Accept(this, scope))); }
public void AppendTo(StringBuilder sb) { if (PostEvaluation) { sb.Append("do-"); } sb.Append("while: "); ConditionalExpr.AppendTo(sb); sb.AppendLine("{"); Expr.AppendTo(sb); sb.AppendLine("}"); }
public void VisitConditionalExpr(bool condition, int thenValue, int elseValue, string expected) { var target = new PrintVisitor(); var conditionExpression = new ConstantExpr(condition); var thenExpression = new ConstantExpr(thenValue); var elseExpression = new ConstantExpr(elseValue); var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression); var actual = target.Visit(expr, scope); Assert.AreEqual(expected, actual); }
public void VisitConditionalExpr(bool condition, object thenValue, object elseValue, ValueType expected) { var target = new TypeCheckingVisitor(); var conditionExpression = new ConstantExpr(condition); var thenExpression = new ConstantExpr(thenValue); var elseExpression = new ConstantExpr(elseValue); var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression); var actual = target.Visit(expr, scope); Assert.AreEqual(expected, actual); }
public void AppendTo(StringBuilder sb) { sb.Append("if: "); ConditionalExpr.AppendTo(sb); sb.AppendLine("{"); Expr.AppendTo(sb); sb.AppendLine("}"); if (ElseExpr != null) { sb.AppendLine("else: {"); ElseExpr.AppendTo(sb); sb.AppendLine("}"); } }
public Value Visit(ConditionalExpr expr, Scope scope) { var condition = expr.Condition.Accept(this, scope); if (condition.Type != ValueType.Boolean) { throw new InvalidCastException(); } if (condition.ToBoolean()) { return(expr.ThenExpression.Accept(this, scope)); } return(expr.ElseExpression.Accept(this, scope)); }
public string Visit(ConditionalExpr expr, Scope scope) { return(expr.Condition.Accept(this, scope) + " ? " + expr.ThenExpression.Accept(this, scope) + " : " + expr.ElseExpression.Accept(this, scope)); }