better ternary operator resolving

This commit is contained in:
wea_ondara
2022-07-14 18:05:03 +02:00
parent eb5b3a9879
commit eee94e9c45
4 changed files with 42 additions and 43 deletions

View File

@@ -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())));
}
}