git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix #1535
commit38034d289e5738e4200eade101e886ab1e2b314e authorPhil Freeman <paf31@cantab.net> dateSun 18 Oct 2015, 16:11 (11 years ago) parentb7c1dc5
1 file changed+23−20
src/Language/PureScript/Make.hs+23−20
src/Language/PureScript/Make.hs+23−20
@@ -176,8 +176,9 @@ make MakeActions{..} ms = do
176176 unless (null errors) $ throwError (mconcat errors)
177177
178178 -- Bundle up all the externs and return them as an Environment
179− externs <- sequence <$> for barriers (takeMVar . fst . snd)
180− return $ foldl' (flip applyExternsFileToEnvironment) initEnvironment (fromMaybe (error "make: externs were missing but no errors reported.") externs)
179+ (warnings, externs) <- unzip . fromMaybe (error "make: externs were missing but no errors reported.") . sequence <$> for barriers (takeMVar . fst . snd)
180+ tell (mconcat warnings)
181+ return $ foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
181182
182183 where
183184 checkModuleNamesAreUnique :: m ()
@@ -199,12 +200,12 @@ make MakeActions{..} ms = do
199200 inOrderOf :: (Ord a) => [a] -> [a] -> [a]
200201 inOrderOf xs ys = let s = S.fromList xs in filter (`S.member` s) ys
201202
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 ()
203204 buildModule barriers m@(Module _ _ moduleName _ _) deps = flip catchError (markComplete Nothing . Just) $ do
204205 -- We need to wait for dependencies to be built, before checking if the current
205206 -- module should be rebuilt, so the first thing to do is to wait on the
206207 -- 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
208209
209210 outputTimestamp <- getOutputTimestamp moduleName
210211 dependencyTimestamp <- maximumMaybe <$> mapM (fmap shouldExist . getOutputTimestamp) deps
@@ -218,20 +219,22 @@ make MakeActions{..} ms = do
218219
219220 let rebuild =
220221 case mexterns of
221− Just externs -> do
222− progress $ CompilingModule moduleName
223− let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
224− lint m
225− ([desugared], nextVar) <- runSupplyT 0 $ desugar externs [m]
226− (checked@(Module ss coms _ elaborated exps), env') <- runCheck' env $ typeCheckModule desugared
227− checkExhaustiveModule env' checked
228− regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
229− let mod' = Module ss coms moduleName regrouped exps
230− corefn = CF.moduleToCoreFn env' mod'
231− [renamed] = renameInModules [corefn]
232− exts = moduleToExternsFile mod' env'
233− evalSupplyT nextVar $ codegen renamed env' $ encode exts
234− markComplete (Just exts) Nothing
222+ Just (_, externs) -> do
223+ (exts, warnings) <- listen $ do
224+ progress $ CompilingModule moduleName
225+ let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
226+ lint m
227+ ([desugared], nextVar) <- runSupplyT 0 $ desugar externs [m]
228+ (checked@(Module ss coms _ elaborated exps), env') <- runCheck' env $ typeCheckModule desugared
229+ checkExhaustiveModule env' checked
230+ regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
231+ let mod' = Module ss coms moduleName regrouped exps
232+ corefn = CF.moduleToCoreFn env' mod'
233+ [renamed] = renameInModules [corefn]
234+ exts = moduleToExternsFile mod' env'
235+ evalSupplyT nextVar $ codegen renamed env' $ encode exts
236+ return exts
237+ markComplete (Just (warnings, exts)) Nothing
235238 Nothing -> markComplete Nothing Nothing
236239
237240 if shouldRebuild
@@ -239,10 +242,10 @@ make MakeActions{..} ms = do
239242 else do
240243 mexts <- decodeExterns . snd <$> readExterns moduleName
241244 case mexts of
242− Just exts -> markComplete (Just exts) Nothing
245+ Just exts -> markComplete (Just (mempty, exts)) Nothing
243246 Nothing -> rebuild
244247 where
245− markComplete :: Maybe ExternsFile -> Maybe MultipleErrors -> m ()
248+ markComplete :: Maybe (MultipleErrors, ExternsFile) -> Maybe MultipleErrors -> m ()
246249 markComplete externs errors = do
247250 putMVar (fst $ fromMaybe (error "make: no barrier") $ lookup moduleName barriers) externs
248251 putMVar (snd $ fromMaybe (error "make: no barrier") $ lookup moduleName barriers) errors