X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FTidyPgm.lhs;h=a8dede8aa16443f16bc8e50e5fc5f00b291931ca;hb=2c92736ea5a4aedf263a77d58c6e9b032a05b7ef;hp=b04830b1685fb28a5e78c91a69e85e7a83b4498c;hpb=2a8cdc3aee5997374273e27365f92c161aca8453;p=ghc-hetmet.git diff --git a/compiler/main/TidyPgm.lhs b/compiler/main/TidyPgm.lhs index b04830b..a8dede8 100644 --- a/compiler/main/TidyPgm.lhs +++ b/compiler/main/TidyPgm.lhs @@ -21,14 +21,15 @@ 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, nameParent_maybe, + localiseName, isExternalName, nameSrcLoc, isWiredInName, getName ) import NameSet ( NameSet, elemNameSet ) @@ -43,21 +44,17 @@ import TyCon ( TyCon, makeTyConAbstract, tyConDataCons, isNewTyCon, isEnumerationTyCon, isOpenTyCon ) import Class ( classSelIds ) import Module ( Module ) -import HscTypes ( HscEnv(..), NameCache( nsUniqs ), CgGuts(..), - TypeEnv, typeEnvIds, typeEnvElts, typeEnvTyCons, - extendTypeEnvWithIds, lookupTypeEnv, - ModGuts(..), TyThing(..), ModDetails(..), - Dependencies(..) - ) +import HscTypes import Maybes ( orElse, mapCatMaybes ) import ErrUtils ( showPass, dumpIfSet_core ) import PackageConfig ( PackageId ) import UniqSupply ( splitUniqSupply, uniqFromSupply ) -import List ( partition ) -import Maybe ( isJust ) import Outputable -import DATA_IOREF ( IORef, readIORef, writeIORef ) import FastTypes hiding ( fastOr ) + +import Data.List ( partition ) +import Data.Maybe ( isJust ) +import Data.IORef ( IORef, readIORef, writeIORef ) \end{code} @@ -243,7 +240,8 @@ tidyProgram hsc_env mg_binds = binds, mg_rules = imp_rules, mg_dir_imps = dir_imps, mg_deps = deps, - mg_foreign = foreign_stubs }) + mg_foreign = foreign_stubs, + mg_hpc_info = hpc_info }) = do { let dflags = hsc_dflags hsc_env ; showPass dflags "Tidy Core" @@ -264,7 +262,8 @@ tidyProgram hsc_env ; (tidy_env, tidy_binds) <- tidyTopBinds hsc_env mod type_env ext_ids binds - ; let { tidy_type_env = tidyTypeEnv omit_prags exports type_env + ; let { export_set = availsToNameSet exports + ; tidy_type_env = tidyTypeEnv omit_prags export_set type_env tidy_binds ; tidy_insts = tidyInstances (lookup_dfun tidy_type_env) insts -- A DFunId will have a binding in tidy_binds, and so @@ -293,7 +292,8 @@ tidyProgram hsc_env cg_binds = all_tidy_binds, cg_dir_imps = dir_imps, cg_foreign = foreign_stubs, - cg_dep_pkgs = dep_pkgs deps }, + cg_dep_pkgs = dep_pkgs deps, + cg_hpc_info = hpc_info }, ModDetails { md_types = tidy_type_env, md_rules = tidy_rules, @@ -664,7 +664,6 @@ tidyTopName mod nc_var ext_ids occ_env id global = isExternalName name local = not global internal = not external - mb_parent = nameParent_maybe name loc = nameSrcLoc name (occ_env', occ') = tidyOccName occ_env (nameOccName name) @@ -674,7 +673,7 @@ tidyTopName mod nc_var ext_ids occ_env id (us1, us2) = splitUniqSupply (nsUniqs nc) uniq = uniqFromSupply us1 - mk_new_external nc = allocateGlobalBinder nc mod occ' mb_parent loc + mk_new_external nc = allocateGlobalBinder nc mod occ' loc -- If we want to externalise a currently-local name, check -- whether we have already assigned a unique for it. -- If so, use it; if not, extend the table. @@ -793,11 +792,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 = MayHaveCafRefs + | is_caf || mentions_cafs + = MayHaveCafRefs | otherwise = NoCafRefs where mentions_cafs = isFastTrue (cafRefs p expr) is_caf = not (arity > 0 || rhsIsStatic this_pkg expr) + -- 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