import LoadIface ( loadSrcInterface, loadSysInterface )
import TcRnMonad hiding (LIE)
+import HeaderInfo ( mkPrelImports )
import PrelNames
import Module
import Name
-- warning for {- SOURCE -} ones that are unnecessary
= do this_mod <- getModule
implicit_prelude <- doptM Opt_ImplicitPrelude
- let prel_imports = mkPrelImports this_mod implicit_prelude imports
+ let prel_imports = mkPrelImports (moduleName this_mod) implicit_prelude imports
(source, ordinary) = partition is_source_import imports
is_source_import (L _ (ImportDecl _ _ is_boot _ _ _)) = is_boot
imp_avails1 `plusImportAvails` imp_avails2,
hpc_usage1 || hpc_usage2)
-mkPrelImports :: Module -> Bool -> [LImportDecl RdrName] -> [LImportDecl RdrName]
--- Consruct the implicit declaration "import Prelude" (or not)
---
--- NB: opt_NoImplicitPrelude is slightly different to import Prelude ();
--- because the former doesn't even look at Prelude.hi for instance
--- declarations, whereas the latter does.
-mkPrelImports this_mod implicit_prelude import_decls
- | this_mod == pRELUDE
- || explicit_prelude_import
- || not implicit_prelude
- = []
- | otherwise = [preludeImportDecl]
- where
- explicit_prelude_import
- = notNull [ () | L _ (ImportDecl mod Nothing _ _ _ _) <- import_decls,
- unLoc mod == pRELUDE_NAME ]
-
- preludeImportDecl :: LImportDecl RdrName
- preludeImportDecl
- = L loc $
- ImportDecl (L loc pRELUDE_NAME)
- Nothing {- no specific package -}
- False {- Not a boot interface -}
- False {- Not qualified -}
- Nothing {- No "as" -}
- Nothing {- No import list -}
-
- loc = mkGeneralSrcSpan (fsLit "Implicit import declaration")
-
-
rnImportDecl :: Module
-> LImportDecl RdrName
-> RnM (LImportDecl Name, GlobalRdrEnv, ImportAvails,AnyHpcUsage)
lookup_ie opt_typeFamilies ie
= let bad_ie = Failed (badImportItemErr iface decl_spec ie)
- lookup_name rdrName =
- case lookupOccEnv occ_env (rdrNameOcc rdrName) of
- Nothing -> bad_ie
- Just n -> return n
+ lookup_name rdr
+ | isQual rdr = Failed (qualImportItemErr rdr)
+ | Just nm <- lookupOccEnv occ_env (rdrNameOcc rdr) = return nm
+ | otherwise = bad_ie
in
case ie of
IEVar n -> do
%************************************************************************
\begin{code}
+qualImportItemErr :: RdrName -> SDoc
+qualImportItemErr rdr
+ = hang (ptext (sLit "Illegal qualified name in import item:"))
+ 2 (ppr rdr)
+
badImportItemErr :: ModIface -> ImpDeclSpec -> IE RdrName -> SDoc
badImportItemErr iface decl_spec ie
= sep [ptext (sLit "Module"), quotes (ppr (is_mod decl_spec)), source_import,