\begin{code}
module CmTypes (
Unlinked(..), isObject, nameOfObject, isInterpretable,
- Linkable(..), isObjectLinkable,
- 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 )
ppr (DotO path) = text "DotO" <+> text path
ppr (DotA path) = text "DotA" <+> text path
ppr (DotDLL path) = text "DotDLL" <+> text path
- ppr (BCOs bcos _) = text "BCOs" <+> vcat (map ppr bcos)
+ ppr (BCOs bcos _) = text "BCOs" <+> ppr bcos
isObject (DotO _) = True
isObject (DotA _) = True
nameOfObject (DotA fn) = fn
nameOfObject (DotDLL fn) = fn
-isInterpretable (BCOs _ _) = True
-isInterpretable _ = False
+isInterpretable = not . isObject
data Linkable = LM {
- linkableTime :: ClockTime,
- linkableModName :: ModuleName,
- linkableUnlinked :: [Unlinked]
+ 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 (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
-- 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
}
--- ToDo: shouldn't ms_srcimps and ms_imps be [Module]? --SDM
-
instance Outputable ModSummary where
ppr ms
= sep [text "ModSummary {",
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}