X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FFiniteMap.lhs;h=384a7d122a647ef028a650cf1326e28c279882e4;hb=68afb16743cafd5b7495771d359891c6dfc5a186;hp=87da3e0c46a74881ddfb41bcaf44fabd3e15a8c9;hpb=7d61cb61daa5e433a0cb85b34b7f0c58b2f961ff;p=ghc-hetmet.git diff --git a/ghc/compiler/utils/FiniteMap.lhs b/ghc/compiler/utils/FiniteMap.lhs index 87da3e0..384a7d1 100644 --- a/ghc/compiler/utils/FiniteMap.lhs +++ b/ghc/compiler/utils/FiniteMap.lhs @@ -38,26 +38,30 @@ module FiniteMap ( emptyFM, unitFM, listToFM, - addToFM, addListToFM, - IF_NOT_GHC(addToFM_C COMMA) + addToFM, + addToFM_C, + addListToFM, addListToFM_C, IF_NOT_GHC(delFromFM COMMA) delListFromFM, - plusFM, plusFM_C, - IF_NOT_GHC(intersectFM COMMA intersectFM_C COMMA) - minusFM, -- exported for GHCI only + plusFM, + plusFM_C, + minusFM, + foldFM, - IF_NOT_GHC(mapFM COMMA foldFM COMMA filterFM COMMA) + IF_NOT_GHC(intersectFM COMMA) + IF_NOT_GHC(intersectFM_C COMMA) + IF_NOT_GHC(mapFM COMMA filterFM COMMA) - IF_NOT_GHC(sizeFM COMMA) - isEmptyFM, elemFM, lookupFM, lookupWithDefaultFM, + sizeFM, isEmptyFM, elemFM, lookupFM, lookupWithDefaultFM, - fmToList, keysFM, eltsFM{-used in GHCI-} + fmToList, keysFM, eltsFM #ifdef COMPILING_GHC + , bagToFM , FiniteSet(..), emptySet, mkSet, isEmptySet - , elementOf, setToList, union, minusSet{-exported for GHCI-} + , elementOf, setToList, union, minusSet #endif -- To make it self-sufficient @@ -73,6 +77,7 @@ import Ubiq{-uitous-} # ifdef DEBUG import Pretty # endif +import Bag ( foldBag ) #if ! OMIT_NATIVE_CODEGEN #define IF_NCG(a) a #else @@ -98,9 +103,13 @@ import Pretty \begin{code} -- BUILDING emptyFM :: FiniteMap key elt -unitFM :: key -> elt -> FiniteMap key elt +unitFM :: key -> elt -> FiniteMap key elt listToFM :: (Ord key OUTPUTABLE_key) => [(key,elt)] -> FiniteMap key elt -- In the case of duplicates, the last is taken +#ifdef COMPILING_GHC +bagToFM :: (Ord key OUTPUTABLE_key) => Bag (key,elt) -> FiniteMap key elt + -- In the case of duplicates, who knows which is taken +#endif -- ADDING AND DELETING -- Throws away any previous binding @@ -203,7 +212,11 @@ emptyFM unitFM key elt = Branch key elt IF_GHC(1#,1) emptyFM emptyFM -listToFM key_elt_pairs = addListToFM emptyFM key_elt_pairs +listToFM = addListToFM emptyFM + +#ifdef COMPILING_GHC +bagToFM = foldBag plusFM (\ (k,v) -> unitFM k v) emptyFM +#endif \end{code} %************************************************************************