@@ -68,6 +68,11 @@ data CompileTimeInfo = CompileTimeInfo {
68
68
, compileTimeInfoDirectDependencies :: [FilePath ]
69
69
}
70
70
71
+ data AvailableModule = AvailableModule {
72
+ availableModuleName :: String
73
+ , availableModuleFile :: FilePath
74
+ }
75
+
71
76
processRawSource :: RawSource -> Source
72
77
processRawSource rawSource =
73
78
let
@@ -102,11 +107,14 @@ processRawSource rawSource =
102
107
}
103
108
else undefined
104
109
105
- getAvailableModules :: [Source ] -> [ String ]
106
- getAvailableModules = mapMaybe maybeModuleName
110
+ getAvailableModules :: [Source ] -> FilePath -> [ AvailableModule ]
111
+ getAvailableModules sources buildDirectory = mapMaybe maybeModule sources
107
112
where
108
- maybeModuleName m@ (Module {}) = Just $ moduleName m
109
- maybeModuleName _ = Nothing
113
+ maybeModule m@ (Module {}) =
114
+ let mName = moduleName m
115
+ modFile = buildDirectory </> mName <.> " mod"
116
+ in Just $ AvailableModule { availableModuleName = mName, availableModuleFile = modFile }
117
+ maybeModule _ = Nothing
110
118
111
119
getAllObjectFiles :: FilePath -> [Source ] -> [FilePath ]
112
120
getAllObjectFiles buildDirectory sources = map getObjectFile sources
@@ -120,16 +128,16 @@ getSourceFileName p@(Program{} ) = programSourceFileName p
120
128
getSourceFileName m@ (Module {} ) = moduleSourceFileName m
121
129
getSourceFileName s@ (Submodule {}) = submoduleSourceFileName s
122
130
123
- constructCompileTimeInfo :: Source -> [String ] -> FilePath -> CompileTimeInfo
131
+ constructCompileTimeInfo :: Source -> [AvailableModule ] -> FilePath -> CompileTimeInfo
124
132
constructCompileTimeInfo p@ (Program {}) availableModules buildDirectory =
125
133
CompileTimeInfo
126
134
{ compileTimeInfoSourceFileName = programSourceFileName p
127
135
, compileTimeInfoObjectFileProduced = (programObjectFileName p)
128
136
buildDirectory
129
137
, compileTimeInfoOtherFilesProduced = []
130
138
, compileTimeInfoDirectDependencies = map
131
- (\ mName -> buildDirectory </> mName <.> " mod " )
132
- (filter (`elem` availableModules) (programModulesUsed p))
139
+ (\ am -> availableModuleFile am )
140
+ (filter (\ am -> (availableModuleName am) `elem` (programModulesUsed p)) availableModules )
133
141
}
134
142
constructCompileTimeInfo m@ (Module {}) availableModules buildDirectory =
135
143
CompileTimeInfo
@@ -141,8 +149,8 @@ constructCompileTimeInfo m@(Module{}) availableModules buildDirectory =
141
149
then [buildDirectory </> moduleName m <.> " smod" ]
142
150
else []
143
151
, compileTimeInfoDirectDependencies = map
144
- (\ mName -> buildDirectory </> mName <.> " mod " )
145
- (filter (`elem` availableModules) (moduleModulesUsed m))
152
+ (\ am -> availableModuleFile am )
153
+ (filter (\ am -> (availableModuleName am) `elem` (moduleModulesUsed m)) availableModules )
146
154
}
147
155
constructCompileTimeInfo s@ (Submodule {}) availableModules buildDirectory =
148
156
CompileTimeInfo
@@ -157,8 +165,8 @@ constructCompileTimeInfo s@(Submodule{}) availableModules buildDirectory =
157
165
]
158
166
, compileTimeInfoDirectDependencies =
159
167
(buildDirectory </> submoduleParentName s <.> " smod" )
160
- : (map (\ mName -> buildDirectory </> mName <.> " mod " )
161
- (filter (`elem` availableModules) (submoduleModulesUsed s))
168
+ : (map (\ am -> availableModuleFile am )
169
+ (filter (\ am -> (availableModuleName am) `elem` (submoduleModulesUsed s)) availableModules )
162
170
)
163
171
}
164
172
0 commit comments