Skip to content

Commit 2025987

Browse files
committed
Check pattern consistency before starting rewriting in "execute"
1 parent 8eeb9ce commit 2025987

File tree

3 files changed

+56
-33
lines changed

3 files changed

+56
-33
lines changed

booster/library/Booster/JsonRpc.hs

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -150,26 +150,48 @@ respond stateVar request =
150150

151151
solver <- maybe (SMT.noSolver) (SMT.initSolver def) mSMTOptions
152152

153-
logger <- getLogger
154-
prettyModifiers <- getPrettyModifiers
155-
let rewriteConfig =
156-
RewriteConfig
157-
{ definition = def
158-
, llvmApi = mLlvmLibrary
159-
, smtSolver = solver
160-
, varsToAvoid = substVars
161-
, doTracing
162-
, logger
163-
, prettyModifiers
164-
, mbMaxDepth = mbDepth
165-
, mbSimplify = rewriteOpts.interimSimplification
166-
, cutLabels = cutPoints
167-
, terminalLabels = terminals
168-
}
169-
result <-
170-
performRewrite rewriteConfig substPat
171-
SMT.finaliseSolver solver
172-
pure $ execResponse req result substitution unsupported
153+
-- check input pattern's consistency before starting rewriting
154+
evaluatedInitialPattern <-
155+
ApplyEquations.evaluatePattern
156+
def
157+
mLlvmLibrary
158+
solver
159+
mempty
160+
substPat
161+
162+
case evaluatedInitialPattern of
163+
(Left ApplyEquations.SideConditionFalse{}, _) -> do
164+
-- input pattern's constraints are Bottom, return Vacuous
165+
pure $
166+
execResponse
167+
req
168+
(0, mempty, RewriteTrivial substPat)
169+
substitution
170+
unsupported
171+
(Left other, _) ->
172+
pure . Left . RpcError.backendError $ RpcError.Aborted (Text.pack . constructorName $ other)
173+
(Right newPattern, simplifierCache) -> do
174+
logger <- getLogger
175+
prettyModifiers <- getPrettyModifiers
176+
let rewriteConfig =
177+
RewriteConfig
178+
{ definition = def
179+
, llvmApi = mLlvmLibrary
180+
, smtSolver = solver
181+
, varsToAvoid = substVars
182+
, doTracing
183+
, logger
184+
, prettyModifiers
185+
, mbMaxDepth = mbDepth
186+
, mbSimplify = rewriteOpts.interimSimplification
187+
, cutLabels = cutPoints
188+
, terminalLabels = terminals
189+
}
190+
191+
result <-
192+
performRewrite rewriteConfig simplifierCache newPattern
193+
SMT.finaliseSolver solver
194+
pure $ execResponse req result substitution unsupported
173195
RpcTypes.AddModule RpcTypes.AddModuleRequest{_module, nameAsId = nameAsId'} -> Booster.Log.withContext CtxAddModule $ runExceptT $ do
174196
-- block other request executions while modifying the server state
175197
state <- liftIO $ takeMVar stateVar

booster/library/Booster/Pattern/Rewrite.hs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -692,9 +692,10 @@ performRewrite ::
692692
forall io.
693693
LoggerMIO io =>
694694
RewriteConfig ->
695+
SimplifierCache ->
695696
Pattern ->
696697
io (Natural, Seq (RewriteTrace ()), RewriteResult Pattern)
697-
performRewrite rewriteConfig pat = do
698+
performRewrite rewriteConfig initialCache pat = do
698699
(rr, RewriteStepsState{counter, traces}) <-
699700
flip runStateT rewriteStart $ doSteps False pat
700701
pure (counter, traces, rr)
@@ -710,6 +711,14 @@ performRewrite rewriteConfig pat = do
710711
, terminalLabels
711712
} = rewriteConfig
712713

714+
rewriteStart :: RewriteStepsState
715+
rewriteStart =
716+
RewriteStepsState
717+
{ counter = 0
718+
, traces = mempty
719+
, simplifierCache = initialCache
720+
}
721+
713722
logDepth = withContext CtxDepth . logMessage
714723

715724
depthReached n = maybe False (n >=) mbMaxDepth
@@ -907,11 +916,3 @@ data RewriteStepsState = RewriteStepsState
907916
, traces :: !(Seq (RewriteTrace ()))
908917
, simplifierCache :: SimplifierCache
909918
}
910-
911-
rewriteStart :: RewriteStepsState
912-
rewriteStart =
913-
RewriteStepsState
914-
{ counter = 0
915-
, traces = mempty
916-
, simplifierCache = mempty
917-
}

booster/unit-tests/Test/Booster/Pattern/Rewrite.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ runRewrite t = do
294294
conf <- testConf
295295
(counter, _, res) <-
296296
runNoLoggingT $
297-
performRewrite conf $
297+
performRewrite conf mempty $
298298
Pattern_ t
299299
pure (counter, fmap (.term) res)
300300

@@ -438,7 +438,7 @@ supportsDepthControl =
438438
rewritesToDepth (MaxDepth depth) (Steps n) t t' f = do
439439
conf <- testConf
440440
(counter, _, res) <-
441-
runNoLoggingT $ performRewrite conf{mbMaxDepth = Just depth} $ Pattern_ t
441+
runNoLoggingT $ performRewrite conf{mbMaxDepth = Just depth} mempty $ Pattern_ t
442442
(counter, fmap (.term) res) @?= (n, f t')
443443

444444
supportsCutPoints :: TestTree
@@ -492,7 +492,7 @@ supportsCutPoints =
492492
conf <- testConf
493493
(counter, _, res) <-
494494
runNoLoggingT $
495-
performRewrite conf{cutLabels = [lbl]} $
495+
performRewrite conf{cutLabels = [lbl]} mempty $
496496
Pattern_ t
497497
(counter, fmap (.term) res) @?= (n, f t')
498498

@@ -524,5 +524,5 @@ supportsTerminalRules =
524524
rewritesToTerminal lbl (Steps n) t t' f = do
525525
conf <- testConf
526526
(counter, _, res) <-
527-
runNoLoggingT $ performRewrite conf{terminalLabels = [lbl]} $ Pattern_ t
527+
runNoLoggingT $ performRewrite conf{terminalLabels = [lbl]} mempty $ Pattern_ t
528528
(counter, fmap (.term) res) @?= (n, f t')

0 commit comments

Comments
 (0)