X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Frename%2FRnEnv.lhs;h=1a05139444f557f1a44d0c2910e6ff589edf8528;hb=e499cbe9455b359e0325327fcdb57e2c9d621a0e;hp=c3b5592834f2ac5855cc1707fd281fa5b65ea0b7;hpb=f1cc3eb980a634e62f2739a7a25387c902fa9d8a;p=ghc-hetmet.git diff --git a/compiler/rename/RnEnv.lhs b/compiler/rename/RnEnv.lhs index c3b5592..1a05139 100644 --- a/compiler/rename/RnEnv.lhs +++ b/compiler/rename/RnEnv.lhs @@ -20,10 +20,10 @@ module RnEnv ( newLocalBndrRn, newLocalBndrsRn, newIPNameRn, bindLocalName, bindLocalNames, bindLocalNamesFV, MiniFixityEnv, emptyFsEnv, extendFsEnv, lookupFsEnv, - bindLocalNamesFV_WithFixities, + addLocalFixities, bindLocatedLocalsFV, bindLocatedLocalsRn, bindSigTyVarsFV, bindPatSigTyVars, bindPatSigTyVarsFV, - bindTyVarsRn, extendTyVarEnvFVRn, + bindTyVarsRn, bindTyVarsFV, extendTyVarEnvFVRn, checkDupRdrNames, checkDupAndShadowedRdrNames, checkDupNames, checkDupAndShadowedNames, @@ -48,7 +48,7 @@ import Name ( Name, nameIsLocalOrFrom, mkInternalName, isWiredInName, nameSrcLoc, nameSrcSpan, nameOccName, nameModule, isExternalName ) import NameSet import NameEnv -import LazyUniqFM +import UniqFM import DataCon ( dataConFieldLabels ) import OccName import Module ( Module, ModuleName ) @@ -651,22 +651,17 @@ type MiniFixityEnv = FastStringEnv (Located Fixity) -------------------------------- -- Used for nested fixity decls to bind names along with their fixities. -- the fixities are given as a UFM from an OccName's FastString to a fixity decl -bindLocalNamesFV_WithFixities :: [Name] - -> MiniFixityEnv - -> RnM (a, FreeVars) -> RnM (a, FreeVars) -bindLocalNamesFV_WithFixities names fixities thing_inside - = bindLocalNamesFV names $ - extendFixityEnv boundFixities $ - thing_inside + +addLocalFixities :: MiniFixityEnv -> [Name] -> RnM a -> RnM a +addLocalFixities mini_fix_env names thing_inside + = extendFixityEnv (mapCatMaybes find_fixity names) thing_inside where - -- find the names that have fixity decls - boundFixities = foldr - (\ name -> \ acc -> - -- check whether this name has a fixity decl - case lookupFsEnv fixities (occNameFS (nameOccName name)) of - Just (L _ fix) -> (name, FixItem (nameOccName name) fix) : acc - Nothing -> acc) [] names - -- bind the names; extend the fixity env; do the thing inside + find_fixity name + = case lookupFsEnv mini_fix_env (occNameFS occ) of + Just (L _ fix) -> Just (name, FixItem occ fix) + Nothing -> Nothing + where + occ = nameOccName name \end{code} -------------------------------- @@ -841,7 +836,7 @@ bindLocalName name enclosed_scope bindLocalNamesFV :: [Name] -> RnM (a, FreeVars) -> RnM (a, FreeVars) bindLocalNamesFV names enclosed_scope = do { (result, fvs) <- bindLocalNames names enclosed_scope - ; return (result, delListFromNameSet fvs names) } + ; return (result, delFVs names fvs) } ------------------------------------- @@ -852,9 +847,17 @@ bindLocatedLocalsFV :: [Located RdrName] bindLocatedLocalsFV rdr_names enclosed_scope = bindLocatedLocalsRn rdr_names $ \ names -> enclosed_scope names `thenM` \ (thing, fvs) -> - return (thing, delListFromNameSet fvs names) + return (thing, delFVs names fvs) ------------------------------------- +bindTyVarsFV :: [LHsTyVarBndr RdrName] + -> ([LHsTyVarBndr Name] -> RnM (a, FreeVars)) + -> RnM (a, FreeVars) +bindTyVarsFV tyvars thing_inside + = bindTyVarsRn tyvars $ \ tyvars' -> + do { (res, fvs) <- thing_inside tyvars' + ; return (res, delFVs (map hsLTyVarName tyvars') fvs) } + bindTyVarsRn :: [LHsTyVarBndr RdrName] -> ([LHsTyVarBndr Name] -> RnM a) -> RnM a