[project @ 2005-02-23 12:18:29 by simonmar]
[ghc-hetmet.git] / ghc / compiler / basicTypes / Var.lhs
index 0e282c2..c3f626e 100644 (file)
@@ -19,7 +19,7 @@ module Var (
        Id, DictId,
        idName, idType, idUnique, idInfo, modifyIdInfo, maybeModifyIdInfo,
        setIdName, setIdUnique, setIdType, setIdInfo, lazySetIdInfo, 
-       setIdLocalExported, zapSpecPragmaId,
+       setIdExported, setIdNotExported, zapSpecPragmaId,
 
        globalIdDetails, globaliseId, 
 
@@ -215,9 +215,20 @@ setIdName = setVarName
 setIdType :: Id -> Type -> Id
 setIdType id ty = id {idType = ty}
 
-setIdLocalExported :: Id -> Id
--- It had better be a LocalId already
-setIdLocalExported id = id { lclDetails = Exported }
+setIdExported :: Id -> Id
+-- Can be called on GlobalIds, such as data cons and class ops,
+-- which are "born" as GlobalIds and automatically exported
+setIdExported id@(LocalId {}) = id { lclDetails = Exported }
+setIdExported other_id       = ASSERT( isId other_id ) other_id
+
+setIdNotExported :: Id -> Id
+-- We can only do this to LocalIds
+setIdNotExported id = ASSERT( isLocalId id ) id { lclDetails = NotExported }
+
+zapSpecPragmaId :: Id -> Id
+zapSpecPragmaId id
+  | isSpecPragmaId id = id {lclDetails = NotExported}
+  | otherwise         = id
 
 globaliseId :: GlobalIdDetails -> Id -> Id
 -- If it's a local, make it global
@@ -227,11 +238,6 @@ globaliseId details id = GlobalId { varName    = varName id,
                                    idInfo     = idInfo id,
                                    gblDetails = details }
 
-zapSpecPragmaId :: Id -> Id
-zapSpecPragmaId id
-  | isSpecPragmaId id = id {lclDetails = NotExported}
-  | otherwise         = id
-
 lazySetIdInfo :: Id -> IdInfo -> Id
 lazySetIdInfo id info = id {idInfo = info}