X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Ftypecheck%2FTcRnDriver.lhs;h=d6ea564e07476de7890592a1585b431159833dcd;hb=3c58c25b1b99143c0ac03510423a95bc3bd41aa2;hp=3755249a98c2f16d6eb0bfbaccf9dfbcd624334a;hpb=4ef18ea237ee070678970dbdd49714014dd9efbf;p=ghc-hetmet.git diff --git a/ghc/compiler/typecheck/TcRnDriver.lhs b/ghc/compiler/typecheck/TcRnDriver.lhs index 3755249..d6ea564 100644 --- a/ghc/compiler/typecheck/TcRnDriver.lhs +++ b/ghc/compiler/typecheck/TcRnDriver.lhs @@ -16,7 +16,8 @@ module TcRnDriver ( #include "HsVersions.h" #ifdef GHCI -import {-# SOURCE #-} TcSplice( tcSpliceDecls ) +import {-# SOURCE #-} TcSplice ( tcSpliceDecls ) +import DsMeta ( templateHaskellNames ) #endif import CmdLineOpts ( DynFlag(..), opt_PprStyle_Debug, dopt ) @@ -100,7 +101,7 @@ import HscTypes ( PersistentCompilerState(..), InteractiveContext(..), ModIface, ModDetails(..), ModGuts(..), HscEnv(..), ModIface(..), ModDetails(..), IfaceDecls(..), - GhciMode(..), Dependencies(..), noDependencies, + GhciMode(..), noDependencies, Deprecations(..), plusDeprecs, emptyGlobalRdrEnv, GenAvailInfo(Avail), availsToNameSet, @@ -485,9 +486,16 @@ tcRnThing hsc_env pcs ictxt rdr_name do { addMessages (head msgs_s) ; failM } else do { - mapM_ addMessages msgs_s ; -- Add deprecation warnings - mapM tcLookupGlobal names -- and lookup up the entities - }} + -- Add deprecation warnings + mapM_ addMessages msgs_s ; + + -- Slurp in the supporting declarations + tcg_env <- importSupportingDecls (mkFVs names) ; + setGblEnv tcg_env $ do { + + -- And lookup up the entities + mapM tcLookupGlobal names + }}} \end{code} @@ -608,7 +616,7 @@ tcRnSrcDecls ds (rn_splice_expr, fvs) <- initRn SourceMode $ addSrcLoc splice_loc $ rnExpr splice_expr ; - tcg_env <- importSupportingDecls fvs ; + tcg_env <- importSupportingDecls (fvs `plusFV` templateHaskellNames) ; setGblEnv tcg_env $ do { -- Execute the splice @@ -694,7 +702,7 @@ tcTopSrcDecls rn_decls -- in this module, which is why the knot is so big -- Do the main work - ((tcg_env, binds, rules, fords), lie) <- getLIE ( + ((tcg_env, lcl_env, binds, rules, fords), lie) <- getLIE ( tc_src_decls unf_env rn_decls ) ; @@ -705,8 +713,12 @@ tcTopSrcDecls rn_decls -- type. (Usually, ambiguous type variables are resolved -- during the generalisation step.) traceTc (text "Tc8") ; - inst_binds <- setGblEnv tcg_env (tcSimplifyTop lie) ; + inst_binds <- setGblEnv tcg_env $ + setLclTypeEnv lcl_env $ + tcSimplifyTop lie ; -- The setGblEnv exposes the instances to tcSimplifyTop + -- The steLclTypeEnv exposes the local Ids, so that + -- we get better error messages (monomorphism restriction) -- Backsubstitution. This must be done last. -- Even tcSimplifyTop may do some unification. @@ -791,7 +803,7 @@ tc_src_decls unf_env cls_dm_binds `AndMonoBinds` foe_binds } ; - return (tcg_env, all_binds, src_rules, foe_decls) + return (tcg_env, lcl_env, all_binds, src_rules, foe_decls) }}}}}}}}} \end{code}