[project @ 2000-10-27 15:40:01 by simonpj]
[ghc-hetmet.git] / ghc / compiler / ghci / CmLink.lhs
index 953f3be..3ec42dd 100644 (file)
@@ -13,14 +13,14 @@ module CmLink ( Linkable(..),  Unlinked(..),
 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 )
 
@@ -59,7 +59,7 @@ 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 (map binder binds)
+   ppr (Trees binds _) = text "Trees" <+> ppr (map binder binds)
 
 
 isObject (DotO _) = True
@@ -67,7 +67,7 @@ isObject (DotA _) = True
 isObject (DotDLL _) = True
 isObject _ = False
 
-isInterpretable (Trees _) = True
+isInterpretable (Trees _ _) = True
 isInterpretable _ = False
 
 data Linkable
@@ -98,13 +98,14 @@ link pci groups pls1
         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 ]
@@ -122,6 +123,7 @@ link pci (group:groups) pls = do
        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"