X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Frename%2FRnEnv.lhs;h=2ecaf612954c63302e2c74cf2c979ab4a69ce752;hp=51432bd4ff718ff5d801a3098389a071100590d5;hb=7bb3d1fc79521d591cd9f824893963141a7997b6;hpb=d436c70d43fb905c63220040168295e473f4b90a diff --git a/compiler/rename/RnEnv.lhs b/compiler/rename/RnEnv.lhs index 51432bd..2ecaf61 100644 --- a/compiler/rename/RnEnv.lhs +++ b/compiler/rename/RnEnv.lhs @@ -15,7 +15,7 @@ module RnEnv ( lookupInstDeclBndr, lookupRecordBndr, lookupConstructorFields, lookupSyntaxName, lookupSyntaxTable, lookupGreRn, lookupGreLocalRn, lookupGreRn_maybe, - getLookupOccRn, + getLookupOccRn, addUsedRdrNames, newLocalsRn, newIPNameRn, bindLocalNames, bindLocalNamesFV, @@ -68,6 +68,7 @@ import List ( nubBy ) import DynFlags import FastString import Control.Monad +import qualified Data.Set as Set \end{code} \begin{code} @@ -307,6 +308,7 @@ lookup_sub_bndr :: (GlobalRdrElt -> Bool) -> SDoc -> RdrName -> RnM Name lookup_sub_bndr is_good doc rdr_name | isUnqual rdr_name -- Find all the things the rdr-name maps to = do { -- and pick the one with the right parent name + ; addUsedRdrName rdr_name ; env <- getGlobalRdrEnv ; case filter is_good (lookupGlobalRdrEnv env (rdrNameOcc rdr_name)) of -- NB: lookupGlobalRdrEnv, not lookupGRE_RdrName! @@ -420,7 +422,27 @@ unboundName rdr_name lookupGreRn_maybe :: RdrName -> RnM (Maybe GlobalRdrElt) -- Just look up the RdrName in the GlobalRdrEnv lookupGreRn_maybe rdr_name - = lookupGreRn_help rdr_name (lookupGRE_RdrName rdr_name) + = do { mGre <- lookupGreRn_help rdr_name (lookupGRE_RdrName rdr_name) + ; case mGre of + Just gre -> + case gre_prov gre of + LocalDef -> return () + Imported _ -> addUsedRdrName rdr_name + Nothing -> + return () + ; return mGre } + +addUsedRdrName :: RdrName -> RnM () +addUsedRdrName rdr + = do { env <- getGblEnv + ; updMutVar (tcg_used_rdrnames env) + (\s -> Set.insert rdr s) } + +addUsedRdrNames :: [RdrName] -> RnM () +addUsedRdrNames rdrs + = do { env <- getGblEnv + ; updMutVar (tcg_used_rdrnames env) + (\s -> foldr Set.insert s rdrs) } lookupGreRn :: RdrName -> RnM GlobalRdrElt -- If not found, add error message, and return a fake GRE