diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2020-11-03 12:04:53 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2020-11-21 01:14:09 -0500 |
commit | ecfd0278cb811c93853c176fe5df60222d1a8fb5 (patch) | |
tree | 7fc212d973a0d9e5e67e13011bf30907b1458228 /compiler/GHC/Tc | |
parent | 53ad67eacacde8fde452f1a323d5886183375182 (diff) | |
download | haskell-ecfd0278cb811c93853c176fe5df60222d1a8fb5.tar.gz |
Move Plugins into HscEnv (#17957)
Loaded plugins have nothing to do in DynFlags so this patch moves them
into HscEnv (session state).
"DynFlags plugins" become "Driver plugins" to still be able to register
static plugins.
Bump haddock submodule
Diffstat (limited to 'compiler/GHC/Tc')
-rw-r--r-- | compiler/GHC/Tc/Gen/Splice.hs | 2 | ||||
-rw-r--r-- | compiler/GHC/Tc/Module.hs | 39 |
2 files changed, 21 insertions, 20 deletions
diff --git a/compiler/GHC/Tc/Gen/Splice.hs b/compiler/GHC/Tc/Gen/Splice.hs index ed248c09cc..468410400f 100644 --- a/compiler/GHC/Tc/Gen/Splice.hs +++ b/compiler/GHC/Tc/Gen/Splice.hs @@ -932,7 +932,7 @@ runMeta' show_code ppr_hs run_and_convert expr -- run plugins ; hsc_env <- getTopEnv - ; expr' <- withPlugins (hsc_dflags hsc_env) spliceRunAction expr + ; expr' <- withPlugins hsc_env spliceRunAction expr -- Desugar ; ds_expr <- initDsTc (dsLExpr expr') diff --git a/compiler/GHC/Tc/Module.hs b/compiler/GHC/Tc/Module.hs index 754059571b..44a92da7ae 100644 --- a/compiler/GHC/Tc/Module.hs +++ b/compiler/GHC/Tc/Module.hs @@ -326,7 +326,7 @@ tcRnModuleTcRnM hsc_env mod_sum reportUnusedNames tcg_env hsc_src ; -- add extra source files to tcg_dependent_files addDependentFiles src_files - ; tcg_env <- runTypecheckerPlugin mod_sum hsc_env tcg_env + ; tcg_env <- runTypecheckerPlugin mod_sum tcg_env ; -- Dump output and return tcDump tcg_env ; return tcg_env } @@ -3034,10 +3034,10 @@ Type Checker Plugins withTcPlugins :: HscEnv -> TcM a -> TcM a withTcPlugins hsc_env m = - do let plugins = getTcPlugins (hsc_dflags hsc_env) - case plugins of - [] -> m -- Common fast case - _ -> do ev_binds_var <- newTcEvBinds + case getTcPlugins hsc_env of + [] -> m -- Common fast case + plugins -> do + ev_binds_var <- newTcEvBinds (solvers,stops) <- unzip `fmap` mapM (startPlugin ev_binds_var) plugins -- This ensures that tcPluginStop is called even if a type -- error occurs during compilation (Fix of #10078) @@ -3052,13 +3052,13 @@ withTcPlugins hsc_env m = do s <- runTcPluginM start ev_binds_var return (solve s, stop s) -getTcPlugins :: DynFlags -> [GHC.Tc.Utils.Monad.TcPlugin] -getTcPlugins dflags = catMaybes $ mapPlugins dflags (\p args -> tcPlugin p args) +getTcPlugins :: HscEnv -> [GHC.Tc.Utils.Monad.TcPlugin] +getTcPlugins hsc_env = catMaybes $ mapPlugins hsc_env (\p args -> tcPlugin p args) withHoleFitPlugins :: HscEnv -> TcM a -> TcM a withHoleFitPlugins hsc_env m = - case (getHfPlugins (hsc_dflags hsc_env)) of + case getHfPlugins hsc_env of [] -> m -- Common fast case plugins -> do (plugins,stops) <- unzip `fmap` mapM startPlugin plugins -- This ensures that hfPluginStop is called even if a type @@ -3074,18 +3074,19 @@ withHoleFitPlugins hsc_env m = do ref <- init return (plugin ref, stop ref) -getHfPlugins :: DynFlags -> [HoleFitPluginR] -getHfPlugins dflags = - catMaybes $ mapPlugins dflags (\p args -> holeFitPlugin p args) +getHfPlugins :: HscEnv -> [HoleFitPluginR] +getHfPlugins hsc_env = + catMaybes $ mapPlugins hsc_env (\p args -> holeFitPlugin p args) runRenamerPlugin :: TcGblEnv -> HsGroup GhcRn -> TcM (TcGblEnv, HsGroup GhcRn) runRenamerPlugin gbl_env hs_group = do - dflags <- getDynFlags - withPlugins dflags - (\p opts (e, g) -> ( mark_plugin_unsafe dflags >> renamedResultAction p opts e g)) + hsc_env <- getTopEnv + withPlugins hsc_env + (\p opts (e, g) -> ( mark_plugin_unsafe (hsc_dflags hsc_env) + >> renamedResultAction p opts e g)) (gbl_env, hs_group) @@ -3103,11 +3104,11 @@ getRenamedStuff tc_result , tcg_rn_exports tc_result, tcg_doc_hdr tc_result ) ) (tcg_rn_decls tc_result) -runTypecheckerPlugin :: ModSummary -> HscEnv -> TcGblEnv -> TcM TcGblEnv -runTypecheckerPlugin sum hsc_env gbl_env = do - let dflags = hsc_dflags hsc_env - withPlugins dflags - (\p opts env -> mark_plugin_unsafe dflags +runTypecheckerPlugin :: ModSummary -> TcGblEnv -> TcM TcGblEnv +runTypecheckerPlugin sum gbl_env = do + hsc_env <- getTopEnv + withPlugins hsc_env + (\p opts env -> mark_plugin_unsafe (hsc_dflags hsc_env) >> typeCheckResultAction p opts sum env) gbl_env |