[project @ 2002-02-11 08:20:38 by chak]
[ghc-hetmet.git] / ghc / compiler / basicTypes / Unique.lhs
index 1282995..44c8c07 100644 (file)
@@ -37,165 +37,13 @@ module Unique (
        -- [the Oh-So-Wonderful Haskell module system wins again...]
        mkAlphaTyVarUnique,
        mkPrimOpIdUnique,
-       mkTupleDataConUnique,
-       mkTupleTyConUnique,
-
-       getBuiltinUniques, mkBuiltinUnique,
-       mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3,
-
-       absentErrorIdKey,       -- alphabetical...
-       addrDataConKey,
-       addrPrimTyConKey,
-       addrTyConKey,
-       appendIdKey,
-       arrayPrimTyConKey,
-       assertIdKey,
-       augmentIdKey,
-       bcoPrimTyConKey,
-       bindIOIdKey,
-       boolTyConKey,
-       boundedClassKey,
-       boxedConKey,
-       buildIdKey,
-       byteArrayPrimTyConKey,
-       byteArrayTyConKey,
-       cCallableClassKey,
-       cReturnableClassKey,
-       charDataConKey,
-       charPrimTyConKey,
-       charTyConKey,
-       concatIdKey,
-       consDataConKey,
-       deRefStablePtrIdKey,
-       doubleDataConKey,
-       doublePrimTyConKey,
-       doubleTyConKey,
-       enumClassKey,
-       enumFromClassOpKey,
-       enumFromThenClassOpKey,
-       enumFromThenToClassOpKey,
-       enumFromToClassOpKey,
-       eqClassKey,
-       eqClassOpKey,
-       eqStringIdKey,
-       errorIdKey,
-       falseDataConKey,
-       failMClassOpKey,
-       filterIdKey,
-       floatDataConKey,
-       floatPrimTyConKey,
-       floatTyConKey,
-       floatingClassKey,
-       foldlIdKey,
-       foldrIdKey,
-       foreignObjDataConKey,
-       foreignObjPrimTyConKey,
-       foreignObjTyConKey,
-       fractionalClassKey,
-       fromEnumClassOpKey,
-       fromIntClassOpKey,
-       fromIntegerClassOpKey,
-       fromRationalClassOpKey,
-       funTyConKey,
-       functorClassKey,
-       geClassOpKey,
-       getTagIdKey,
-       intDataConKey,
-       intPrimTyConKey,
-       intTyConKey,
-       int8TyConKey,
-       int16TyConKey,
-       int32TyConKey,
-       int64PrimTyConKey,
-       int64TyConKey,
-       smallIntegerDataConKey,
-       largeIntegerDataConKey,
-       integerMinusOneIdKey,
-       integerPlusOneIdKey,
-       integerPlusTwoIdKey,
-       int2IntegerIdKey,
-       integerTyConKey,
-       integerZeroIdKey,
-       integralClassKey,
-       irrefutPatErrorIdKey,
-       ixClassKey,
-       listTyConKey,
-       mainKey,
-       makeStablePtrIdKey,
-       mapIdKey,
-       minusClassOpKey,
-       monadClassKey,
-       monadPlusClassKey,
-       mutableArrayPrimTyConKey,
-       mutableByteArrayPrimTyConKey,
-       mutableByteArrayTyConKey,
-       mutVarPrimTyConKey,
-       nilDataConKey,
-       noMethodBindingErrorIdKey,
-       nonExhaustiveGuardsErrorIdKey,
-       numClassKey,
-       anyBoxConKey,
-       ordClassKey,
-       orderingTyConKey,
-       otherwiseIdKey,
-       parErrorIdKey,
-       parIdKey,
-       patErrorIdKey,
-       plusIntegerIdKey,
-       ratioDataConKey,
-       ratioTyConKey,
-       rationalTyConKey,
-       readClassKey,
-       realClassKey,
-       realFloatClassKey,
-       realFracClassKey,
-       realWorldPrimIdKey,
-       realWorldTyConKey,
-       recConErrorIdKey,
-       recSelErrIdKey,
-       recUpdErrorIdKey,
-       returnIOIdKey,
-       returnMClassOpKey,
-       runSTRepIdKey,
-       showClassKey,
-       ioTyConKey,
-       ioDataConKey,
-       stablePtrDataConKey,
-       stablePtrPrimTyConKey,
-       stablePtrTyConKey,
-       stableNameDataConKey,
-       stableNamePrimTyConKey,
-       stableNameTyConKey,
-
-       statePrimTyConKey,
-       timesIntegerIdKey,
-       typeConKey,
-       kindConKey,
-       boxityConKey,
-       mVarPrimTyConKey,
-       thenMClassOpKey,
-       threadIdPrimTyConKey,
-       toEnumClassOpKey,
-       traceIdKey,
-       trueDataConKey,
-       unboundKey,
-       unboxedConKey,
-       unpackCStringUtf8IdKey,
-       unpackCStringAppendIdKey,
-       unpackCStringFoldrIdKey,
-       unpackCStringIdKey,
-       unsafeCoerceIdKey,
-       ushowListIdKey,
-       weakPrimTyConKey,
-       wordDataConKey,
-       wordPrimTyConKey,
-       wordTyConKey,
-       word8TyConKey,
-       word16TyConKey,
-       word32TyConKey,
-       word64PrimTyConKey,
-       word64TyConKey,
-       zipIdKey
+       mkTupleTyConUnique, mkTupleDataConUnique,
+       mkPreludeMiscIdUnique, mkPreludeDataConUnique,
+       mkPreludeTyConUnique, mkPreludeClassUnique,
+       mkPArrDataConUnique,
+
+       mkBuiltinUnique,
+       mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3
     ) where
 
 #include "HsVersions.h"
