X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FGHC.hs;h=4e00c61206fff118bc2099f3157d564bb59ad188;hp=3f91af6cc465362ab0fb124e2664f941cd74a1ab;hb=2c1ea2cedb1a8034b0828e24b554a35f56bb8924;hpb=10cc302badc3704ed300f7517a52ecc8304c61e9 diff --git a/compiler/main/GHC.hs b/compiler/main/GHC.hs index 3f91af6..4e00c61 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