better ternary operator resolving
This commit is contained in:
@@ -1,20 +1,23 @@
|
||||
package jef.expressions.modifier;
|
||||
|
||||
import jef.expressions.AndExpression;
|
||||
import jef.expressions.BinaryExpression;
|
||||
import jef.expressions.ConstantExpression;
|
||||
import jef.expressions.Expression;
|
||||
import jef.expressions.OrExpression;
|
||||
import jef.expressions.TernaryExpression;
|
||||
import jef.expressions.UnaryExpression;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class TernaryRewriter extends ExpressionModifier {
|
||||
@Override
|
||||
public Expression modifyTernary(TernaryExpression expr) {
|
||||
return new OrExpression(new AndExpression(expr.getCond(), expr.getWhenTrue()),
|
||||
new AndExpression(new UnaryExpression(expr.getCond(), UnaryExpression.Operator.NOT), expr.getWhenFalse()));
|
||||
// return new OrExpression(new AndExpression(expr.getCond(), expr.getWhenTrue()), expr.getWhenFalse());
|
||||
//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())));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user