11
10
import Agda.Syntax.Abstract.Name
12
11
import qualified Agda.Syntax.Concrete.Name as C
13
12
import Agda.TypeChecking.Monad.Base
13
import Agda.Utils.Lens
14
14
import Agda.Utils.Monad
15
15
import Agda.Utils.Time
16
16
import Agda.Utils.Hash
18
18
addImport :: ModuleName -> TCM ()
20
modify $ \s -> s { stImportedModules = Set.insert m $ stImportedModules s }
20
stImportedModules %= Set.insert m
22
22
addImportCycleCheck :: C.TopLevelModuleName -> TCM a -> TCM a
23
23
addImportCycleCheck m =
24
24
local $ \e -> e { envImportPath = m : envImportPath e }
26
26
getImports :: TCM (Set ModuleName)
27
getImports = gets stImportedModules
27
getImports = use stImportedModules
29
29
isImported :: ModuleName -> TCM Bool
30
30
isImported m = Set.member m <$> getImports
33
33
getImportPath = asks envImportPath
35
35
visitModule :: ModuleInfo -> TCM ()
36
visitModule mi = modify $ \s ->
37
s { stVisitedModules =
38
Map.insert (toTopLevelModuleName $ iModuleName $ miInterface mi)
38
Map.insert (toTopLevelModuleName $ iModuleName $ miInterface mi) mi
42
40
setVisitedModules :: VisitedModules -> TCM ()
43
setVisitedModules ms = modify $ \s -> s { stVisitedModules = ms }
41
setVisitedModules ms = stVisitedModules .= ms
45
43
getVisitedModules :: TCM VisitedModules
46
getVisitedModules = gets stVisitedModules
44
getVisitedModules = use stVisitedModules
48
46
isVisited :: C.TopLevelModuleName -> TCM Bool
49
isVisited x = gets $ Map.member x . stVisitedModules
47
isVisited x = Map.member x <$> use stVisitedModules
51
49
getVisitedModule :: C.TopLevelModuleName
52
50
-> TCM (Maybe ModuleInfo)
53
getVisitedModule x = gets $ Map.lookup x . stVisitedModules
51
getVisitedModule x = Map.lookup x <$> use stVisitedModules
55
53
getDecodedModules :: TCM DecodedModules
56
getDecodedModules = stDecodedModules . stPersistent <$> get
54
getDecodedModules = stDecodedModules . stPersistentState <$> get
58
56
setDecodedModules :: DecodedModules -> TCM ()
59
57
setDecodedModules ms = modify $ \s ->
60
s { stPersistent = (stPersistent s) { stDecodedModules = ms } }
58
s { stPersistentState = (stPersistentState s) { stDecodedModules = ms } }
62
60
getDecodedModule :: C.TopLevelModuleName -> TCM (Maybe Interface)
63
getDecodedModule x = Map.lookup x . stDecodedModules . stPersistent <$> get
61
getDecodedModule x = Map.lookup x . stDecodedModules . stPersistentState <$> get
65
63
storeDecodedModule :: Interface -> TCM ()
66
64
storeDecodedModule i = modify $ \s ->
68
(stPersistent s) { stDecodedModules =
65
s { stPersistentState =
66
(stPersistentState s) { stDecodedModules =
69
67
Map.insert (toTopLevelModuleName $ iModuleName i) i $
70
(stDecodedModules $ stPersistent s)
68
(stDecodedModules $ stPersistentState s)
74
72
dropDecodedModule :: C.TopLevelModuleName -> TCM ()
75
73
dropDecodedModule x = modify $ \s ->
76
s { stPersistent = (stPersistent s) { stDecodedModules =
77
Map.delete x $ stDecodedModules $ stPersistent s
74
s { stPersistentState =
75
(stPersistentState s) { stDecodedModules =
76
Map.delete x $ stDecodedModules $ stPersistentState s
81
80
withImportPath :: [C.TopLevelModuleName] -> TCM a -> TCM a