X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FHscTypes.lhs;h=059fe9c698df62af1fbab9999e4fa580a562af80;hb=049cdffa62fb2e0b1580eacb5ed8a30650c3faf7;hp=30362a8a8a28de1ba46878c0bd52b6df91709254;hpb=1a93895686c5ad0dfd3fd1279a4bd51fd5a3279e;p=ghc-hetmet.git diff --git a/compiler/main/HscTypes.lhs b/compiler/main/HscTypes.lhs index 30362a8..059fe9c 100644 --- a/compiler/main/HscTypes.lhs +++ b/compiler/main/HscTypes.lhs @@ -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