Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions glean/db/Glean/Query/Vars.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import Data.IntSet (IntSet)
import qualified Data.IntMap as IntMap
import Data.IntMap (IntMap)
import Data.List.NonEmpty (NonEmpty)
import Data.Maybe

import Glean.Display
import Glean.Query.Codegen.Types
Expand Down Expand Up @@ -185,29 +186,28 @@ reWildGenerator used gen = case gen of
PrimCall op args ty ->
PrimCall op (map (reWild used) args) ty

reWildStatement :: VarMap -> CgStatement -> CgStatement
reWildStatement :: VarMap -> CgStatement -> Maybe CgStatement
reWildStatement used (CgStatement lhs rhs) =
CgStatement (reWild used lhs) (reWildGenerator used rhs)
reWildStatement used s@(CgAllStatement (Var ty n x) expr stmts) =
Just $ CgStatement (reWild used lhs) (reWildGenerator used rhs)
reWildStatement used (CgAllStatement (Var ty n x) expr stmts) =
case IntMap.lookup n used of
Nothing -> error $
"reWildStatement: var " <> show n <>
" not in scope in " <> show (displayVerbose s) <>
"\nVarMap: " <> show used
Nothing ->
-- the variable isn't used, so the statement has no effect
Nothing
Just new ->
CgAllStatement
Just $ CgAllStatement
(Var ty new x) (reWild used expr)
(map (reWildStatement used) stmts)
(mapMaybe (reWildStatement used) stmts)
reWildStatement used (CgNegation stmts) =
CgNegation (map (reWildStatement used) stmts)
Just $ CgNegation (mapMaybe (reWildStatement used) stmts)
reWildStatement used (CgDisjunction stmtss) =
CgDisjunction (map (map (reWildStatement used)) stmtss)
Just $ CgDisjunction (map (mapMaybe (reWildStatement used)) stmtss)
reWildStatement used (CgConditional cond then_ else_) =
CgConditional
(map (reWildStatement used) cond)
(map (reWildStatement used) then_)
(map (reWildStatement used) else_)
Just $ CgConditional
(mapMaybe (reWildStatement used) cond)
(mapMaybe (reWildStatement used) then_)
(mapMaybe (reWildStatement used) else_)

reWildQuery :: VarMap -> CgQuery -> CgQuery
reWildQuery used (CgQuery head stmts) =
CgQuery (reWild used head) (map (reWildStatement used) stmts)
CgQuery (reWild used head) (mapMaybe (reWildStatement used) stmts)
4 changes: 4 additions & 0 deletions glean/test/tests/Angle/SetTest.hs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@ setSemanticsTest dbTestCase = TestList
[set] <- runQuery_ env repo $ angleData @(Set Glean.Test.Predicate)
[s| all (glean.test.Predicate _) |]
assertEqual "angle - set matching" 4 (size set)
, TestLabel "unused all" $ dbTestCase $ \env repo -> do
r <- runQuery_ env repo $ angleData @Nat
[s| X where _ = all (X = 1); X = 0 |]
assertEqual "unused all" r [Nat 0]
]

setLimitTest :: Test
Expand Down
Loading