Skip to content

Commit b50c2e1

Browse files
Kirill GolubevKirill Golubev
authored andcommitted
visitor darft
1 parent 5c38377 commit b50c2e1

13 files changed

Lines changed: 77 additions & 0 deletions

File tree

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/AliasInvocation.java

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

77
import com.microsoft.z3.Expr;
88

9+
import liquidjava.rj_language.visitors.ExpressionVisitor;
910
import liquidjava.smt.solver_wrapper.ExprWrapper;
1011
import liquidjava.smt.solver_wrapper.SMTWrapper;
1112

@@ -26,6 +27,11 @@ public List<Expression> getArgs() {
2627
return children;
2728
}
2829

30+
@Override
31+
public void accept(ExpressionVisitor v) {
32+
getArgs().forEach(a -> a.accept(v));
33+
}
34+
2935
@Override
3036
public ExprWrapper eval(SMTWrapper ctx) throws Exception {
3137
ExprWrapper[] argsExpr = new ExprWrapper[getArgs().size()];

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/BinaryExpression.java

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

77
import com.microsoft.z3.Expr;
88

9+
import liquidjava.rj_language.visitors.ExpressionVisitor;
910
import liquidjava.smt.solver_wrapper.ExprWrapper;
1011
import liquidjava.smt.solver_wrapper.SMTWrapper;
1112

@@ -44,6 +45,12 @@ public boolean isArithmeticOperation() {
4445
return !isLogicOperation() && !isBooleanOperation();
4546
}
4647

48+
@Override
49+
public void accept(ExpressionVisitor v) {
50+
getFirstOperand().accept(v);
51+
getSecondOperand().accept(v);
52+
}
53+
4754
@Override
4855
public ExprWrapper eval(SMTWrapper ctx) throws Exception {
4956
ExprWrapper ee1 = getFirstOperand().eval(ctx);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
import liquidjava.processor.context.Context;
88
import liquidjava.processor.facade.AliasDTO;
99
import liquidjava.rj_language.ast.typing.TypeInfer;
10+
import liquidjava.rj_language.visitors.ExpressionVisitor;
1011
import liquidjava.smt.solver_wrapper.ExprWrapper;
1112
import liquidjava.smt.solver_wrapper.SMTWrapper;
1213
import spoon.reflect.factory.Factory;
1314

1415
public abstract class Expression {
1516

17+
public abstract void accept(ExpressionVisitor v);
18+
1619
public abstract ExprWrapper eval(SMTWrapper ctx) throws Exception;
1720

1821
public abstract void getVariableNames(List<String> toAdd);

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/FunctionInvocation.java

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

77
import com.microsoft.z3.Expr;
88

9+
import liquidjava.rj_language.visitors.ExpressionVisitor;
910
import liquidjava.smt.solver_wrapper.ExprWrapper;
1011
import liquidjava.smt.solver_wrapper.SMTWrapper;
1112

@@ -31,6 +32,11 @@ public void setChild(int index, Expression element) {
3132
getArgs().set(index, element);
3233
}
3334

35+
@Override
36+
public void accept(ExpressionVisitor v) {
37+
getArgs().forEach(a -> a.accept(v));
38+
}
39+
3440
@Override
3541
public ExprWrapper eval(SMTWrapper ctx) throws Exception {
3642
ExprWrapper[] argsExpr = new ExprWrapper[getArgs().size()];

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

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

33
import java.util.List;
44

5+
import liquidjava.rj_language.visitors.ExpressionVisitor;
56
import liquidjava.smt.solver_wrapper.ExprWrapper;
67
import liquidjava.smt.solver_wrapper.SMTWrapper;
78

@@ -15,6 +16,11 @@ public Expression getExpression() {
1516
return children.get(0);
1617
}
1718

19+
@Override
20+
public void accept(ExpressionVisitor v) {
21+
getExpression().accept(v);
22+
}
23+
1824
@Override
1925
public ExprWrapper eval(SMTWrapper ctx) throws Exception {
2026
return getExpression().eval(ctx);

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/Ite.java

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

33
import java.util.List;
44

5+
import liquidjava.rj_language.visitors.ExpressionVisitor;
56
import liquidjava.smt.solver_wrapper.ExprWrapper;
67
import liquidjava.smt.solver_wrapper.SMTWrapper;
78

@@ -25,6 +26,13 @@ public Expression getElse() {
2526
return children.get(2);
2627
}
2728

29+
@Override
30+
public void accept(ExpressionVisitor v) {
31+
getCondition().accept(v);
32+
getThen().accept(v);
33+
getElse().accept(v);
34+
}
35+
2836
@Override
2937
public ExprWrapper eval(SMTWrapper ctx) throws Exception {
3038
return ctx.makeIte(getCondition().eval(ctx), getThen().eval(ctx), getElse().eval(ctx));

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralBoolean.java

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

33
import java.util.List;
44

5+
import liquidjava.rj_language.visitors.ExpressionVisitor;
56
import liquidjava.smt.solver_wrapper.ExprWrapper;
67
import liquidjava.smt.solver_wrapper.SMTWrapper;
78

@@ -17,6 +18,9 @@ public LiteralBoolean(String value) {
1718
this.value = Boolean.parseBoolean(value);
1819
}
1920

21+
@Override
22+
public void accept(ExpressionVisitor v) {}
23+
2024
public ExprWrapper eval(SMTWrapper ctx) {
2125
return ctx.makeBooleanLiteral(value);
2226
}

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralInt.java

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

33
import java.util.List;
44

5+
import liquidjava.rj_language.visitors.ExpressionVisitor;
56
import liquidjava.smt.solver_wrapper.ExprWrapper;
67
import liquidjava.smt.solver_wrapper.SMTWrapper;
78

@@ -17,6 +18,9 @@ public LiteralInt(String v) {
1718
value = Integer.parseInt(v);
1819
}
1920

21+
@Override
22+
public void accept(ExpressionVisitor v) {}
23+
2024
@Override
2125
public ExprWrapper eval(SMTWrapper ctx) {
2226
return ctx.makeIntegerLiteral(value);

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralReal.java

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

33
import java.util.List;
44

5+
import liquidjava.rj_language.visitors.ExpressionVisitor;
56
import liquidjava.smt.solver_wrapper.ExprWrapper;
67
import liquidjava.smt.solver_wrapper.SMTWrapper;
78

@@ -17,6 +18,9 @@ public LiteralReal(String v) {
1718
value = Double.parseDouble(v);
1819
}
1920

21+
@Override
22+
public void accept(ExpressionVisitor v) {}
23+
2024
@Override
2125
public ExprWrapper eval(SMTWrapper ctx) {
2226
return ctx.makeDoubleLiteral(value);

liquidjava-umbrella/liquidjava-verifier/src/main/java/liquidjava/rj_language/ast/LiteralString.java

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

33
import java.util.List;
44

5+
import liquidjava.rj_language.visitors.ExpressionVisitor;
56
import liquidjava.smt.solver_wrapper.ExprWrapper;
67
import liquidjava.smt.solver_wrapper.SMTWrapper;
78

@@ -12,6 +13,9 @@ public LiteralString(String v) {
1213
value = v;
1314
}
1415

16+
@Override
17+
public void accept(ExpressionVisitor v) {}
18+
1519
@Override
1620
public ExprWrapper eval(SMTWrapper ctx) {
1721
return ctx.makeString(value);

0 commit comments

Comments
 (0)