@@ -18,30 +18,36 @@ trait NonIncrementalSolver extends AbstractSolver { self =>
18
18
type Model = self.Model
19
19
}
20
20
21
- val assertions : IncrementalSet [Trees ] = new IncrementalSet [Trees ]
21
+ val assertions : IncrementalSeq [Trees ] = new IncrementalSeq [Trees ]
22
22
23
- val allSolvers : ArrayBuffer [AbstractSolver ] = ArrayBuffer ()
23
+ var currentSolver : Option [AbstractSolver ] = None
24
24
25
25
def assertCnstr (expression : Trees ): Unit = assertions += expression
26
26
def reset (): Unit = assertions.clear()
27
- def free (): Unit = for (solver <- allSolvers ) solver.free()
28
- def interrupt (): Unit = for (solver <- allSolvers ) solver.interrupt()
27
+ def free (): Unit = for (solver <- currentSolver ) solver.free()
28
+ def interrupt (): Unit = for (solver <- currentSolver ) solver.interrupt()
29
29
30
30
override def check (config : CheckConfiguration ): config.Response [Model , Assumptions ] = {
31
31
val newSolver = underlying()
32
- allSolvers.append (newSolver)
32
+ currentSolver = Some (newSolver)
33
33
for (expression <- assertions)
34
34
newSolver.assertCnstr(expression)
35
- newSolver.check(config)
35
+ val res = newSolver.check(config)
36
+ newSolver.free()
37
+ currentSolver = None
38
+ res
36
39
}
37
40
38
41
override def checkAssumptions (config : Configuration )
39
42
(assumptions : Set [Trees ]): config.Response [Model , Assumptions ] = {
40
43
val newSolver = underlying()
41
- allSolvers.append (newSolver)
44
+ currentSolver = Some (newSolver)
42
45
for (expression <- assertions)
43
46
newSolver.assertCnstr(expression)
44
- newSolver.checkAssumptions(config)(assumptions)
47
+ val res = newSolver.checkAssumptions(config)(assumptions)
48
+ newSolver.free()
49
+ currentSolver = None
50
+ res
45
51
}
46
52
47
53
def push (): Unit = assertions.push()
0 commit comments