\begin{code}
rnImports :: [LImportDecl RdrName]
- -> RnM ([LImportDecl Name], GlobalRdrEnv, ImportAvails)
+ -> RnM ([LImportDecl Name], GlobalRdrEnv, ImportAvails,AnyHpcUsage)
rnImports imports
-- PROCESS IMPORT DECLS
-- warning for {- SOURCE -} ones that are unnecessary
= do this_mod <- getModule
implicit_prelude <- doptM Opt_ImplicitPrelude
+ implicit_ndp <- doptM Opt_Vectorise
let prel_imports = mkPrelImports this_mod implicit_prelude imports
+ ndp_imports = mkNDPImports implicit_ndp
(source, ordinary) = partition is_source_import imports
is_source_import (L _ (ImportDecl _ is_boot _ _ _)) = is_boot
when (notNull prel_imports) $ addWarn (implicitPreludeWarn)
)
- stuff1 <- mapM (rnImportDecl this_mod) (prel_imports ++ ordinary)
+ stuff1 <- mapM (rnImportDecl this_mod) (prel_imports
+ ++ ndp_imports
+ ++ ordinary)
stuff2 <- mapM (rnImportDecl this_mod) source
- let (decls, rdr_env, imp_avails) = combine (stuff1 ++ stuff2)
- return (decls, rdr_env, imp_avails)
+ let (decls, rdr_env, imp_avails,hpc_usage) = combine (stuff1 ++ stuff2)
+ return (decls, rdr_env, imp_avails,hpc_usage)
where
- combine :: [(LImportDecl Name, GlobalRdrEnv, ImportAvails)]
- -> ([LImportDecl Name], GlobalRdrEnv, ImportAvails)
- combine = foldr plus ([], emptyGlobalRdrEnv, emptyImportAvails)
- where plus (decl, gbl_env1, imp_avails1)
- (decls, gbl_env2, imp_avails2)
+ combine :: [(LImportDecl Name, GlobalRdrEnv, ImportAvails,AnyHpcUsage)]
+ -> ([LImportDecl Name], GlobalRdrEnv, ImportAvails,AnyHpcUsage)
+ combine = foldr plus ([], emptyGlobalRdrEnv, emptyImportAvails,False)
+ where plus (decl, gbl_env1, imp_avails1,hpc_usage1)
+ (decls, gbl_env2, imp_avails2,hpc_usage2)
= (decl:decls,
gbl_env1 `plusGlobalRdrEnv` gbl_env2,
- imp_avails1 `plusImportAvails` imp_avails2)
+ imp_avails1 `plusImportAvails` imp_avails2,
+ hpc_usage1 || hpc_usage2)
mkPrelImports :: Module -> Bool -> [LImportDecl RdrName] -> [LImportDecl RdrName]
-- Consruct the implicit declaration "import Prelude" (or not)
loc = mkGeneralSrcSpan FSLIT("Implicit import declaration")
+mkNDPImports :: Bool -> [LImportDecl RdrName]
+mkNDPImports False = []
+mkNDPImports True = [ndpImportDecl]
+ where
+ ndpImportDecl
+ = L loc $
+ ImportDecl (L loc nDP_INTERFACE_NAME)
+ False -- not a boot interface
+ True -- qualified
+ (Just nDP_BUILTIN) -- "as"
+ Nothing -- no import list
+
+ loc = mkGeneralSrcSpan FSLIT("Implicit import declaration")
+
rnImportDecl :: Module
-> LImportDecl RdrName
- -> RnM (LImportDecl Name, GlobalRdrEnv, ImportAvails)
+ -> RnM (LImportDecl Name, GlobalRdrEnv, ImportAvails,AnyHpcUsage)
rnImportDecl this_mod (L loc (ImportDecl loc_imp_mod_name want_boot
qual_only as_mod imp_details))
let new_imp_decl = L loc (ImportDecl loc_imp_mod_name want_boot
qual_only as_mod new_imp_details)
- returnM (new_imp_decl, gbl_env, imports)
+ returnM (new_imp_decl, gbl_env, imports, mi_hpc iface)
)
warnRedundantSourceImport mod_name
dodgyMsg kind tc
= sep [ ptext SLIT("The") <+> kind <+> ptext SLIT("item") <+> quotes (ppr (IEThingAll tc)),
- ptext SLIT("suggests that") <+> quotes (ppr tc) <+> ptext SLIT("has constructor or class methods"),
- ptext SLIT("but it has none; it is a type synonym or abstract type or class") ]
+ ptext SLIT("suggests that") <+> quotes (ppr tc) <+> ptext SLIT("has constructors or class methods,"),
+ ptext SLIT("but it has none") ]
exportItemErr export_item
= sep [ ptext SLIT("The export item") <+> quotes (ppr export_item),