X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Futils%2FFiniteMap.lhs;h=b3dfb2783bc1d757d9f43e3a052f7e7c32fdb5bc;hb=bc845b714132a897032502536fea8cd018ce325b;hp=9168d3656f60006255f6651f89e31aefc3cbca9f;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/utils/FiniteMap.lhs b/compiler/utils/FiniteMap.lhs index 9168d36..b3dfb27 100644 --- a/compiler/utils/FiniteMap.lhs +++ b/compiler/utils/FiniteMap.lhs @@ -1,7 +1,7 @@ - +% +% (c) The University of Glasgow 2006 % (c) The AQUA Project, Glasgow University, 1994-1998 % -\section[FiniteMap]{An implementation of finite maps} ``Finite maps'' are the heart of the compiler's lookup-tables/environments and its implementation of sets. Important @@ -18,6 +18,12 @@ The code is SPECIALIZEd to various highly-desirable types (e.g., Id) near the end. \begin{code} +{-# OPTIONS -w #-} +-- The above warning supression flag is a temporary kludge. +-- While working on this module you are encouraged to remove it and fix +-- any warnings in the module. See +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings +-- for details module FiniteMap ( FiniteMap, -- abstract type @@ -49,7 +55,6 @@ module FiniteMap ( ) where #include "HsVersions.h" -#define IF_NOT_GHC(a) {--} #if defined(DEBUG_FINITEMAPS)/* NB NB NB */ #define OUTPUTABLE_key , Outputable key @@ -62,21 +67,21 @@ import Bag ( Bag, foldrBag ) import Util import Outputable -import GLAEXTS +#if 0 +import GHC.Exts +-- was this import only needed for I#, or does it have something +-- to do with the (not-presently-used) IF_NCG also? +#endif +import Data.List + +#if 0 #if ! OMIT_NATIVE_CODEGEN # define IF_NCG(a) a #else # define IF_NCG(a) {--} #endif - - --- SIGH: but we use unboxed "sizes"... -#if __GLASGOW_HASKELL__ -#define IF_GHC(a,b) a -#else /* not GHC */ -#define IF_GHC(a,b) b -#endif /* not GHC */ +#endif \end{code} @@ -179,9 +184,9 @@ factor of at most \tr{sIZE_RATIO} \begin{code} data FiniteMap key elt = EmptyFM - | Branch key elt -- Key and elt stored here - IF_GHC(Int#,Int{-STRICT-}) -- Size >= 1 - (FiniteMap key elt) -- Children + | Branch key elt -- Key and elt stored here + {-# UNPACK #-} !Int -- Size >= 1 + (FiniteMap key elt) -- Children (FiniteMap key elt) \end{code} @@ -189,14 +194,14 @@ data FiniteMap key elt emptyFM = EmptyFM {- emptyFM - = Branch bottom bottom IF_GHC(0#,0) bottom bottom + = Branch bottom bottom 0 bottom bottom where bottom = panic "emptyFM" -} --- #define EmptyFM (Branch _ _ IF_GHC(0#,0) _ _) +-- #define EmptyFM (Branch _ _ 0 _ _) -unitFM key elt = Branch key elt IF_GHC(1#,1) emptyFM emptyFM +unitFM key elt = Branch key elt 1 emptyFM emptyFM listToFM = addListToFM emptyFM @@ -333,7 +338,7 @@ filterFM p (Branch key elt _ fm_l fm_r) \begin{code} --{-# INLINE sizeFM #-} sizeFM EmptyFM = 0 -sizeFM (Branch _ _ size _ _) = IF_GHC(I# size, size) +sizeFM (Branch _ _ size _ _) = size isEmptyFM fm = sizeFM fm == 0 @@ -402,7 +407,7 @@ mkBranch which key elt fm_l fm_r else #endif let - result = Branch key elt (unbox (1 + left_size + right_size)) fm_l fm_r + result = Branch key elt (1 + left_size + right_size) fm_l fm_r in -- if sizeFM result <= 8 then result @@ -438,14 +443,6 @@ mkBranch which key elt fm_l fm_r left_size = sizeFM fm_l right_size = sizeFM fm_r - -#ifdef __GLASGOW_HASKELL__ - unbox :: Int -> Int# - unbox (I# size) = size -#else - unbox :: Int -> Int - unbox x = x -#endif \end{code} %************************************************************************ @@ -649,7 +646,7 @@ instance (Outputable key) => Outputable (FiniteMap key elt) where pprX EmptyFM = char '!' pprX (Branch key elt sz fm_l fm_r) = parens (hcat [pprX fm_l, space, - ppr key, space, int (IF_GHC(I# sz, sz)), space, + ppr key, space, int sz, space, pprX fm_r]) #else -- and when not debugging the package itself... @@ -682,7 +679,7 @@ When the FiniteMap module is used in GHC, we specialise it for \begin{code} #if 0 -#if __GLASGOW_HASKELL__ +#ifdef __GLASGOW_HASKELL__ {-# SPECIALIZE addListToFM :: FiniteMap (FastString, FAST_STRING) elt -> [((FAST_STRING, FAST_STRING),elt)] -> FiniteMap (FAST_STRING, FAST_STRING) elt