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);