@@ -90,44 +90,24 @@ 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 (name : String , force : Boolean = false )
93
+ def getFromName (noIncName : String , force : Boolean = false )
94
94
(p : Program , ctx : Context )
95
95
(enc : ProgramTransformer {
96
96
val sourceProgram : p.type
97
97
val targetProgram : Program { val trees : inox.trees.type }
98
98
})(implicit sem : p.Semantics ): SolverFactory { val program : p.type ; type S <: TimeoutSolver { val program : p.type } } = {
99
99
100
- val nonIncremental = ctx.options.findOptionOrDefault(optNonIncremental)
101
- def nonIncrementalWrap [T , M ](targetProgram : Program )(
102
- nme : String ,
103
- targetSem : targetProgram.Semantics ,
104
- underlyingSolver : () => AbstractSolver {
105
- val program : targetProgram.type
106
- type Trees = T
107
- type Model = M
108
- }):
109
- AbstractSolver {
110
- val program : targetProgram.type
111
- type Trees = T
112
- type Model = M
113
- } = {
114
-
115
- if (nonIncremental) {
116
- new {
117
- val program : targetProgram.type = targetProgram
118
- val context = ctx
119
- } with NonIncrementalSolver {
120
- type Trees = T
121
- type Model = M
122
- val semantics : targetProgram.Semantics = targetSem
123
- def name = s " no-inc: $nme"
100
+ val nonIncremental = noIncName.startsWith(" no-inc:" )
101
+ val name = if (nonIncremental) noIncName.drop(7 ) else noIncName
124
102
125
- def underlying () = underlyingSolver()
126
- }
127
- } else {
128
- underlyingSolver()
129
- }
130
- }
103
+ if (
104
+ nonIncremental &&
105
+ name != " smt-cvc4" &&
106
+ name != " unrollz3" &&
107
+ name != " smt-z3" &&
108
+ ! name.startsWith(" smt-z3:" )
109
+ )
110
+ throw FatalError (s " Non incremental mode is not available for solver $name" )
131
111
132
112
val finalName = if (force) {
133
113
name
@@ -161,14 +141,36 @@ object SolverFactory {
161
141
}
162
142
}
163
143
164
- if (
165
- nonIncremental &&
166
- finalName != " smt-cvc4" &&
167
- finalName != " unrollz3" &&
168
- finalName != " smt-z3" &&
169
- ! finalName.startsWith(" smt-z3:" )
170
- )
171
- throw FatalError (s " Option --no-incremental is not compatible with solver $finalName" )
144
+ def nonIncrementalWrap [T , M ](targetProgram : Program )(
145
+ nme : String ,
146
+ targetSem : targetProgram.Semantics ,
147
+ underlyingSolver : () => AbstractSolver {
148
+ val program : targetProgram.type
149
+ type Trees = T
150
+ type Model = M
151
+ }): AbstractSolver {
152
+ val program : targetProgram.type
153
+ type Trees = T
154
+ type Model = M
155
+ } = {
156
+
157
+ if (nonIncremental) {
158
+ new {
159
+ val program : targetProgram.type = targetProgram
160
+ val context = ctx
161
+ } with NonIncrementalSolver {
162
+ type Trees = T
163
+ type Model = M
164
+ val semantics : targetProgram.Semantics = targetSem
165
+ def name = s " no-inc: $nme"
166
+
167
+ def underlying () = underlyingSolver()
168
+ }
169
+ } else {
170
+ underlyingSolver()
171
+ }
172
+ }
173
+
172
174
173
175
finalName match {
174
176
case " nativez3" => create(p)(finalName, {
@@ -365,7 +367,9 @@ object SolverFactory {
365
367
}
366
368
}
367
369
368
- def supportedSolver (s : String ) = solverNames.contains(s) || s.startsWith(" smt-z3:" )
370
+ private def supportedSolverRaw (s : String ) = solverNames.contains(s) || s.startsWith(" smt-z3:" )
371
+ def supportedSolver (s : String ) =
372
+ supportedSolverRaw(s) || (s.startsWith(" no-inc:" ) && supportedSolverRaw(s.drop(7 )))
369
373
370
374
def getFromSettings (p : Program , ctx : Context )
371
375
(enc : ProgramTransformer {
0 commit comments