%
+% (c) The University of Glasgow 2006
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
Haskell).
\begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
module Unique (
Unique, Uniquable(..), hasKey,
#include "HsVersions.h"
-import BasicTypes ( Boxity(..) )
-import PackageConfig ( PackageId, packageIdFS )
-import FastString ( FastString, uniqueOfFS )
+import StaticFlags
+import BasicTypes
+import FastString
import Outputable
-import FastTypes
-
-import GLAEXTS
-import Char ( chr, ord )
+import GHC.Exts
+import Data.Char ( chr, ord )
\end{code}
%************************************************************************
mkUnique (C# c) (I# i)
= MkUnique (w2i (tag `or#` bits))
where
-#if __GLASGOW_HASKELL__ >= 503
tag = i2w (ord# c) `uncheckedShiftL#` i2w_s 24#
-#else
- tag = i2w (ord# c) `shiftL#` i2w_s 24#
-#endif
bits = i2w i `and#` (i2w 16777215#){-``0x00ffffff''-}
unpkUnique (MkUnique u)
= let
- tag = C# (chr# (w2i ((i2w u) `shiftr` (i2w_s 24#))))
+ tag = C# (chr# (w2i ((i2w u) `uncheckedShiftRL#` (i2w_s 24#))))
i = I# (w2i ((i2w u) `and#` (i2w 16777215#){-``0x00ffffff''-}))
in
(tag, i)
- where
-#if __GLASGOW_HASKELL__ >= 503
- shiftr x y = uncheckedShiftRL# x y
-#else
- shiftr x y = shiftRL# x y
-#endif
\end{code}
instance Uniquable FastString where
getUnique fs = mkUniqueGrimily (I# (uniqueOfFS fs))
-instance Uniquable PackageId where
- getUnique pid = getUnique (packageIdFS pid)
-
instance Uniquable Int where
getUnique i = mkUniqueGrimily i
\end{code}
\begin{code}
pprUnique :: Unique -> SDoc
pprUnique uniq
+#ifdef DEBUG
+ | opt_SuppressUniques
+ = empty -- Used exclusively to suppress uniques so you
+ | otherwise -- can compare output easily
+#endif
= case unpkUnique uniq of
(tag, u) -> finish_ppr tag u (text (iToBase62 u))