-import RnIfaces ( IfaceCache(..), cachedIface, cachedDecl )
-import RnUtils ( RnEnv(..), emptyRnEnv, extendGlobalRnEnv,
- lubExportFlag, qualNameErr, dupNamesErr
- )
-import ParseUtils ( ParsedIface(..), RdrIfaceDecl(..), RdrIfaceInst )
-
-
-import Bag ( emptyBag, unitBag, consBag, snocBag, unionBags,
- unionManyBags, mapBag, filterBag, listToBag, bagToList )
-import CmdLineOpts ( opt_NoImplicitPrelude )
-import ErrUtils ( Error(..), Warning(..), addErrLoc, addShortErrLocLine, addShortWarnLocLine )
-import FiniteMap ( emptyFM, addListToFM, lookupFM, fmToList, eltsFM, delListFromFM )
-import Id ( GenId )
-import Maybes ( maybeToBool, catMaybes, MaybeErr(..) )
-import Name ( RdrName(..), Name, isQual, mkTopLevName, origName,
- mkImportedName, nameExportFlag, nameImportFlag,
- getLocalName, getSrcLoc, getImpLocs, moduleNamePair,
- pprNonSym, isLexCon, isRdrLexCon, ExportFlag(..)
- )
-import PrelInfo ( BuiltinNames(..), BuiltinKeys(..) )
-import PrelMods ( fromPrelude, pRELUDE, rATIO, iX )
-import Pretty
-import SrcLoc ( SrcLoc, mkBuiltinSrcLoc )
-import TyCon ( tyConDataCons )
-import UniqFM ( emptyUFM, addListToUFM_C, lookupUFM )
-import UniqSupply ( splitUniqSupply )
-import Util ( isIn, assoc, cmpPString, sortLt, removeDups,
- equivClasses, panic, assertPanic )
-\end{code}
-
-
-\begin{code}
-type GlobalNameInfo = (BuiltinNames,
- BuiltinKeys,
- Name -> ExportFlag, -- export flag
- Name -> [RdrName]) -- occurence names
-
-type RnM_Info s r = RnMonad GlobalNameInfo s r
-
-getGlobalNames ::
- IfaceCache
- -> GlobalNameInfo
- -> UniqSupply
- -> RdrNameHsModule
- -> IO (RnEnv,
- [Module], -- directly imported modules
- Bag (Module,RnName), -- unqualified imports from module
- Bag RenamedFixityDecl, -- imported fixity decls
- Bag Error,
- Bag Warning)
-
-getGlobalNames iface_cache info us
- (HsModule mod _ _ imports _ ty_decls _ cls_decls _ _ _ binds _ _)
- = case initRn True mod emptyRnEnv us1
- (setExtraRn info $
- getSourceNames ty_decls cls_decls binds)
- of { ((src_vals, src_tcs), src_errs, src_warns) ->
-
- doImportDecls iface_cache info us2 imports >>=
- \ (imp_vals, imp_tcs, imp_mods, unqual_imps, imp_fixes, imp_errs, imp_warns) ->
-
- let
- unqual_vals = map (\rn -> (Unqual (getLocalName rn), rn)) (bagToList src_vals)
- unqual_tcs = map (\rn -> (Unqual (getLocalName rn), rn)) (bagToList src_tcs)
-
- (src_env, src_dups) = extendGlobalRnEnv emptyRnEnv unqual_vals unqual_tcs
- (all_env, imp_dups) = extendGlobalRnEnv src_env (bagToList imp_vals) (bagToList imp_tcs)
-
- -- remove dups of the same imported thing
- diff_imp_dups = filterBag diff_orig imp_dups
- diff_orig (_,rn1,rn2) = origName rn1 /= origName rn2