From d1984e439154e95b2804ee83897e740b1713c53d Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Tue, 5 Aug 2008 15:17:30 +0000 Subject: [PATCH] Add -fno-implicit-import-qualified (#2452) The flag is off by default, but GHCi turns it on (in Main.hs). For GHCi it can be overriden on the command-line or using :set. --- compiler/main/DynFlags.hs | 4 +++- compiler/rename/RnEnv.lhs | 22 +++++++++++++--------- docs/users_guide/flags.xml | 7 +++++++ docs/users_guide/ghci.xml | 5 +++-- ghc/Main.hs | 9 ++++++++- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index c3700bf..5031ded 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -278,6 +278,7 @@ data DynFlag | Opt_RunCPSZ | Opt_ConvertToZipCfgAndBack | Opt_AutoLinkPackages + | Opt_ImplicitImportQualified -- keeping stuff | Opt_KeepHiDiffs @@ -1532,7 +1533,8 @@ fFlags = [ ( "allow-incoherent-instances", Opt_IncoherentInstances, deprecatedForLanguage "IncoherentInstances" ), ( "gen-manifest", Opt_GenManifest, const Supported ), - ( "embed-manifest", Opt_EmbedManifest, const Supported ) + ( "embed-manifest", Opt_EmbedManifest, const Supported ), + ( "implicit-import-qualified", Opt_ImplicitImportQualified, const Supported ) ] supportedLanguages :: [String] diff --git a/compiler/rename/RnEnv.lhs b/compiler/rename/RnEnv.lhs index 94c90ac..63db61c 100644 --- a/compiler/rename/RnEnv.lhs +++ b/compiler/rename/RnEnv.lhs @@ -359,23 +359,27 @@ lookupGlobalOccRn rdr_name = lookupImportedName rdr_name | otherwise - = -- First look up the name in the normal environment. - lookupGreRn_maybe rdr_name `thenM` \ mb_gre -> + = do + -- First look up the name in the normal environment. + mb_gre <- lookupGreRn_maybe rdr_name case mb_gre of { Just gre -> returnM (gre_name gre) ; - Nothing -> + Nothing -> do -- We allow qualified names on the command line to refer to -- *any* name exported by any module in scope, just as if -- there was an "import qualified M" declaration for every -- module. - getModule `thenM` \ mod -> - if isQual rdr_name && mod == iNTERACTIVE then - -- This test is not expensive, - lookupQualifiedName rdr_name -- and only happens for failed lookups - else do + allow_qual <- doptM Opt_ImplicitImportQualified + mod <- getModule + -- This test is not expensive, + -- and only happens for failed lookups + if isQual rdr_name && allow_qual && mod == iNTERACTIVE + then lookupQualifiedName rdr_name + else do traceRn $ text "lookupGlobalOccRn" - unboundName rdr_name } + unboundName rdr_name + } lookupImportedName :: RdrName -> TcRnIf m n Name -- Lookup the occurrence of an imported name diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml index 23c1b2b..ef57f13 100644 --- a/docs/users_guide/flags.xml +++ b/docs/users_guide/flags.xml @@ -522,6 +522,13 @@ dynamic - + + + Turn off + implicit qualified import of everything in GHCi + dynamic + - + diff --git a/docs/users_guide/ghci.xml b/docs/users_guide/ghci.xml index 299b1e5..1f20df4 100644 --- a/docs/users_guide/ghci.xml +++ b/docs/users_guide/ghci.xml @@ -650,13 +650,14 @@ Prelude IO> loaded”. - + Qualified names To make life slightly easier, the GHCi prompt also behaves as if there is an implicit import qualified declaration for every module in every - package, and every module currently loaded into GHCi. + package, and every module currently loaded into GHCi. This + behaviour can be disabled with the flag . diff --git a/ghc/Main.hs b/ghc/Main.hs index a2c2fd1..840f843 100644 --- a/ghc/Main.hs +++ b/ghc/Main.hs @@ -125,9 +125,16 @@ main = _other -> 1 } + -- turn on -fimplicit-import-qualified for GHCi now, so that it + -- can be overriden from the command-line + dflags1a | DoInteractive <- cli_mode = imp_qual_enabled + | DoEval _ <- cli_mode = imp_qual_enabled + | otherwise = dflags1 + where imp_qual_enabled = dflags1 `dopt_set` Opt_ImplicitImportQualified + -- The rest of the arguments are "dynamic" -- Leftover ones are presumably files - (dflags2, fileish_args, dynamicFlagWarnings) <- GHC.parseDynamicFlags dflags1 argv3 + (dflags2, fileish_args, dynamicFlagWarnings) <- GHC.parseDynamicFlags dflags1a argv3 let flagWarnings = staticFlagWarnings ++ modeFlagWarnings -- 1.7.10.4