diff options
author | Daniel Gröber <dxld@darkboxed.org> | 2019-05-25 11:27:22 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-05-30 16:44:08 -0400 |
commit | 18d3f01d9abe2994b2b3d07b67ee9616c3553e16 (patch) | |
tree | a7de4fa2dede37778bb82fe71b0650f356c9e6cf /compiler/main/HeaderInfo.hs | |
parent | 76c86fca43a4e5449f69c5bc1623f4890ae918e2 (diff) | |
download | haskell-18d3f01d9abe2994b2b3d07b67ee9616c3553e16.tar.gz |
Make downsweep return all errors per-module instead of throwing some
This enables API clients to handle such errors instead of immideately
crashing in the face of some kinds of user errors, which is arguably quite
bad UX.
Fixes #10887
Diffstat (limited to 'compiler/main/HeaderInfo.hs')
-rw-r--r-- | compiler/main/HeaderInfo.hs | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/compiler/main/HeaderInfo.hs b/compiler/main/HeaderInfo.hs index e5e5efd753..d5b3f90737 100644 --- a/compiler/main/HeaderInfo.hs +++ b/compiler/main/HeaderInfo.hs @@ -59,17 +59,19 @@ getImports :: DynFlags -- reporting parse error locations. -> FilePath -- ^ The original source filename (used for locations -- in the function result) - -> IO ([(Maybe FastString, Located ModuleName)], - [(Maybe FastString, Located ModuleName)], - Located ModuleName) + -> IO (Either + ErrorMessages + ([(Maybe FastString, Located ModuleName)], + [(Maybe FastString, Located ModuleName)], + Located ModuleName)) -- ^ The source imports, normal imports, and the module name. getImports dflags buf filename source_filename = do let loc = mkRealSrcLoc (mkFastString filename) 1 1 case unP parseHeader (mkPState dflags buf loc) of - PFailed pst -> do + PFailed pst -> -- assuming we're not logging warnings here as per below - throwErrors (getErrorMessages pst dflags) - POk pst rdr_module -> do + return $ Left $ getErrorMessages pst dflags + POk pst rdr_module -> fmap Right $ do let _ms@(_warns, errs) = getMessages pst dflags -- don't log warnings: they'll be reported when we parse the file -- for real. See #2500. |