X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FcompMan%2FCmTypes.lhs;h=fd3cbfc3437192b3c535db30b178cac1748767f3;hb=a63bd8f558fedec86451f36d86833c9afb934ae8;hp=8bf11a96948696cb215e207680b772ba6fbdce94;hpb=8af3bf04cda57659b459724f082fa04a30dd5472;p=ghc-hetmet.git diff --git a/ghc/compiler/compMan/CmTypes.lhs b/ghc/compiler/compMan/CmTypes.lhs index 8bf11a9..fd3cbfc 100644 --- a/ghc/compiler/compMan/CmTypes.lhs +++ b/ghc/compiler/compMan/CmTypes.lhs @@ -6,14 +6,13 @@ \begin{code} module CmTypes ( Unlinked(..), isObject, nameOfObject, isInterpretable, - Linkable(..), linkableTime, - ModSummary(..), ms_allimps, name_of_summary, pprSummaryTime + Linkable(..), isObjectLinkable, partitionLinkable, + ModSummary(..), ms_allimps, pprSummaryTime, modSummaryName, ) where import Interpreter import HscTypes import Module -import CmStaticInfo import Outputable import Time ( ClockTime ) @@ -23,14 +22,14 @@ data Unlinked = DotO FilePath | DotA FilePath | DotDLL FilePath - | Trees [UnlinkedIBind] ItblEnv -- bunch of interpretable bindings, + - -- a mapping from DataCons to their itbls + | BCOs [UnlinkedBCO] ItblEnv -- bunch of interpretable bindings, + + -- a mapping from DataCons to their itbls instance Outputable Unlinked where ppr (DotO path) = text "DotO" <+> text path ppr (DotA path) = text "DotA" <+> text path ppr (DotDLL path) = text "DotDLL" <+> text path - ppr (Trees binds _) = text "Trees" <+> ppr binds + ppr (BCOs bcos _) = text "BCOs" <+> ppr bcos isObject (DotO _) = True isObject (DotA _) = True @@ -41,23 +40,34 @@ nameOfObject (DotO fn) = fn nameOfObject (DotA fn) = fn nameOfObject (DotDLL fn) = fn -isInterpretable (Trees _ _) = True -isInterpretable _ = False - -data Linkable - = LM ClockTime ModuleName [Unlinked] - | LP PackageName +isInterpretable = not . isObject + +data Linkable = LM { + linkableTime :: ClockTime, + linkableModName :: ModuleName, -- should be Module, but see below + linkableUnlinked :: [Unlinked] + } + +isObjectLinkable :: Linkable -> Bool +isObjectLinkable l = all isObject (linkableUnlinked l) + +-- HACK to support f-x-dynamic in the interpreter; no other purpose +partitionLinkable :: Linkable -> [Linkable] +partitionLinkable li + = let li_uls = linkableUnlinked li + li_uls_obj = filter isObject li_uls + li_uls_bco = filter isInterpretable li_uls + in + case (li_uls_obj, li_uls_bco) of + (objs@(_:_), bcos@(_:_)) + -> [li{linkableUnlinked=li_uls_obj}, li{linkableUnlinked=li_uls_bco}] + other + -> [li] instance Outputable Linkable where - ppr (LM when_made mod_nm unlinkeds) - = text "LinkableM" <+> parens (text (show when_made)) <+> ppr mod_nm - <+> ppr unlinkeds - ppr (LP package_nm) - = text "LinkableP" <+> ptext package_nm - -linkableTime (LM when_made mod_nm unlinkeds) = when_made -linkableTime (LP package_nm) = panic "linkableTime" - + ppr (LM when_made mod unlinkeds) + = (text "LinkableM" <+> parens (text (show when_made)) <+> ppr mod) + $$ nest 3 (ppr unlinkeds) -- The ModuleLocation contains both the original source filename and the -- filename of the cleaned-up source file after all preprocessing has been @@ -67,12 +77,11 @@ linkableTime (LP package_nm) = panic "linkableTime" -- and let @compile@ read from that file on the way back up. data ModSummary = ModSummary { - ms_mod :: Module, -- name, package - ms_location :: ModuleLocation, -- location - ms_srcimps :: [ModuleName], -- source imports - ms_imps :: [ModuleName], -- non-source imports - ms_hs_date :: Maybe ClockTime -- timestamp of summarised - -- file, if home && source + ms_mod :: Module, -- name, package + ms_location :: ModuleLocation, -- location + ms_srcimps :: [ModuleName], -- source imports + ms_imps :: [ModuleName], -- non-source imports + ms_hs_date :: ClockTime -- timestamp of summarised file } instance Outputable ModSummary where @@ -91,6 +100,6 @@ pprSummaryTime ms ms_allimps ms = ms_srcimps ms ++ ms_imps ms -name_of_summary :: ModSummary -> ModuleName -name_of_summary = moduleName . ms_mod +modSummaryName :: ModSummary -> ModuleName +modSummaryName = moduleName . ms_mod \end{code}