summaryrefslogtreecommitdiff
path: root/compiler/main
diff options
context:
space:
mode:
authorDavid Terei <davidterei@gmail.com>2012-03-23 09:44:46 -0700
committerDavid Terei <davidterei@gmail.com>2012-03-23 09:44:46 -0700
commit7e0a5bdc2538ad5f95c3e75e7eb2c836d16d7082 (patch)
tree785abb9b305e9a3397c1fc585c2f5dd91f9237e4 /compiler/main
parent48b467f045d1f29a82dbbd47baa551c42982abb5 (diff)
downloadhaskell-7e0a5bdc2538ad5f95c3e75e7eb2c836d16d7082.tar.gz
Clean and comment Annotations
Diffstat (limited to 'compiler/main')
-rw-r--r--compiler/main/Annotations.hs (renamed from compiler/main/Annotations.lhs)48
1 files changed, 27 insertions, 21 deletions
diff --git a/compiler/main/Annotations.lhs b/compiler/main/Annotations.hs
index 0ef7b1156b..277c059b11 100644
--- a/compiler/main/Annotations.lhs
+++ b/compiler/main/Annotations.hs
@@ -1,30 +1,30 @@
-%
-% (c) The University of Glasgow 2006
-% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
-%
-
-\begin{code}
+-- |
+-- Support for source code annotation feature of GHC. That is the ANN pragma.
+--
+-- (c) The University of Glasgow 2006
+-- (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
+--
module Annotations (
- -- * Main Annotation data types
- Annotation(..),
- AnnTarget(..), CoreAnnTarget,
- getAnnTargetName_maybe,
-
- -- * AnnEnv for collecting and querying Annotations
- AnnEnv,
- mkAnnEnv, extendAnnEnvList, plusAnnEnv, emptyAnnEnv, findAnns,
- deserializeAnns
- ) where
+ -- * Main Annotation data types
+ Annotation(..),
+ AnnTarget(..), CoreAnnTarget,
+ getAnnTargetName_maybe,
+
+ -- * AnnEnv for collecting and querying Annotations
+ AnnEnv,
+ mkAnnEnv, extendAnnEnvList, plusAnnEnv, emptyAnnEnv, findAnns,
+ deserializeAnns
+ ) where
-import Name
import Module ( Module )
+import Name
import Outputable
-import UniqFM
import Serialized
+import UniqFM
import Unique
-import Data.Typeable
import Data.Maybe
+import Data.Typeable
import Data.Word ( Word8 )
@@ -50,6 +50,7 @@ instance Functor AnnTarget where
fmap f (NamedTarget nm) = NamedTarget (f nm)
fmap _ (ModuleTarget mod) = ModuleTarget mod
+-- | Get the 'name' of an annotation target if it exists.
getAnnTargetName_maybe :: AnnTarget name -> Maybe name
getAnnTargetName_maybe (NamedTarget nm) = Just nm
getAnnTargetName_maybe _ = Nothing
@@ -67,20 +68,25 @@ instance Outputable Annotation where
ppr ann = ppr (ann_target ann)
-- | A collection of annotations
-newtype AnnEnv = MkAnnEnv (UniqFM [Serialized])
-- Can't use a type synonym or we hit bug #2412 due to source import
+newtype AnnEnv = MkAnnEnv (UniqFM [Serialized])
+-- | An empty annotation environment.
emptyAnnEnv :: AnnEnv
emptyAnnEnv = MkAnnEnv emptyUFM
+-- | Construct a new annotation environment that contains the list of
+-- annotations provided.
mkAnnEnv :: [Annotation] -> AnnEnv
mkAnnEnv = extendAnnEnvList emptyAnnEnv
+-- | Add the given annotation to the environment.
extendAnnEnvList :: AnnEnv -> [Annotation] -> AnnEnv
extendAnnEnvList (MkAnnEnv env) anns
= MkAnnEnv $ addListToUFM_C (++) env $
map (\ann -> (getUnique (ann_target ann), [ann_value ann])) anns
+-- | Union two annotation environments.
plusAnnEnv :: AnnEnv -> AnnEnv -> AnnEnv
plusAnnEnv (MkAnnEnv env1) (MkAnnEnv env2) = MkAnnEnv $ plusUFM_C (++) env1 env2
@@ -98,4 +104,4 @@ findAnns deserialize (MkAnnEnv ann_env)
deserializeAnns :: Typeable a => ([Word8] -> a) -> AnnEnv -> UniqFM [a]
deserializeAnns deserialize (MkAnnEnv ann_env)
= mapUFM (mapMaybe (fromSerialized deserialize)) ann_env
-\end{code}
+