public Formula Visit(ConditionalFormula formula)
 {
     return formula;
 }
 public virtual Formula Visit(ConditionalFormula formula)
 {
     Visit((Formula)formula);
     if (formula.Test != null) formula.Test.Accept(this);
     if (formula.IfTrue != null) formula.IfTrue.Accept(this);
     if (formula.IfFalse != null) formula.IfFalse.Accept(this);
     return visitor.Visit(formula);
 }
 public override Formula Visit(ConditionalFormula formula)
 {
     IncreaseIfNecessary(formula.Test, _ => _.TypeDeclaration, increased => formula.Test = increased);
     return base.Visit(formula);
 }
 public static void EvalIf(MethodCallExpression exp, ExpressionToFormulaState state)
 {
     EvalExpression(exp.Arguments[0], state);
     var test = state.CurrentBlock.Formulas.Pop();
     var condition = new ConditionalFormula() { Test = test };
     state.CurrentBlock.Formulas.Push(condition);
     state.Conditions.Push(condition);
     state.PushBlock();
     condition.IfTrue = state.CurrentBlock;
 }