diff options
Diffstat (limited to 'compiler/GHC/Driver')
-rw-r--r-- | compiler/GHC/Driver/Backpack.hs | 7 | ||||
-rw-r--r-- | compiler/GHC/Driver/Make.hs | 4 | ||||
-rw-r--r-- | compiler/GHC/Driver/Pipeline/Execute.hs | 7 |
3 files changed, 12 insertions, 6 deletions
diff --git a/compiler/GHC/Driver/Backpack.hs b/compiler/GHC/Driver/Backpack.hs index 2190bdd753..8581865dbf 100644 --- a/compiler/GHC/Driver/Backpack.hs +++ b/compiler/GHC/Driver/Backpack.hs @@ -769,6 +769,7 @@ summariseRequirement pn mod_name = do ms_hie_date = hie_timestamp, ms_srcimps = [], ms_textual_imps = extra_sig_imports, + ms_ghc_prim_import = False, ms_parsed_mod = Just (HsParsedModule { hpm_module = L loc (HsModule { hsmodAnn = noAnn, @@ -854,8 +855,9 @@ hsModuleToModSummary pn hsc_src modname let (src_idecls, ord_idecls) = partition ((== IsBoot) . ideclSource . unLoc) imps -- GHC.Prim doesn't exist physically, so don't go looking for it. - ordinary_imps = filter ((/= moduleName gHC_PRIM) . unLoc . ideclName . unLoc) - ord_idecls + (ordinary_imps, ghc_prim_import) + = partition ((/= moduleName gHC_PRIM) . unLoc . ideclName . unLoc) + ord_idecls implicit_prelude = xopt LangExt.ImplicitPrelude dflags implicit_imports = mkPrelImports modname loc @@ -884,6 +886,7 @@ hsModuleToModSummary pn hsc_src modname ms_hspp_opts = dflags, ms_hspp_buf = Nothing, ms_srcimps = map convImport src_idecls, + ms_ghc_prim_import = not (null ghc_prim_import), ms_textual_imps = normal_imports -- We have to do something special here: -- due to merging, requirements may end up with diff --git a/compiler/GHC/Driver/Make.hs b/compiler/GHC/Driver/Make.hs index aef6953a30..51fb469828 100644 --- a/compiler/GHC/Driver/Make.hs +++ b/compiler/GHC/Driver/Make.hs @@ -2538,6 +2538,7 @@ makeNewModSummary hsc_env MakeNewModSummary{..} = do , ms_hspp_buf = Just pi_hspp_buf , ms_parsed_mod = Nothing , ms_srcimps = pi_srcimps + , ms_ghc_prim_import = pi_ghc_prim_import , ms_textual_imps = pi_theimps ++ extra_sig_imports ++ @@ -2556,6 +2557,7 @@ data PreprocessedImports { pi_local_dflags :: DynFlags , pi_srcimps :: [(Maybe FastString, Located ModuleName)] , pi_theimps :: [(Maybe FastString, Located ModuleName)] + , pi_ghc_prim_import :: Bool , pi_hspp_fn :: FilePath , pi_hspp_buf :: StringBuffer , pi_mod_name_loc :: SrcSpan @@ -2575,7 +2577,7 @@ 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, 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 diff --git a/compiler/GHC/Driver/Pipeline/Execute.hs b/compiler/GHC/Driver/Pipeline/Execute.hs index 57d491104e..022e8ce1a1 100644 --- a/compiler/GHC/Driver/Pipeline/Execute.hs +++ b/compiler/GHC/Driver/Pipeline/Execute.hs @@ -632,15 +632,15 @@ runHscPhase pipe_env hsc_env0 input_fn src_flavour = do -- gather the imports and module name - (hspp_buf,mod_name,imps,src_imps) <- do + (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,L _ mod_name) -> return - (Just buf, mod_name, imps, src_imps) + Right (src_imps,imps, ghc_prim_imp, L _ mod_name) -> return + (Just buf, mod_name, 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 @@ -679,6 +679,7 @@ runHscPhase pipe_env hsc_env0 input_fn src_flavour = do ms_parsed_mod = Nothing, ms_iface_date = hi_date, ms_hie_date = hie_date, + ms_ghc_prim_import = ghc_prim_imp, ms_textual_imps = imps, ms_srcimps = src_imps } |