where
import StgInterp ( linkIModules, ClosureEnv, ItblEnv )
-
+import Linker ( loadObj, resolveObjs )
import CmStaticInfo ( PackageConfigInfo )
import Module ( ModuleName, PackageName )
import InterpSyn ( UnlinkedIBind, HValue, binder )
import Module ( Module )
import Outputable ( SDoc )
import FiniteMap ( emptyFM )
-import Digraph ( SCC(..) )
+import Digraph ( SCC(..), flattenSCC )
import Outputable
import Panic ( panic )
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 (map binder binds)
+ ppr (Trees binds _) = text "Trees" <+> ppr (map binder binds)
isObject (DotO _) = True
isObject (DotDLL _) = True
isObject _ = False
-isInterpretable (Trees _) = True
+isInterpretable (Trees _ _) = True
isInterpretable _ = False
data Linkable
return (LinkOK pls1)
ppLinkableSCC :: SCC Linkable -> SDoc
-ppLinkableSCC (CyclicSCC xs) = ppr xs
-ppLinkableSCC (AcyclicSCC x) = ppr [x]
-
+ppLinkableSCC = ppr . flattenSCC
#else
+
+
link pci [] pls = return (LinkOK pls)
-link pci (group:groups) pls = do
+link pci (groupSCC:groups) pls = do
+ let group = flattenSCC groupSCC
-- the group is either all objects or all interpretable, for now
if all isObject group
then do mapM loadObj [ file | DotO file <- group ]
return (LinkErrs pls (ptext SLIT("linker: group must contain all objects or all interpreted modules")))
#endif
+
modname_of_linkable (LM nm _) = nm
modname_of_linkable (LP _) = panic "modname_of_linkable: package"