[project @ 1999-07-12 14:40:08 by simonmar]
authorsimonmar <unknown>
Mon, 12 Jul 1999 14:40:11 +0000 (14:40 +0000)
committersimonmar <unknown>
Mon, 12 Jul 1999 14:40:11 +0000 (14:40 +0000)
Keep the original name for non-exported record selectors and class
methods.

ghc/compiler/basicTypes/Id.lhs
ghc/compiler/coreSyn/CoreTidy.lhs

index 1c8e026..aa086a1 100644 (file)
@@ -22,6 +22,7 @@ module Id (
 
        -- Predicates
        omitIfaceSigForId,
+       exportWithOrigOccName,
        externallyVisibleId,
        idFreeTyVars, 
 
@@ -248,6 +249,12 @@ omitIfaceSigForId id
                -- the instance decl
 
        other          -> False -- Don't omit!
+
+-- Certain names must be exported with their original occ names, because
+-- these names are bound by either a class declaration or a data declaration
+-- or an explicit user export.
+exportWithOrigOccName :: Id -> Bool
+exportWithOrigOccName id = omitIfaceSigForId id || isUserExportedId id
 \end{code}
 
 
index 27843e8..51a5175 100644 (file)
@@ -21,7 +21,7 @@ import VarEnv
 import VarSet
 import Var             ( Id, IdOrTyVar )
 import Id              ( idType, idInfo, idName, 
-                         mkVanillaId, mkId, isUserExportedId,
+                         mkVanillaId, mkId, exportWithOrigOccName,
                          getIdStrictness, setIdStrictness,
                          getIdDemandInfo, setIdDemandInfo,
                        ) 
@@ -94,7 +94,7 @@ tidyCorePgm us module_name binds_in rules
        -- decl.  tidyTopId then does a no-op on exported binders.
     init_tidy_env = (initTidyOccEnv avoids, emptyVarEnv)
     avoids       = [getOccName bndr | bndr <- bindersOfBinds binds_in,
-                                      isUserExportedId bndr]
+                                      exportWithOrigOccName bndr]
 
 tidyBind :: Maybe Module               -- (Just m) for top level, Nothing for nested
         -> TidyEnv
@@ -207,8 +207,8 @@ tidyTopId :: Module -> TidyEnv -> TidyEnv -> Id -> (TidyEnv, Id)
 tidyTopId mod env@(tidy_env, var_env) env_idinfo id
   =    -- Top level variables
     let
-       (tidy_env', name') | isUserExportedId id = (tidy_env, idName id)
-                          | otherwise           = tidyTopName mod tidy_env (idName id)
+       (tidy_env', name') | exportWithOrigOccName id = (tidy_env, idName id)
+                          | otherwise                = tidyTopName mod tidy_env (idName id)
        ty'                = tidyTopType (idType id)
        idinfo'            = tidyIdInfo env_idinfo (idInfo id)
        id'                = mkId name' ty' idinfo'