make exports/imports of depth>0 identifiers work correctly
[ghc-hetmet.git] / compiler / iface / BinIface.hs
index 7c84778..ac21632 100644 (file)
@@ -19,6 +19,7 @@ import HscTypes
 import BasicTypes
 import Demand
 import Annotations
+import CoreSyn
 import IfaceSyn
 import Module
 import Name
@@ -1145,7 +1146,7 @@ instance Binary IfaceBinding where
 instance Binary IfaceIdDetails where
     put_ bh IfVanillaId      = putByte bh 0
     put_ bh (IfRecSelId a b) = do { putByte bh 1; put_ bh a; put_ bh b }
-    put_ bh IfDFunId         = putByte bh 2
+    put_ bh (IfDFunId n)     = do { putByte bh 2; put_ bh n }
     get bh = do
            h <- getByte bh
            case h of
@@ -1153,7 +1154,7 @@ instance Binary IfaceIdDetails where
              1 -> do a <- get bh
                      b <- get bh
                      return (IfRecSelId a b)
-             _ -> return IfDFunId
+              _ -> do { n <- get bh; return (IfDFunId n) }
 
 instance Binary IfaceIdInfo where
     put_ bh NoInfo = putByte bh 0
@@ -1245,6 +1246,16 @@ instance Binary IfaceUnfolding where
          _ -> do e <- get bh
                  return (IfCompulsory e)
 
+instance Binary (DFunArg IfaceExpr) where
+    put_ bh (DFunPolyArg  e) = putByte bh 0 >> put_ bh e
+    put_ bh (DFunConstArg e) = putByte bh 1 >> put_ bh e
+    put_ bh (DFunLamArg i)   = putByte bh 2 >> put_ bh i
+    get bh = do { h <- getByte bh
+                ; case h of
+                    0 -> do { a <- get bh; return (DFunPolyArg a) }
+                    1 -> do { a <- get bh; return (DFunConstArg a) }
+                    _ -> do { a <- get bh; return (DFunLamArg a) } }
+
 instance Binary IfaceNote where
     put_ bh (IfaceSCC aa) = do
            putByte bh 0
@@ -1271,10 +1282,14 @@ instance Binary IfaceNote where
 -- to avoid re-building it in various places.  So we build the OccName
 -- when de-serialising.
 
+-- NOTE regarding HetMet extensions: this screws up Adam's heinous
+-- hide-the-syntactical-level-in-the-namespace trick.
+
 instance Binary IfaceDecl where
     put_ bh (IfaceId name ty details idinfo) = do
            putByte bh 0
            put_ bh (occNameFS name)
+           put_ bh (getOccNameDepth name)
            put_ bh ty
            put_ bh details
            put_ bh idinfo
@@ -1310,10 +1325,11 @@ instance Binary IfaceDecl where
            h <- getByte bh
            case h of
              0 -> do name    <- get bh
+                     depth   <- get bh
                      ty      <- get bh
                      details <- get bh
                      idinfo  <- get bh
-                      occ <- return $! mkOccNameFS varName name
+                      occ <- return $! mkOccNameFS (varNameDepth depth) name
                      return (IfaceId occ ty details idinfo)
              1 -> error "Binary.get(TyClDecl): ForeignType"
              2 -> do
@@ -1425,13 +1441,15 @@ instance Binary IfaceConDecl where
 instance Binary IfaceClassOp where
    put_ bh (IfaceClassOp n def ty) = do        
        put_ bh (occNameFS n)
+       put_ bh (getOccNameDepth n)
        put_ bh def     
        put_ bh ty
    get bh = do
        n <- get bh
+       depth <- get bh
        def <- get bh
        ty <- get bh
-        occ <- return $! mkOccNameFS varName n
+        occ <- return $! mkOccNameFS (varNameDepth depth) n
        return (IfaceClassOp occ def ty)
 
 instance Binary IfaceRule where