X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FHscTypes.lhs;h=a490730a071b986e7d45760d6a19c7dd6de40a4b;hb=e0a941b95506cef196e7a8ad1e002920d181f302;hp=ec70d3251690777f07a0334666a8da8dda37c7d3;hpb=18b24e64d6a9e3011a2437cec87ef09ad3e6f900;p=ghc-hetmet.git diff --git a/ghc/compiler/main/HscTypes.lhs b/ghc/compiler/main/HscTypes.lhs index ec70d32..a490730 100644 --- a/ghc/compiler/main/HscTypes.lhs +++ b/ghc/compiler/main/HscTypes.lhs @@ -28,7 +28,7 @@ module HscTypes ( ImportedModuleInfo, WhetherHasOrphans, ImportVersion, WhatsImported(..), PersistentRenamerState(..), IsBootInterface, DeclsMap, - IfaceInsts, IfaceRules, GatedDecl, IsExported, + IfaceInsts, IfaceRules, GatedDecl, GatedDecls, IsExported, NameSupply(..), OrigNameCache, OrigIParamCache, Avails, AvailEnv, GenAvailInfo(..), AvailInfo, RdrAvailInfo, PersistentCompilerState(..), @@ -52,13 +52,14 @@ module HscTypes ( import RdrName ( RdrNameEnv, addListToRdrEnv, emptyRdrEnv, mkRdrUnqual, rdrEnvToList ) import Name ( Name, NamedThing, getName, nameOccName, nameModule, nameSrcLoc ) -import Name -- Env +import NameEnv import OccName ( OccName ) import Module ( Module, ModuleName, ModuleEnv, lookupModuleEnv, lookupModuleEnvByName, emptyModuleEnv ) import InstEnv ( InstEnv, ClsInstEnv, DFunId ) import Rules ( RuleBase ) +import CoreSyn ( CoreBind ) import Id ( Id ) import Class ( Class, classSelIds ) import TyCon ( TyCon, tyConGenIds, tyConSelIds, tyConDataConsIfAvailable ) @@ -92,7 +93,7 @@ data ModuleLocation = ModuleLocation { ml_hs_file :: Maybe FilePath, ml_hspp_file :: Maybe FilePath, -- path of preprocessed source - ml_hi_file :: Maybe FilePath, + ml_hi_file :: FilePath, ml_obj_file :: Maybe FilePath } deriving Show @@ -167,18 +168,45 @@ data ModDetails -- The next three fields are created by the typechecker md_types :: TypeEnv, md_insts :: [DFunId], -- Dfun-ids for the instances in this module - md_rules :: [IdCoreRule] -- Domain may include Ids from other modules + md_rules :: [IdCoreRule], -- Domain may include Ids from other modules + md_binds :: [CoreBind] } + +-- The ModDetails takes on several slightly different forms: +-- +-- After typecheck + desugar +-- md_types Contains TyCons, Classes, and hasNoBinding Ids +-- md_insts All instances from this module (incl derived ones) +-- md_rules All rules from this module +-- md_binds Desugared bindings +-- +-- After simplification +-- md_types Same as after typecheck +-- md_insts Ditto +-- md_rules Orphan rules only (local ones now attached to binds) +-- md_binds With rules attached +-- +-- After CoreTidy +-- md_types Now contains Ids as well, replete with final IdInfo +-- The Ids are only the ones that are visible from +-- importing modules. Without -O that means only +-- exported Ids, but with -O importing modules may +-- see ids mentioned in unfoldings of exported Ids +-- +-- md_insts Same DFunIds as before, but with final IdInfo, +-- and the unique might have changed; remember that +-- CoreTidy links up the uniques of old and new versions +-- +-- md_rules All rules for exported things, substituted with final Ids +-- +-- md_binds Tidied +-- +-- Passed back to compilation manager +-- Just as after CoreTidy, but with md_binds nuked + \end{code} \begin{code} -emptyModDetails :: ModDetails -emptyModDetails - = ModDetails { md_types = emptyTypeEnv, - md_insts = [], - md_rules = [] - } - emptyModIface :: Module -> ModIface emptyModIface mod = ModIface { mi_module = mod, @@ -655,11 +683,11 @@ hasBetterProv _ _ = False pprNameProvenance :: Name -> Provenance -> SDoc pprNameProvenance name LocalDef = ptext SLIT("defined at") <+> ppr (nameSrcLoc name) pprNameProvenance name (NonLocalDef why) = sep [ppr_reason why, - nest 2 (parens (ppr_defn (nameSrcLoc name)))] + nest 2 (ppr_defn (nameSrcLoc name))] ppr_reason ImplicitImport = ptext SLIT("implicitly imported") ppr_reason (UserImport mod loc _) = ptext SLIT("imported from") <+> ppr mod <+> ptext SLIT("at") <+> ppr loc -ppr_defn loc | isGoodSrcLoc loc = ptext SLIT("at") <+> ppr loc +ppr_defn loc | isGoodSrcLoc loc = parens (ptext SLIT("at") <+> ppr loc) | otherwise = empty \end{code}