diff options
Diffstat (limited to 'compiler/GHC/Tc/Gen')
-rw-r--r-- | compiler/GHC/Tc/Gen/Bind.hs | 7 | ||||
-rw-r--r-- | compiler/GHC/Tc/Gen/Splice.hs | 8 |
2 files changed, 4 insertions, 11 deletions
diff --git a/compiler/GHC/Tc/Gen/Bind.hs b/compiler/GHC/Tc/Gen/Bind.hs index 93fa9a7e2c..99d2746ddf 100644 --- a/compiler/GHC/Tc/Gen/Bind.hs +++ b/compiler/GHC/Tc/Gen/Bind.hs @@ -179,13 +179,10 @@ tcTopBinds :: [(RecFlag, LHsBinds GhcRn)] -> [LSig GhcRn] -- The TcLclEnv has an extended type envt for the new bindings tcTopBinds binds sigs = do { -- Pattern synonym bindings populate the global environment - (binds', (tcg_env, tcl_env)) <- tcValBinds TopLevel binds sigs $ - do { gbl <- getGblEnv - ; lcl <- getLclEnv - ; return (gbl, lcl) } + (binds', (tcg_env, tcl_env)) <- tcValBinds TopLevel binds sigs getEnvs ; specs <- tcImpPrags sigs -- SPECIALISE prags for imported Ids - ; complete_matches <- setEnvs (tcg_env, tcl_env) $ tcCompleteSigs sigs + ; complete_matches <- restoreEnvs (tcg_env, tcl_env) $ tcCompleteSigs sigs ; traceTc "complete_matches" (ppr binds $$ ppr sigs) ; traceTc "complete_matches" (ppr complete_matches) diff --git a/compiler/GHC/Tc/Gen/Splice.hs b/compiler/GHC/Tc/Gen/Splice.hs index a38d6d436f..f307b636ee 100644 --- a/compiler/GHC/Tc/Gen/Splice.hs +++ b/compiler/GHC/Tc/Gen/Splice.hs @@ -679,12 +679,8 @@ tcTopSplice expr res_ty -- See Note [Running typed splices in the zonker] runTopSplice :: DelayedSplice -> TcM (HsExpr GhcTc) runTopSplice (DelayedSplice lcl_env orig_expr res_ty q_expr) - = do - errs_var <- getErrsVar - setLclEnv lcl_env $ setErrsVar errs_var $ do { - -- Set the errs_var to the errs_var from the current context, - -- otherwise error messages can go missing in GHCi (#19470) - zonked_ty <- zonkTcType res_ty + = restoreLclEnv lcl_env $ + do { zonked_ty <- zonkTcType res_ty ; zonked_q_expr <- zonkTopLExpr q_expr -- See Note [Collecting modFinalizers in typed splices]. ; modfinalizers_ref <- newTcRef [] |