Skip to content

Commit

Permalink
Introduce RewriteBranchNextState
Browse files Browse the repository at this point in the history
  • Loading branch information
geo2a committed Oct 25, 2024
1 parent 920ad62 commit 711637d
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 8 deletions.
3 changes: 2 additions & 1 deletion booster/library/Booster/JsonRpc.hs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import Booster.Pattern.Base qualified as Pattern
import Booster.Pattern.Implies (runImplies)
import Booster.Pattern.Pretty
import Booster.Pattern.Rewrite (
RewriteBranchNextState (..),
RewriteConfig (..),
RewriteFailed (..),
RewriteResult (..),
Expand Down Expand Up @@ -485,7 +486,7 @@ execResponse req (d, traces, rr) unsupported = case rr of
, nextStates =
Just
$ map
( \(_, muid, p', mrulePred, ruleSubst) -> toExecState p' unsupported (Just muid) mrulePred (Just ruleSubst)
( \(RewriteBranchNextState{ruleUniqueId, rewrittenPat, mRulePredicate, ruleSubstitution}) -> toExecState rewrittenPat unsupported (Just ruleUniqueId) mRulePredicate (Just ruleSubstitution)
)
$ toList nexts
, rule = Nothing
Expand Down
38 changes: 31 additions & 7 deletions booster/library/Booster/Pattern/Rewrite.hs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ module Booster.Pattern.Rewrite (
RewriteConfig (..),
RewriteFailed (..),
RewriteResult (..),
RewriteBranchNextState (..),
RewriteTrace (..),
pattern CollectRewriteTraces,
pattern NoCollectRewriteTraces,
Expand Down Expand Up @@ -247,7 +248,14 @@ rewriteStep cutLabels terminalLabels pat = do
RewriteBranch base $
NE.fromList $
map
( \(rule, RewriteRuleAppliedData{rewritten, rulePredicate, ruleSubstitution}) -> (ruleLabelOrLocT rule, uniqueId rule, rewritten, rulePredicate, ruleSubstitution)
( \(rule, RewriteRuleAppliedData{rewritten, rulePredicate, ruleSubstitution}) ->
RewriteBranchNextState
{ ruleLabel = ruleLabelOrLocT rule
, ruleUniqueId = uniqueId rule
, rewrittenPat = rewritten
, mRulePredicate = rulePredicate
, ruleSubstitution
}
)
leafs

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

data RewriteBranchNextState pat = RewriteBranchNextState
{ ruleLabel :: Text
, ruleUniqueId :: UniqueId
, rewrittenPat :: pat
, mRulePredicate :: Maybe Predicate
, ruleSubstitution :: Substitution
}
deriving stock (Eq, Show)
deriving (Functor, Foldable, Traversable)

-- | Different rewrite results (returned from RPC execute endpoint)
data RewriteResult pat
= -- | branch point
RewriteBranch pat (NonEmpty (Text, UniqueId, pat, Maybe Predicate, Substitution))
RewriteBranch pat (NonEmpty (RewriteBranchNextState pat))
| -- | no rules could be applied, config is stuck
RewriteStuck pat
| -- | cut point rule, return current (lhs) and single next state
Expand Down Expand Up @@ -1021,14 +1039,18 @@ performRewrite rewriteConfig pat = do
Nothing -> pure $ RewriteTrivial orig
Just p' -> do
-- simplify the 3rd component, i.e. the pattern
let simplifyP3rd (a, b, c, e, f) =
fmap (a,b,,e,f) <$> simplifyP c
nexts' <- catMaybes <$> mapM simplifyP3rd (toList nexts)
let simplifyRewritten pattr@RewriteBranchNextState{rewrittenPat} = do
( fmap @Maybe
( \rewrittenSimplified -> (pattr{rewrittenPat = rewrittenSimplified})
)
)
<$> simplifyP rewrittenPat
nexts' <- catMaybes <$> mapM simplifyRewritten (toList nexts)
pure $ case nexts' of
-- The `[]` case should be `Stuck` not `Trivial`, because `RewriteTrivial p'`
-- means the pattern `p'` is bottom, but we know that is not the case here.
[] -> RewriteStuck p'
[(lbl, uId, n, _rp, _rs)] -> RewriteFinished (Just lbl) (Just uId) n
[RewriteBranchNextState{ruleLabel, ruleUniqueId, rewrittenPat}] -> RewriteFinished (Just ruleLabel) (Just ruleUniqueId) rewrittenPat
ns -> RewriteBranch p' $ NE.fromList ns
r@RewriteStuck{} -> pure r
r@RewriteTrivial{} -> pure r
Expand Down Expand Up @@ -1098,7 +1120,9 @@ performRewrite rewriteConfig pat = do
incrementCounter
doSteps False single
RewriteBranch pat'' branches -> withPatternContext pat' $ do
emitRewriteTrace $ RewriteBranchingStep pat'' $ fmap (\(lbl, uid, _, _, _) -> (lbl, uid)) branches
emitRewriteTrace $
RewriteBranchingStep pat'' $
fmap (\RewriteBranchNextState{ruleLabel, ruleUniqueId} -> (ruleLabel, ruleUniqueId)) branches
pure simplified
_other -> withPatternContext pat' $ error "simplifyResult: Unexpected return value"
Right (cutPoint@(RewriteCutPoint lbl _ _ _), _) -> withPatternContext pat' $ do
Expand Down

0 comments on commit 711637d

Please sign in to comment.