Move documentation within 80 column boundary.
[ghc-hetmet.git] / compiler / main / HscTypes.lhs
index 30362a8..059fe9c 100644 (file)
@@ -13,7 +13,7 @@ module HscTypes (
         ioMsgMaybe, ioMsg,
         logWarnings, clearWarnings, hasWarnings,
         SourceError, GhcApiError, mkSrcErr, srcErrorMessages, mkApiErr,
-        handleSourceError,
+        throwOneError, handleSourceError,
         reflectGhc, reifyGhc,
 
        -- * Sessions and compilation state
@@ -143,11 +143,10 @@ import FastString
 import StringBuffer    ( StringBuffer )
 import Fingerprint
 import MonadUtils
-import Bag              ( emptyBag, unionBags, isEmptyBag )
 import Data.Dynamic     ( Typeable )
 import qualified Data.Dynamic as Dyn
-import Bag              ( bagToList )
-import ErrUtils         ( ErrorMessages, WarningMessages, Messages )
+import Bag
+import ErrUtils
 
 import System.FilePath
 import System.Time     ( ClockTime )
@@ -177,6 +176,9 @@ mkSrcErr :: ErrorMessages -> SourceError
 srcErrorMessages :: SourceError -> ErrorMessages
 mkApiErr :: SDoc -> GhcApiError
 
+throwOneError :: MonadIO m => ErrMsg -> m ab
+throwOneError err = liftIO $ throwIO $ mkSrcErr $ unitBag err
+
 -- | A source error is an error that is caused by one or more errors in the
 -- source code.  A 'SourceError' is thrown by many functions in the
 -- compilation pipeline.  Inside GHC these errors are merely printed via
@@ -368,7 +370,7 @@ ioMsgMaybe ioA = do
   ((warns,errs), mb_r) <- liftIO ioA
   logWarnings warns
   case mb_r of
-    Nothing -> throw (mkSrcErr errs)
+    Nothing -> liftIO $ throwIO (mkSrcErr errs)
     Just r  -> ASSERT( isEmptyBag errs ) return r
 
 -- | Lift a non-failing IO action into a 'GhcMonad'.
@@ -497,9 +499,11 @@ hscEPS hsc_env = readIORef (hsc_EPS hsc_env)
 -- is for use in an IDE where the file hasn't been saved by
 -- the user yet).
 data Target = Target
-      TargetId                          -- module or filename
-      Bool                              -- object code allowed?
-      (Maybe (StringBuffer,ClockTime))  -- in-memory text buffer?
+      { targetId           :: TargetId  -- ^ module or filename
+      , targetAllowObjCode :: Bool      -- ^ object code allowed?
+      , targetContents     :: Maybe (StringBuffer,ClockTime)
+                                        -- ^ in-memory text buffer?
+      }
 
 data TargetId
   = TargetModule ModuleName
@@ -542,30 +546,31 @@ emptyPackageIfaceTable = emptyModuleEnv
 
 -- | Information about modules in the package being compiled
 data HomeModInfo 
-  = HomeModInfo { hm_iface    :: !ModIface,     -- ^ The basic loaded interface file: every
-                                                -- loaded module has one of these, even if
-                                                -- it is imported from another package
-                 hm_details  :: !ModDetails,   -- ^ Extra information that has been created
-                                               -- from the 'ModIface' for the module,
-                                               -- typically during typechecking
-                 hm_linkable :: !(Maybe Linkable)
-               -- ^ The actual artifact we would like to link to access
-               -- things in this module.
-               --
-               -- 'hm_linkable' might be Nothing:
-               --
-               --   1. If this is an .hs-boot module
-               --
-               --   2. Temporarily during compilation if we pruned away
-               --      the old linkable because it was out of date.
-               --
-               -- After a complete compilation ('GHC.load'), all 'hm_linkable'
-               -- fields in the 'HomePackageTable' will be @Just@.
-               --
-               -- When re-linking a module ('HscMain.HscNoRecomp'), we construct
-               -- the 'HomeModInfo' by building a new 'ModDetails' from the
-               -- old 'ModIface' (only).
-        }
+  = HomeModInfo {
+      hm_iface    :: !ModIface,
+        -- ^ The basic loaded interface file: every loaded module has one of
+        -- these, even if it is imported from another package
+      hm_details  :: !ModDetails,
+        -- ^ Extra information that has been created from the 'ModIface' for
+       -- the module, typically during typechecking
+      hm_linkable :: !(Maybe Linkable)
+        -- ^ The actual artifact we would like to link to access things in
+       -- this module.
+       --
+       -- 'hm_linkable' might be Nothing:
+       --
+       --   1. If this is an .hs-boot module
+       --
+       --   2. Temporarily during compilation if we pruned away
+       --      the old linkable because it was out of date.
+       --
+       -- After a complete compilation ('GHC.load'), all 'hm_linkable' fields
+       -- in the 'HomePackageTable' will be @Just@.
+       --
+       -- When re-linking a module ('HscMain.HscNoRecomp'), we construct the
+       -- 'HomeModInfo' by building a new 'ModDetails' from the old
+       -- 'ModIface' (only).
+    }
 
 -- | Find the 'ModIface' for a 'Module', searching in both the loaded home
 -- and external package module information