Skip to content

Commit 41e378f

Browse files
committed
Check pattern consistency before starting rewriting in "execute"
1 parent 52d6b57 commit 41e378f

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
@@ -147,26 +147,48 @@ respond stateVar request =
147147

148148
solver <- maybe (SMT.noSolver) (SMT.initSolver def) mSMTOptions
149149

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

booster/library/Booster/Pattern/Rewrite.hs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -715,9 +715,10 @@ performRewrite ::
715715
forall io.
716716
LoggerMIO io =>
717717
RewriteConfig ->
718+
SimplifierCache ->
718719
Pattern ->
719720
io (Natural, Seq (RewriteTrace ()), RewriteResult Pattern)
720-
performRewrite rewriteConfig pat = do
721+
performRewrite rewriteConfig initialCache pat = do
721722
(rr, RewriteStepsState{counter, traces}) <-
722723
flip runStateT rewriteStart $ doSteps False pat
723724
pure (counter, traces, rr)
@@ -733,6 +734,14 @@ performRewrite rewriteConfig pat = do
733734
, terminalLabels
734735
} = rewriteConfig
735736

737+
rewriteStart :: RewriteStepsState
738+
rewriteStart =
739+
RewriteStepsState
740+
{ counter = 0
741+
, traces = mempty
742+
, simplifierCache = initialCache
743+
}
744+
736745
logDepth = withContext CtxDepth . logMessage
737746

738747
depthReached n = maybe False (n >=) mbMaxDepth
@@ -930,11 +939,3 @@ data RewriteStepsState = RewriteStepsState
930939
, traces :: !(Seq (RewriteTrace ()))
931940
, simplifierCache :: SimplifierCache
932941
}
933-
934-
rewriteStart :: RewriteStepsState
935-
rewriteStart =
936-
RewriteStepsState
937-
{ counter = 0
938-
, traces = mempty
939-
, simplifierCache = mempty
940-
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ runRewrite t = do
274274
conf <- testConf
275275
(counter, _, res) <-
276276
runNoLoggingT $
277-
performRewrite conf $
277+
performRewrite conf mempty $
278278
Pattern_ t
279279
pure (counter, fmap (.term) res)
280280

@@ -418,7 +418,7 @@ supportsDepthControl =
418418
rewritesToDepth (MaxDepth depth) (Steps n) t t' f = do
419419
conf <- testConf
420420
(counter, _, res) <-
421-
runNoLoggingT $ performRewrite conf{mbMaxDepth = Just depth} $ Pattern_ t
421+
runNoLoggingT $ performRewrite conf{mbMaxDepth = Just depth} mempty $ Pattern_ t
422422
(counter, fmap (.term) res) @?= (n, f t')
423423

424424
supportsCutPoints :: TestTree
@@ -472,7 +472,7 @@ supportsCutPoints =
472472
conf <- testConf
473473
(counter, _, res) <-
474474
runNoLoggingT $
475-
performRewrite conf{cutLabels = [lbl]} $
475+
performRewrite conf{cutLabels = [lbl]} mempty $
476476
Pattern_ t
477477
(counter, fmap (.term) res) @?= (n, f t')
478478

@@ -504,5 +504,5 @@ supportsTerminalRules =
504504
rewritesToTerminal lbl (Steps n) t t' f = do
505505
conf <- testConf
506506
(counter, _, res) <-
507-
runNoLoggingT $ performRewrite conf{terminalLabels = [lbl]} $ Pattern_ t
507+
runNoLoggingT $ performRewrite conf{terminalLabels = [lbl]} mempty $ Pattern_ t
508508
(counter, fmap (.term) res) @?= (n, f t')

0 commit comments

Comments
 (0)