@@ -41,6 +41,7 @@ import Numeric.Natural
4141import Prettyprinter (comma , hsep , punctuate , (<+>) )
4242import System.Clock (Clock (Monotonic ), diffTimeSpec , getTime , toNanoSecs )
4343
44+ import Booster.CLOptions (RewriteOptions (.. ))
4445import Booster.Definition.Attributes.Base (UniqueId , getUniqueId , uniqueId )
4546import Booster.Definition.Base (KoreDefinition (.. ))
4647import Booster.Definition.Base qualified as Definition (RewriteRule (.. ))
@@ -53,6 +54,7 @@ import Booster.Pattern.Bool (pattern TrueBool)
5354import Booster.Pattern.Match (FailReason (.. ), MatchResult (.. ), MatchType (.. ), matchTerms )
5455import Booster.Pattern.Pretty
5556import Booster.Pattern.Rewrite (
57+ RewriteConfig (.. ),
5658 RewriteFailed (.. ),
5759 RewriteResult (.. ),
5860 RewriteTrace (.. ),
@@ -108,7 +110,7 @@ respond stateVar request =
108110 | isJust req. stepTimeout -> pure $ Left $ RpcError. unsupportedOption (" step-timeout" :: String )
109111 | isJust req. movingAverageStepTimeout ->
110112 pure $ Left $ RpcError. unsupportedOption (" moving-average-step-timeout" :: String )
111- RpcTypes. Execute req -> withModule req. _module $ \ (def, mLlvmLibrary, mSMTOptions) -> Booster.Log. withContext CtxExecute $ do
113+ RpcTypes. Execute req -> withModule req. _module $ \ (def, mLlvmLibrary, mSMTOptions, rewriteOpts ) -> Booster.Log. withContext CtxExecute $ do
112114 start <- liftIO $ getTime Monotonic
113115 -- internalise given constrained term
114116 let internalised = runExcept $ internalisePattern DisallowAlias CheckSubsorts Nothing def req. state. term
@@ -152,8 +154,25 @@ respond stateVar request =
152154 ]
153155
154156 solver <- maybe (SMT. noSolver) (SMT. initSolver def) mSMTOptions
157+
158+ logger <- getLogger
159+ prettyModifiers <- getPrettyModifiers
160+ let rewriteConfig =
161+ RewriteConfig
162+ { definition = def
163+ , llvmApi = mLlvmLibrary
164+ , smtSolver = solver
165+ , varsToAvoid = substVars
166+ , doTracing
167+ , logger
168+ , prettyModifiers
169+ , mbMaxDepth = mbDepth
170+ , mbSimplify = rewriteOpts. interimSimplification
171+ , cutLabels = cutPoints
172+ , terminalLabels = terminals
173+ }
155174 result <-
156- performRewrite doTracing def mLlvmLibrary solver substVars mbDepth cutPoints terminals substPat
175+ performRewrite rewriteConfig substPat
157176 SMT. finaliseSolver solver
158177 stop <- liftIO $ getTime Monotonic
159178 let duration =
@@ -224,7 +243,7 @@ respond stateVar request =
224243 Booster.Log. logMessage $
225244 " Added a new module. Now in scope: " <> Text. intercalate " , " (Map. keys newDefinitions)
226245 pure $ RpcTypes. AddModule $ RpcTypes. AddModuleResult moduleHash
227- RpcTypes. Simplify req -> withModule req. _module $ \ (def, mLlvmLibrary, mSMTOptions) -> Booster.Log. withContext CtxSimplify $ do
246+ RpcTypes. Simplify req -> withModule req. _module $ \ (def, mLlvmLibrary, mSMTOptions, _ ) -> Booster.Log. withContext CtxSimplify $ do
228247 start <- liftIO $ getTime Monotonic
229248 let internalised =
230249 runExcept $ internaliseTermOrPredicate DisallowAlias CheckSubsorts Nothing def req. state. term
@@ -315,11 +334,11 @@ respond stateVar request =
315334 RpcTypes. SimplifyResult {state, logs = mkTraces duration}
316335 pure $ second mkSimplifyResponse result
317336 RpcTypes. GetModel req -> withModule req. _module $ \ case
318- (_, _, Nothing ) -> do
337+ (_, _, Nothing , _ ) -> do
319338 withContext CtxGetModel $
320339 logMessage' (" get-model request, not supported without SMT solver" :: Text )
321340 pure $ Left RpcError. notImplemented
322- (def, _, Just smtOptions) -> do
341+ (def, _, Just smtOptions, _ ) -> do
323342 let internalised =
324343 runExcept $
325344 internaliseTermOrPredicate DisallowAlias CheckSubsorts Nothing def req. state. term
@@ -419,7 +438,7 @@ respond stateVar request =
419438 { satisfiable = RpcTypes. Sat
420439 , substitution
421440 }
422- RpcTypes. Implies req -> withModule req. _module $ \ (def, mLlvmLibrary, mSMTOptions) -> Booster.Log. withContext CtxImplies $ do
441+ RpcTypes. Implies req -> withModule req. _module $ \ (def, mLlvmLibrary, mSMTOptions, _ ) -> Booster.Log. withContext CtxImplies $ do
423442 -- internalise given constrained term
424443 let internalised =
425444 runExcept . internalisePattern DisallowAlias CheckSubsorts Nothing def . fst . extractExistentials
@@ -504,7 +523,7 @@ respond stateVar request =
504523 where
505524 withModule ::
506525 Maybe Text ->
507- ( (KoreDefinition , Maybe LLVM. API , Maybe SMT. SMTOptions ) ->
526+ ( (KoreDefinition , Maybe LLVM. API , Maybe SMT. SMTOptions, RewriteOptions ) ->
508527 m (Either ErrorObj (RpcTypes. API 'RpcTypes.Res ))
509528 ) ->
510529 m (Either ErrorObj (RpcTypes. API 'RpcTypes.Res ))
@@ -513,7 +532,7 @@ respond stateVar request =
513532 let mainName = fromMaybe state. defaultMain mbMainModule
514533 case Map. lookup mainName state. definitions of
515534 Nothing -> pure $ Left $ RpcError. backendError $ RpcError. CouldNotFindModule mainName
516- Just d -> action (d, state. mLlvmLibrary, state. mSMTOptions)
535+ Just d -> action (d, state. mLlvmLibrary, state. mSMTOptions, state . rewriteOptions )
517536
518537 doesNotImply s l r =
519538 pure $
@@ -571,9 +590,11 @@ data ServerState = ServerState
571590 , defaultMain :: Text
572591 -- ^ default main module (initially from command line, could be changed later)
573592 , mLlvmLibrary :: Maybe LLVM. API
574- -- ^ optional LLVM simplification library
593+ -- ^ Read-only: optional LLVM simplification library
575594 , mSMTOptions :: Maybe SMT. SMTOptions
576- -- ^ (optional) SMT solver options
595+ -- ^ Read-only: (optional) SMT solver options
596+ , rewriteOptions :: RewriteOptions
597+ -- ^ Read-only: configuration related to booster rewriting
577598 , addedModules :: Map Text Text
578599 -- ^ map of raw modules added via add-module
579600 }
0 commit comments