Skip to content

Commit b066107

Browse files
Merge pull request #153 from UniVE-SSV/enumerations-refactoring
Removing enumerations in favor of class hierarchies
2 parents ad5454e + 3bd581d commit b066107

File tree

129 files changed

+3694
-1734
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+3694
-1734
lines changed

lisa/lisa-core/src/main/java/it/unive/lisa/analysis/dataflow/ConstantPropagation.java

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@
1313
import it.unive.lisa.symbolic.value.OutOfScopeIdentifier;
1414
import it.unive.lisa.symbolic.value.UnaryExpression;
1515
import it.unive.lisa.symbolic.value.ValueExpression;
16+
import it.unive.lisa.symbolic.value.operator.AdditionOperator;
17+
import it.unive.lisa.symbolic.value.operator.DivisionOperator;
18+
import it.unive.lisa.symbolic.value.operator.Module;
19+
import it.unive.lisa.symbolic.value.operator.Multiplication;
20+
import it.unive.lisa.symbolic.value.operator.SubtractionOperator;
21+
import it.unive.lisa.symbolic.value.operator.unary.NumericNegation;
1622
import java.util.Collection;
1723
import java.util.Collections;
1824
import java.util.HashSet;
@@ -74,12 +80,8 @@ private static Integer eval(SymbolicExpression e, DefiniteForwardDataflowDomain<
7480
if (i == null)
7581
return i;
7682

77-
switch (unary.getOperator()) {
78-
case NUMERIC_NEG:
83+
if (unary.getOperator() == NumericNegation.INSTANCE)
7984
return -i;
80-
default:
81-
break;
82-
}
8385
}
8486

