X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FTidyPgm.lhs;h=b9dfa03fc22cdf23ea27378459101af3b5d9427f;hp=331d921489d4f7cd30cba6914ed7c9bc3308d283;hb=1a7d1b77334529ca96ed4cbc03fcb5f55dc2de4a;hpb=d5934bbb856aa0aa620c9b2e0fa51c90a1a5a048 diff --git a/compiler/main/TidyPgm.lhs b/compiler/main/TidyPgm.lhs index 331d921..b9dfa03 100644 --- a/compiler/main/TidyPgm.lhs +++ b/compiler/main/TidyPgm.lhs @@ -4,6 +4,13 @@ \section{Tidying up Core} \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 TidyPgm( mkBootModDetails, tidyProgram ) where #include "HsVersions.h" @@ -21,16 +28,14 @@ import VarSet import Var ( Id, Var ) import Id ( idType, idInfo, idName, idCoreRules, isGlobalId, isExportedId, mkVanillaGlobal, isLocalId, isNaughtyRecordSelector, - idArity, idCafInfo, idUnfolding, isImplicitId, setIdInfo + idArity, idCafInfo, idUnfolding, isImplicitId, setIdInfo, + isTickBoxOp ) import IdInfo {- loads of stuff -} import InstEnv ( Instance, DFunId, instanceDFunId, setInstanceDFunId ) import NewDemand ( isBottomingSig, topSig ) import BasicTypes ( Arity, isNeverActive, isNonRuleLoopBreaker ) -import Name ( Name, getOccName, nameOccName, mkInternalName, - localiseName, isExternalName, nameSrcLoc, - isWiredInName, getName - ) +import Name import NameSet ( NameSet, elemNameSet ) import IfaceEnv ( allocateGlobalBinder ) import NameEnv ( filterNameEnv, mapNameEnv ) @@ -42,11 +47,10 @@ import TyCon ( TyCon, makeTyConAbstract, tyConDataCons, isNewTyCon, newTyConRep, tyConSelIds, isAlgTyCon, isEnumerationTyCon, isOpenTyCon ) import Class ( classSelIds ) -import Module ( Module ) +import Module import HscTypes import Maybes ( orElse, mapCatMaybes ) import ErrUtils ( showPass, dumpIfSet_core ) -import PackageConfig ( PackageId ) import UniqSupply ( splitUniqSupply, uniqFromSupply ) import Outputable import FastTypes hiding ( fastOr ) @@ -123,7 +127,9 @@ mkBootModDetails hsc_env (ModGuts { mg_module = mod , mg_exports = exports , mg_types = type_env , mg_insts = insts - , mg_fam_insts = fam_insts }) + , mg_fam_insts = fam_insts + , mg_modBreaks = modBreaks + }) = do { let dflags = hsc_dflags hsc_env ; showPass dflags "Tidy [hoot] type env" @@ -137,7 +143,9 @@ mkBootModDetails hsc_env (ModGuts { mg_module = mod , md_insts = insts' , md_fam_insts = fam_insts , md_rules = [] - , md_exports = exports }) + , md_exports = exports + , md_vect_info = noVectInfo + }) } where @@ -238,9 +246,11 @@ tidyProgram hsc_env mg_insts = insts, mg_fam_insts = fam_insts, mg_binds = binds, mg_rules = imp_rules, + mg_vect_info = vect_info, mg_dir_imps = dir_imps, mg_deps = deps, mg_foreign = foreign_stubs, - mg_hpc_info = hpc_info }) + mg_hpc_info = hpc_info, + mg_modBreaks = modBreaks }) = do { let dflags = hsc_dflags hsc_env ; showPass dflags "Tidy Core" @@ -292,13 +302,16 @@ tidyProgram hsc_env cg_dir_imps = dir_imps, cg_foreign = foreign_stubs, cg_dep_pkgs = dep_pkgs deps, - cg_hpc_info = hpc_info }, + cg_hpc_info = hpc_info, + cg_modBreaks = modBreaks }, ModDetails { md_types = tidy_type_env, md_rules = tidy_rules, md_insts = tidy_insts, md_fam_insts = fam_insts, - md_exports = exports }) + md_exports = exports, + md_vect_info = vect_info -- is already tidy + }) } lookup_dfun type_env dfun_id @@ -663,7 +676,7 @@ tidyTopName mod nc_var ext_ids occ_env id global = isExternalName name local = not global internal = not external - loc = nameSrcLoc name + loc = nameSrcSpan name (occ_env', occ') = tidyOccName occ_env (nameOccName name) @@ -791,17 +804,13 @@ CAF list to keep track of non-collectable CAFs. \begin{code} hasCafRefs :: PackageId -> VarEnv Var -> Arity -> CoreExpr -> CafInfo hasCafRefs this_pkg p arity expr - | is_caf || mentions_cafs || is_tick + | is_caf || mentions_cafs = MayHaveCafRefs | otherwise = NoCafRefs where mentions_cafs = isFastTrue (cafRefs p expr) is_caf = not (arity > 0 || rhsIsStatic this_pkg expr) - is_tick = case expr of - Note (TickBox {}) _ -> True - Note (BinaryTickBox {}) _ -> True - _ -> False - + -- NB. we pass in the arity of the expression, which is expected -- to be calculated by exprArity. This is because exprArity -- knows how much eta expansion is going to be done by