Add data type information to VectInfo
[ghc-hetmet.git] / compiler / iface / LoadIface.lhs
index 00e9e7a..8ca7b41 100644 (file)
@@ -19,7 +19,7 @@ module LoadIface (
 #include "HsVersions.h"
 
 import {-# SOURCE #-}  TcIface( tcIfaceDecl, tcIfaceRules, tcIfaceInst, 
-                                tcIfaceFamInst )
+                                tcIfaceFamInst, tcIfaceVectInfo )
 
 import DynFlags
 import IfaceSyn
@@ -38,7 +38,6 @@ import InstEnv
 import FamInstEnv
 import Name
 import NameEnv
-import NameSet
 import MkId
 import Module
 import OccName
@@ -52,7 +51,6 @@ import Outputable
 import BinIface
 import Panic
 
-import Control.Monad (when)
 import Data.List
 import Data.Maybe
 import Data.IORef
@@ -239,6 +237,8 @@ loadInterface doc_str mod from
        ; new_eps_insts     <- mapM tcIfaceInst (mi_insts iface)
        ; new_eps_fam_insts <- mapM tcIfaceFamInst (mi_fam_insts iface)
        ; new_eps_rules     <- tcIfaceRules ignore_prags (mi_rules iface)
+        ; new_eps_vect_info <- tcIfaceVectInfo mod (mkNameEnv new_eps_decls) 
+                                               (mi_vect_info iface)
 
        ; let { final_iface = iface {   
                                mi_decls     = panic "No mi_decls in PIT",
@@ -246,11 +246,6 @@ loadInterface doc_str mod from
                                mi_fam_insts = panic "No mi_fam_insts in PIT",
                                mi_rules     = panic "No mi_rules in PIT"
                               }
-              ; new_eps_vect_info =
-                  VectInfo {
-                    vectInfoCCVar = mkNameSet 
-                                     (ifaceVectInfoCCVar . mi_vect_info $ iface)
-                  }     
                }
 
        ; updateEps_  $ \ eps -> 
@@ -372,8 +367,7 @@ loadDecl ignore_prags mod (_version, decl)
        --      * location
        -- imported name, to fix the module correctly in the cache
     mk_new_bndr mod occ 
-       = newGlobalBinder mod occ 
-                         (importedSrcLoc (showSDoc (ppr (moduleName mod))))
+       = newGlobalBinder mod occ (importedSrcSpan (moduleNameFS (moduleName mod)))
                        -- ToDo: qualify with the package name if necessary
 
     doc = ptext SLIT("Declaration for") <+> ppr (ifName decl)
@@ -587,6 +581,7 @@ pprModIface iface
        , vcat (map ppr (mi_insts iface))
        , vcat (map ppr (mi_fam_insts iface))
        , vcat (map ppr (mi_rules iface))
+        , pprVectInfo (mi_vect_info iface)
        , pprDeprecs (mi_deprecs iface)
        ]
   where
@@ -659,6 +654,17 @@ pprFixities fixes = ptext SLIT("fixities") <+> pprWithCommas pprFix fixes
                  where
                    pprFix (occ,fix) = ppr fix <+> ppr occ 
 
+pprVectInfo :: IfaceVectInfo -> SDoc
+pprVectInfo (IfaceVectInfo { ifaceVectInfoCCVar        = vars
+                           , ifaceVectInfoCCTyCon      = tycons
+                           , ifaceVectInfoCCTyConReuse = tyconsReuse
+                           }) = 
+  vcat 
+  [ ptext SLIT("CC'ed variables:") <+> hsep (map ppr vars)
+  , ptext SLIT("CC'ed tycons:") <+> hsep (map ppr tycons)
+  , ptext SLIT("CC reused tycons:") <+> hsep (map ppr tyconsReuse)
+  ]
+
 pprDeprecs NoDeprecs       = empty
 pprDeprecs (DeprecAll txt)  = ptext SLIT("Deprecate all") <+> doubleQuotes (ftext txt)
 pprDeprecs (DeprecSome prs) = ptext SLIT("Deprecate") <+> vcat (map pprDeprec prs)