public override Expression VisitRuleStatement([NotNull] RuleEngineParser.RuleStatementContext context) { var whenThenStatementContexts = context.whenThenStatement(); var elseStatementContext = context.elseStatement(); var expression = VisitElseStatement(elseStatementContext); for (int i = whenThenStatementContexts.Length - 1; i >= 0; i--) { var whenThenExpression = VisitWhenThenStatement(whenThenStatementContexts[i]) as ConditionalExpression; var trueExpression = whenThenExpression.IfTrue; (trueExpression, expression) = Convert(trueExpression, expression); expression = Expression.Condition(whenThenExpression.Test, trueExpression, expression); } var returnType = jRuleObjectTypeMapping.ReturnType; if (expression.Type != returnType) { expression = Expression.Convert(expression, returnType); } return(expression); }
/// <summary> /// Visit a parse tree produced by <see cref="RuleEngineParser.ruleStatement"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitRuleStatement([NotNull] RuleEngineParser.RuleStatementContext context) { return(VisitChildren(context)); }