X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FcoreSyn%2FCoreSubst.lhs;h=e63b0363a8feff4fe719ff1087339df6f584c30a;hb=6ee9554a738c442719ded861504acb729fd3d431;hp=00eaadd9fa32a83e4447153b497f8e3943fd50e2;hpb=1286da96dc65faa5992a8a34c5b3bf29dfe2be04;p=ghc-hetmet.git diff --git a/compiler/coreSyn/CoreSubst.lhs b/compiler/coreSyn/CoreSubst.lhs index 00eaadd..e63b036 100644 --- a/compiler/coreSyn/CoreSubst.lhs +++ b/compiler/coreSyn/CoreSubst.lhs @@ -6,13 +6,6 @@ Utility functions on @Core@ syntax \begin{code} -{-# OPTIONS -w #-} --- The above warning supression flag is a temporary kludge. --- While working on this module you are encouraged to remove it and fix --- any warnings in the module. See --- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings --- for details - module CoreSubst ( -- Substitution stuff Subst, TvSubstEnv, IdSubstEnv, InScopeSet, @@ -50,8 +43,7 @@ import UniqSupply import Maybes import Outputable import PprCore () -- Instances -import Util -import FastTypes +import FastString import Data.List \end{code} @@ -175,22 +167,23 @@ extendSubstList :: Subst -> [(Var,CoreArg)] -> Subst extendSubstList subst [] = subst extendSubstList subst ((var,rhs):prs) = extendSubstList (extendSubst subst var rhs) prs +extendSubst :: Subst -> Var -> CoreArg -> Subst extendSubst (Subst in_scope ids tvs) tv (Type ty) = ASSERT( isTyVar tv ) Subst in_scope ids (extendVarEnv tvs tv ty) extendSubst (Subst in_scope ids tvs) id expr = ASSERT( isId id ) Subst in_scope (extendVarEnv ids id expr) tvs lookupIdSubst :: Subst -> Id -> CoreExpr -lookupIdSubst (Subst in_scope ids tvs) v +lookupIdSubst (Subst in_scope ids _) v | not (isLocalId v) = Var v | Just e <- lookupVarEnv ids v = e | Just v' <- lookupInScope in_scope v = Var v' -- Vital! See Note [Extending the Subst] - | otherwise = WARN( True, ptext SLIT("CoreSubst.lookupIdSubst") <+> ppr v ) + | otherwise = WARN( True, ptext (sLit "CoreSubst.lookupIdSubst") <+> ppr v ) Var v lookupTvSubst :: Subst -> TyVar -> Type -lookupTvSubst (Subst _ ids tvs) v = lookupVarEnv tvs v `orElse` Type.mkTyVarTy v +lookupTvSubst (Subst _ _ tvs) v = lookupVarEnv tvs v `orElse` Type.mkTyVarTy v ------------------------------ isInScope :: Var -> Subst -> Bool @@ -217,9 +210,9 @@ Pretty printing, for debugging only \begin{code} instance Outputable Subst where ppr (Subst in_scope ids tvs) - = ptext SLIT(" braces (fsep (map ppr (varEnvElts (getInScopeVars in_scope)))) - $$ ptext SLIT(" IdSubst =") <+> ppr ids - $$ ptext SLIT(" TvSubst =") <+> ppr tvs + = ptext (sLit " braces (fsep (map ppr (varEnvElts (getInScopeVars in_scope)))) + $$ ptext (sLit " IdSubst =") <+> ppr ids + $$ ptext (sLit " TvSubst =") <+> ppr tvs <> char '>' \end{code} @@ -399,7 +392,7 @@ substTyVarBndr (Subst in_scope id_env tv_env) tv -> (Subst in_scope' id_env tv_env', tv') substTy :: Subst -> Type -> Type -substTy (Subst in_scope id_env tv_env) ty +substTy (Subst in_scope _id_env tv_env) ty = Type.substTy (TvSubst in_scope tv_env) ty \end{code} @@ -412,7 +405,7 @@ substTy (Subst in_scope id_env tv_env) ty \begin{code} substIdType :: Subst -> Id -> Id -substIdType subst@(Subst in_scope id_env tv_env) id +substIdType subst@(Subst _ _ tv_env) id | isEmptyVarEnv tv_env || isEmptyVarSet (Type.tyVarsOfType old_ty) = id | otherwise = setIdType id (substTy subst old_ty) -- The tyVarsOfType is cheaper than it looks @@ -442,7 +435,7 @@ substWorker :: Subst -> WorkerInfo -> WorkerInfo -- Seq'ing on the returned WorkerInfo is enough to cause all the -- substitutions to happen completely -substWorker subst NoWorker +substWorker _ NoWorker = NoWorker substWorker subst (HasWorker w a) = case lookupIdSubst subst w of @@ -474,6 +467,7 @@ substSpec subst new_fn spec@(SpecInfo rules rhs_fvs) (subst', bndrs') = substBndrs subst bndrs ------------------ +substVarSet :: Subst -> VarSet -> VarSet substVarSet subst fvs = foldVarSet (unionVarSet . subst_fv subst) emptyVarSet fvs where