X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FbasicTypes%2FId.lhs;h=d87e45b81104559b05f08f0fda481916bd107b67;hb=0db3e625ff0717f36495b375e6008995d6ffb0a3;hp=c3cb9525c8254f57c39c0ebea4e8eed93c8f733c;hpb=74e5f1514aac87396f21a67204412badca6c0452;p=ghc-hetmet.git diff --git a/compiler/basicTypes/Id.lhs b/compiler/basicTypes/Id.lhs index c3cb952..d87e45b 100644 --- a/compiler/basicTypes/Id.lhs +++ b/compiler/basicTypes/Id.lhs @@ -29,7 +29,7 @@ module Id ( mkGlobalId, mkVanillaGlobal, mkVanillaGlobalWithInfo, mkLocalId, mkLocalIdWithInfo, mkSysLocal, mkSysLocalM, mkUserLocal, mkUserLocalM, - mkTemplateLocals, mkTemplateLocalsNum, mkWildId, mkTemplateLocal, + mkTemplateLocals, mkTemplateLocalsNum, mkTemplateLocal, mkWorkerId, mkExportedLocalId, -- ** Taking an Id apart @@ -38,9 +38,12 @@ module Id ( recordSelectorFieldLabel, -- ** Modifying an Id - setIdName, setIdUnique, Id.setIdType, setIdExported, setIdNotExported, - globaliseId, setIdInfo, lazySetIdInfo, modifyIdInfo, maybeModifyIdInfo, + setIdName, setIdUnique, Id.setIdType, + setIdExported, setIdNotExported, + globaliseId, localiseId, + setIdInfo, lazySetIdInfo, modifyIdInfo, maybeModifyIdInfo, zapLamIdInfo, zapDemandIdInfo, zapFragileIdInfo, transferPolyIdInfo, + -- ** Predicates on Ids isImplicitId, isDeadBinder, isDictId, isStrictId, @@ -86,7 +89,7 @@ module Id ( setIdWorkerInfo, setIdSpecialisation, setIdCafInfo, - setIdOccInfo, + setIdOccInfo, zapIdOccInfo, #ifdef OLD_STRICTNESS setIdStrictness, @@ -97,7 +100,7 @@ module Id ( #include "HsVersions.h" -import {-# SOURCE #-} CoreSyn ( CoreRule, Unfolding ) +import CoreSyn ( CoreRule, Unfolding ) import IdInfo import BasicTypes @@ -185,6 +188,17 @@ setIdExported = setIdVarExported setIdNotExported :: Id -> Id setIdNotExported = setIdVarNotExported +localiseId :: Id -> Id +-- Make an with the same unique and type as the +-- incoming Id, but with an *Internal* Name and *LocalId* flavour +localiseId id + | isLocalId id && isInternalName name + = id + | otherwise + = mkLocalIdWithInfo (localiseName name) (idType id) (idInfo id) + where + name = idName id + globaliseId :: GlobalIdDetails -> Id -> Id globaliseId = globaliseIdVar @@ -274,10 +288,6 @@ Make some local @Ids@ for a template @CoreExpr@. These have bogus instantiated before use. \begin{code} --- | Make a /wild Id/. This is typically used when you need a binder that you don't expect to use -mkWildId :: Type -> Id -mkWildId ty = mkSysLocal (fsLit "wild") (mkBuiltinUnique 1) ty - -- | Workers get local names. "CoreTidy" will externalise these if necessary mkWorkerId :: Unique -> Id -> Type -> Id mkWorkerId uniq unwrkr ty @@ -603,6 +613,9 @@ idOccInfo id = occInfo (idInfo id) setIdOccInfo :: Id -> OccInfo -> Id setIdOccInfo id occ_info = modifyIdInfo (`setOccInfo` occ_info) id + +zapIdOccInfo :: Id -> Id +zapIdOccInfo b = b `setIdOccInfo` NoOccInfo \end{code}