24 lines
844 B
Java
24 lines
844 B
Java
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())));
|
|
}
|
|
}
|