8587
if (e instanceof BinaryExpression) {
@@ -90,41 +92,16 @@ private static Integer eval(SymbolicExpression e, DefiniteForwardDataflowDomain<
9092
if (right == null || left == null)
9193
return null;
9294

93-
switch (binary.getOperator()) {
94-
case NUMERIC_NON_OVERFLOWING_ADD:
95-
case NUMERIC_8BIT_ADD:
96-
case NUMERIC_16BIT_ADD:
97-
case NUMERIC_32BIT_ADD:
98-
case NUMERIC_64BIT_ADD:
95+
if (binary.getOperator() instanceof AdditionOperator)
9996
return left + right;
100-
case NUMERIC_NON_OVERFLOWING_DIV:
101-
case NUMERIC_8BIT_DIV:
102-
case NUMERIC_16BIT_DIV:
103-
case NUMERIC_32BIT_DIV:
104-
case NUMERIC_64BIT_DIV:
97+
if (binary.getOperator() instanceof DivisionOperator)
10598
return left == 0 ? null : (int) left / right;
106-
case NUMERIC_NON_OVERFLOWING_MOD:
107-
case NUMERIC_8BIT_MOD:
108-
case NUMERIC_16BIT_MOD:
109-
case NUMERIC_32BIT_MOD:
110-
case NUMERIC_64BIT_MOD:
99+
if (binary.getOperator() instanceof Module)
111100
return right == 0 ? null : left % right;
112-
case NUMERIC_NON_OVERFLOWING_MUL:
113-
case NUMERIC_8BIT_MUL:
114-
case NUMERIC_16BIT_MUL:
115-
case NUMERIC_32BIT_MUL:
116-
case NUMERIC_64BIT_MUL:
101+
if (binary.getOperator() instanceof Multiplication)
117102
return left * right;
118-
case NUMERIC_NON_OVERFLOWING_SUB:
119-
case NUMERIC_8BIT_SUB:
120-
case NUMERIC_16BIT_SUB:
121-
case NUMERIC_32BIT_SUB:
122-
case NUMERIC_64BIT_SUB:
103+
if (binary.getOperator() instanceof SubtractionOperator)
123104
return left - right;
124-
default:
125-
break;
126-
}
127-
128105
}
129106

130107
return null;

lisa/lisa-core/src/main/java/it/unive/lisa/analysis/nonInterference/NonInterference.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
import it.unive.lisa.program.annotations.matcher.BasicAnnotationMatcher;
1313
import it.unive.lisa.program.cfg.ProgramPoint;
1414
import it.unive.lisa.symbolic.SymbolicExpression;
15-
import it.unive.lisa.symbolic.value.BinaryOperator;
1615
import it.unive.lisa.symbolic.value.Constant;
1716
import it.unive.lisa.symbolic.value.Identifier;
18-
import it.unive.lisa.symbolic.value.TernaryOperator;
19-
import it.unive.lisa.symbolic.value.UnaryOperator;
2017
import it.unive.lisa.symbolic.value.ValueExpression;
18+
import it.unive.lisa.symbolic.value.operator.binary.BinaryOperator;
19+
import it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator;
20+
import it.unive.lisa.symbolic.value.operator.unary.UnaryOperator;
2121
import java.util.IdentityHashMap;
2222
import java.util.Map;
2323

lisa/lisa-core/src/main/java/it/unive/lisa/analysis/numeric/IntegerConstantPropagation.java

Lines changed: 35 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,24 @@
99
import it.unive.lisa.analysis.representation.DomainRepresentation;
1010
import it.unive.lisa.analysis.representation.StringRepresentation;
1111
import it.unive.lisa.program.cfg.ProgramPoint;
12-
import it.unive.lisa.symbolic.value.BinaryOperator;
1312
import it.unive.lisa.symbolic.value.Constant;
1413
import it.unive.lisa.symbolic.value.Identifier;
15-
import it.unive.lisa.symbolic.value.TernaryOperator;
16-
import it.unive.lisa.symbolic.value.UnaryOperator;
1714
import it.unive.lisa.symbolic.value.ValueExpression;
15+
import it.unive.lisa.symbolic.value.operator.AdditionOperator;
16+
import it.unive.lisa.symbolic.value.operator.DivisionOperator;
17+
import it.unive.lisa.symbolic.value.operator.Module;
18+
import it.unive.lisa.symbolic.value.operator.Multiplication;
19+
import it.unive.lisa.symbolic.value.operator.SubtractionOperator;
20+
import it.unive.lisa.symbolic.value.operator.binary.BinaryOperator;
21+
import it.unive.lisa.symbolic.value.operator.binary.ComparisonEq;
22+
import it.unive.lisa.symbolic.value.operator.binary.ComparisonGe;
23+
import it.unive.lisa.symbolic.value.operator.binary.ComparisonGt;
24+
import it.unive.lisa.symbolic.value.operator.binary.ComparisonLe;
25+
import it.unive.lisa.symbolic.value.operator.binary.ComparisonLt;
26+
import it.unive.lisa.symbolic.value.operator.binary.ComparisonNe;
27+
import it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator;
28+
import it.unive.lisa.symbolic.value.operator.unary.NumericNegation;
29+
import it.unive.lisa.symbolic.value.operator.unary.UnaryOperator;
1830

1931
/**
2032
* The overflow-insensitive basic integer constant propagation abstract domain,
@@ -102,33 +114,19 @@ protected IntegerConstantPropagation evalUnaryExpression(UnaryOperator operator,
102114
if (arg.isTop())
103115
return top();
104116

105-
switch (operator) {
106-
case NUMERIC_NEG:
117+
if (operator == NumericNegation.INSTANCE)
107118
return new IntegerConstantPropagation(-value);
108-
case STRING_LENGTH:
109-
case LOGICAL_NOT:
110-
case TYPEOF:
111-
default:
112-
return top();
113-
}
119+
120+
return top();
114121
}
115122

116123
@Override
117124
protected IntegerConstantPropagation evalBinaryExpression(BinaryOperator operator, IntegerConstantPropagation left,
118125
IntegerConstantPropagation right, ProgramPoint pp) {
119126

120-
switch (operator) {
121-
case NUMERIC_NON_OVERFLOWING_ADD:
122-
case NUMERIC_8BIT_ADD:
123-
case NUMERIC_16BIT_ADD:
124-
case NUMERIC_32BIT_ADD:
125-
case NUMERIC_64BIT_ADD:
127+
if (operator instanceof AdditionOperator)
126128
return left.isTop() || right.isTop() ? top() : new IntegerConstantPropagation(left.value + right.value);
127-
case NUMERIC_NON_OVERFLOWING_DIV:
128-
case NUMERIC_8BIT_DIV:
129-
case NUMERIC_16BIT_DIV:
130-
case NUMERIC_32BIT_DIV:
131-
case NUMERIC_64BIT_DIV:
129+
else if (operator instanceof DivisionOperator)
132130
if (!left.isTop() && left.value == 0)
133131
return new IntegerConstantPropagation(0);
134132
else if (!right.isTop() && right.value == 0)
@@ -137,26 +135,14 @@ else if (left.isTop() || right.isTop() || left.value % right.value != 0)
137135
return top();
138136
else
139137
return new IntegerConstantPropagation(left.value / right.value);
140-
case NUMERIC_NON_OVERFLOWING_MOD:
141-
case NUMERIC_8BIT_MOD:
142-
case NUMERIC_16BIT_MOD:
143-
case NUMERIC_32BIT_MOD:
144-
case NUMERIC_64BIT_MOD:
138+
else if (operator instanceof Module)
145139
return left.isTop() || right.isTop() ? top() : new IntegerConstantPropagation(left.value % right.value);
146-
case NUMERIC_NON_OVERFLOWING_MUL:
147-
case NUMERIC_8BIT_MUL:
148-
case NUMERIC_16BIT_MUL:
149-
case NUMERIC_32BIT_MUL:
140+
else if (operator instanceof Multiplication)
150141
return left.isTop() || right.isTop() ? top() : new IntegerConstantPropagation(left.value * right.value);
151-
case NUMERIC_NON_OVERFLOWING_SUB:
152-
case NUMERIC_8BIT_SUB:
153-
case NUMERIC_16BIT_SUB:
154-
case NUMERIC_32BIT_SUB:
155-
case NUMERIC_64BIT_SUB:
142+
else if (operator instanceof SubtractionOperator)
156143
return left.isTop() || right.isTop() ? top() : new IntegerConstantPropagation(left.value - right.value);
157-
default:
144+
else
158145
return top();
159-
}
160146
}
161147

162148
@Override
@@ -219,39 +205,35 @@ protected Satisfiability satisfiesBinaryExpression(BinaryOperator operator, Inte
219205
if (left.isTop() || right.isTop())
220206
return Satisfiability.UNKNOWN;
221207

222-
switch (operator) {
223-
case COMPARISON_EQ:
208+
if (operator == ComparisonEq.INSTANCE)
224209
return left.value.intValue() == right.value.intValue() ? Satisfiability.SATISFIED
225210
: Satisfiability.NOT_SATISFIED;
226-
case COMPARISON_GE:
211+
else if (operator == ComparisonGe.INSTANCE)
227212
return left.value >= right.value ? Satisfiability.SATISFIED : Satisfiability.NOT_SATISFIED;
228-
case COMPARISON_GT:
213+
else if (operator == ComparisonGt.INSTANCE)
229214
return left.value > right.value ? Satisfiability.SATISFIED : Satisfiability.NOT_SATISFIED;
230-
case COMPARISON_LE:
215+
else if (operator == ComparisonLe.INSTANCE)
231216
return left.value <= right.value ? Satisfiability.SATISFIED : Satisfiability.NOT_SATISFIED;
232-
case COMPARISON_LT:
217+
else if (operator == ComparisonLt.INSTANCE)
233218
return left.value < right.value ? Satisfiability.SATISFIED : Satisfiability.NOT_SATISFIED;
234-
case COMPARISON_NE:
219+
else if (operator == ComparisonNe.INSTANCE)
235220
return left.value.intValue() != right.value.intValue() ? Satisfiability.SATISFIED
236221
: Satisfiability.NOT_SATISFIED;
237-
default:
222+
else
238223
return Satisfiability.UNKNOWN;
239-
}
240224
}
241225

242226
@Override
243227
protected ValueEnvironment<IntegerConstantPropagation> assumeBinaryExpression(
244228
ValueEnvironment<IntegerConstantPropagation> environment, BinaryOperator operator, ValueExpression left,
245229
ValueExpression right, ProgramPoint pp) throws SemanticException {
246-
switch (operator) {
247-
case COMPARISON_EQ:
230+
if (operator == ComparisonEq.INSTANCE)
248231
if (left instanceof Identifier)
249232
environment = environment.assign((Identifier) left, right, pp);
250233
else if (right instanceof Identifier)
251234
environment = environment.assign((Identifier) right, left, pp);
252-
return environment;
253-
default:
254-
return environment;
255-
}
235+
else
236+
return environment;
237+
return environment;
256238
}
257239
}

0 commit comments

Comments
 (0)