projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2004-08-13 13:04:50 by simonmar]
[ghc-hetmet.git]
/
ghc
/
compiler
/
basicTypes
/
Unique.lhs
diff --git
a/ghc/compiler/basicTypes/Unique.lhs
b/ghc/compiler/basicTypes/Unique.lhs
index
eba88fb
..
dbfc12a
100644
(file)
--- a/
ghc/compiler/basicTypes/Unique.lhs
+++ b/
ghc/compiler/basicTypes/Unique.lhs
@@
-18,17
+18,16
@@
Haskell).
module Unique (
Unique, Uniquable(..), hasKey,
module Unique (
Unique, Uniquable(..), hasKey,
- pprUnique, pprUnique10,
+ pprUnique,
mkUnique, -- Used in UniqSupply
mkUniqueGrimily, -- Used in UniqSupply only!
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,
incrUnique, -- Used for renumbering
deriveUnique, -- Ditto
newTagUnique, -- Used in CgCase
initTyVarUnique,
- initTidyUniques,
isTupleKey,
isTupleKey,
@@
-41,8
+40,11
@@
module Unique (
mkPreludeTyConUnique, mkPreludeClassUnique,
mkPArrDataConUnique,
mkPreludeTyConUnique, mkPreludeClassUnique,
mkPArrDataConUnique,
- mkBuiltinUnique, builtinUniques,
- mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3
+ mkBuiltinUnique,
+ mkPseudoUniqueC,
+ mkPseudoUniqueD,
+ mkPseudoUniqueE,
+ mkPseudoUniqueH
) where
#include "HsVersions.h"
) where
#include "HsVersions.h"
@@
-77,9
+79,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
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
incrUnique :: Unique -> Unique
deriveUnique :: Unique -> Int -> Unique
@@
-90,10
+92,12
@@
isTupleKey :: Unique -> Bool
\begin{code}
\begin{code}
-mkUniqueGrimily x = MkUnique x
+mkUniqueGrimily (I# x) = MkUnique x
{-# INLINE getKey #-}
{-# INLINE getKey #-}
-getKey (MkUnique x) = x
+getKey (MkUnique x) = I# x
+{-# INLINE getKey# #-}
+getKey# (MkUnique x) = x
incrUnique (MkUnique i) = MkUnique (i +# 1#)
incrUnique (MkUnique i) = MkUnique (i +# 1#)
@@
-152,10
+156,10
@@
hasKey :: Uniquable a => a -> Unique -> Bool
x `hasKey` k = getUnique x == k
instance Uniquable FastString where
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
instance Uniquable Int where
- getUnique (I# i#) = mkUniqueGrimily i#
+ getUnique i = mkUniqueGrimily i
\end{code}
\end{code}
@@
-195,15
+199,17
@@
instance Uniquable Unique where
We do sometimes make strings with @Uniques@ in them:
\begin{code}
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)
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)
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, ...
finish_ppr 't' u pp_u | u < 26
= -- Special case to make v common tyvars, t1, t2, ...
@@
-252,13
+258,22
@@
iToBase62 n@(I# n#)
Allocation of unique supply characters:
v,t,u : for renumbering value-, type- and usage- vars.
Allocation of unique supply characters:
v,t,u : for renumbering value-, type- and usage- vars.
- other a-z: lower case chars for unique supplies (see Main.lhs)
B: builtin
C-E: pseudo uniques (used in native-code generator)
X: uniques derived by deriveUnique
_: unifiable tyvars (above)
0-9: prelude things below
B: builtin
C-E: pseudo uniques (used in native-code generator)
X: uniques derived by deriveUnique
_: unifiable tyvars (above)
0-9: prelude things below
+ other a-z: lower case chars for unique supplies. Used so far:
+
+ d desugarer
+ f AbsC flattener
+ g SimplStg
+ l ndpFlatten
+ n Native codegen
+ r Hsc name cache
+ s simplifier
+
\begin{code}
mkAlphaTyVarUnique i = mkUnique '1' i
\begin{code}
mkAlphaTyVarUnique i = mkUnique '1' i
@@
-300,18
+315,13
@@
mkPArrDataConUnique a = mkUnique ':' (2*a)
initTyVarUnique :: Unique
initTyVarUnique = mkUnique 't' 0
initTyVarUnique :: Unique
initTyVarUnique = mkUnique 't' 0
-initTidyUniques :: (Unique, Unique) -- Global and local
-initTidyUniques = (mkUnique 'g' 0, mkUnique 'x' 0)
-
-mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3,
+mkPseudoUniqueC, mkPseudoUniqueD, mkPseudoUniqueE, mkPseudoUniqueH,
mkBuiltinUnique :: Int -> Unique
mkBuiltinUnique :: Int -> Unique
-builtinUniques :: [Unique]
-builtinUniques = map mkBuiltinUnique [1..]
-
mkBuiltinUnique i = mkUnique 'B' i
mkBuiltinUnique i = mkUnique 'B' i
-mkPseudoUnique1 i = mkUnique 'C' i -- used for getUnique on Regs
-mkPseudoUnique2 i = mkUnique 'D' i -- used in NCG for getUnique on RealRegs
-mkPseudoUnique3 i = mkUnique 'E' i -- used in NCG spiller to create spill VirtualRegs
+mkPseudoUniqueC i = mkUnique 'C' i -- used for getUnique on Regs
+mkPseudoUniqueD i = mkUnique 'D' i -- used in NCG for getUnique on RealRegs
+mkPseudoUniqueE i = mkUnique 'E' i -- used in NCG spiller to create spill VirtualRegs
+mkPseudoUniqueH i = mkUnique 'H' i -- used in NCG spiller to create spill VirtualRegs
\end{code}
\end{code}