Skip to content

Commit 0ecbb8f

Browse files
committed
Remove Group Expression
1 parent f5cccb1 commit 0ecbb8f

17 files changed

Lines changed: 25 additions & 165 deletions

File tree

liquidjava-verifier/src/main/java/liquidjava/diagnostics/DebugLog.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import liquidjava.rj_language.Predicate;
88
import liquidjava.rj_language.ast.BinaryExpression;
99
import liquidjava.rj_language.ast.Expression;
10-
import liquidjava.rj_language.ast.GroupExpression;
1110
import liquidjava.utils.Utils;
1211
import spoon.reflect.cu.SourcePosition;
1312
import spoon.reflect.reference.CtTypeReference;
@@ -349,10 +348,6 @@ private static String formatConclusion(Predicate p) {
349348
}
350349

351350
private static void flattenConjunction(Expression e, List<Expression> out) {
352-
if (e instanceof GroupExpression g) {
353-
flattenConjunction(g.getExpression(), out);
354-
return;
355-
}
356351
if (e instanceof BinaryExpression b && "&&".equals(b.getOperator())) {
357352
flattenConjunction(b.getFirstOperand(), out);
358353
flattenConjunction(b.getSecondOperand(), out);

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import liquidjava.rj_language.Predicate;
1919
import liquidjava.rj_language.ast.BinaryExpression;
2020
import liquidjava.rj_language.ast.Expression;
21-
import liquidjava.rj_language.ast.GroupExpression;
2221
import org.apache.commons.lang3.NotImplementedException;
2322
import spoon.reflect.code.BinaryOperatorKind;
2423
import spoon.reflect.code.CtAssignment;
@@ -344,7 +343,7 @@ private Predicate getConditionRefinement(CtExpression<Boolean> condition) throws
344343
}
345344

346345
private Optional<Predicate> unwrapWildcardEquality(Predicate refinement) {
347-
Expression expression = unwrapGroupExpression(refinement.getExpression());
346+
Expression expression = refinement.getExpression();
348347
if (expression instanceof BinaryExpression binaryExpression && Ops.EQ.equals(binaryExpression.getOperator())
349348
&& Keys.WILDCARD.equals(binaryExpression.getFirstOperand().toString())) {
350349
return Optional.of(new Predicate(binaryExpression.getSecondOperand()));
@@ -360,7 +359,7 @@ private Predicate valueFromRefinement(CtExpression<?> element, Predicate refinem
360359
if (value.isPresent())
361360
return value.get();
362361

363-
Expression expression = unwrapGroupExpression(refinement.getExpression());
362+
Expression expression = refinement.getExpression();
364363
boolean hasWildcard = refinement.getVariableNames().contains(Keys.WILDCARD);
365364
if (!hasWildcard && !expression.isBooleanExpression())
366365
return new Predicate(expression);
@@ -376,12 +375,6 @@ private Predicate createFreshValue(CtExpression<?> element, Predicate refinement
376375
return Predicate.createVar(newName);
377376
}
378377

379-
private Expression unwrapGroupExpression(Expression expression) {
380-
while (expression instanceof GroupExpression groupExpression)
381-
expression = groupExpression.getExpression();
382-
return expression;
383-
}
384-
385378
/**
386379
* Retrieves the refinements for the variable write inside unary operation
387380
*

liquidjava-verifier/src/main/java/liquidjava/rj_language/Predicate.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import liquidjava.rj_language.ast.Enum;
2121
import liquidjava.rj_language.ast.Expression;
2222
import liquidjava.rj_language.ast.FunctionInvocation;
23-
import liquidjava.rj_language.ast.GroupExpression;
2423
import liquidjava.rj_language.ast.Ite;
2524
import liquidjava.rj_language.ast.LiteralBoolean;
2625
import liquidjava.rj_language.ast.LiteralChar;
@@ -75,9 +74,6 @@ public Predicate(String ref, CtElement element) throws LJError {
7574
public Predicate(String ref, CtElement element, String prefix) throws LJError {
7675
this.prefix = prefix;
7776
exp = parse(ref, element);
78-
if (!(exp instanceof GroupExpression)) {
79-
exp = new GroupExpression(exp);
80-
}
8177
exp = resolveStaticFinalConstants(exp, element);
8278
}
8379

liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Expression.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,6 @@ public boolean isBooleanExpression() {
8686
|| this instanceof FunctionInvocation) {
8787
return true;
8888
}
89-
if (this instanceof GroupExpression ge) {
90-
return ge.getExpression().isBooleanExpression();
91-
}
9289
if (this instanceof BinaryExpression be) {
9390
return be.isBooleanOperation() || be.isLogicOperation();
9491
}
@@ -169,7 +166,7 @@ public Expression substituteState(Map<String, Expression> subMap, String[] toCha
169166
sub = sub.substitute(new Var(s), v);
170167
}
171168
// substitute by sub in parent
172-
e = new GroupExpression(sub);
169+
e = sub;
173170
}
174171
}
175172
e.auxSubstituteState(subMap, toChange);
@@ -191,7 +188,7 @@ private void auxSubstituteState(Map<String, Expression> subMap, String[] toChang
191188
sub = sub.substitute(new Var(s), v);
192189
}
193190
// substitute by sub in parent
194-
setChild(i, (sub instanceof GroupExpression) ? sub : new GroupExpression(sub));
191+
setChild(i, sub);
195192
}
196193
}
197194
exp.auxSubstituteState(subMap, toChange);
@@ -228,7 +225,7 @@ public Expression changeAlias(Map<String, AliasDTO> alias, Context ctx, Factory
228225
}
229226
sub = sub.substitute(varExp, aliasExp);
230227
}
231-
e = new GroupExpression(sub);
228+
e = sub;
232229
}
233230
}
234231
e.auxChangeAlias(alias, ctx, f);

liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/GroupExpression.java

Lines changed: 0 additions & 70 deletions
This file was deleted.

liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/formatter/ExpressionFormatter.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import liquidjava.rj_language.ast.BinaryExpression;
99
import liquidjava.rj_language.ast.Expression;
1010
import liquidjava.rj_language.ast.FunctionInvocation;
11-
import liquidjava.rj_language.ast.GroupExpression;
1211
import liquidjava.rj_language.ast.Ite;
1312
import liquidjava.rj_language.ast.LiteralBoolean;
1413
import liquidjava.rj_language.ast.LiteralChar;
@@ -41,31 +40,23 @@ private String formatExpression(Expression expression) {
4140
}
4241

4342
private String formatExpression(Expression expression, boolean shouldWrap) {
44-
expression = unwrapGroup(expression);
4543
if (shouldWrap)
4644
return "(" + formatExpression(expression) + ")";
4745
return formatExpression(expression);
4846
}
4947

5048
private String formatOperand(Expression parent, Expression child, boolean rightOperand) {
51-
child = unwrapGroup(child);
5249
return formatExpression(child, needsParentheses(parent, child, rightOperand));
5350
}
5451

5552
private String formatCondition(Expression child) {
56-
return formatExpression(child, unwrapGroup(child) instanceof Ite);
53+
return formatExpression(child, child instanceof Ite);
5754
}
5855

5956
private String formatArguments(List<Expression> args) {
6057
return args.stream().map(expression -> formatExpression(expression, false)).collect(Collectors.joining(", "));
6158
}
6259

63-
private Expression unwrapGroup(Expression expression) {
64-
while (expression instanceof GroupExpression group)
65-
expression = group.getExpression();
66-
return expression;
67-
}
68-
6960
private boolean needsParentheses(Expression parent, Expression child, boolean rightOperand) {
7061
ExpressionPrecedence parentPrecedence = ExpressionPrecedence.of(parent);
7162
ExpressionPrecedence childPrecedence = ExpressionPrecedence.of(child);
@@ -120,11 +111,6 @@ public String visitFunctionInvocation(FunctionInvocation fun) {
120111
return Utils.getSimpleName(fun.getName()) + "(" + formatArguments(fun.getArgs()) + ")";
121112
}
122113

123-
@Override
124-
public String visitGroupExpression(GroupExpression exp) {
125-
return formatExpression(exp.getExpression());
126-
}
127-
128114
@Override
129115
public String visitIte(Ite ite) {
130116
return formatCondition(ite.getCondition()) + " ? " + formatCondition(ite.getThen()) + " : "

liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/formatter/ExpressionPrecedence.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import liquidjava.rj_language.ast.BinaryExpression;
44
import liquidjava.rj_language.ast.Expression;
5-
import liquidjava.rj_language.ast.GroupExpression;
65
import liquidjava.rj_language.ast.Ite;
76
import liquidjava.rj_language.ast.UnaryExpression;
87

@@ -14,8 +13,6 @@ public boolean isLowerThan(ExpressionPrecedence other) {
1413
}
1514

1615
public static ExpressionPrecedence of(Expression expression) {
17-
if (expression instanceof GroupExpression group)
18-
return of(group.getExpression());
1916
if (expression instanceof Ite)
2017
return TERNARY;
2118
if (expression instanceof UnaryExpression)

liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/typing/TypeInfer.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import liquidjava.rj_language.ast.BinaryExpression;
88
import liquidjava.rj_language.ast.Expression;
99
import liquidjava.rj_language.ast.FunctionInvocation;
10-
import liquidjava.rj_language.ast.GroupExpression;
1110
import liquidjava.rj_language.ast.Ite;
1211
import liquidjava.rj_language.ast.LiteralBoolean;
1312
import liquidjava.rj_language.ast.LiteralChar;
@@ -51,8 +50,6 @@ else if (e instanceof Ite)
5150
return boolType(factory);
5251
else if (e instanceof BinaryExpression)
5352
return binaryType(ctx, factory, (BinaryExpression) e);
54-
else if (e instanceof GroupExpression)
55-
return getType(ctx, factory, ((GroupExpression) e).getExpression());
5653
else if (e instanceof FunctionInvocation)
5754
return functionType(ctx, (FunctionInvocation) e);
5855
else if (e instanceof AliasInvocation)

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/VCArithmeticSimplification.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import liquidjava.processor.VCImplication;
77
import liquidjava.rj_language.ast.BinaryExpression;
88
import liquidjava.rj_language.ast.Expression;
9-
import liquidjava.rj_language.ast.GroupExpression;
109
import liquidjava.rj_language.ast.Ite;
1110
import liquidjava.rj_language.ast.LiteralInt;
1211
import liquidjava.rj_language.ast.LiteralReal;
@@ -44,8 +43,6 @@ private Expression simplifyExpression(Expression expression, List<Expression> no
4443
return simplifyUnary(unary, nonZeroExpressions);
4544
if (expression instanceof Ite ite)
4645
return simplifyIte(ite, nonZeroExpressions);
47-
if (expression instanceof GroupExpression group)
48-
return simplifyGroup(group, nonZeroExpressions);
4946
return expression.clone();
5047
}
5148

@@ -108,17 +105,6 @@ private Expression simplifyIte(Ite ite, List<Expression> nonZeroExpressions) {
108105
return new Ite(condition.clone(), thenExpression.clone(), elseExpression.clone());
109106
}
110107

111-
/**
112-
* Simplifies an expression wrapped in parentheses while preserving the group node
113-
*/
114-
private Expression simplifyGroup(GroupExpression group, List<Expression> nonZeroExpressions) {
115-
Expression expression = group.getExpression();
116-
Expression simplified = simplifyExpression(expression, nonZeroExpressions);
117-
if (!expression.equals(simplified))
118-
return new GroupExpression(simplified);
119-
return group.clone();
120-
}
121-
122108
/**
123109
* Dispatches a local binary arithmetic identity by operator
124110
*/

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/VCFolding.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import liquidjava.rj_language.ast.BinaryExpression;
44
import liquidjava.rj_language.ast.Enum;
55
import liquidjava.rj_language.ast.Expression;
6-
import liquidjava.rj_language.ast.GroupExpression;
76
import liquidjava.rj_language.ast.Ite;
87
import liquidjava.rj_language.ast.LiteralBoolean;
98
import liquidjava.rj_language.ast.LiteralInt;
@@ -33,9 +32,6 @@ private Expression fold(Expression expression) {
3332
return foldUnary(unary);
3433
if (expression instanceof Ite ite)
3534
return foldIte(ite);
36-
// (x) -> x
37-
if (expression instanceof GroupExpression group && group.getChildren().size() == 1)
38-
return group.getExpression().clone();
3935
return expression.clone();
4036
}
4137

0 commit comments

Comments
 (0)