Skip to content

Commit a43cb6d

Browse files
Add a translation layer to automatically escape/unescape variable and Uf names. This is work in progress and will eventually allow us to support arbitrary names for variables.
1 parent 142f6ba commit a43cb6d

13 files changed

+669
-309
lines changed

src/org/sosy_lab/java_smt/basicimpl/AbstractArrayFormulaManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
package org.sosy_lab.java_smt.basicimpl;
1010

11-
import static org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager.checkVariableName;
11+
import static org.sosy_lab.java_smt.basicimpl.FormulaCreator.escapeName;
1212

1313
import org.sosy_lab.java_smt.api.ArrayFormula;
1414
import org.sosy_lab.java_smt.api.ArrayFormulaManager;
@@ -65,8 +65,8 @@ protected abstract TFormulaInfo store(
6565
FTI extends FormulaType<TI>,
6666
FTE extends FormulaType<TE>>
6767
ArrayFormula<TI, TE> makeArray(String pName, FTI pIndexType, FTE pElementType) {
68-
checkVariableName(pName);
69-
final TFormulaInfo namedArrayFormula = internalMakeArray(pName, pIndexType, pElementType);
68+
final TFormulaInfo namedArrayFormula =
69+
internalMakeArray(escapeName(pName), pIndexType, pElementType);
7070
return getFormulaCreator().encapsulateArray(namedArrayFormula, pIndexType, pElementType);
7171
}
7272

src/org/sosy_lab/java_smt/basicimpl/AbstractBitvectorFormulaManager.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
package org.sosy_lab.java_smt.basicimpl;
1010

1111
import static com.google.common.base.Preconditions.checkArgument;
12-
import static org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager.checkVariableName;
1312

1413
import com.google.common.base.Preconditions;
1514
import com.google.common.collect.Lists;
@@ -294,8 +293,7 @@ public BitvectorFormula makeVariable(BitvectorType type, String pVar) {
294293

295294
@Override
296295
public BitvectorFormula makeVariable(int pLength, String pVar) {
297-
checkVariableName(pVar);
298-
return wrap(makeVariableImpl(pLength, pVar));
296+
return wrap(makeVariableImpl(pLength, FormulaCreator.escapeName(pVar)));
299297
}
300298

301299
protected abstract TFormulaInfo makeVariableImpl(int pLength, String pVar);

src/org/sosy_lab/java_smt/basicimpl/AbstractBooleanFormulaManager.java

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

1111
import static com.google.common.base.Preconditions.checkArgument;
1212
import static com.google.common.base.Preconditions.checkState;
13-
import static org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager.checkVariableName;
1413

1514
import com.google.common.collect.Collections2;
1615
import com.google.common.collect.ImmutableList;
@@ -40,6 +39,7 @@
4039
import org.sosy_lab.java_smt.api.visitors.DefaultFormulaVisitor;
4140
import org.sosy_lab.java_smt.api.visitors.FormulaVisitor;
4241
import org.sosy_lab.java_smt.api.visitors.TraversalProcess;
42+
import org.sosy_lab.java_smt.basicimpl.FormulaCreator.SymbolViewVisitor;
4343

4444
@SuppressWarnings("ClassTypeParameterName")
4545
public abstract class AbstractBooleanFormulaManager<TFormulaInfo, TType, TEnv, TFuncDecl>
@@ -60,8 +60,7 @@ private BooleanFormula wrap(TFormulaInfo formulaInfo) {
6060

6161
@Override
6262
public BooleanFormula makeVariable(String pVar) {
63-
checkVariableName(pVar);
64-
return wrap(makeVariableImpl(pVar));
63+
return wrap(makeVariableImpl(FormulaCreator.escapeName(pVar)));
6564
}
6665

6766
protected abstract TFormulaInfo makeVariableImpl(String pVar);
@@ -279,21 +278,26 @@ public final <T extends Formula> T ifThenElse(BooleanFormula pBits, T f1, T f2)
279278

280279
@Override
281280
public <R> R visit(BooleanFormula pFormula, BooleanFormulaVisitor<R> visitor) {
282-
return formulaCreator.visit(pFormula, new DelegatingFormulaVisitor<>(visitor));
281+
return formulaCreator.visit(
282+
pFormula, new SymbolViewVisitor<>(new DelegatingFormulaVisitor<>(visitor)));
283283
}
284284

285285
@Override
286286
public void visitRecursively(
287287
BooleanFormula pF, BooleanFormulaVisitor<TraversalProcess> pFormulaVisitor) {
288288
formulaCreator.visitRecursively(
289-
new DelegatingFormulaVisitor<>(pFormulaVisitor), pF, p -> p instanceof BooleanFormula);
289+
new SymbolViewVisitor<>(new DelegatingFormulaVisitor<>(pFormulaVisitor)),
290+
pF,
291+
p -> p instanceof BooleanFormula);
290292
}
291293

292294
@Override
293295
public BooleanFormula transformRecursively(
294296
BooleanFormula f, BooleanFormulaTransformationVisitor pVisitor) {
295297
return formulaCreator.transformRecursively(
296-
new DelegatingFormulaVisitor<>(pVisitor), f, p -> p instanceof BooleanFormula);
298+
new SymbolViewVisitor<>(new DelegatingFormulaVisitor<>(pVisitor)),
299+
f,
300+
p -> p instanceof BooleanFormula);
297301
}
298302

299303
private class DelegatingFormulaVisitor<R> implements FormulaVisitor<R> {

src/org/sosy_lab/java_smt/basicimpl/AbstractEnumerationFormulaManager.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010

1111
import static com.google.common.base.Preconditions.checkArgument;
1212
import static com.google.common.base.Preconditions.checkNotNull;
13-
import static org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager.checkVariableName;
13+
import static org.sosy_lab.java_smt.basicimpl.FormulaCreator.escapeName;
1414

1515
import com.google.common.base.Preconditions;
1616
import com.google.common.collect.ImmutableMap;
17+
import com.google.common.collect.ImmutableSet;
18+
import com.google.common.collect.Iterables;
1719
import java.util.LinkedHashMap;
1820
import java.util.Map;
1921
import java.util.Set;
@@ -77,8 +79,9 @@ private void checkSameEnumerationType(EnumerationFormula pF1, EnumerationFormula
7779

7880
@Override
7981
public EnumerationFormulaType declareEnumeration(String pName, Set<String> pElementNames) {
80-
checkVariableName(pName);
81-
return declareEnumerationImpl(pName, pElementNames);
82+
return declareEnumerationImpl(
83+
escapeName(pName),
84+
ImmutableSet.copyOf(Iterables.transform(pElementNames, FormulaCreator::escapeName)));
8285
}
8386

8487
protected EnumerationFormulaType declareEnumerationImpl(String pName, Set<String> pElementNames) {
@@ -114,8 +117,7 @@ protected TFormulaInfo makeConstantImpl(String pName, EnumerationFormulaType pTy
114117

115118
@Override
116119
public EnumerationFormula makeVariable(String pVar, EnumerationFormulaType pType) {
117-
checkVariableName(pVar);
118-
return wrap(makeVariableImpl(pVar, pType));
120+
return wrap(makeVariableImpl(escapeName(pVar), pType));
119121
}
120122

121123
protected TFormulaInfo makeVariableImpl(String pVar, EnumerationFormulaType pType) {

src/org/sosy_lab/java_smt/basicimpl/AbstractFloatingPointFormulaManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
package org.sosy_lab.java_smt.basicimpl;
1010

11-
import static org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager.checkVariableName;
11+
import static org.sosy_lab.java_smt.basicimpl.FormulaCreator.escapeName;
1212

1313
import com.google.common.base.Preconditions;
1414
import java.math.BigDecimal;
@@ -153,8 +153,7 @@ protected abstract TFormulaInfo makeNumberAndRound(
153153

154154
@Override
155155
public FloatingPointFormula makeVariable(String pVar, FormulaType.FloatingPointType pType) {
156-
checkVariableName(pVar);
157-
return wrap(makeVariableImpl(pVar, pType));
156+
return wrap(makeVariableImpl(escapeName(pVar), pType));
158157
}
159158

160159
protected abstract TFormulaInfo makeVariableImpl(

0 commit comments

Comments
 (0)