From 675a9a5df03d6ecf3f307f666d2c61d2e5b4d2a0 Mon Sep 17 00:00:00 2001 From: simonmar Date: Tue, 30 Jan 2001 10:53:22 +0000 Subject: [PATCH] [project @ 2001-01-30 10:53:22 by simonmar] Don't discard top-level functions in interactive mode, even if they're not exported. When typing expressions in the context of a module, the entire top-level scope of the module should be available. --- ghc/compiler/main/HscMain.lhs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/ghc/compiler/main/HscMain.lhs b/ghc/compiler/main/HscMain.lhs index a49bf45..5ae2e61 100644 --- a/ghc/compiler/main/HscMain.lhs +++ b/ghc/compiler/main/HscMain.lhs @@ -64,8 +64,8 @@ import HscTypes ( ModDetails, ModIface(..), PersistentCompilerState(..), typeEnvClasses, typeEnvTyCons, emptyIfaceTable ) import FiniteMap ( FiniteMap, plusFM, emptyFM, addToFM ) import OccName ( OccName ) -import Name ( Name, nameModule, nameOccName, getName ) -import Name ( emptyNameEnv ) +import Name ( Name, nameModule, nameOccName, getName, isGlobalName, + emptyNameEnv ) import Module ( Module, lookupModuleEnvByName ) import Monad ( when ) @@ -203,6 +203,15 @@ hscRecomp ghci_mode dflags location maybe_checked_iface hst hit pcs_ch Nothing -> return (HscFail pcs_rn); Just (print_unqualified, (is_exported, new_iface, rn_hs_decls)) -> do { + -- In interactive mode, we don't want to discard any top-level entities at + -- all (eg. do not inline them away during simplification), and retain them + -- all in the TypeEnv so they are available from the command line. + -- + -- isGlobalName separates the user-defined top-level names from those + -- introduced by the type checker. + ; let dont_discard | ghci_mode == Interactive = isGlobalName + | otherwise = is_exported + ------------------- -- TYPECHECK ------------------- @@ -227,7 +236,7 @@ hscRecomp ghci_mode dflags location maybe_checked_iface hst hit pcs_ch ------------------- -- We grab the the unfoldings at this point. ; (pcs_simpl, tidy_binds, orphan_rules) - <- simplThenTidy dflags pcs_tc hst this_mod is_exported ds_binds ds_rules + <- simplThenTidy dflags pcs_tc hst this_mod dont_discard ds_binds ds_rules ------------------- -- BUILD THE NEW ModDetails AND ModIface @@ -302,11 +311,11 @@ myParseModule dflags src_filename }} -simplThenTidy dflags pcs hst this_mod is_exported binds rules +simplThenTidy dflags pcs hst this_mod dont_discard binds rules = do -- Do main Core-language transformations --------- -- _scc_ "Core2Core" (simplified, orphan_rules) - <- core2core dflags pcs hst is_exported binds rules + <- core2core dflags pcs hst dont_discard binds rules -- Do saturation and convert to A-normal form -- NOTE: subsequent passes may not transform the syntax, only annotate it -- 1.7.10.4