[project @ 2001-10-19 14:22:11 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / Var.lhs
index 062767a..47d84a3 100644 (file)
@@ -21,7 +21,7 @@ module Var (
        Id, DictId,
        idName, idType, idUnique, idInfo, modifyIdInfo, maybeModifyIdInfo,
        setIdName, setIdUnique, setIdInfo, lazySetIdInfo, 
-       setIdNoDiscard, zapSpecPragmaId,
+       setIdLocalExported, zapSpecPragmaId,
 
        globalIdDetails, setGlobalIdDetails, 
 
@@ -41,7 +41,7 @@ import {-# SOURCE #-} IdInfo( GlobalIdDetails, notGlobalId,
 
 import Name            ( Name, OccName, NamedThing(..),
                          setNameUnique, setNameOcc, nameUnique, 
-                         mkSysLocalName, isExternallyVisibleName
+                         mkSysLocalName
                        )
 import Unique          ( Unique, Uniquable(..), mkUniqueGrimily, getKey )
 import FastTypes
@@ -77,7 +77,7 @@ data Var
 
 data VarDetails
   = LocalId            -- Used for locally-defined Ids (see NOTE below)
-       LocalIdDetails  -- True <=> exported; don't discard even if dead
+       LocalIdDetails
 
   | GlobalId           -- Used for imported Ids, dict selectors etc
        GlobalIdDetails
@@ -104,6 +104,8 @@ LocalId and GlobalId
 A GlobalId is
   * always a constant (top-level)
   * imported, or data constructor, or primop, or record selector
+  * has a Unique that is globally unique across the whole
+    GHC invocation (a single invocation may compile multiple modules)
 
 A LocalId is 
   * bound within an expression (lambda, case, local let(rec))
@@ -251,10 +253,8 @@ setIdUnique = setVarUnique
 setIdName :: Id -> Name -> Id
 setIdName = setVarName
 
-setIdNoDiscard :: Id -> Id
-setIdNoDiscard id 
-  = WARN( not (isLocalId id), ppr id )
-    id { varDetails = LocalId Exported }
+setIdLocalExported :: Id -> Id
+setIdLocalExported id = id { varDetails = LocalId Exported }
 
 zapSpecPragmaId :: Id -> Id
 zapSpecPragmaId id 
@@ -353,10 +353,12 @@ isGlobalId var = case varDetails var of
                   GlobalId _ -> True
                   other      -> False
 
+-- isExportedId means "don't throw this away"
 isExportedId var = case varDetails var of
-                       LocalId Exported -> True
-                       GlobalId _       -> True
-                       other            -> False
+                       LocalId Exported   -> True
+                       LocalId SpecPragma -> True
+                       GlobalId _         -> True
+                       other              -> False
 
 isSpecPragmaId var = case varDetails var of
                        LocalId SpecPragma -> True