X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FFiniteMap.lhs;h=d8c59893f5885142db4a4824df567ee804e4698e;hp=0b1e3d9f8bbfbe3cfc6de3f926b4418d056980b1;hb=5eb1c77c795f92ed0f4c8023847e9d4be1a4fd0d;hpb=ca5a4a480d10d61e5b7a52eb4d556e8b8c33e69d diff --git a/ghc/compiler/utils/FiniteMap.lhs b/ghc/compiler/utils/FiniteMap.lhs index 0b1e3d9..d8c5989 100644 --- a/ghc/compiler/utils/FiniteMap.lhs +++ b/ghc/compiler/utils/FiniteMap.lhs @@ -25,6 +25,10 @@ near the end (only \tr{#ifdef COMPILING_GHC}). #define ASSERT(e) {--} #define IF_NOT_GHC(a) a #define COMMA , +#define _tagCmp compare +#define _LT LT +#define _GT GT +#define _EQ EQ #endif #if defined(COMPILING_GHC) && defined(DEBUG_FINITEMAPS)/* NB NB NB */ @@ -48,10 +52,11 @@ module FiniteMap ( plusFM, plusFM_C, minusFM, + foldFM, IF_NOT_GHC(intersectFM COMMA) IF_NOT_GHC(intersectFM_C COMMA) - IF_NOT_GHC(mapFM COMMA foldFM COMMA filterFM COMMA) + IF_NOT_GHC(mapFM COMMA filterFM COMMA) sizeFM, isEmptyFM, elemFM, lookupFM, lookupWithDefaultFM, @@ -59,29 +64,25 @@ module FiniteMap ( #ifdef COMPILING_GHC , bagToFM - , FiniteSet(..), emptySet, mkSet, isEmptySet + , SYN_IE(FiniteSet), emptySet, mkSet, isEmptySet , elementOf, setToList, union, minusSet #endif - - -- To make it self-sufficient -#if __HASKELL1__ < 3 - , Maybe -#endif ) where import Maybes #ifdef COMPILING_GHC -import Ubiq{-uitous-} +IMP_Ubiq(){-uitous-} # ifdef DEBUG import Pretty # endif import Bag ( foldBag ) -#if ! OMIT_NATIVE_CODEGEN -#define IF_NCG(a) a -#else -#define IF_NCG(a) {--} -#endif + +# if ! OMIT_NATIVE_CODEGEN +# define IF_NCG(a) a +# else +# define IF_NCG(a) {--} +# endif #endif -- SIGH: but we use unboxed "sizes"... @@ -756,97 +757,73 @@ When the FiniteMap module is used in GHC, we specialise it for \tr{Uniques}, for dastardly efficiency reasons. \begin{code} -#if 0 -#if defined(COMPILING_GHC) && __GLASGOW_HASKELL__ +#if defined(COMPILING_GHC) && __GLASGOW_HASKELL__ && !defined(REALLY_HASKELL_1_3) -{-# SPECIALIZE listToFM - :: [(Int,elt)] -> FiniteMap Int elt, - [(CLabel,elt)] -> FiniteMap CLabel elt, - [(FAST_STRING,elt)] -> FiniteMap FAST_STRING elt, - [((FAST_STRING,FAST_STRING),elt)] -> FiniteMap (FAST_STRING, FAST_STRING) elt - IF_NCG(COMMA [(Reg COMMA elt)] -> FiniteMap Reg elt) - #-} -{-# SPECIALIZE addToFM - :: FiniteMap Int elt -> Int -> elt -> FiniteMap Int elt, - FiniteMap FAST_STRING elt -> FAST_STRING -> elt -> FiniteMap FAST_STRING elt, - FiniteMap CLabel elt -> CLabel -> elt -> FiniteMap CLabel elt - IF_NCG(COMMA FiniteMap Reg elt -> Reg -> elt -> FiniteMap Reg elt) - #-} {-# SPECIALIZE addListToFM - :: FiniteMap Int elt -> [(Int,elt)] -> FiniteMap Int elt, - FiniteMap CLabel elt -> [(CLabel,elt)] -> FiniteMap CLabel elt + :: FiniteMap (FAST_STRING, FAST_STRING) elt -> [((FAST_STRING, FAST_STRING),elt)] -> FiniteMap (FAST_STRING, FAST_STRING) elt + , FiniteMap RdrName elt -> [(RdrName,elt)] -> FiniteMap RdrName elt IF_NCG(COMMA FiniteMap Reg elt -> [(Reg COMMA elt)] -> FiniteMap Reg elt) #-} -{-NOT EXPORTED!! # SPECIALIZE addToFM_C - :: (elt -> elt -> elt) -> FiniteMap Int elt -> Int -> elt -> FiniteMap Int elt, - (elt -> elt -> elt) -> FiniteMap CLabel elt -> CLabel -> elt -> FiniteMap CLabel elt - IF_NCG(COMMA (elt -> elt -> elt) -> FiniteMap Reg elt -> Reg -> elt -> FiniteMap Reg elt) - #-} {-# SPECIALIZE addListToFM_C - :: (elt -> elt -> elt) -> FiniteMap Int elt -> [(Int,elt)] -> FiniteMap Int elt, - (elt -> elt -> elt) -> FiniteMap TyCon elt -> [(TyCon,elt)] -> FiniteMap TyCon elt, - (elt -> elt -> elt) -> FiniteMap CLabel elt -> [(CLabel,elt)] -> FiniteMap CLabel elt + :: (elt -> elt -> elt) -> FiniteMap TyCon elt -> [(TyCon,elt)] -> FiniteMap TyCon elt + , (elt -> elt -> elt) -> FiniteMap FAST_STRING elt -> [(FAST_STRING,elt)] -> FiniteMap FAST_STRING elt IF_NCG(COMMA (elt -> elt -> elt) -> FiniteMap Reg elt -> [(Reg COMMA elt)] -> FiniteMap Reg elt) #-} -{-NOT EXPORTED!!! # SPECIALIZE delFromFM - :: FiniteMap Int elt -> Int -> FiniteMap Int elt, - FiniteMap CLabel elt -> CLabel -> FiniteMap CLabel elt - IF_NCG(COMMA FiniteMap Reg elt -> Reg -> FiniteMap Reg elt) - #-} -{-# SPECIALIZE delListFromFM - :: FiniteMap Int elt -> [Int] -> FiniteMap Int elt, - FiniteMap CLabel elt -> [CLabel] -> FiniteMap CLabel elt - IF_NCG(COMMA FiniteMap Reg elt -> [Reg] -> FiniteMap Reg elt) +{-# SPECIALIZE addToFM + :: FiniteMap CLabel elt -> CLabel -> elt -> FiniteMap CLabel elt + , FiniteMap FAST_STRING elt -> FAST_STRING -> elt -> FiniteMap FAST_STRING elt + , FiniteMap (FAST_STRING, FAST_STRING) elt -> (FAST_STRING, FAST_STRING) -> elt -> FiniteMap (FAST_STRING, FAST_STRING) elt + , FiniteMap RdrName elt -> RdrName -> elt -> FiniteMap RdrName elt + , FiniteMap OrigName elt -> OrigName -> elt -> FiniteMap OrigName elt + IF_NCG(COMMA FiniteMap Reg elt -> Reg -> elt -> FiniteMap Reg elt) #-} -{-# SPECIALIZE elemFM - :: FAST_STRING -> FiniteMap FAST_STRING elt -> Bool +{-# SPECIALIZE addToFM_C + :: (elt -> elt -> elt) -> FiniteMap (RdrName, RdrName) elt -> (RdrName, RdrName) -> elt -> FiniteMap (RdrName, RdrName) elt + , (elt -> elt -> elt) -> FiniteMap (OrigName, OrigName) elt -> (OrigName, OrigName) -> elt -> FiniteMap (OrigName, OrigName) elt + , (elt -> elt -> elt) -> FiniteMap FAST_STRING elt -> FAST_STRING -> elt -> FiniteMap FAST_STRING elt + IF_NCG(COMMA (elt -> elt -> elt) -> FiniteMap Reg elt -> Reg -> elt -> FiniteMap Reg elt) #-} -{-not EXPORTED!!! # SPECIALIZE filterFM - :: (Int -> elt -> Bool) -> FiniteMap Int elt -> FiniteMap Int elt, - (CLabel -> elt -> Bool) -> FiniteMap CLabel elt -> FiniteMap CLabel elt - IF_NCG(COMMA (Reg -> elt -> Bool) -> FiniteMap Reg elt -> FiniteMap Reg elt) +{-# SPECIALIZE bagToFM + :: Bag (FAST_STRING,elt) -> FiniteMap FAST_STRING elt #-} -{-NOT EXPORTED!!! # SPECIALIZE intersectFM - :: FiniteMap Int elt -> FiniteMap Int elt -> FiniteMap Int elt, - FiniteMap CLabel elt -> FiniteMap CLabel elt -> FiniteMap CLabel elt - IF_NCG(COMMA FiniteMap Reg elt -> FiniteMap Reg elt -> FiniteMap Reg elt) +{-# SPECIALIZE delListFromFM + :: FiniteMap RdrName elt -> [RdrName] -> FiniteMap RdrName elt + , FiniteMap OrigName elt -> [OrigName] -> FiniteMap OrigName elt + , FiniteMap FAST_STRING elt -> [FAST_STRING] -> FiniteMap FAST_STRING elt + IF_NCG(COMMA FiniteMap Reg elt -> [Reg] -> FiniteMap Reg elt) #-} -{-not EXPORTED !!!# SPECIALIZE intersectFM_C - :: (elt -> elt -> elt) -> FiniteMap Int elt -> FiniteMap Int elt -> FiniteMap Int elt, - (elt -> elt -> elt) -> FiniteMap CLabel elt -> FiniteMap CLabel elt -> FiniteMap CLabel elt - IF_NCG(COMMA (elt -> elt -> elt) -> FiniteMap Reg elt -> FiniteMap Reg elt -> FiniteMap Reg elt) +{-# SPECIALIZE listToFM + :: [([Char],elt)] -> FiniteMap [Char] elt + , [(FAST_STRING,elt)] -> FiniteMap FAST_STRING elt + , [((FAST_STRING,FAST_STRING),elt)] -> FiniteMap (FAST_STRING, FAST_STRING) elt + , [(OrigName,elt)] -> FiniteMap OrigName elt + IF_NCG(COMMA [(Reg COMMA elt)] -> FiniteMap Reg elt) #-} {-# SPECIALIZE lookupFM - :: FiniteMap Int elt -> Int -> Maybe elt, - FiniteMap CLabel elt -> CLabel -> Maybe elt, - FiniteMap FAST_STRING elt -> FAST_STRING -> Maybe elt, - FiniteMap (FAST_STRING,FAST_STRING) elt -> (FAST_STRING,FAST_STRING) -> Maybe elt + :: FiniteMap CLabel elt -> CLabel -> Maybe elt + , FiniteMap [Char] elt -> [Char] -> Maybe elt + , FiniteMap FAST_STRING elt -> FAST_STRING -> Maybe elt + , FiniteMap (FAST_STRING,FAST_STRING) elt -> (FAST_STRING,FAST_STRING) -> Maybe elt + , FiniteMap OrigName elt -> OrigName -> Maybe elt + , FiniteMap (OrigName,OrigName) elt -> (OrigName,OrigName) -> Maybe elt + , FiniteMap RdrName elt -> RdrName -> Maybe elt + , FiniteMap (RdrName,RdrName) elt -> (RdrName,RdrName) -> Maybe elt IF_NCG(COMMA FiniteMap Reg elt -> Reg -> Maybe elt) #-} {-# SPECIALIZE lookupWithDefaultFM - :: FiniteMap Int elt -> elt -> Int -> elt, - FiniteMap CLabel elt -> elt -> CLabel -> elt + :: FiniteMap FAST_STRING elt -> elt -> FAST_STRING -> elt IF_NCG(COMMA FiniteMap Reg elt -> elt -> Reg -> elt) #-} -{-# SPECIALIZE minusFM - :: FiniteMap Int elt -> FiniteMap Int elt -> FiniteMap Int elt, - FiniteMap TyCon elt -> FiniteMap TyCon elt -> FiniteMap TyCon elt, - FiniteMap FAST_STRING elt -> FiniteMap FAST_STRING elt -> FiniteMap FAST_STRING elt, - FiniteMap CLabel elt -> FiniteMap CLabel elt -> FiniteMap CLabel elt - IF_NCG(COMMA FiniteMap Reg elt -> FiniteMap Reg elt -> FiniteMap Reg elt) - #-} {-# SPECIALIZE plusFM - :: FiniteMap Int elt -> FiniteMap Int elt -> FiniteMap Int elt, - FiniteMap TyCon elt -> FiniteMap TyCon elt -> FiniteMap TyCon elt, - FiniteMap CLabel elt -> FiniteMap CLabel elt -> FiniteMap CLabel elt + :: FiniteMap RdrName elt -> FiniteMap RdrName elt -> FiniteMap RdrName elt + , FiniteMap OrigName elt -> FiniteMap OrigName elt -> FiniteMap OrigName elt + , FiniteMap FAST_STRING elt -> FiniteMap FAST_STRING elt -> FiniteMap FAST_STRING elt IF_NCG(COMMA FiniteMap Reg elt -> FiniteMap Reg elt -> FiniteMap Reg elt) #-} {-# SPECIALIZE plusFM_C - :: (elt -> elt -> elt) -> FiniteMap Int elt -> FiniteMap Int elt -> FiniteMap Int elt, - (elt -> elt -> elt) -> FiniteMap CLabel elt -> FiniteMap CLabel elt -> FiniteMap CLabel elt + :: (elt -> elt -> elt) -> FiniteMap FAST_STRING elt -> FiniteMap FAST_STRING elt -> FiniteMap FAST_STRING elt IF_NCG(COMMA (elt -> elt -> elt) -> FiniteMap Reg elt -> FiniteMap Reg elt -> FiniteMap Reg elt) #-} #endif {- compiling for GHC -} -#endif {- 0 -} \end{code}