Skip to content

Commit a267b44

Browse files
committed
Add function to reinitialise solver
1 parent c0747dd commit a267b44

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

booster/library/Booster/SMT/Runner.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module Booster.SMT.Runner (
1010
SMTEncode (..),
1111
mkContext,
1212
closeContext,
13+
reinitSolver,
1314
runSMT,
1415
declare,
1516
runCmd,
@@ -97,6 +98,16 @@ initSolver = do
9798
handle <- liftIO $ Backend.new config
9899
solver <- liftIO $ Backend.initSolver Backend.Queuing $ Backend.toBackend handle
99100
pure (solver, handle)
101+
102+
-- | Re-initialise the solver, keep other parts of @SMTContext@ intact
103+
reinitSolver :: LoggerMIO io => SMT io ()
104+
reinitSolver = do
105+
ctx <- SMT get
106+
liftIO ctx.solverClose
107+
(newSolver, newHandle) <- initSolver
108+
logMessage ("Solver reinitialised, ready to use" :: Text)
109+
SMT $ put ctx{solver = newSolver, solverClose = Backend.close newHandle}
110+
100111
newtype SMT m a = SMT (StateT SMTContext m a)
101112
deriving newtype (Functor, Applicative, Monad, MonadIO, MonadLogger, MonadLoggerIO, LoggerMIO)
102113

0 commit comments

Comments
 (0)