getKey, -- Used in Var only!
incrUnique, -- Used for renumbering
+ deriveUnique, -- Ditto
initTyVarUnique,
initTidyUniques,
funTyConKey,
functorClassKey,
geClassOpKey,
+ getTagIdKey,
intDataConKey,
intPrimTyConKey,
intTyConKey,
int8TyConKey,
- int8DataConKey,
int16TyConKey,
- int16DataConKey,
int32TyConKey,
- int32DataConKey,
- int64DataConKey,
int64PrimTyConKey,
int64TyConKey,
smallIntegerDataConKey,
recSelErrIdKey,
recUpdErrorIdKey,
returnMClassOpKey,
+ runSTRepIdKey,
showClassKey,
ioTyConKey,
ioDataConKey,
wordPrimTyConKey,
wordTyConKey,
word8TyConKey,
- word8DataConKey,
word16TyConKey,
- word16DataConKey,
word32TyConKey,
- word32DataConKey,
- word64DataConKey,
word64PrimTyConKey,
word64TyConKey,
zipIdKey
getKey :: Unique -> Int# -- for Var
incrUnique :: Unique -> Unique
+deriveUnique :: Unique -> Int -> Unique
\end{code}
incrUnique (MkUnique i) = MkUnique (i +# 1#)
+-- deriveUnique uses an 'X' tag so that it won't clash with
+-- any of the uniques produced any other way
+deriveUnique (MkUnique i) delta = mkUnique 'X' (I# i + delta)
+
-- pop the Char in the top 8 bits of the Unique(Supply)
-- No 64-bit bugs here, as long as we have at least 32 bits. --JSM
i2w_s x = (x::Int#)
mkUnique (C# c) (I# i)
- = MkUnique (w2i (((i2w (ord# c)) `shiftL#` (i2w_s 24#)) `or#` (i2w i)))
+ = MkUnique (w2i (tag `or#` bits))
+ where
+ tag = i2w (ord# c) `shiftL#` i2w_s 24#
+ bits = i2w i `and#` (i2w 16777215#){-``0x00ffffff''-}
unpkUnique (MkUnique u)
= let
tag = C# (chr# (w2i ((i2w u) `shiftr` (i2w_s 24#))))
- i = I# (w2i ((i2w u) `and#` (i2w 16777215#){-``0x00ffffff''-}))
+ i = I# (w2i ((i2w u) `and#` (i2w 16777215#){-``0x00ffffff''-}))
in
(tag, i)
where
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
falseDataConKey = mkPreludeDataConUnique 5
floatDataConKey = mkPreludeDataConUnique 6
intDataConKey = mkPreludeDataConUnique 7
-int8DataConKey = mkPreludeDataConUnique 8
-int16DataConKey = mkPreludeDataConUnique 9
-int32DataConKey = mkPreludeDataConUnique 10
-int64DataConKey = mkPreludeDataConUnique 11
smallIntegerDataConKey = mkPreludeDataConUnique 12
largeIntegerDataConKey = mkPreludeDataConUnique 13
foreignObjDataConKey = mkPreludeDataConUnique 14
stableNameDataConKey = mkPreludeDataConUnique 18
trueDataConKey = mkPreludeDataConUnique 34
wordDataConKey = mkPreludeDataConUnique 35
-word8DataConKey = mkPreludeDataConUnique 36
-word16DataConKey = mkPreludeDataConUnique 37
-word32DataConKey = mkPreludeDataConUnique 38
-word64DataConKey = mkPreludeDataConUnique 39
stDataConKey = mkPreludeDataConUnique 40
ioDataConKey = mkPreludeDataConUnique 42
\end{code}
bindIOIdKey = mkPreludeMiscIdUnique 36
deRefStablePtrIdKey = mkPreludeMiscIdUnique 37
makeStablePtrIdKey = mkPreludeMiscIdUnique 38
+getTagIdKey = mkPreludeMiscIdUnique 39
\end{code}
Certain class operations from Prelude classes. They get their own
\begin{code}
assertIdKey = mkPreludeMiscIdUnique 121
+runSTRepIdKey = mkPreludeMiscIdUnique 122
\end{code}