summaryrefslogtreecommitdiff
path: root/compiler/GHC.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC.hs')
-rw-r--r--compiler/GHC.hs132
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)
+