@@ -205,6 +53,7 @@ import FastString    ( FastString, uniqueOfFS )
 import GlaExts
 import ST
 import PrelBase ( Char(..), chr, ord )
+import FastTypes
 
 import Outputable
 \end{code}
@@ -223,7 +72,7 @@ data Unique = MkUnique Int#
 \end{code}
 
 \begin{code}
-u2i :: Unique -> FAST_INT
+u2i :: Unique -> FastInt
 u2i (MkUnique i) = i
 \end{code}
 
@@ -272,7 +121,11 @@ i2w_s x = (x::Int#)
 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)
@@ -282,7 +135,11 @@ unpkUnique (MkUnique u)
     in
     (tag, i)
   where
+#if __GLASGOW_HASKELL__ >= 503
+    shiftr x y = uncheckedShiftRL# x y
+#else
     shiftr x y = shiftRL# x y
+#endif
 \end{code}
 
 
@@ -439,9 +296,14 @@ Allocation of unique supply characters:
 mkAlphaTyVarUnique i            = mkUnique '1' i
 
 mkPreludeClassUnique i         = mkUnique '2' i
-mkPreludeTyConUnique i         = mkUnique '3' i
-mkTupleTyConUnique Boxed   a   = mkUnique '4' a
-mkTupleTyConUnique Unboxed a   = mkUnique '5' a
+
+-- Prelude type constructors occupy *three* slots.
+-- The first is for the tycon itself; the latter two
+-- are for the generic to/from Ids.  See TysWiredIn.mk_tc_gen_info.
+
+mkPreludeTyConUnique i         = mkUnique '3' (3*i)
+mkTupleTyConUnique Boxed   a   = mkUnique '4' (3*a)
+mkTupleTyConUnique Unboxed a   = mkUnique '5' (3*a)
 
 -- Data constructor keys occupy *two* slots.  The first is used for the
 -- data constructor itself and its wrapper function (the function that
@@ -461,6 +323,10 @@ isTupleKey u = case unpkUnique u of
 mkPrimOpIdUnique op            = mkUnique '9' op
 mkPreludeMiscIdUnique i                = mkUnique '0' i
 
+-- No numbers left anymore, so I pick something different for the character
+-- tag 
+mkPArrDataConUnique a          = mkUnique ':' (2*a)
+
 -- The "tyvar uniques" print specially nicely: a, b, c, etc.
 -- See pprUnique for details
 
@@ -477,211 +343,5 @@ 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
-
-
-
-getBuiltinUniques :: Int -> [Unique]
-getBuiltinUniques n = map (mkUnique 'B') [1 .. n]
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-boundedClassKey                = mkPreludeClassUnique 1 
-enumClassKey           = mkPreludeClassUnique 2 
-eqClassKey             = mkPreludeClassUnique 3 
-floatingClassKey       = mkPreludeClassUnique 5 
-fractionalClassKey     = mkPreludeClassUnique 6 
-integralClassKey       = mkPreludeClassUnique 7 
-monadClassKey          = mkPreludeClassUnique 8 
-monadPlusClassKey      = mkPreludeClassUnique 9
-functorClassKey                = mkPreludeClassUnique 10
-numClassKey            = mkPreludeClassUnique 11
-ordClassKey            = mkPreludeClassUnique 12
-readClassKey           = mkPreludeClassUnique 13
-realClassKey           = mkPreludeClassUnique 14
-realFloatClassKey      = mkPreludeClassUnique 15
-realFracClassKey       = mkPreludeClassUnique 16
-showClassKey           = mkPreludeClassUnique 17
-                                              
-cCallableClassKey      = mkPreludeClassUnique 18
-cReturnableClassKey    = mkPreludeClassUnique 19
-
-ixClassKey             = mkPreludeClassUnique 20
 \end{code}
 
-%************************************************************************
-%*                                                                     *
-\subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-addrPrimTyConKey                       = mkPreludeTyConUnique  1
-addrTyConKey                           = mkPreludeTyConUnique  2
-arrayPrimTyConKey                      = mkPreludeTyConUnique  3
-boolTyConKey                           = mkPreludeTyConUnique  4
-byteArrayPrimTyConKey                  = mkPreludeTyConUnique  5
-charPrimTyConKey                       = mkPreludeTyConUnique  7
-charTyConKey                           = mkPreludeTyConUnique  8
-doublePrimTyConKey                     = mkPreludeTyConUnique  9
-doubleTyConKey                         = mkPreludeTyConUnique 10 
-floatPrimTyConKey                      = mkPreludeTyConUnique 11
-floatTyConKey                          = mkPreludeTyConUnique 12
-funTyConKey                            = mkPreludeTyConUnique 13
-intPrimTyConKey                                = mkPreludeTyConUnique 14
-intTyConKey                            = mkPreludeTyConUnique 15
-int8TyConKey                           = mkPreludeTyConUnique 16
-int16TyConKey                          = mkPreludeTyConUnique 17
-int32TyConKey                          = mkPreludeTyConUnique 18
-int64PrimTyConKey                      = mkPreludeTyConUnique 19
-int64TyConKey                          = mkPreludeTyConUnique 20
-integerTyConKey                                = mkPreludeTyConUnique 21
-listTyConKey                           = mkPreludeTyConUnique 22
-foreignObjPrimTyConKey                 = mkPreludeTyConUnique 23
-foreignObjTyConKey                     = mkPreludeTyConUnique 24
-weakPrimTyConKey                       = mkPreludeTyConUnique 25
-mutableArrayPrimTyConKey               = mkPreludeTyConUnique 26
-mutableByteArrayPrimTyConKey           = mkPreludeTyConUnique 27
-orderingTyConKey                       = mkPreludeTyConUnique 28
-mVarPrimTyConKey                       = mkPreludeTyConUnique 29
-ratioTyConKey                          = mkPreludeTyConUnique 30
-rationalTyConKey                       = mkPreludeTyConUnique 31
-realWorldTyConKey                      = mkPreludeTyConUnique 32
-stablePtrPrimTyConKey                  = mkPreludeTyConUnique 33
-stablePtrTyConKey                      = mkPreludeTyConUnique 34
-statePrimTyConKey                      = mkPreludeTyConUnique 35
-stableNamePrimTyConKey                 = mkPreludeTyConUnique 50
-stableNameTyConKey                     = mkPreludeTyConUnique 51
-mutableByteArrayTyConKey               = mkPreludeTyConUnique 52
-mutVarPrimTyConKey                     = mkPreludeTyConUnique 53
-ioTyConKey                             = mkPreludeTyConUnique 55
-byteArrayTyConKey                      = mkPreludeTyConUnique 56
-wordPrimTyConKey                       = mkPreludeTyConUnique 57
-wordTyConKey                           = mkPreludeTyConUnique 58
-word8TyConKey                          = mkPreludeTyConUnique 59
-word16TyConKey                         = mkPreludeTyConUnique 60
-word32TyConKey                         = mkPreludeTyConUnique 61
-word64PrimTyConKey                     = mkPreludeTyConUnique 62
-word64TyConKey                         = mkPreludeTyConUnique 63
-boxedConKey                            = mkPreludeTyConUnique 64
-unboxedConKey                          = mkPreludeTyConUnique 65
-anyBoxConKey                           = mkPreludeTyConUnique 66
-kindConKey                             = mkPreludeTyConUnique 67
-boxityConKey                           = mkPreludeTyConUnique 68
-typeConKey                             = mkPreludeTyConUnique 69
-threadIdPrimTyConKey                   = mkPreludeTyConUnique 70
-bcoPrimTyConKey                                = mkPreludeTyConUnique 71
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-addrDataConKey                         = mkPreludeDataConUnique  0
-charDataConKey                         = mkPreludeDataConUnique  1
-consDataConKey                         = mkPreludeDataConUnique  2
-doubleDataConKey                       = mkPreludeDataConUnique  3
-falseDataConKey                                = mkPreludeDataConUnique  4
-floatDataConKey                                = mkPreludeDataConUnique  5
-intDataConKey                          = mkPreludeDataConUnique  6
-smallIntegerDataConKey                 = mkPreludeDataConUnique  7
-largeIntegerDataConKey                 = mkPreludeDataConUnique  8
-foreignObjDataConKey                   = mkPreludeDataConUnique  9
-nilDataConKey                          = mkPreludeDataConUnique 10
-ratioDataConKey                                = mkPreludeDataConUnique 11
-stablePtrDataConKey                    = mkPreludeDataConUnique 12
-stableNameDataConKey                   = mkPreludeDataConUnique 13
-trueDataConKey                         = mkPreludeDataConUnique 14
-wordDataConKey                         = mkPreludeDataConUnique 15
-ioDataConKey                           = mkPreludeDataConUnique 16
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-absentErrorIdKey             = mkPreludeMiscIdUnique  1
-appendIdKey                  = mkPreludeMiscIdUnique  2
-augmentIdKey                 = mkPreludeMiscIdUnique  3
-buildIdKey                   = mkPreludeMiscIdUnique  4
-errorIdKey                   = mkPreludeMiscIdUnique  5
-foldlIdKey                   = mkPreludeMiscIdUnique  6
-foldrIdKey                   = mkPreludeMiscIdUnique  7
-recSelErrIdKey               = mkPreludeMiscIdUnique  8
-integerMinusOneIdKey         = mkPreludeMiscIdUnique  9
-integerPlusOneIdKey          = mkPreludeMiscIdUnique 10
-integerPlusTwoIdKey          = mkPreludeMiscIdUnique 11
-integerZeroIdKey             = mkPreludeMiscIdUnique 12
-int2IntegerIdKey             = mkPreludeMiscIdUnique 13
-irrefutPatErrorIdKey         = mkPreludeMiscIdUnique 15
-eqStringIdKey                = mkPreludeMiscIdUnique 16
-noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 17
-nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
-parErrorIdKey                = mkPreludeMiscIdUnique 20
-parIdKey                     = mkPreludeMiscIdUnique 21
-patErrorIdKey                = mkPreludeMiscIdUnique 22
-realWorldPrimIdKey           = mkPreludeMiscIdUnique 23
-recConErrorIdKey             = mkPreludeMiscIdUnique 24
-recUpdErrorIdKey             = mkPreludeMiscIdUnique 25
-traceIdKey                   = mkPreludeMiscIdUnique 26
-unpackCStringUtf8IdKey       = mkPreludeMiscIdUnique 27
-unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 28
-unpackCStringFoldrIdKey              = mkPreludeMiscIdUnique 29
-unpackCStringIdKey           = mkPreludeMiscIdUnique 30
-ushowListIdKey               = mkPreludeMiscIdUnique 31
-unsafeCoerceIdKey            = mkPreludeMiscIdUnique 32
-concatIdKey                  = mkPreludeMiscIdUnique 33
-filterIdKey                  = mkPreludeMiscIdUnique 34
-zipIdKey                     = mkPreludeMiscIdUnique 35
-bindIOIdKey                  = mkPreludeMiscIdUnique 36
-returnIOIdKey                = mkPreludeMiscIdUnique 37
-deRefStablePtrIdKey          = mkPreludeMiscIdUnique 38
-makeStablePtrIdKey           = mkPreludeMiscIdUnique 39
-getTagIdKey                  = mkPreludeMiscIdUnique 40
-plusIntegerIdKey             = mkPreludeMiscIdUnique 41
-timesIntegerIdKey            = mkPreludeMiscIdUnique 42
-\end{code}
-
-Certain class operations from Prelude classes.  They get their own
-uniques so we can look them up easily when we want to conjure them up
-during type checking.
-
-\begin{code}                                     
-fromIntClassOpKey            = mkPreludeMiscIdUnique 101
-fromIntegerClassOpKey        = mkPreludeMiscIdUnique 102
-minusClassOpKey                      = mkPreludeMiscIdUnique 103
-fromRationalClassOpKey       = mkPreludeMiscIdUnique 104
-enumFromClassOpKey           = mkPreludeMiscIdUnique 105
-enumFromThenClassOpKey       = mkPreludeMiscIdUnique 106
-enumFromToClassOpKey         = mkPreludeMiscIdUnique 107
-enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
-eqClassOpKey                 = mkPreludeMiscIdUnique 109
-geClassOpKey                 = mkPreludeMiscIdUnique 110
-failMClassOpKey                      = mkPreludeMiscIdUnique 112
-thenMClassOpKey                      = mkPreludeMiscIdUnique 113 -- (>>=)
-       -- Just a place holder for  unbound variables  produced by the renamer:
-unboundKey                   = mkPreludeMiscIdUnique 114 
-fromEnumClassOpKey           = mkPreludeMiscIdUnique 115
-                             
-mainKey                              = mkPreludeMiscIdUnique 116
-returnMClassOpKey            = mkPreludeMiscIdUnique 117
-otherwiseIdKey               = mkPreludeMiscIdUnique 118
-toEnumClassOpKey             = mkPreludeMiscIdUnique 119
-mapIdKey                     = mkPreludeMiscIdUnique 120
-\end{code}
-
-\begin{code}
-assertIdKey                  = mkPreludeMiscIdUnique 121
-runSTRepIdKey                = mkPreludeMiscIdUnique 122
-\end{code}