X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FAnnotations.lhs;h=f031f14dc9af595cca2ce3df8c1cae0381b042f8;hp=d1b566bd86c0c922475c16699a198498d84d1ff1;hb=914e415702a25a6e52ab1eaaf2aea233d6c6097e;hpb=da6b7fce09f98a0fbe66b6d218e6473c1845e354 diff --git a/compiler/main/Annotations.lhs b/compiler/main/Annotations.lhs index d1b566b..f031f14 100644 --- a/compiler/main/Annotations.lhs +++ b/compiler/main/Annotations.lhs @@ -12,13 +12,14 @@ module Annotations ( -- * AnnEnv for collecting and querying Annotations AnnEnv, - mkAnnEnv, extendAnnEnvList, plusAnnEnv, emptyAnnEnv, findAnns + mkAnnEnv, extendAnnEnvList, plusAnnEnv, emptyAnnEnv, findAnns, + deserializeAnns ) where import Name import Module ( Module ) import Outputable -import LazyUniqFM +import UniqFM import Serialized import Unique @@ -90,4 +91,11 @@ findAnns :: Typeable a => ([Word8] -> a) -> AnnEnv -> CoreAnnTarget -> [a] findAnns deserialize (MkAnnEnv ann_env) = (mapMaybe (fromSerialized deserialize)) . (lookupWithDefaultUFM ann_env []) -\end{code} \ No newline at end of file + +-- | Deserialize all annotations of a given type. This happens lazily, that is +-- no deserialization will take place until the [a] is actually demanded and +-- the [a] can also be empty (the UniqFM is not filtered). +deserializeAnns :: Typeable a => ([Word8] -> a) -> AnnEnv -> UniqFM [a] +deserializeAnns deserialize (MkAnnEnv ann_env) + = mapUFM (mapMaybe (fromSerialized deserialize)) ann_env +\end{code}