summaryrefslogtreecommitdiff
path: root/compiler/typecheck/TcRnMonad.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/typecheck/TcRnMonad.hs')
-rw-r--r--compiler/typecheck/TcRnMonad.hs17
1 files changed, 17 insertions, 0 deletions
diff --git a/compiler/typecheck/TcRnMonad.hs b/compiler/typecheck/TcRnMonad.hs
index a411e18c62..e8513d39b0 100644
--- a/compiler/typecheck/TcRnMonad.hs
+++ b/compiler/typecheck/TcRnMonad.hs
@@ -106,6 +106,7 @@ module TcRnMonad(
-- * Template Haskell context
recordThUse, recordThSpliceUse, recordTopLevelSpliceLoc,
getTopLevelSpliceLocs, keepAlive, getStage, getStageAndBindLevel, setStage,
+ addModFinalizersWithLclEnv,
-- * Safe Haskell context
recordUnsafeInfer, finalSafeMode, fixSafeInstances,
@@ -174,6 +175,7 @@ import Data.Set ( Set )
import qualified Data.Set as Set
#ifdef GHCI
+import {-# SOURCE #-} TcSplice ( runRemoteModFinalizers )
import qualified Data.Map as Map
#endif
@@ -1529,6 +1531,21 @@ getStageAndBindLevel name
setStage :: ThStage -> TcM a -> TcRn a
setStage s = updLclEnv (\ env -> env { tcl_th_ctxt = s })
+#ifdef GHCI
+-- | Adds the given modFinalizers to the global environment and set them to use
+-- the current local environment.
+addModFinalizersWithLclEnv :: ThModFinalizers -> TcM ()
+addModFinalizersWithLclEnv mod_finalizers
+ = do lcl_env <- getLclEnv
+ th_modfinalizers_var <- fmap tcg_th_modfinalizers getGblEnv
+ updTcRef th_modfinalizers_var $ \fins ->
+ setLclEnv lcl_env (runRemoteModFinalizers mod_finalizers)
+ : fins
+#else
+addModFinalizersWithLclEnv :: ThModFinalizers -> TcM ()
+addModFinalizersWithLclEnv ThModFinalizers = return ()
+#endif
+
{-
************************************************************************
* *