package jef.expressions.modifier; import jef.expressions.AndExpression; import jef.expressions.Expression; import jef.expressions.OrExpression; import jef.expressions.TernaryExpression; import jef.expressions.UnaryExpression; public class TernaryRewriter extends ExpressionModifier { @Override public Expression modifyTernary(TernaryExpression expr) { //first optimize var newExpr = TernaryOptimizerUtil.optimizeTernary(expr); if (!(newExpr instanceof TernaryExpression)) { return modify(newExpr); } expr = (TernaryExpression) newExpr; //rewrite return modify(new OrExpression(new AndExpression(expr.getCond(), expr.getWhenTrue()), new AndExpression(new UnaryExpression(expr.getCond(), UnaryExpression.Operator.NOT), expr.getWhenFalse()))); } }