X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FTidyPgm.lhs;h=976c32e1669ddccba547c6846db0fb9b988aca65;hb=d3ff6e08657a785616eb45860bae07de3032a950;hp=7b98bcd87635a3d7cbc47b380d07d4bde8bef5b4;hpb=1717c5831d71bfa63f9d098a2a709feb2d8fbcc9;p=ghc-hetmet.git diff --git a/compiler/main/TidyPgm.lhs b/compiler/main/TidyPgm.lhs index 7b98bcd..976c32e 100644 --- a/compiler/main/TidyPgm.lhs +++ b/compiler/main/TidyPgm.lhs @@ -26,7 +26,7 @@ import Id ( idType, idInfo, idName, idCoreRules, isGlobalId, import IdInfo {- loads of stuff -} import InstEnv ( Instance, DFunId, instanceDFunId, setInstanceDFunId ) import NewDemand ( isBottomingSig, topSig ) -import BasicTypes ( Arity, isNeverActive ) +import BasicTypes ( Arity, isNeverActive, isNonRuleLoopBreaker ) import Name ( Name, getOccName, nameOccName, mkInternalName, localiseName, isExternalName, nameSrcLoc, nameParent_maybe, isWiredInName, getName @@ -39,13 +39,16 @@ import Type ( tidyTopType ) import TcType ( isFFITy ) import DataCon ( dataConName, dataConFieldLabels, dataConWrapId_maybe ) import TyCon ( TyCon, makeTyConAbstract, tyConDataCons, isNewTyCon, - newTyConRep, tyConSelIds, isAlgTyCon, isEnumerationTyCon ) + newTyConRep, tyConSelIds, isAlgTyCon, + isEnumerationTyCon, isOpenTyCon ) import Class ( classSelIds ) import Module ( Module ) import HscTypes ( HscEnv(..), NameCache( nsUniqs ), CgGuts(..), TypeEnv, typeEnvIds, typeEnvElts, typeEnvTyCons, extendTypeEnvWithIds, lookupTypeEnv, - ModGuts(..), TyThing(..), ModDetails(..), Dependencies(..) + mkDetailsFamInstCache, + ModGuts(..), TyThing(..), ModDetails(..), + Dependencies(..) ) import Maybes ( orElse, mapCatMaybes ) import ErrUtils ( showPass, dumpIfSet_core ) @@ -134,10 +137,11 @@ mkBootModDetails hsc_env (ModGuts { mg_module = mod, ; type_env' = extendTypeEnvWithIds type_env2 (map instanceDFunId ispecs') } - ; return (ModDetails { md_types = type_env', - md_insts = ispecs', - md_rules = [], - md_exports = exports }) + ; return (ModDetails { md_types = type_env', + md_insts = ispecs', + md_fam_insts = mkDetailsFamInstCache type_env', + md_rules = [], + md_exports = exports }) } where @@ -289,6 +293,8 @@ tidyProgram hsc_env ModDetails { md_types = tidy_type_env, md_rules = tidy_rules, md_insts = tidy_ispecs, + md_fam_insts = mkDetailsFamInstCache + tidy_type_env, md_exports = exports }) } @@ -351,6 +357,8 @@ mustExposeTyCon exports tc | isEnumerationTyCon tc -- For an enumeration, exposing the constructors = True -- won't lead to the need for further exposure -- (This includes data types with no constructors.) + | isOpenTyCon tc -- open type family + = True | otherwise -- Newtype, datatype = any exported_con (tyConDataCons tc) -- Expose rep if any datacon or field is exported @@ -443,9 +451,10 @@ addExternal (id,rhs) needed = extendVarEnv (foldVarSet add_occ needed new_needed_ids) id show_unfold where - add_occ id needed = extendVarEnv needed id False + add_occ id needed | id `elemVarEnv` needed = needed + | otherwise = extendVarEnv needed id False -- "False" because we don't know we need the Id's unfolding - -- We'll override it later when we find the binding site + -- Don't override existing bindings; we might have already set it to True new_needed_ids = worker_ids `unionVarSet` unfold_ids `unionVarSet` @@ -453,7 +462,7 @@ addExternal (id,rhs) needed idinfo = idInfo id dont_inline = isNeverActive (inlinePragInfo idinfo) - loop_breaker = isLoopBreaker (occInfo idinfo) + loop_breaker = isNonRuleLoopBreaker (occInfo idinfo) bottoming_fn = isBottomingSig (newStrictnessInfo idinfo `orElse` topSig) spec_ids = specInfoFreeVars (specInfo idinfo) worker_info = workerInfo idinfo