diff options
Diffstat (limited to 'compiler/GHC.hs')
-rw-r--r-- | compiler/GHC.hs | 132 |
1 files changed, 85 insertions, 47 deletions
diff --git a/compiler/GHC.hs b/compiler/GHC.hs index 19df839730..d9ebd356f2 100644 --- a/compiler/GHC.hs +++ b/compiler/GHC.hs @@ -264,6 +264,7 @@ module GHC ( -- * Exceptions GhcException(..), showGhcException, + GhcApiError(..), -- * Token stream manipulations Token, @@ -294,14 +295,14 @@ module GHC ( import GHC.Prelude hiding (init) -import GHC.ByteCode.Types -import GHC.Runtime.Eval -import GHC.Runtime.Eval.Types -import GHC.Runtime.Interpreter -import GHC.Runtime.Interpreter.Types -import GHCi.RemoteTypes +import GHC.Platform +import GHC.Platform.Ways -import GHC.Core.Ppr.TyThing ( pprFamInst ) +import GHC.Driver.Phases ( Phase(..), isHaskellSrcFilename + , isSourceFilename, startPhase ) +import GHC.Driver.Env +import GHC.Driver.CmdLine +import GHC.Driver.Session hiding (WarnReason(..)) import GHC.Driver.Backend import GHC.Driver.Config import GHC.Driver.Main @@ -309,19 +310,49 @@ import GHC.Driver.Make import GHC.Driver.Hooks import GHC.Driver.Pipeline ( compileOne' ) import GHC.Driver.Monad -import GHC.Tc.Utils.Monad ( finalSafeMode, fixSafeInstances, initIfaceTcRn ) +import GHC.Driver.Ppr + +import GHC.ByteCode.Types +import GHC.Runtime.Eval +import GHC.Runtime.Eval.Types +import GHC.Runtime.Interpreter +import GHC.Runtime.Interpreter.Types +import GHC.Runtime.Context +import GHCi.RemoteTypes + +import qualified GHC.Parser as Parser +import GHC.Parser.Lexer +import GHC.Parser.Annotation +import GHC.Parser.Errors.Ppr + import GHC.Iface.Load ( loadSysInterface ) +import GHC.Hs +import GHC.Builtin.Types.Prim ( alphaTyVars ) +import GHC.Iface.Tidy +import GHC.Data.Bag ( listToBag ) +import GHC.Data.StringBuffer +import GHC.Data.FastString +import qualified GHC.LanguageExtensions as LangExt + +import GHC.Tc.Utils.Monad ( finalSafeMode, fixSafeInstances, initIfaceTcRn ) import GHC.Tc.Types +import GHC.Tc.Utils.TcType +import GHC.Tc.Module +import GHC.Tc.Utils.Instantiate +import GHC.Tc.Instance.Family + +import GHC.SysTools.FileCleanup +import GHC.SysTools +import GHC.SysTools.BaseDir + +import GHC.Utils.Error +import GHC.Utils.Monad +import GHC.Utils.Misc +import GHC.Utils.Outputable +import GHC.Utils.Panic + import GHC.Core.Predicate -import GHC.Unit -import GHC.Unit.State -import GHC.Types.Name.Set -import GHC.Types.Name.Reader -import GHC.Hs import GHC.Core.Type hiding( typeKind ) -import GHC.Tc.Utils.TcType -import GHC.Types.Id -import GHC.Builtin.Types.Prim ( alphaTyVars ) import GHC.Core.TyCon import GHC.Core.TyCo.Ppr ( pprForAll ) import GHC.Core.Class @@ -329,42 +360,37 @@ import GHC.Core.DataCon import GHC.Core.FVs ( orphNamesOfFamInst ) import GHC.Core.FamInstEnv ( FamInst, famInstEnvElts ) import GHC.Core.InstEnv +import GHC.Core + +import GHC.Types.Id import GHC.Types.Name hiding ( varName ) import GHC.Types.Avail import GHC.Types.SrcLoc -import GHC.Core -import GHC.Iface.Tidy -import GHC.Driver.Phases ( Phase(..), isHaskellSrcFilename - , isSourceFilename, startPhase ) -import GHC.Driver.Finder -import GHC.Driver.Types -import GHC.Driver.CmdLine -import GHC.Driver.Session hiding (WarnReason(..)) -import GHC.Platform.Ways -import GHC.Driver.Ppr -import GHC.SysTools -import GHC.SysTools.BaseDir +import GHC.Types.TyThing.Ppr ( pprFamInst ) import GHC.Types.Annotations -import GHC.Utils.Panic -import GHC.Platform -import GHC.Data.Bag ( listToBag ) -import GHC.Utils.Error -import GHC.Utils.Monad -import GHC.Utils.Misc -import GHC.Data.StringBuffer -import GHC.Utils.Outputable +import GHC.Types.Name.Set +import GHC.Types.Name.Reader +import GHC.Types.SourceError +import GHC.Types.SafeHaskell +import GHC.Types.Fixity +import GHC.Types.Target import GHC.Types.Basic -import GHC.Data.FastString -import qualified GHC.Parser as Parser -import GHC.Parser.Lexer -import GHC.Parser.Annotation -import GHC.Parser.Errors.Ppr -import qualified GHC.LanguageExtensions as LangExt +import GHC.Types.TyThing import GHC.Types.Name.Env -import GHC.Tc.Module -import GHC.Tc.Utils.Instantiate -import GHC.Tc.Instance.Family -import GHC.SysTools.FileCleanup +import GHC.Types.Name.Ppr +import GHC.Types.TypeEnv +import GHC.Types.SourceFile + +import GHC.Unit +import GHC.Unit.External +import GHC.Unit.State +import GHC.Unit.Finder +import GHC.Unit.Module.ModIface +import GHC.Unit.Module.ModGuts +import GHC.Unit.Module.ModDetails +import GHC.Unit.Module.ModSummary +import GHC.Unit.Module.Graph +import GHC.Unit.Home.ModInfo import Data.Foldable import qualified Data.Map.Strict as Map @@ -1507,7 +1533,7 @@ getModuleSourceAndFlags mod = do -- | Return module source as token stream, including comments. -- -- The module must be in the module graph and its source must be available. --- Throws a 'GHC.Driver.Types.SourceError' on parse error. +-- Throws a 'GHC.Driver.Env.SourceError' on parse error. getTokenStream :: GhcMonad m => Module -> m [Located Token] getTokenStream mod = do (sourceFile, source, dflags) <- getModuleSourceAndFlags mod @@ -1842,3 +1868,15 @@ interpretPackageEnv dflags = do "Package environment " ++ show env ++ " (specified in GHC_ENVIRONMENT) not found" + +-- | An error thrown if the GHC API is used in an incorrect fashion. +newtype GhcApiError = GhcApiError String + +instance Show GhcApiError where + show (GhcApiError msg) = msg + +instance Exception GhcApiError + +mkApiErr :: DynFlags -> SDoc -> GhcApiError +mkApiErr dflags msg = GhcApiError (showSDoc dflags msg) + |