Skip to content

Commit 0d1051d

Browse files
author
brianhuffman
authored
Merge pull request #152 from GaloisInc/issue151
Adapt Conversion library to use `scGlobalDef` when building terms.
2 parents f6ebafd + 85252a8 commit 0d1051d

File tree

3 files changed

+14
-11
lines changed

3 files changed

+14
-11
lines changed

saw-core/src/Verifier/SAW/Conversion.hs

+10-7
Original file line numberDiff line numberDiff line change
@@ -352,13 +352,16 @@ instance Matchable (Prim.Vec Term Term) where
352352
-- Term builders
353353

354354
newtype TermBuilder v =
355-
TermBuilder { runTermBuilder :: forall m. Monad m => (TermF Term -> m Term) -> m v }
355+
TermBuilder
356+
{ runTermBuilder ::
357+
forall m. Monad m => (Ident -> m Term) -> (TermF Term -> m Term) -> m v
358+
}
356359

357360
instance Monad TermBuilder where
358-
m >>= h = TermBuilder $ \mk -> do
359-
r <- runTermBuilder m mk
360-
runTermBuilder (h r) mk
361-
return v = TermBuilder $ \_ -> return v
361+
m >>= h = TermBuilder $ \mg mk -> do
362+
r <- runTermBuilder m mg mk
363+
runTermBuilder (h r) mg mk
364+
return v = TermBuilder $ \_ _ -> return v
362365

363366
instance Functor TermBuilder where
364367
fmap = liftM
@@ -368,10 +371,10 @@ instance Applicative TermBuilder where
368371
(<*>) = ap
369372

370373
mkTermF :: TermF Term -> TermBuilder Term
371-
mkTermF tf = TermBuilder (\mk -> mk tf)
374+
mkTermF tf = TermBuilder (\_ mk -> mk tf)
372375

373376
mkGlobalDef :: Ident -> TermBuilder Term
374-
mkGlobalDef i = mkTermF (FTermF (GlobalDef i))
377+
mkGlobalDef i = TermBuilder (\mg _ -> mg i)
375378

376379
infixl 9 `mkApp`
377380
infixl 9 `pureApp`

saw-core/src/Verifier/SAW/Rewriter.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ rewriteSharedTerm sc ss t0 =
572572
-- print (Net.toPat conv)
573573
case runConversion conv t of
574574
Nothing -> apply rules t
575-
Just tb -> rewriteAll =<< runTermBuilder tb (scTermF sc)
575+
Just tb -> rewriteAll =<< runTermBuilder tb (scGlobalDef sc) (scTermF sc)
576576

577577
-- | Type-safe rewriter for shared terms
578578
rewriteSharedTermTypeSafe
@@ -644,7 +644,7 @@ rewriteSharedTermTypeSafe sc ss t0 =
644644
apply (Right conv : rules) t =
645645
case runConversion conv t of
646646
Nothing -> apply rules t
647-
Just tb -> rewriteAll =<< runTermBuilder tb (scTermF sc)
647+
Just tb -> rewriteAll =<< runTermBuilder tb (scGlobalDef sc) (scTermF sc)
648648

649649
-- | Generate a new SharedContext that normalizes terms as it builds them.
650650
rewritingSharedContext :: SharedContext -> Simpset -> SharedContext
@@ -677,7 +677,7 @@ rewritingSharedContext sc ss = sc'
677677
apply (Right conv : rules) t =
678678
case runConversion conv t of
679679
Nothing -> apply rules t
680-
Just tb -> runTermBuilder tb (scTermF sc')
680+
Just tb -> runTermBuilder tb (scGlobalDef sc) (scTermF sc')
681681

682682

683683
-- FIXME: is there some way to have sensable term replacement in the presence of loose variables

saw-core/tests/src/Tests/Rewriter.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import Test.Tasty
2222
import Test.Tasty.HUnit
2323

2424
scMkTerm :: SharedContext -> TermBuilder Term -> IO Term
25-
scMkTerm sc t = runTermBuilder t (scTermF sc)
25+
scMkTerm sc t = runTermBuilder t (scGlobalDef sc) (scTermF sc)
2626

2727
rewriter_tests :: [TestTree]
2828
rewriter_tests =

0 commit comments

Comments
 (0)