@@ -176,8 +176,9 @@ make MakeActions{..} ms = do
176 unless (null errors) $ throwError (mconcat errors)
176 unless (null errors) $ throwError (mconcat errors)
178 -- Bundle up all the externs and return them as an Environment
178 -- Bundle up all the externs and return them as an Environment
179− externs <- sequence <$> for barriers (takeMVar . fst . snd)
179+ (warnings, externs) <- unzip . fromMaybe (error "make: externs were missing but no errors reported.") . sequence <$> for barriers (takeMVar . fst . snd)
180+ tell (mconcat warnings)
180− return $ foldl' (flip applyExternsFileToEnvironment) initEnvironment (fromMaybe (error "make: externs were missing but no errors reported.") externs)
181+ return $ foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
183 checkModuleNamesAreUnique :: m ()
184 checkModuleNamesAreUnique :: m ()
@@ -199,12 +200,12 @@ make MakeActions{..} ms = do
199 inOrderOf :: (Ord a) => [a] -> [a] -> [a]
200 inOrderOf :: (Ord a) => [a] -> [a] -> [a]
200 inOrderOf xs ys = let s = S.fromList xs in filter (`S.member` s) ys
201 inOrderOf xs ys = let s = S.fromList xs in filter (`S.member` s) ys
202− buildModule :: [(ModuleName, (C.MVar (Maybe ExternsFile), C.MVar (Maybe MultipleErrors)))] -> Module -> [ModuleName] -> m ()
203+ buildModule :: [(ModuleName, (C.MVar (Maybe (MultipleErrors, ExternsFile)), C.MVar (Maybe MultipleErrors)))] -> Module -> [ModuleName] -> m ()
203 buildModule barriers m@(Module _ _ moduleName _ _) deps = flip catchError (markComplete Nothing . Just) $ do
204 buildModule barriers m@(Module _ _ moduleName _ _) deps = flip catchError (markComplete Nothing . Just) $ do
204 -- We need to wait for dependencies to be built, before checking if the current
205 -- We need to wait for dependencies to be built, before checking if the current
205 -- module should be rebuilt, so the first thing to do is to wait on the
206 -- module should be rebuilt, so the first thing to do is to wait on the
206 -- MVars for the module's dependencies.
207 -- MVars for the module's dependencies.
207− mexterns <- sequence <$> mapM (readMVar . fst . fromMaybe (error "make: no barrier") . flip lookup barriers) deps
208+ mexterns <- fmap unzip . sequence <$> mapM (readMVar . fst . fromMaybe (error "make: no barrier") . flip lookup barriers) deps
209 outputTimestamp <- getOutputTimestamp moduleName
210 outputTimestamp <- getOutputTimestamp moduleName
210 dependencyTimestamp <- maximumMaybe <$> mapM (fmap shouldExist . getOutputTimestamp) deps
211 dependencyTimestamp <- maximumMaybe <$> mapM (fmap shouldExist . getOutputTimestamp) deps
@@ -218,20 +219,22 @@ make MakeActions{..} ms = do
219 let rebuild =
220 let rebuild =
220 case mexterns of
221 case mexterns of
221− Just externs -> do
222+ Just (_, externs) -> do
223+ (exts, warnings) <- listen $ do
222− progress $ CompilingModule moduleName
224+ progress $ CompilingModule moduleName
223− let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
225+ let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
225− ([desugared], nextVar) <- runSupplyT 0 $ desugar externs [m]
227+ ([desugared], nextVar) <- runSupplyT 0 $ desugar externs [m]
226− (checked@(Module ss coms _ elaborated exps), env') <- runCheck' env $ typeCheckModule desugared
228+ (checked@(Module ss coms _ elaborated exps), env') <- runCheck' env $ typeCheckModule desugared
227− checkExhaustiveModule env' checked
229+ checkExhaustiveModule env' checked
228− regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
230+ regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
229− let mod' = Module ss coms moduleName regrouped exps
231+ let mod' = Module ss coms moduleName regrouped exps
230− corefn = CF.moduleToCoreFn env' mod'
232+ corefn = CF.moduleToCoreFn env' mod'
231− [renamed] = renameInModules [corefn]
233+ [renamed] = renameInModules [corefn]
232− exts = moduleToExternsFile mod' env'
234+ exts = moduleToExternsFile mod' env'
233− evalSupplyT nextVar $ codegen renamed env' $ encode exts
235+ evalSupplyT nextVar $ codegen renamed env' $ encode exts
234− markComplete (Just exts) Nothing
237+ markComplete (Just (warnings, exts)) Nothing
235 Nothing -> markComplete Nothing Nothing
238 Nothing -> markComplete Nothing Nothing
237 if shouldRebuild
240 if shouldRebuild
@@ -239,10 +242,10 @@ make MakeActions{..} ms = do
240 mexts <- decodeExterns . snd <$> readExterns moduleName
243 mexts <- decodeExterns . snd <$> readExterns moduleName
241 case mexts of
244 case mexts of
242− Just exts -> markComplete (Just exts) Nothing
245+ Just exts -> markComplete (Just (mempty, exts)) Nothing
243 Nothing -> rebuild
246 Nothing -> rebuild
245− markComplete :: Maybe ExternsFile -> Maybe MultipleErrors -> m ()
248+ markComplete :: Maybe (MultipleErrors, ExternsFile) -> Maybe MultipleErrors -> m ()
246 markComplete externs errors = do
249 markComplete externs errors = do
247 putMVar (fst $ fromMaybe (error "make: no barrier") $ lookup moduleName barriers) externs
250 putMVar (fst $ fromMaybe (error "make: no barrier") $ lookup moduleName barriers) externs
248 putMVar (snd $ fromMaybe (error "make: no barrier") $ lookup moduleName barriers) errors
251 putMVar (snd $ fromMaybe (error "make: no barrier") $ lookup moduleName barriers) errors