X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FUniqFM.lhs;h=64ceff4e4f1c5b82aba8adf730995793021cecc3;hb=91b4fb8d9cd5bdefb552e643df8bedab0ec2a526;hp=48be3f6919ad48db2d5054454c4b40c6ce2710a9;hpb=025f26d659953eb347b50bb241dc790c687bed41;p=ghc-hetmet.git diff --git a/ghc/compiler/utils/UniqFM.lhs b/ghc/compiler/utils/UniqFM.lhs index 48be3f6..64ceff4 100644 --- a/ghc/compiler/utils/UniqFM.lhs +++ b/ghc/compiler/utils/UniqFM.lhs @@ -11,17 +11,8 @@ Basically, the things need to be in class @Uniquable@, and we use the (A similar thing to @UniqSet@, as opposed to @Set@.) \begin{code} -#if defined(COMPILING_GHC) -#include "HsVersions.h" -#define IF_NOT_GHC(a) {--} -#else -#define ASSERT(e) {--} -#define IF_NOT_GHC(a) a -#endif - module UniqFM ( UniqFM, -- abstract type - Uniquable(..), -- class to go with it emptyUFM, unitUFM, @@ -39,32 +30,27 @@ module UniqFM ( plusUFM_C, minusUFM, intersectUFM, - IF_NOT_GHC(intersectUFM_C COMMA) - IF_NOT_GHC(foldUFM COMMA) + intersectUFM_C, + foldUFM, mapUFM, + elemUFM, filterUFM, sizeUFM, isNullUFM, lookupUFM, lookupUFM_Directly, lookupWithDefaultUFM, lookupWithDefaultUFM_Directly, eltsUFM, keysUFM, - ufmToList -#if defined(COMPILING_GHC) - ,FAST_STRING -#endif + ufmToList, + FastString ) where -#if defined(COMPILING_GHC) -IMPORT_DELOOPER( SpecLoop ) -#endif -IMP_Ubiq() +#include "HsVersions.h" -import Unique ( Unique, u2i, mkUniqueGrimily ) +import {-# SOURCE #-} Name ( Name ) + +import Unique ( Uniquable(..), Unique, u2i, mkUniqueGrimily ) import Util -import Pretty ( Doc ) -import Outputable ( Outputable(..) ) -import PprStyle ( PprStyle ) -import SrcLoc ( SrcLoc ) +import GlaExts -- Lots of Int# operations #if ! OMIT_NATIVE_CODEGEN #define IF_NCG(a) a @@ -96,8 +82,11 @@ addListToUFM :: Uniquable key => UniqFM elt -> [(key,elt)] -> UniqFM elt addToUFM_Directly :: UniqFM elt -> Unique -> elt -> UniqFM elt -addToUFM_C :: Uniquable key => (elt -> elt -> elt) - -> UniqFM elt -> key -> elt -> UniqFM elt +addToUFM_C :: Uniquable key => (elt -> elt -> elt) -- old -> new -> result + -> UniqFM elt -- old + -> key -> elt -- new + -> UniqFM elt -- result + addListToUFM_C :: Uniquable key => (elt -> elt -> elt) -> UniqFM elt -> [(key,elt)] -> UniqFM elt @@ -121,6 +110,7 @@ mapUFM :: (elt1 -> elt2) -> UniqFM elt1 -> UniqFM elt2 filterUFM :: (elt -> Bool) -> UniqFM elt -> UniqFM elt sizeUFM :: UniqFM elt -> Int +elemUFM :: Uniquable key => key -> UniqFM elt -> Bool lookupUFM :: Uniquable key => UniqFM elt -> key -> Maybe elt lookupUFM_Directly -- when you've got the Unique already @@ -142,6 +132,9 @@ ufmToList :: UniqFM elt -> [(Unique, elt)] %************************************************************************ \begin{code} +-- Turn off for now, these need to be updated (SDM 4/98) + +#if 0 #ifdef __GLASGOW_HASKELL__ -- I don't think HBC was too happy about this (WDP 94/10) @@ -163,6 +156,7 @@ ufmToList :: UniqFM elt -> [(Unique, elt)] #-} #endif {- __GLASGOW_HASKELL__ -} +#endif \end{code} %************************************************************************ @@ -203,9 +197,6 @@ data UniqFM ele (UniqFM ele) (UniqFM ele) -class Uniquable a where - uniqueOf :: a -> Unique - -- for debugging only :-) {- instance Text (UniqFM a) where @@ -545,6 +536,10 @@ looking up in a hurry is the {\em whole point} of this binary tree lark. Lookup up a binary tree is easy (and fast). \begin{code} +elemUFM key fm = case lookUp fm (u2i (uniqueOf key)) of + Nothing -> False + Just _ -> True + lookupUFM fm key = lookUp fm (u2i (uniqueOf key)) lookupUFM_Directly fm key = lookUp fm (u2i key)