[project @ 2002-08-29 15:44:11 by simonmar]
[ghc-hetmet.git] / ghc / compiler / utils / BitSet.lhs
index e7f1ec6..a108136 100644 (file)
@@ -1,5 +1,5 @@
 %
-% (c) The GRASP Project, Glasgow University, 1994-1995
+% (c) The GRASP Project, Glasgow University, 1994-1998
 %
 \section[BitSet]{An implementation of very small sets}
 
@@ -19,13 +19,13 @@ Integer and get virtually unlimited sets.
 module BitSet (
        BitSet,         -- abstract type
        mkBS, listBS, emptyBS, unitBS,
-       unionBS, minusBS
-#if ! defined(COMPILING_GHC)
-       , elementBS, intersectBS, isEmptyBS
-#endif
+       unionBS, minusBS, intBS
     ) where
 
+#include "HsVersions.h"
+
 #ifdef __GLASGOW_HASKELL__
+import GLAEXTS
 -- nothing to import
 #elif defined(__YALE_HASKELL__)
 {-hide import from mkdependHS-}
@@ -49,7 +49,11 @@ mkBS xs = foldr (unionBS . unitBS) emptyBS xs
 
 unitBS :: Int -> BitSet
 unitBS x = case x of
+#if __GLASGOW_HASKELL__ >= 503
+    I# i# -> MkBS ((int2Word# 1#) `uncheckedShiftL#` i#)
+#else
     I# i# -> MkBS ((int2Word# 1#) `shiftL#` i#)
+#endif
 
 unionBS :: BitSet -> BitSet -> BitSet
 unionBS (MkBS x#) (MkBS y#) = MkBS (x# `or#` y#)
@@ -57,7 +61,7 @@ unionBS (MkBS x#) (MkBS y#) = MkBS (x# `or#` y#)
 minusBS :: BitSet -> BitSet -> BitSet
 minusBS (MkBS x#) (MkBS y#) = MkBS (x# `and#` (not# y#))
 
-#if ! defined(COMPILING_GHC)
+#if 0
 -- not used in GHC
 isEmptyBS :: BitSet -> Bool
 isEmptyBS (MkBS s#)
@@ -85,7 +89,15 @@ listBS s = listify s 0
                      in case word2Int# (s# `and#` (int2Word# 1#)) of
                          0# -> more
                          _  -> n : more
+#if __GLASGOW_HASKELL__ >= 503
+         shiftr x y = uncheckedShiftRL# x y
+#else
          shiftr x y = shiftRL# x y
+#endif
+
+-- intBS is a bit naughty.
+intBS :: BitSet -> Int
+intBS (MkBS w#) = I# (word2Int# w#)
 
 #elif defined(__YALE_HASKELL__)
 
@@ -103,7 +115,7 @@ unitBS x = MkBS (1 `ashInt` x)
 unionBS :: BitSet -> BitSet -> BitSet
 unionBS (MkBS x) (MkBS y) = MkBS (x `logiorInt` y)
 
-#if ! defined(COMPILING_GHC)
+#if 0
 -- not used in GHC
 isEmptyBS :: BitSet -> Bool
 isEmptyBS (MkBS s)
@@ -152,7 +164,7 @@ unitBS x = MkBS (1 `bitLsh` x)
 unionBS :: BitSet -> BitSet -> BitSet
 unionBS (MkBS x) (MkBS y) = MkBS (x `bitOr` y)
 
-#if ! defined(COMPILING_GHC)
+#if 0
 -- not used in GHC
 isEmptyBS :: BitSet -> Bool
 isEmptyBS (MkBS s)