on master help sign in
Add some comments.
3e48badMatus Tejiscak
src/Idris/Erasure.hs+8−2
@@ -58,9 +58,12 @@ type Vars = Map Name Var
58type PatVar = Ctors -> Var
58type PatVar = Ctors -> Var
59type PatVars = Map Name PatVar
59type PatVars = Map Name PatVar
60
60
61−findUsed :: Context -> Ctxt CGInfo -> [Name] -> DepMap
61+buildDepMap :: Context -> Ctxt CGInfo -> [Name] -> DepMap
62−findUsed ctx cg ns = dfs M.empty ns
62+buildDepMap ctx cg ns = dfs M.empty ns
63 where
63 where
64+ -- perform depth-first search
65+ -- to discover all the names used in the program
66+ -- and call getDeps for every name
64 dfs :: DepMap -> [Name] -> DepMap
67 dfs :: DepMap -> [Name] -> DepMap
65 dfs dmap [] = dmap
68 dfs dmap [] = dmap
66 dfs dmap (n : ns)
69 dfs dmap (n : ns)
@@ -71,12 +74,15 @@ findUsed ctx cg ns = dfs M.empty ns
71 depn = S.delete n (depNames deps)
74 depn = S.delete n (depNames deps)
72 deps = getDeps n
75 deps = getDeps n
73
76
77+ -- extract all names that a function depends on
78+ -- from the Deps of the function
74 depNames :: Deps -> Set Name
79 depNames :: Deps -> Set Name
75 depNames = S.unions . map (S.unions . map f . S.toList) . IM.elems
80 depNames = S.unions . map (S.unions . map f . S.toList) . IM.elems
76 where
81 where
77 f :: (Ctors, Cond) -> Set Name
82 f :: (Ctors, Cond) -> Set Name
78 f (ctors, cond) = S.map fst cond -- let's ignore ctors for now
83 f (ctors, cond) = S.map fst cond -- let's ignore ctors for now
79
84
85+ -- get Deps for a Name
80 getDeps :: Name -> Deps
86 getDeps :: Name -> Deps
81 getDeps n = case lookupDef n ctx of
87 getDeps n = case lookupDef n ctx of
82 [def] -> getDepsDef def
88 [def] -> getDepsDef def