setState(270); ((CaseStatementContext)_localctx).caseElseStat = caseElseStat(); s.setElse(((CaseStatementContext)_localctx).caseElseStat.e); setState(272); match(End);
setState(245); ((IfStatementContext)_localctx).expression = expression(); s.setElse(((IfStatementContext)_localctx).expression.e); setState(247); match(End);
/** * Wraps the comparison function in an If-statement which compares the types first, evaluating the comaprison function only * if the types are equivialent * * @param comparisonFunction * @param args * @return */ private static LogicalExpression getTypeComparisonFunction(LogicalExpression comparisonFunction, HoldingContainer... args) { List<LogicalExpression> argExpressions = Lists.newArrayList(); List<MajorType> argTypes = Lists.newArrayList(); for(HoldingContainer c : args) { argTypes.add(c.getMajorType()); argExpressions.add(new HoldingContainerExpression(c)); } FunctionCall call = new FunctionCall("compareType", argExpressions, ExpressionPosition.UNKNOWN); List<LogicalExpression> newArgs = Lists.newArrayList(); newArgs.add(call); newArgs.add(new IntExpression(0, ExpressionPosition.UNKNOWN)); FunctionCall notEqual = new FunctionCall("not_equal", newArgs, ExpressionPosition.UNKNOWN); IfExpression.IfCondition ifCondition = new IfCondition(notEqual, call); IfExpression ifExpression = IfExpression.newBuilder().setIfCondition(ifCondition).setElse(comparisonFunction).build(); return ifExpression; }
for (int i=1; i<caseArgs.size(); i=i+2) { elseExpression = IfExpression.newBuilder() .setElse(elseExpression) .setIfCondition(new IfCondition(caseArgs.get(i + 1), caseArgs.get(i))).build();
ifExpression = IfExpression.newBuilder().setIfCondition(ifConditions.poll()).setElse(ifExpression).build();
setState(270); ((CaseStatementContext)_localctx).caseElseStat = caseElseStat(); s.setElse(((CaseStatementContext)_localctx).caseElseStat.e); setState(272); match(End);
setState(245); ((IfStatementContext)_localctx).expression = expression(); s.setElse(((IfStatementContext)_localctx).expression.e); setState(247); match(End);
@Override public LogicalExpression visitIfExpression(IfExpression ifExpr, Void value) throws RuntimeException{ LogicalExpression newElseExpr = ifExpr.elseExpression.accept(this, value); IfCondition conditions = ifExpr.ifCondition; LogicalExpression newCondition = conditions.condition.accept(this, value); LogicalExpression newExpr = conditions.expression.accept(this, value); conditions = new IfExpression.IfCondition(newCondition, newExpr); return IfExpression.newBuilder().setElse(newElseExpr).setIfCondition(conditions).build(); }
@Override public LogicalExpression visitIfExpression(IfExpression ifExpr, Void value) throws RuntimeException { LogicalExpression ifCondition = ifExpr.ifCondition.condition.accept(this, null); LogicalExpression ifExpression = ifExpr.ifCondition.expression.accept(this, null); LogicalExpression elseExpression = ifExpr.elseExpression.accept(this, null); IfExpression.IfCondition condition = new IfCondition(ifCondition, ifExpression); return IfExpression.newBuilder().setIfCondition(condition).setElse(elseExpression).build(); }
@Override public LogicalExpression visitIfExpression(IfExpression ifExpr, Void value) throws RuntimeException{ LogicalExpression newElseExpr = ifExpr.elseExpression.accept(this, value); IfCondition conditions = ifExpr.ifCondition; LogicalExpression newCondition = conditions.condition.accept(this, value); LogicalExpression newExpr = conditions.expression.accept(this, value); conditions = new IfExpression.IfCondition(newCondition, newExpr); return IfExpression.newBuilder().setElse(newElseExpr).setIfCondition(conditions).build(); }