diff options
Diffstat (limited to 'compiler/GHC/Driver')
-rw-r--r-- | compiler/GHC/Driver/Backpack.hs | 13 | ||||
-rw-r--r-- | compiler/GHC/Driver/Make.hs | 18 | ||||
-rw-r--r-- | compiler/GHC/Driver/MakeFile.hs | 4 | ||||
-rw-r--r-- | compiler/GHC/Driver/Pipeline/Execute.hs | 20 |
4 files changed, 34 insertions, 21 deletions
diff --git a/compiler/GHC/Driver/Backpack.hs b/compiler/GHC/Driver/Backpack.hs index 57a7d1909f..8167402525 100644 --- a/compiler/GHC/Driver/Backpack.hs +++ b/compiler/GHC/Driver/Backpack.hs @@ -38,6 +38,8 @@ import GHC.Parser.Header import GHC.Parser.Lexer import GHC.Parser.Annotation +import GHC.Rename.Names + import GHC hiding (Failed, Succeeded) import GHC.Tc.Utils.Monad import GHC.Iface.Recomp @@ -45,7 +47,6 @@ import GHC.Builtin.Names import GHC.Types.SrcLoc import GHC.Types.SourceError -import GHC.Types.SourceText import GHC.Types.SourceFile import GHC.Types.Unique.FM import GHC.Types.Unique.DFM @@ -781,7 +782,7 @@ summariseRequirement pn mod_name = do ms_iface_date = hi_timestamp, ms_hie_date = hie_timestamp, ms_srcimps = [], - ms_textual_imps = extra_sig_imports, + ms_textual_imps = ((,) NoPkgQual . noLoc) <$> extra_sig_imports, ms_ghc_prim_import = False, ms_parsed_mod = Just (HsParsedModule { hpm_module = L loc (HsModule { @@ -874,7 +875,9 @@ hsModuleToModSummary pn hsc_src modname implicit_prelude = xopt LangExt.ImplicitPrelude dflags implicit_imports = mkPrelImports modname loc implicit_prelude imps - convImport (L _ i) = (fmap sl_fs (ideclPkgQual i), ideclName i) + + rn_pkg_qual = renameRawPkgQual (hsc_unit_env hsc_env) + convImport (L _ i) = (rn_pkg_qual (ideclPkgQual i), ideclName i) extra_sig_imports <- liftIO $ findExtraSigImports hsc_env hsc_src modname @@ -903,8 +906,8 @@ hsModuleToModSummary pn hsc_src modname -- We have to do something special here: -- due to merging, requirements may end up with -- extra imports - ++ extra_sig_imports - ++ ((,) Nothing . noLoc <$> implicit_sigs), + ++ ((,) NoPkgQual . noLoc <$> extra_sig_imports) + ++ ((,) NoPkgQual . noLoc <$> implicit_sigs), -- This is our hack to get the parse tree to the right spot ms_parsed_mod = Just (HsParsedModule { hpm_module = hsmod, diff --git a/compiler/GHC/Driver/Make.hs b/compiler/GHC/Driver/Make.hs index 46ddd210c8..2f88539421 100644 --- a/compiler/GHC/Driver/Make.hs +++ b/compiler/GHC/Driver/Make.hs @@ -108,6 +108,7 @@ import GHC.Types.Unique.DSet import GHC.Types.Unique.Set import GHC.Types.Name import GHC.Types.Name.Env +import GHC.Types.PkgQual import GHC.Unit import GHC.Unit.Finder @@ -149,6 +150,7 @@ import GHC.Driver.Env.KnotVars import Control.Concurrent.STM import Control.Monad.Trans.Maybe import GHC.Runtime.Loader +import GHC.Rename.Names -- ----------------------------------------------------------------------------- @@ -1916,7 +1918,7 @@ summariseModule hsc_env old_summary_map is_boot (L loc wanted_mod) old_summary location find_it = do - found <- findImportedModule fc fopts units home_unit wanted_mod Nothing + found <- findImportedModule fc fopts units home_unit wanted_mod NoPkgQual case found of Found location mod | isJust (ml_hs_file location) -> @@ -2016,8 +2018,8 @@ makeNewModSummary hsc_env MakeNewModSummary{..} = do , ms_srcimps = pi_srcimps , ms_ghc_prim_import = pi_ghc_prim_import , ms_textual_imps = - extra_sig_imports ++ - ((,) Nothing . noLoc <$> implicit_sigs) ++ + ((,) NoPkgQual . noLoc <$> extra_sig_imports) ++ + ((,) NoPkgQual . noLoc <$> implicit_sigs) ++ pi_theimps , ms_hs_hash = nms_src_hash , ms_iface_date = hi_timestamp @@ -2031,8 +2033,8 @@ makeNewModSummary hsc_env MakeNewModSummary{..} = do data PreprocessedImports = PreprocessedImports { pi_local_dflags :: DynFlags - , pi_srcimps :: [(Maybe FastString, Located ModuleName)] - , pi_theimps :: [(Maybe FastString, Located ModuleName)] + , pi_srcimps :: [(PkgQual, Located ModuleName)] + , pi_theimps :: [(PkgQual, Located ModuleName)] , pi_ghc_prim_import :: Bool , pi_hspp_fn :: FilePath , pi_hspp_buf :: StringBuffer @@ -2053,12 +2055,16 @@ getPreprocessedImports hsc_env src_fn mb_phase maybe_buf = do (pi_local_dflags, pi_hspp_fn) <- ExceptT $ preprocess hsc_env src_fn (fst <$> maybe_buf) mb_phase pi_hspp_buf <- liftIO $ hGetStringBuffer pi_hspp_fn - (pi_srcimps, pi_theimps, pi_ghc_prim_import, L pi_mod_name_loc pi_mod_name) + (pi_srcimps', pi_theimps', pi_ghc_prim_import, L pi_mod_name_loc pi_mod_name) <- ExceptT $ do let imp_prelude = xopt LangExt.ImplicitPrelude pi_local_dflags popts = initParserOpts pi_local_dflags mimps <- getImports popts imp_prelude pi_hspp_buf pi_hspp_fn src_fn return (first (mkMessages . fmap mkDriverPsHeaderMessage . getMessages) mimps) + let rn_pkg_qual = renameRawPkgQual (hsc_unit_env hsc_env) + let rn_imps = fmap (first rn_pkg_qual) + let pi_srcimps = rn_imps pi_srcimps' + let pi_theimps = rn_imps pi_theimps' return PreprocessedImports {..} diff --git a/compiler/GHC/Driver/MakeFile.hs b/compiler/GHC/Driver/MakeFile.hs index 382d8d6b43..9cf23af831 100644 --- a/compiler/GHC/Driver/MakeFile.hs +++ b/compiler/GHC/Driver/MakeFile.hs @@ -30,8 +30,8 @@ import GHC.Utils.Panic import GHC.Utils.Panic.Plain import GHC.Types.SourceError import GHC.Types.SrcLoc +import GHC.Types.PkgQual import Data.List (partition) -import GHC.Data.FastString import GHC.Utils.TmpFs import GHC.Iface.Load (cannotFindModule) @@ -284,7 +284,7 @@ processDeps dflags hsc_env excl_mods root hdl (AcyclicSCC (ModuleNode (ExtendedM findDependency :: HscEnv -> SrcSpan - -> Maybe FastString -- package qualifier, if any + -> PkgQual -- package qualifier, if any -> ModuleName -- Imported module -> IsBootInterface -- Source import -> Bool -- Record dependency on package modules diff --git a/compiler/GHC/Driver/Pipeline/Execute.hs b/compiler/GHC/Driver/Pipeline/Execute.hs index fcc6372509..25aac65d85 100644 --- a/compiler/GHC/Driver/Pipeline/Execute.hs +++ b/compiler/GHC/Driver/Pipeline/Execute.hs @@ -82,6 +82,8 @@ import GHC.Utils.Panic import GHC.Unit.Module.Env import GHC.Driver.Env.KnotVars import GHC.Driver.Config.Finder +import GHC.Rename.Names +import Data.Bifunctor (first) newtype HookedUse a = HookedUse { runHookedUse :: (Hooks, PhaseHook) -> IO a } deriving (Functor, Applicative, Monad, MonadIO, MonadThrow, MonadCatch) via (ReaderT (Hooks, PhaseHook) IO) @@ -636,14 +638,16 @@ runHscPhase pipe_env hsc_env0 input_fn src_flavour = do -- gather the imports and module name (hspp_buf,mod_name,imps,src_imps, ghc_prim_imp) <- do - buf <- hGetStringBuffer input_fn - let imp_prelude = xopt LangExt.ImplicitPrelude dflags - popts = initParserOpts dflags - eimps <- getImports popts imp_prelude buf input_fn (basename <.> suff) - case eimps of - Left errs -> throwErrors (GhcPsMessage <$> errs) - Right (src_imps,imps, ghc_prim_imp, L _ mod_name) -> return - (Just buf, mod_name, imps, src_imps, ghc_prim_imp) + buf <- hGetStringBuffer input_fn + let imp_prelude = xopt LangExt.ImplicitPrelude dflags + popts = initParserOpts dflags + rn_pkg_qual = renameRawPkgQual (hsc_unit_env hsc_env) + rn_imps = fmap (first rn_pkg_qual) + eimps <- getImports popts imp_prelude buf input_fn (basename <.> suff) + case eimps of + Left errs -> throwErrors (GhcPsMessage <$> errs) + Right (src_imps,imps, ghc_prim_imp, L _ mod_name) -> return + (Just buf, mod_name, rn_imps imps, rn_imps src_imps, ghc_prim_imp) -- Take -o into account if present -- Very like -ohi, but we must *only* do this if we aren't linking |