[project @ 2003-11-06 17:09:50 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / NameSet.lhs
index e75d3cd..4474391 100644 (file)
@@ -19,7 +19,7 @@ module NameSet (
        -- Defs and uses
        Defs, Uses, DefUse, DefUses,
        emptyDUs, usesOnly, mkDUs, plusDU, 
-       findUses, duDefs, duUses
+       findUses, duDefs, duUses, allUses
     ) where
 
 #include "HsVersions.h"
@@ -120,9 +120,10 @@ delFVs ns s = delListFromNameSet s ns
 type Defs = NameSet
 type Uses = NameSet
 
-type DefUse  = (Maybe Defs, Uses)
 type DefUses = [DefUse]
        -- In dependency order: earlier Defs scope over later Uses
+
+type DefUse  = (Maybe Defs, Uses)
        -- For items (Just ds, us), the use of any member 
        -- of the ds implies that all the us are used too
        --
@@ -144,9 +145,23 @@ mkDUs pairs = [(Just defs, uses) | (defs,uses) <- pairs]
 plusDU :: DefUses -> DefUses -> DefUses
 plusDU = (++)
 
-allUses :: DefUses -> Uses -> Uses
--- Collect all uses, removing defs
-allUses dus uses
+duDefs :: DefUses -> Defs
+duDefs dus = foldr get emptyNameSet dus
+  where
+    get (Nothing, u1) d2 = d2
+    get (Just d1, u1) d2 = d1 `unionNameSets` d2
+
+duUses :: DefUses -> Uses
+-- Just like allUses, but defs are not eliminated
+duUses dus = foldr get emptyNameSet dus
+  where
+    get (d1, u1) u2 = u1 `unionNameSets` u2
+
+allUses :: DefUses -> Uses
+-- Collect all uses, regardless of
+-- whether the group is itself used,
+-- but remove defs on the way
+allUses dus
   = foldr get emptyNameSet dus
   where
     get (Nothing,   rhs_uses) uses = rhs_uses `unionNameSets` uses
@@ -158,7 +173,7 @@ findUses :: DefUses -> Uses -> Uses
 -- find all the uses, transitively. 
 -- The result is a superset of the input uses;
 -- and includes things defined in the input DefUses
--- (if they are used, of course)
+-- (but only if they are used)
 findUses dus uses 
   = foldr get uses dus
   where
@@ -169,16 +184,4 @@ findUses dus uses
        = rhs_uses `unionNameSets` uses
        | otherwise     -- No def is used
        = uses
-
-duDefs :: DefUses -> Defs
-duDefs dus = foldr get emptyNameSet dus
-  where
-    get (Nothing, u1) d2 = d2
-    get (Just d1, u1) d2 = d1 `unionNameSets` d2
-
-duUses :: DefUses -> Uses
--- Defs are not eliminated
-duUses dus = foldr get emptyNameSet dus
-  where
-    get (d1, u1) u2 = u1 `unionNameSets` u2
 \end{code}
\ No newline at end of file