X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FHscTypes.lhs;h=7ad34ace635c4fc315e9a0e8302676d168e7f7dd;hb=c8b37bf43c61c2fc42ec6ba4ad57f631a59fc2d4;hp=abebd14b6b4e956e03bfb8690453d37a88490d1d;hpb=6a05ec5ef5373f61b7f9f5bdc344483417fa801b;p=ghc-hetmet.git diff --git a/compiler/main/HscTypes.lhs b/compiler/main/HscTypes.lhs index abebd14..7ad34ac 100644 --- a/compiler/main/HscTypes.lhs +++ b/compiler/main/HscTypes.lhs @@ -13,7 +13,8 @@ module HscTypes ( ModuleGraph, emptyMG, ModDetails(..), emptyModDetails, - ModGuts(..), CgGuts(..), ModImports(..), ForeignStubs(..), + ModGuts(..), CoreModule(..), CgGuts(..), ModImports(..), ForeignStubs(..), + ImportedMods, ModSummary(..), ms_mod_name, showModMsg, isBootSummary, msHsFilePath, msHiFilePath, msObjFilePath, @@ -95,7 +96,7 @@ import Type import Class ( Class, classSelIds, classATs, classTyCon ) import TyCon -import DataCon ( DataCon, dataConImplicitIds ) +import DataCon ( DataCon, dataConImplicitIds, dataConWrapId ) import PrelNames ( gHC_PRIM ) import Packages hiding ( Version(..) ) import DynFlags ( DynFlags(..), isOneShot, HscTarget (..) ) @@ -283,7 +284,7 @@ lookupIfaceByModule dflags hpt pit mod -- (a) In OneShot mode, even home-package modules accumulate in the PIT -- (b) Even in Batch (--make) mode, there is *one* case where a home-package -- module is in the PIT, namely GHC.Prim when compiling the base package. --- We could eliminate (b) if we wanted, by making GHC.Prim belong to a packake +-- We could eliminate (b) if we wanted, by making GHC.Prim belong to a package -- of its own, but it doesn't seem worth the bother. \end{code} @@ -509,6 +510,8 @@ emptyModDetails = ModDetails { md_types = emptyTypeEnv, -- being compiled right now. Once it is compiled, a ModIface and -- ModDetails are extracted and the ModGuts is dicarded. +type ImportedMods = ModuleEnv (Module, [(ModuleName, Bool, SrcSpan)]) + data ModGuts = ModGuts { mg_module :: !Module, @@ -516,9 +519,9 @@ data ModGuts mg_exports :: ![AvailInfo], -- What it exports mg_deps :: !Dependencies, -- What is below it, directly or -- otherwise - mg_dir_imps :: ![Module], -- Directly-imported modules; used to + mg_dir_imps :: !ImportedMods, -- Directly-imported modules; used to -- generate initialisation code - mg_usages :: ![Usage], -- Version info for what it needed + mg_used_names:: !NameSet, -- What it needed (used in mkIface) mg_rdr_env :: !GlobalRdrEnv, -- Top-level lexical environment @@ -548,6 +551,24 @@ data ModGuts -- this one); c.f. tcg_fam_inst_env } +-- A CoreModule consists of just the fields of a ModGuts that are needed for +-- the compileToCoreModule interface. +data CoreModule + = CoreModule { + -- Module name + cm_module :: !Module, + -- Type environment for types declared in this module + cm_types :: !TypeEnv, + -- Declarations + cm_binds :: [CoreBind], + -- Imports + cm_imports :: ![Module] + } + +instance Outputable CoreModule where + ppr (CoreModule {cm_module = mn, cm_types = te, cm_binds = cb}) = + text "%module" <+> ppr mn <+> ppr te $$ vcat (map ppr cb) + -- The ModGuts takes on several slightly different forms: -- -- After simplification, the following fields change slightly: @@ -940,8 +961,9 @@ tyThingDataCon (ADataCon dc) = dc tyThingDataCon other = pprPanic "tyThingDataCon" (pprTyThing other) tyThingId :: TyThing -> Id -tyThingId (AnId id) = id -tyThingId other = pprPanic "tyThingId" (pprTyThing other) +tyThingId (AnId id) = id +tyThingId (ADataCon dc) = dataConWrapId dc +tyThingId other = pprPanic "tyThingId" (pprTyThing other) \end{code} %************************************************************************ @@ -1462,7 +1484,9 @@ data Unlinked | BCOs CompiledByteCode ModBreaks #ifndef GHCI -data CompiledByteCode +data CompiledByteCode = CompiledByteCodeUndefined +_unused :: CompiledByteCode +_unused = CompiledByteCodeUndefined #endif instance Outputable Unlinked where