public Expression VisitIfBlock([NotNull] VelocityParser.IfBlockContext context) { var elseBlock = context.ifElseBlock(); Expression falseContent = elseBlock == null ? Constants.EmptyExpression : Visit(elseBlock.block()); var elseIfBlocks = context.GetRuleContexts <VelocityParser.IfElseifBlockContext>(); for (int i = elseIfBlocks.Length - 1; i >= 0; i--) { var elseIf = elseIfBlocks[i]; var innerCondition = new CoerceToBooleanExpression(Visit(elseIf.expression())); var elseIfContent = Visit(elseIf.block()); falseContent = Expression.IfThenElse(innerCondition, elseIfContent, falseContent); } var condition = new CoerceToBooleanExpression(Visit(context.expression())); var trueContent = Visit(context.block()); return(Expression.IfThenElse(condition, trueContent, falseContent)); }
protected virtual Expression VisitCoerceToBoolean(CoerceToBooleanExpression node) => base.VisitExtension(node);