X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FcoreSyn%2FCoreFVs.lhs;h=c32ca7c54e8b9d17077f56e9bb7058a7bcc237a7;hb=36d207aa8c9cedbf58e739178971292048bd41d0;hp=2fae6ac426c376c8c2134b2ff1985c2218f87767;hpb=7656f8c4bd8d786bf83c1ab2dca0cdd1a903e5bf;p=ghc-hetmet.git diff --git a/compiler/coreSyn/CoreFVs.lhs b/compiler/coreSyn/CoreFVs.lhs index 2fae6ac..c32ca7c 100644 --- a/compiler/coreSyn/CoreFVs.lhs +++ b/compiler/coreSyn/CoreFVs.lhs @@ -1,4 +1,5 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % Taken quite directly from the Peyton Jones/Lester paper. @@ -25,16 +26,15 @@ module CoreFVs ( #include "HsVersions.h" import CoreSyn -import Id ( Id, idType, idSpecialisation, isLocalId ) -import IdInfo ( specInfoFreeVars ) +import Id +import IdInfo import NameSet -import UniqFM ( delFromUFM ) -import Name ( isExternalName ) +import UniqFM +import Name import VarSet -import Var ( Var, isId, isLocalVar, varName ) -import Type ( tyVarsOfType ) -import TcType ( tyClsNamesOfType ) -import Util ( mapAndUnzip ) +import Var +import TcType +import Util import Outputable \end{code} @@ -157,6 +157,7 @@ expr_fvs (Lit lit) = noVars expr_fvs (Note _ expr) = expr_fvs expr expr_fvs (App fun arg) = expr_fvs fun `union` expr_fvs arg expr_fvs (Lam bndr body) = addBndr bndr (expr_fvs body) +expr_fvs (Cast expr co) = expr_fvs expr `union` someVars (tyVarsOfType co) expr_fvs (Case scrut bndr ty alts) = expr_fvs scrut `union` someVars (tyVarsOfType ty) `union` addBndr bndr @@ -212,12 +213,13 @@ exprFreeNames e go (Var v) | isExternalName n = unitNameSet n | otherwise = emptyNameSet - where n = varName v + where n = idName v go (Lit _) = emptyNameSet go (Type ty) = tyClsNamesOfType ty -- Don't need free tyvars go (App e1 e2) = go e1 `unionNameSets` go e2 - go (Lam v e) = go e `delFromNameSet` varName v - go (Note n e) = go e + go (Lam v e) = go e `delFromNameSet` idName v + go (Note n e) = go e + go (Cast e co) = go e `unionNameSets` tyClsNamesOfType co go (Let (NonRec b r) e) = go e `unionNameSets` go r go (Let (Rec prs) e) = exprsFreeNames (map snd prs) `unionNameSets` go e go (Case e b ty as) = go e `unionNameSets` tyClsNamesOfType ty @@ -404,13 +406,12 @@ freeVars (Let (Rec binds) body) body2 = freeVars body body_fvs = freeVarsOf body2 -freeVars (Note (Coerce to_ty from_ty) expr) - = (freeVarsOf expr2 `unionFVs` tfvs1 `unionFVs` tfvs2, - AnnNote (Coerce to_ty from_ty) expr2) + +freeVars (Cast expr co) + = (freeVarsOf expr2 `unionFVs` cfvs, AnnCast expr2 co) where - expr2 = freeVars expr - tfvs1 = tyVarsOfType from_ty - tfvs2 = tyVarsOfType to_ty + expr2 = freeVars expr + cfvs = tyVarsOfType co freeVars (Note other_note expr) = (freeVarsOf expr2, AnnNote other_note expr2)