import FiniteMap
import PrelNames ( pRELUDE_Name, mAIN_Name, main_RDR_Unqual, isUnboundName )
-import UniqFM ( lookupUFM )
-import Bag ( bagToList )
import Module ( ModuleName, moduleName, WhereFrom(..) )
+import Name ( Name, nameSrcLoc, nameOccName )
import NameSet
-import Name ( Name, nameSrcLoc, nameOccName, nameEnvElts )
+import NameEnv
import HscTypes ( Provenance(..), ImportReason(..), GlobalRdrEnv,
GenAvailInfo(..), AvailInfo, Avails, AvailEnv,
Deprecations(..), ModIface(..)
import NameSet ( elemNameSet, emptyNameSet )
import Outputable
import Maybes ( maybeToBool, catMaybes, mapMaybe )
-import UniqFM ( emptyUFM, listToUFM )
import ListSetOps ( removeDups )
import Util ( sortLt )
import List ( partition )
else
-- Complain if we import a deprecated module
- (case deprecs of
- DeprecAll txt -> addWarnRn (moduleDeprec imp_mod_name txt)
- other -> returnRn ()
+ ifOptRn Opt_WarnDeprecations (
+ case deprecs of
+ DeprecAll txt -> addWarnRn (moduleDeprec imp_mod_name txt)
+ other -> returnRn ()
) `thenRn_`
-- Filter the imports according to the import list
(_, dups) = removeDups compare all_names
in
-- Check for duplicate definitions
+ -- The complaint will come out as "Multiple declarations of Foo.f" because
+ -- since 'f' is in the env twice, the unQualInScope used by the error-msg
+ -- printer returns False. It seems awkward to fix, unfortunately.
mapRn_ (addErrRn . dupDeclErr) dups `thenRn_`
Just avail@(AvailTC _ [n]) -> -- This occurs when you import T(..), but
-- only export T abstractly. The single [n]
-- in the AvailTC is the type or class itself
- addWarnRn (dodgyImportWarn mod item) `thenRn_`
+ ifOptRn Opt_WarnMisc (addWarnRn (dodgyImportWarn mod item)) `thenRn_`
returnRn [(avail, [availName avail])]
Just avail -> returnRn [(avail, [availName avail])]
\begin{code}
mkEmptyExportAvails :: ModuleName -> ExportAvails
-mkEmptyExportAvails mod_name = (unitFM mod_name [], emptyUFM)
+mkEmptyExportAvails mod_name = (unitFM mod_name [], emptyNameEnv)
mkExportAvails :: ModuleName -> Bool -> GlobalRdrEnv -> [AvailInfo] -> ExportAvails
mkExportAvails mod_name unqual_imp gbl_env avails
unqual_in_scope n = unQualInScope gbl_env n
- entity_avail_env = listToUFM [ (name,avail) | avail <- avails,
+ entity_avail_env = mkNameEnv [ (name,avail) | avail <- avails,
name <- availNames avail]
plusExportAvails :: ExportAvails -> ExportAvails -> ExportAvails
= lookupSrcName global_name_env (ieName ie) `thenRn` \ name ->
-- See what's available in the current environment
- case lookupUFM entity_avail_env name of {
+ case lookupNameEnv entity_avail_env name of {
Nothing -> -- Presumably this happens because lookupSrcName didn't find
-- the name and returned an unboundName, which won't be in
-- the entity_avail_env, of course