X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FbasicTypes%2FId.lhs;h=b810376efa156d251492a7a7ee58ec5dcee43bea;hb=983d2d8ef49562b38a30d3ecda740796fcc6d4b0;hp=83861151cc5be149c43d950ef21884d9c10caf07;hpb=42b63073fb5e71fcd539ab80289cf6cf2a5b9641;p=ghc-hetmet.git diff --git a/ghc/compiler/basicTypes/Id.lhs b/ghc/compiler/basicTypes/Id.lhs index 8386115..b810376 100644 --- a/ghc/compiler/basicTypes/Id.lhs +++ b/ghc/compiler/basicTypes/Id.lhs @@ -48,7 +48,7 @@ module Id ( setIdNewStrictness, zapIdNewStrictness, setIdWorkerInfo, setIdSpecialisation, - setIdCgInfo, + setIdCafInfo, setIdOccInfo, #ifdef OLD_STRICTNESS @@ -66,7 +66,6 @@ module Id ( idWorkerInfo, idUnfolding, idSpecialisation, idCoreRules, - idCgInfo, idCafInfo, idLBVarInfo, idOccInfo, @@ -96,7 +95,10 @@ import Type ( Type, typePrimRep, addFreeTyVars, import IdInfo +#ifdef OLD_STRICTNESS import qualified Demand ( Demand ) +#endif +import DataCon ( isUnboxedTupleCon ) import NewDemand ( Demand, StrictSig, topDmd, topSig, isBottomingSig ) import Name ( Name, OccName, mkSystemName, mkSystemNameEncoded, mkInternalName, @@ -277,11 +279,13 @@ isDataConWrapId id = case globalIdDetails id of -- binding, even though it is defined in this module. -- Data constructor workers used to be things of this kind, but -- they aren't any more. Instead, we inject a binding for --- them at the CorePrep stage. +-- them at the CorePrep stage. +-- EXCEPT: unboxed tuples, which definitely have no binding hasNoBinding id = case globalIdDetails id of - PrimOpId _ -> True - FCallId _ -> True - other -> False + PrimOpId _ -> True + FCallId _ -> True + DataConWorkId dc -> isUnboxedTupleCon dc + other -> False isImplicitId :: Id -> Bool -- isImplicitId tells whether an Id's info is implied by other @@ -289,15 +293,17 @@ isImplicitId :: Id -> Bool -- file, even if it's mentioned in some other interface unfolding. isImplicitId id = case globalIdDetails id of - RecordSelId _ -> True -- Includes dictionary selectors + RecordSelId _ -> True FCallId _ -> True PrimOpId _ -> True + ClassOpId _ -> True + GenericOpId _ -> True DataConWorkId _ -> True DataConWrapId _ -> True -- These are are implied by their type or class decl; -- remember that all type and class decls appear in the interface file. - -- The dfun id must *not* be omitted, because it carries version info for - -- the instance decl + -- The dfun id is not an implicit Id; it must *not* be omitted, because + -- it carries version info for the instance decl other -> False \end{code} @@ -396,20 +402,6 @@ setIdSpecialisation :: Id -> CoreRules -> Id setIdSpecialisation id spec_info = modifyIdInfo (`setSpecInfo` spec_info) id --------------------------------- - -- CG INFO -idCgInfo :: Id -> CgInfo -#ifdef OLD_STRICTNESS -idCgInfo id = case cgInfo (idInfo id) of - NoCgInfo -> pprPanic "idCgInfo" (ppr id) - info -> info -#else -idCgInfo id = cgInfo (idInfo id) -#endif - -setIdCgInfo :: Id -> CgInfo -> Id -setIdCgInfo id cg_info = modifyIdInfo (`setCgInfo` cg_info) id - - --------------------------------- -- CAF INFO idCafInfo :: Id -> CafInfo #ifdef OLD_STRICTNESS @@ -417,8 +409,12 @@ idCafInfo id = case cgInfo (idInfo id) of NoCgInfo -> pprPanic "idCafInfo" (ppr id) info -> cgCafInfo info #else -idCafInfo id = cgCafInfo (idCgInfo id) +idCafInfo id = cafInfo (idInfo id) #endif + +setIdCafInfo :: Id -> CafInfo -> Id +setIdCafInfo id caf_info = modifyIdInfo (`setCafInfo` caf_info) id + --------------------------------- -- CPR INFO #ifdef OLD_STRICTNESS