diff options
author | simonmar <unknown> | 2001-01-18 11:16:08 +0000 |
---|---|---|
committer | simonmar <unknown> | 2001-01-18 11:16:08 +0000 |
commit | 95d8fef4a0af5cd0993986a98a7ec219c9aa0cd6 (patch) | |
tree | 747e400b6c59d53544939f9fc0766552eb2580d9 | |
parent | f81c9189fccc07c33506de8480648f28f893d882 (diff) | |
download | haskell-95d8fef4a0af5cd0993986a98a7ec219c9aa0cd6.tar.gz |
[project @ 2001-01-18 11:16:08 by simonmar]
When constructing a GlobalRdrEnv from an interface file for use from
the GHCi command line, don't export the qualified names: a module
which happens to export f from module M shouldn't bring into scope the
qualified identifier M.f when we use it from the command line.
-rw-r--r-- | ghc/compiler/rename/RnEnv.lhs | 14 | ||||
-rw-r--r-- | ghc/compiler/rename/RnNames.lhs | 8 |
2 files changed, 13 insertions, 9 deletions
diff --git a/ghc/compiler/rename/RnEnv.lhs b/ghc/compiler/rename/RnEnv.lhs index 9a7e56d987..45f2184b31 100644 --- a/ghc/compiler/rename/RnEnv.lhs +++ b/ghc/compiler/rename/RnEnv.lhs @@ -493,13 +493,14 @@ checkDupNames doc_str rdr_names_w_loc \begin{code} mkGlobalRdrEnv :: ModuleName -- Imported module (after doing the "as M" name change) -> Bool -- True <=> want unqualified import + -> Bool -- True <=> want qualified import -> [AvailInfo] -- What's to be hidden (but only the unqualified -- version is hidden) -> (Name -> Provenance) -> Avails -- Whats imported and how -> GlobalRdrEnv -mkGlobalRdrEnv this_mod unqual_imp hides mk_provenance avails +mkGlobalRdrEnv this_mod unqual_imp qual_imp hides mk_provenance avails = gbl_env2 where -- Make the name environment. We're talking about a @@ -517,11 +518,14 @@ mkGlobalRdrEnv this_mod unqual_imp hides mk_provenance avails add_avail env avail = foldl add_name env (availNames avail) add_name env name - | unqual_imp = env2 - | otherwise = env1 + | qual_imp && unqual_imp = env3 + | unqual_imp = env2 + | qual_imp = env1 + | otherwise = env where env1 = addOneToGlobalRdrEnv env (mkRdrQual this_mod occ) (name,prov) - env2 = addOneToGlobalRdrEnv env1 (mkRdrUnqual occ) (name,prov) + env2 = addOneToGlobalRdrEnv env (mkRdrUnqual occ) (name,prov) + env3 = addOneToGlobalRdrEnv env1 (mkRdrUnqual occ) (name,prov) occ = nameOccName name prov = mk_provenance name @@ -537,7 +541,7 @@ mkIfaceGlobalRdrEnv :: [(ModuleName,Avails)] -> GlobalRdrEnv mkIfaceGlobalRdrEnv m_avails = foldl add emptyRdrEnv m_avails where - add env (mod,avails) = plusGlobalRdrEnv env (mkGlobalRdrEnv mod True [] (\n -> LocalDef) avails) + add env (mod,avails) = plusGlobalRdrEnv env (mkGlobalRdrEnv mod True False [] (\n -> LocalDef) avails) \end{code} \begin{code} diff --git a/ghc/compiler/rename/RnNames.lhs b/ghc/compiler/rename/RnNames.lhs index 4cc04df4b5..750ffb01ad 100644 --- a/ghc/compiler/rename/RnNames.lhs +++ b/ghc/compiler/rename/RnNames.lhs @@ -164,8 +164,8 @@ importsFromImportDecl this_mod_name (ImportDecl imp_mod_name from qual_only as_m Just another_name -> another_name mk_prov name = NonLocalDef (UserImport imp_mod iloc (name `elemNameSet` explicits)) - gbl_env = mkGlobalRdrEnv qual_mod unqual_imp hides mk_prov filtered_avails - exports = mkExportAvails qual_mod unqual_imp gbl_env filtered_avails + gbl_env = mkGlobalRdrEnv qual_mod unqual_imp True hides mk_prov filtered_avails + exports = mkExportAvails qual_mod unqual_imp gbl_env filtered_avails in returnRn (gbl_env, exports) \end{code} @@ -195,8 +195,8 @@ importsFromLocalDecls this_mod decls unqual_imp = True -- Want unqualified names mk_prov n = LocalDef -- Provenance is local hides = [] -- Hide nothing - gbl_env = mkGlobalRdrEnv mod_name unqual_imp hides mk_prov avails - exports = mkExportAvails mod_name unqual_imp gbl_env avails + gbl_env = mkGlobalRdrEnv mod_name unqual_imp True hides mk_prov avails + exports = mkExportAvails mod_name unqual_imp gbl_env avails in returnRn (gbl_env, exports) |