[project @ 1997-05-19 00:12:10 by sof]
[ghc-hetmet.git] / ghc / compiler / codeGen / SMRep.lhs
index c7656af..78934e8 100644 (file)
@@ -1,5 +1,5 @@
 %
-% (c) The GRASP/AQUA Project, Glasgow University, 1992-1995
+% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
 %
 \section[SMRep]{Storage manager representations of closure}
 
@@ -12,12 +12,18 @@ Other modules should access this info through ClosureInfo.
 module SMRep (
        SMRep(..), SMSpecRepKind(..), SMUpdateKind(..),
        getSMInfoStr, getSMInitHdrStr, getSMUpdInplaceHdrStr,
-       ltSMRepHdr -- UNUSED, equivSMRepHdr
+       ltSMRepHdr,
+       isConstantRep, isSpecRep, isStaticRep, isPhantomRep,
+       isIntLikeRep
     ) where
 
+IMP_Ubiq(){-uitous-}
+
+import Pretty          ( text )
+import Util            ( panic )
+#if __GLASGOW_HASKELL__ >= 202
 import Outputable
-import Pretty
-import Util
+#endif
 \end{code}
 
 %************************************************************************
@@ -57,12 +63,12 @@ data SMRep
        SMSpecRepKind   -- Which kind of specialised representation
        Int             -- # ptr words
        Int             -- # non-ptr words
-        SMUpdateKind           -- Updatable?
+       SMUpdateKind    -- Updatable?
 
   | GenericRep         -- GC routines consult sizes in info tbl
        Int             -- # ptr words
        Int             -- # non-ptr words
-        SMUpdateKind   -- Updatable?
+       SMUpdateKind    -- Updatable?
 
   | BigTupleRep                -- All ptrs, size in var-hdr field
                        -- Used for big tuples
@@ -96,7 +102,7 @@ BigTupleRep == TUPLE
     Never generated by the compiler, and only used in the RTS when
     mutuples don't require special attention at GC time (e.g. 2s)
     When it is used, it is a primitive object (never entered).
-    May be mutable...probably should never be used in the parallel 
+    May be mutable...probably should never be used in the parallel
     system, since we need to distinguish mutables from immutables when
     deciding whether to copy or move closures across processors.
 
@@ -128,7 +134,27 @@ MuTupleRep == MUTUPLE
 
 --jim
 -}
+\end{code}
+
+\begin{code}
+isConstantRep, isSpecRep, isStaticRep, isPhantomRep, isIntLikeRep :: SMRep -> Bool
+isConstantRep (SpecialisedRep ConstantRep _ _ _)   = True
+isConstantRep other                               = False
+
+isSpecRep (SpecialisedRep kind _ _ _)  = True    -- All the kinds of Spec closures
+isSpecRep other                                = False   -- True indicates that the _VHS is 0 !
+
+isStaticRep (StaticRep _ _) = True
+isStaticRep _              = False
 
+isPhantomRep PhantomRep        = True
+isPhantomRep _         = False
+
+isIntLikeRep (SpecialisedRep IntLikeRep _ _ _)   = True
+isIntLikeRep other                              = False
+\end{code}
+
+\begin{code}
 instance Eq SMRep where
     (SpecialisedRep k1 a1 b1 _) == (SpecialisedRep k2 a2 b2 _) = (tagOf_SMSpecRepKind k1) _EQ_ (tagOf_SMSpecRepKind k2)
                                                               && a1 == a2 && b1 == b2
@@ -138,11 +164,6 @@ instance Eq SMRep where
     (DataRep a1)             == (DataRep a2)              = a1 == a2
     a                        == b                         = (tagOf_SMRep a) _EQ_ (tagOf_SMRep b)
 
-{- UNUSED:
-equivSMRepHdr :: SMRep -> SMRep -> Bool
-a `equivSMRepHdr` b = (tagOf_SMRep a) _EQ_ (tagOf_SMRep b)
--}
-
 ltSMRepHdr :: SMRep -> SMRep -> Bool
 a `ltSMRepHdr` b = (tagOf_SMRep a) _LT_ (tagOf_SMRep b)
 
@@ -200,7 +221,7 @@ instance Text SMRep where
           MuTupleRep _                          -> "MUTUPLE")
 
 instance Outputable SMRep where
-    ppr sty rep = ppStr (show rep)
+    ppr sty rep = text (show rep)
 
 getSMInfoStr :: SMRep -> String
 getSMInfoStr (StaticRep _ _)                           = "STATIC"