[project @ 2003-11-17 14:23:30 by simonmar]
[ghc-hetmet.git] / ghc / compiler / basicTypes / Unique.lhs
index eba88fb..9f5109f 100644 (file)
@@ -18,17 +18,16 @@ Haskell).
 module Unique (
        Unique, Uniquable(..), hasKey,
 
-       pprUnique, pprUnique10,
+       pprUnique,
 
        mkUnique,                       -- Used in UniqSupply
        mkUniqueGrimily,                -- Used in UniqSupply only!
-       getKey,                         -- Used in Var, UniqFM, Name only!
+       getKey, getKey#,                -- Used in Var, UniqFM, Name only!
 
        incrUnique,                     -- Used for renumbering
        deriveUnique,                   -- Ditto
        newTagUnique,                   -- Used in CgCase
        initTyVarUnique,
-       initTidyUniques,
 
        isTupleKey, 
 
@@ -41,8 +40,8 @@ module Unique (
        mkPreludeTyConUnique, mkPreludeClassUnique,
        mkPArrDataConUnique,
 
-       mkBuiltinUnique, builtinUniques,
-       mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3
+       mkBuiltinUnique,
+       mkPseudoUnique3
     ) where
 
 #include "HsVersions.h"
@@ -77,9 +76,9 @@ The stuff about unique *supplies* is handled further down this module.
 mkUnique       :: Char -> Int -> Unique        -- Builds a unique from pieces
 unpkUnique     :: Unique -> (Char, Int)        -- The reverse
 
-mkUniqueGrimily :: Int# -> Unique              -- A trap-door for UniqSupply
-
-getKey         :: Unique -> Int#               -- for Var
+mkUniqueGrimily :: Int -> Unique               -- A trap-door for UniqSupply
+getKey         :: Unique -> Int                -- for Var
+getKey#                :: Unique -> Int#               -- for Var
 
 incrUnique     :: Unique -> Unique
 deriveUnique   :: Unique -> Int -> Unique
@@ -90,10 +89,12 @@ isTupleKey  :: Unique -> Bool
 
 
 \begin{code}
-mkUniqueGrimily x = MkUnique x
+mkUniqueGrimily (I# x) = MkUnique x
 
 {-# INLINE getKey #-}
-getKey (MkUnique x) = x
+getKey (MkUnique x) = I# x
+{-# INLINE getKey# #-}
+getKey# (MkUnique x) = x
 
 incrUnique (MkUnique i) = MkUnique (i +# 1#)
 
@@ -152,10 +153,10 @@ hasKey            :: Uniquable a => a -> Unique -> Bool
 x `hasKey` k   = getUnique x == k
 
 instance Uniquable FastString where
- getUnique fs = mkUniqueGrimily (uniqueOfFS fs)
+ getUnique fs = mkUniqueGrimily (I# (uniqueOfFS fs))
 
 instance Uniquable Int where
- getUnique (I# i#) = mkUniqueGrimily i#
+ getUnique i = mkUniqueGrimily i
 \end{code}
 
 
@@ -195,15 +196,17 @@ instance Uniquable Unique where
 
 We do sometimes make strings with @Uniques@ in them:
 \begin{code}
-pprUnique, pprUnique10 :: Unique -> SDoc
-
+pprUnique :: Unique -> SDoc
 pprUnique uniq
   = case unpkUnique uniq of
       (tag, u) -> finish_ppr tag u (iToBase62 u)
 
+#ifdef UNUSED
+pprUnique10 :: Unique -> SDoc
 pprUnique10 uniq       -- in base-10, dudes
   = case unpkUnique uniq of
       (tag, u) -> finish_ppr tag u (int u)
+#endif
 
 finish_ppr 't' u pp_u | u < 26
   =    -- Special case to make v common tyvars, t1, t2, ...
@@ -300,9 +303,6 @@ mkPArrDataConUnique a               = mkUnique ':' (2*a)
 initTyVarUnique :: Unique
 initTyVarUnique = mkUnique 't' 0
 
-initTidyUniques :: (Unique, Unique)    -- Global and local
-initTidyUniques = (mkUnique 'g' 0, mkUnique 'x' 0)
-
 mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3, 
    mkBuiltinUnique :: Int -> Unique