summaryrefslogtreecommitdiff
path: root/compiler/GHC/Driver/Main.hs
diff options
context:
space:
mode:
authorJakob Brünker <jakob.bruenker@gmail.com>2022-03-18 17:56:07 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2022-03-30 03:10:33 -0400
commitf07c7766663fa52a037aaf941fd0d34523ff2f2f (patch)
treede3288beb918e3fbe0d053ffc9bbadaed9f38477 /compiler/GHC/Driver/Main.hs
parentdda46e2da13268c239db3290720b014cef00c01d (diff)
downloadhaskell-f07c7766663fa52a037aaf941fd0d34523ff2f2f.tar.gz
Give parsing plugins access to errors
Previously, when the parser produced non-fatal errors (i.e. it produced errors but the 'PState' is 'POk'), compilation would be aborted before the 'parsedResultAction' of any plugin was invoked. This commit changes that, so that such that 'parsedResultAction' gets collections of warnings and errors as argument, and must return them after potentially modifying them. Closes #20803
Diffstat (limited to 'compiler/GHC/Driver/Main.hs')
-rw-r--r--compiler/GHC/Driver/Main.hs13
1 files changed, 8 insertions, 5 deletions
diff --git a/compiler/GHC/Driver/Main.hs b/compiler/GHC/Driver/Main.hs
index 4c17228852..3fa3d581ce 100644
--- a/compiler/GHC/Driver/Main.hs
+++ b/compiler/GHC/Driver/Main.hs
@@ -450,8 +450,6 @@ hscParse' mod_summary
PFailed pst ->
handleWarningsThrowErrors (getPsMessages pst)
POk pst rdr_module -> do
- let (warns, errs) = getPsMessages pst
- logDiagnostics (GhcPsMessage <$> warns)
liftIO $ putDumpFileMaybe logger Opt_D_dump_parsed "Parser"
FormatHaskell (ppr rdr_module)
liftIO $ putDumpFileMaybe logger Opt_D_dump_parsed_ast "Parser AST"
@@ -460,7 +458,6 @@ hscParse' mod_summary
rdr_module)
liftIO $ putDumpFileMaybe logger Opt_D_source_stats "Source Statistics"
FormatText (ppSourceStats False rdr_module)
- when (not $ isEmptyMessages errs) $ throwErrors (GhcPsMessage <$> errs)
-- To get the list of extra source files, we take the list
-- that the parser gave us,
@@ -496,9 +493,15 @@ hscParse' mod_summary
-- apply parse transformation of plugins
let applyPluginAction p opts
- = parsedResultAction p opts mod_summary
+ = uncurry (parsedResultAction p opts mod_summary)
hsc_env <- getHscEnv
- withPlugins (hsc_plugins hsc_env) applyPluginAction res
+ (transformed, (warns, errs)) <-
+ withPlugins (hsc_plugins hsc_env) applyPluginAction (res, getPsMessages pst)
+
+ logDiagnostics (GhcPsMessage <$> warns)
+ unless (isEmptyMessages errs) $ throwErrors (GhcPsMessage <$> errs)
+
+ return transformed
checkBidirectionFormatChars :: PsLoc -> StringBuffer -> Maybe (NonEmpty (PsLoc, Char, String))
checkBidirectionFormatChars start_loc sb