X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FGHC.hs;h=5f82cf3fdb2474f9994e7d815c12bdd93c96f7a2;hb=29e342d1903ba4cb4b58a66605f00920eddae7a5;hp=3f91af6cc465362ab0fb124e2664f941cd74a1ab;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/main/GHC.hs b/compiler/main/GHC.hs index 3f91af6..5f82cf3 100644 --- a/compiler/main/GHC.hs +++ b/compiler/main/GHC.hs @@ -29,6 +29,12 @@ module GHC ( removeTarget, guessTarget, + -- * Extending the program scope + extendGlobalRdrScope, -- :: Session -> [GlobalRdrElt] -> IO () + setGlobalRdrScope, -- :: Session -> [GlobalRdrElt] -> IO () + extendGlobalTypeScope, -- :: Session -> [Id] -> IO () + setGlobalTypeScope, -- :: Session -> [Id] -> IO () + -- * Loading\/compiling the program depanal, load, LoadHowMuch(..), SuccessFlag(..), -- also does depanal @@ -169,7 +175,7 @@ import TcRnDriver ( tcRnLookupRdrName, tcRnGetInfo, tcRnLookupName, getModuleExports ) import RdrName ( plusGlobalRdrEnv, Provenance(..), ImportSpec(..), ImpDeclSpec(..), ImpItemSpec(..), - emptyGlobalRdrEnv, mkGlobalRdrEnv ) + mkGlobalRdrEnv ) import HscMain ( hscParseIdentifier, hscStmt, hscTcExpr, hscKcType ) import Type ( tidyType ) import VarEnv ( emptyTidyEnv ) @@ -179,7 +185,8 @@ import GHC.Exts ( unsafeCoerce# ) import Packages ( initPackages ) import NameSet ( NameSet, nameSetToList, elemNameSet ) import RdrName ( GlobalRdrEnv, GlobalRdrElt(..), RdrName(..), - globalRdrEnvElts ) + globalRdrEnvElts, extendGlobalRdrEnv, + emptyGlobalRdrEnv ) import HsSyn import Type ( Kind, Type, dropForAlls, PredType, ThetaType, pprThetaArrow, pprParendType, splitForAllTys, @@ -447,6 +454,31 @@ guessTarget file Nothing lhs_file = file `joinFileExt` "lhs" -- ----------------------------------------------------------------------------- +-- Extending the program scope + +extendGlobalRdrScope :: Session -> [GlobalRdrElt] -> IO () +extendGlobalRdrScope session rdrElts + = modifySession session $ \hscEnv -> + let global_rdr = hsc_global_rdr_env hscEnv + in hscEnv{ hsc_global_rdr_env = foldl extendGlobalRdrEnv global_rdr rdrElts } + +setGlobalRdrScope :: Session -> [GlobalRdrElt] -> IO () +setGlobalRdrScope session rdrElts + = modifySession session $ \hscEnv -> + hscEnv{ hsc_global_rdr_env = foldl extendGlobalRdrEnv emptyGlobalRdrEnv rdrElts } + +extendGlobalTypeScope :: Session -> [Id] -> IO () +extendGlobalTypeScope session ids + = modifySession session $ \hscEnv -> + let global_type = hsc_global_type_env hscEnv + in hscEnv{ hsc_global_type_env = extendTypeEnvWithIds global_type ids } + +setGlobalTypeScope :: Session -> [Id] -> IO () +setGlobalTypeScope session ids + = modifySession session $ \hscEnv -> + hscEnv{ hsc_global_type_env = extendTypeEnvWithIds emptyTypeEnv ids } + +-- ----------------------------------------------------------------------------- -- Loading the program -- Perform a dependency analysis starting from the current targets @@ -462,7 +494,7 @@ depanal (Session ref) excluded_mods allow_dup_roots = do showPass dflags "Chasing dependencies" when (gmode == BatchCompile) $ - debugTraceMsg dflags 1 (hcat [ + debugTraceMsg dflags 2 (hcat [ text "Chasing modules from: ", hcat (punctuate comma (map pprTarget targets))])