X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FHscTypes.lhs;h=1b119c492d96a42c8ec7344533a9edb215994c8a;hb=fd99cf4f7c390e4b1abc9a839a6f023d3b6c4757;hp=9150218ec869e757ad039ad94164ae19663b9f86;hpb=243dedb8741d13162fe944ebf2adace921e0108d;p=ghc-hetmet.git diff --git a/ghc/compiler/main/HscTypes.lhs b/ghc/compiler/main/HscTypes.lhs index 9150218..1b119c4 100644 --- a/ghc/compiler/main/HscTypes.lhs +++ b/ghc/compiler/main/HscTypes.lhs @@ -5,7 +5,7 @@ \begin{code} module HscTypes ( - Finder, ModuleLocation(..), + ModuleLocation(..), ModDetails(..), ModIface(..), GlobalSymbolTable, HomeSymbolTable, PackageSymbolTable, @@ -19,6 +19,7 @@ module HscTypes ( TyThing(..), groupTyThings, isTyClThing, TypeEnv, extendTypeEnv, lookupTypeEnv, + typeEnvClasses, typeEnvTyCons, WhetherHasOrphans, ImportVersion, WhatsImported(..), PersistentRenamerState(..), IsBootInterface, Avails, DeclsMap, @@ -46,11 +47,11 @@ import RdrName ( RdrNameEnv, emptyRdrEnv ) import Name ( Name, NameEnv, NamedThing, emptyNameEnv, unitNameEnv, extendNameEnv, plusNameEnv, lookupNameEnv, emptyNameEnv, getName, nameModule, - nameSrcLoc ) + nameSrcLoc, nameEnvElts ) import NameSet ( NameSet ) import OccName ( OccName ) import Module ( Module, ModuleName, ModuleEnv, - lookupModuleEnv, lookupModuleEnvByName + extendModuleEnv, lookupModuleEnv, lookupModuleEnvByName ) import Rules ( RuleBase ) import VarSet ( TyVarSet ) @@ -79,13 +80,11 @@ import UniqSupply ( UniqSupply ) %************************************************************************ %* * -\subsection{The Finder type} +\subsection{Module locations} %* * %************************************************************************ \begin{code} -type Finder = ModuleName -> IO (Maybe (Module, ModuleLocation)) - data ModuleLocation = ModuleLocation { hs_file :: FilePath, @@ -126,7 +125,7 @@ data ModIface -- (changing usages doesn't affect the version of -- this module) - mi_exports :: Avails, -- What it exports + mi_exports :: [(ModuleName,Avails)], -- What it exports -- Kept sorted by (mod,occ), -- to make version comparisons easier @@ -224,6 +223,10 @@ instance NamedThing TyThing where getName (AnId id) = getName id getName (ATyCon tc) = getName tc getName (AClass cl) = getName cl + +typeEnvClasses env = [cl | AClass cl <- nameEnvElts env] +typeEnvTyCons env = [tc | ATyCon tc <- nameEnvElts env] + \end{code} @@ -254,7 +257,7 @@ extendTypeEnv tbl things = foldFM add tbl things where add mod type_env tbl - = panic "extendTypeEnv" --extendModuleEnv mod new_details + = extendModuleEnv tbl mod new_details where new_details = case lookupModuleEnv tbl mod of @@ -293,16 +296,19 @@ initialVersionInfo = VersionInfo { vers_module = initialVersion, vers_decls = emptyNameEnv } data Deprecations = NoDeprecs - | DeprecAll DeprecTxt -- Whole module deprecated - | DeprecSome (NameEnv DeprecTxt) -- Some things deprecated - -- Just "big" names + | DeprecAll DeprecTxt -- Whole module deprecated + | DeprecSome (NameEnv (Name,DeprecTxt)) -- Some things deprecated + -- Just "big" names + -- We keep the Name in the range, so we can print them out lookupDeprec :: ModIface -> Name -> Maybe DeprecTxt lookupDeprec iface name = case mi_deprecs iface of NoDeprecs -> Nothing DeprecAll txt -> Just txt - DeprecSome env -> lookupNameEnv env name + DeprecSome env -> case lookupNameEnv env name of + Just (_, txt) -> Just txt + Nothing -> Nothing type InstEnv = UniqFM ClsInstEnv -- Maps Class to instances for that class