Skip to content

Commit 711637d

Browse files
committed
Introduce RewriteBranchNextState
1 parent 920ad62 commit 711637d

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

booster/library/Booster/JsonRpc.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import Booster.Pattern.Base qualified as Pattern
4949
import Booster.Pattern.Implies (runImplies)
5050
import Booster.Pattern.Pretty
5151
import Booster.Pattern.Rewrite (
52+
RewriteBranchNextState (..),
5253
RewriteConfig (..),
5354
RewriteFailed (..),
5455
RewriteResult (..),
@@ -485,7 +486,7 @@ execResponse req (d, traces, rr) unsupported = case rr of
485486
, nextStates =
486487
Just
487488
$ map
488-
( \(_, muid, p', mrulePred, ruleSubst) -> toExecState p' unsupported (Just muid) mrulePred (Just ruleSubst)
489+
( \(RewriteBranchNextState{ruleUniqueId, rewrittenPat, mRulePredicate, ruleSubstitution}) -> toExecState rewrittenPat unsupported (Just ruleUniqueId) mRulePredicate (Just ruleSubstitution)
489490
)
490491
$ toList nexts
491492
, rule = Nothing

booster/library/Booster/Pattern/Rewrite.hs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module Booster.Pattern.Rewrite (
1313
RewriteConfig (..),
1414
RewriteFailed (..),
1515
RewriteResult (..),
16+
RewriteBranchNextState (..),
1617
RewriteTrace (..),
1718
pattern CollectRewriteTraces,
1819
pattern NoCollectRewriteTraces,
@@ -247,7 +248,14 @@ rewriteStep cutLabels terminalLabels pat = do
247248
RewriteBranch base $
248249
NE.fromList $
249250
map
250-
( \(rule, RewriteRuleAppliedData{rewritten, rulePredicate, ruleSubstitution}) -> (ruleLabelOrLocT rule, uniqueId rule, rewritten, rulePredicate, ruleSubstitution)
251+
( \(rule, RewriteRuleAppliedData{rewritten, rulePredicate, ruleSubstitution}) ->
252+
RewriteBranchNextState
253+
{ ruleLabel = ruleLabelOrLocT rule
254+
, ruleUniqueId = uniqueId rule
255+
, rewrittenPat = rewritten
256+
, mRulePredicate = rulePredicate
257+
, ruleSubstitution
258+
}
251259
)
252260
leafs
253261

@@ -789,10 +797,20 @@ ruleLabelOrLoc rule =
789797
fromMaybe "unknown rule" $
790798
fmap pretty rule.attributes.ruleLabel <|> fmap pretty rule.attributes.location
791799

800+
data RewriteBranchNextState pat = RewriteBranchNextState
801+
{ ruleLabel :: Text
802+
, ruleUniqueId :: UniqueId
803+
, rewrittenPat :: pat
804+
, mRulePredicate :: Maybe Predicate
805+
, ruleSubstitution :: Substitution
806+
}
807+
deriving stock (Eq, Show)
808+
deriving (Functor, Foldable, Traversable)
809+
792810
-- | Different rewrite results (returned from RPC execute endpoint)
793811
data RewriteResult pat
794812
= -- | branch point
795-
RewriteBranch pat (NonEmpty (Text, UniqueId, pat, Maybe Predicate, Substitution))
813+
RewriteBranch pat (NonEmpty (RewriteBranchNextState pat))
796814
| -- | no rules could be applied, config is stuck
797815
RewriteStuck pat
798816
| -- | cut point rule, return current (lhs) and single next state
@@ -1021,14 +1039,18 @@ performRewrite rewriteConfig pat = do
10211039
Nothing -> pure $ RewriteTrivial orig
10221040
Just p' -> do
10231041
-- simplify the 3rd component, i.e. the pattern
1024-
let simplifyP3rd (a, b, c, e, f) =
1025-
fmap (a,b,,e,f) <$> simplifyP c
1026-
nexts' <- catMaybes <$> mapM simplifyP3rd (toList nexts)
1042+
let simplifyRewritten pattr@RewriteBranchNextState{rewrittenPat} = do
1043+
( fmap @Maybe
1044+
( \rewrittenSimplified -> (pattr{rewrittenPat = rewrittenSimplified})
1045+
)
1046+
)
1047+
<$> simplifyP rewrittenPat
1048+
nexts' <- catMaybes <$> mapM simplifyRewritten (toList nexts)
10271049
pure $ case nexts' of
10281050
-- The `[]` case should be `Stuck` not `Trivial`, because `RewriteTrivial p'`
10291051
-- means the pattern `p'` is bottom, but we know that is not the case here.
10301052
[] -> RewriteStuck p'
1031-
[(lbl, uId, n, _rp, _rs)] -> RewriteFinished (Just lbl) (Just uId) n
1053+
[RewriteBranchNextState{ruleLabel, ruleUniqueId, rewrittenPat}] -> RewriteFinished (Just ruleLabel) (Just ruleUniqueId) rewrittenPat
10321054
ns -> RewriteBranch p' $ NE.fromList ns
10331055
r@RewriteStuck{} -> pure r
10341056
r@RewriteTrivial{} -> pure r
@@ -1098,7 +1120,9 @@ performRewrite rewriteConfig pat = do
10981120
incrementCounter
10991121
doSteps False single
11001122
RewriteBranch pat'' branches -> withPatternContext pat' $ do
1101-
emitRewriteTrace $ RewriteBranchingStep pat'' $ fmap (\(lbl, uid, _, _, _) -> (lbl, uid)) branches
1123+
emitRewriteTrace $
1124+
RewriteBranchingStep pat'' $
1125+
fmap (\RewriteBranchNextState{ruleLabel, ruleUniqueId} -> (ruleLabel, ruleUniqueId)) branches
11021126
pure simplified
11031127
_other -> withPatternContext pat' $ error "simplifyResult: Unexpected return value"
11041128
Right (cutPoint@(RewriteCutPoint lbl _ _ _), _) -> withPatternContext pat' $ do

0 commit comments

Comments
 (0)