@@ -90,29 +90,32 @@ object SolverFactory {
90
90
// extract <exec> in "smt-z3:<exec>"
91
91
private def getZ3Executable (name : String ): String = name.drop(7 )
92
92
93
- def getFromName (noIncName : String , force : Boolean = false )
93
+ // extract solver in "no-inc:solver"
94
+ private def removeNoInc (name : String ): String = name.drop(7 )
95
+
96
+ def getFromName (name : String , force : Boolean = false )
94
97
(p : Program , ctx : Context )
95
98
(enc : ProgramTransformer {
96
99
val sourceProgram : p.type
97
100
val targetProgram : Program { val trees : inox.trees.type }
98
101
})(implicit sem : p.Semantics ): SolverFactory { val program : p.type ; type S <: TimeoutSolver { val program : p.type } } = {
99
102
100
- val nonIncremental = noIncName .startsWith(" no-inc:" )
101
- val name = if (nonIncremental) noIncName.drop( 7 ) else noIncName
103
+ val nonIncremental = name .startsWith(" no-inc:" )
104
+ val noPrefixName = if (nonIncremental) removeNoInc(name ) else name
102
105
103
106
if (
104
107
nonIncremental &&
105
- name != " smt-cvc4" &&
106
- name != " unrollz3" &&
107
- name != " smt-z3" &&
108
- ! name .startsWith(" smt-z3:" )
108
+ noPrefixName != " smt-cvc4" &&
109
+ noPrefixName != " unrollz3" &&
110
+ noPrefixName != " smt-z3" &&
111
+ ! noPrefixName .startsWith(" smt-z3:" )
109
112
)
110
113
throw FatalError (s " Non incremental mode is not available for solver $name" )
111
114
112
115
val finalName = if (force) {
113
- name
116
+ noPrefixName
114
117
} else {
115
- fallbacks.get(name ) match {
118
+ fallbacks.get(noPrefixName ) match {
116
119
case Some ((guard, names, requirement)) if ! guard() =>
117
120
val replacement = names.collectFirst {
118
121
case name if fallbacks(name)._1() => name
@@ -124,20 +127,20 @@ object SolverFactory {
124
127
}
125
128
replacement
126
129
127
- case Some (_) => name
128
- case None if name .startsWith(" smt-z3:" ) =>
129
- val z3Exec = getZ3Executable(name )
130
+ case Some (_) => noPrefixName
131
+ case None if noPrefixName .startsWith(" smt-z3:" ) =>
132
+ val z3Exec = getZ3Executable(noPrefixName )
130
133
val hasZ3Exec = try {
131
134
new Z3Interpreter (z3Exec, Array (" -in" , " -smt2" ))
132
135
true
133
136
} catch {
134
137
case _ : java.io.IOException => false
135
138
}
136
139
137
- if (hasZ3Exec) name
140
+ if (hasZ3Exec) noPrefixName
138
141
else throw FatalError (" Unknown solver: " + z3Exec)
139
142
140
- case _ => throw FatalError (" Unknown solver: " + name )
143
+ case _ => throw FatalError (" Unknown solver: " + noPrefixName )
141
144
}
142
145
}
143
146
@@ -367,9 +370,13 @@ object SolverFactory {
367
370
}
368
371
}
369
372
370
- private def supportedSolverRaw (s : String ) = solverNames.contains(s) || s.startsWith(" smt-z3:" )
371
373
def supportedSolver (s : String ) =
372
- supportedSolverRaw(s) || (s.startsWith(" no-inc:" ) && supportedSolverRaw(s.drop(7 )))
374
+ solverNames.contains(s) ||
375
+ s.startsWith(" smt-z3:" ) ||
376
+ s.startsWith(" no-inc:smt-z3:" ) ||
377
+ s == " no-inc:smt-z3" ||
378
+ s == " no-inc:smt-cvc4" ||
379
+ s == " no-inc:unrollz3"
373
380
374
381
def getFromSettings (p : Program , ctx : Context )
375
382
(enc : ProgramTransformer {
0 commit comments