OccNames for closure conversion
[ghc-hetmet.git] / compiler / basicTypes / Name.lhs
index feda0b1..883668b 100644 (file)
@@ -15,6 +15,7 @@ module Name (
        mkInternalName, mkSystemName,
        mkSystemVarName, mkSysTvName, 
        mkFCallName, mkIPName,
+        mkTickBoxOpName,
        mkExternalName, mkWiredInName,
 
        nameUnique, setNameUnique,
@@ -220,6 +221,11 @@ mkFCallName :: Unique -> String -> Name
 mkFCallName uniq str =  Name { n_uniq = getKey# uniq, n_sort = Internal, 
                               n_occ = mkVarOcc str, n_loc = noSrcLoc }
 
+mkTickBoxOpName :: Unique -> String -> Name
+mkTickBoxOpName uniq str 
+   = Name { n_uniq = getKey# uniq, n_sort = Internal, 
+           n_occ = mkVarOcc str, n_loc = noSrcLoc }
+
 mkIPName :: Unique -> OccName -> Name
 mkIPName uniq occ
   = Name { n_uniq = getKey# uniq,
@@ -254,8 +260,11 @@ localiseName n = n { n_sort = Internal }
 %************************************************************************
 
 \begin{code}
-hashName :: Name -> Int
-hashName name = getKey (nameUnique name)
+hashName :: Name -> Int                -- ToDo: should really be Word
+hashName name = getKey (nameUnique name) + 1
+       -- The +1 avoids keys with lots of zeros in the ls bits, which 
+       -- interacts badly with the cheap and cheerful multiplication in
+       -- hashExpr
 \end{code}