summaryrefslogtreecommitdiff
path: root/compiler/GHC/Runtime/Eval
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2020-01-17 15:13:04 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2020-02-12 01:57:27 -0500
commitda7f74797e8c322006eba385c9cbdce346dd1d43 (patch)
tree79a69eed3aa18414caf76b02a5c8dc7c7e6d5f54 /compiler/GHC/Runtime/Eval
parentf82a2f90ceda5c2bc74088fa7f6a7c8cb9c9756f (diff)
downloadhaskell-da7f74797e8c322006eba385c9cbdce346dd1d43.tar.gz
Module hierarchy: ByteCode and Runtime (cf #13009)
Update haddock submodule
Diffstat (limited to 'compiler/GHC/Runtime/Eval')
-rw-r--r--compiler/GHC/Runtime/Eval/Types.hs89
1 files changed, 89 insertions, 0 deletions
diff --git a/compiler/GHC/Runtime/Eval/Types.hs b/compiler/GHC/Runtime/Eval/Types.hs
new file mode 100644
index 0000000000..93072075c0
--- /dev/null
+++ b/compiler/GHC/Runtime/Eval/Types.hs
@@ -0,0 +1,89 @@
+-- -----------------------------------------------------------------------------
+--
+-- (c) The University of Glasgow, 2005-2007
+--
+-- Running statements interactively
+--
+-- -----------------------------------------------------------------------------
+
+module GHC.Runtime.Eval.Types (
+ Resume(..), History(..), ExecResult(..),
+ SingleStep(..), isStep, ExecOptions(..),
+ BreakInfo(..)
+ ) where
+
+import GhcPrelude
+
+import GHCi.RemoteTypes
+import GHCi.Message (EvalExpr, ResumeContext)
+import Id
+import Name
+import Module
+import RdrName
+import Type
+import SrcLoc
+import Exception
+
+import Data.Word
+import GHC.Stack.CCS
+
+data ExecOptions
+ = ExecOptions
+ { execSingleStep :: SingleStep -- ^ stepping mode
+ , execSourceFile :: String -- ^ filename (for errors)
+ , execLineNumber :: Int -- ^ line number (for errors)
+ , execWrap :: ForeignHValue -> EvalExpr ForeignHValue
+ }
+
+data SingleStep
+ = RunToCompletion
+ | SingleStep
+ | RunAndLogSteps
+
+isStep :: SingleStep -> Bool
+isStep RunToCompletion = False
+isStep _ = True
+
+data ExecResult
+ = ExecComplete
+ { execResult :: Either SomeException [Name]
+ , execAllocation :: Word64
+ }
+ | ExecBreak
+ { breakNames :: [Name]
+ , breakInfo :: Maybe BreakInfo
+ }
+
+data BreakInfo = BreakInfo
+ { breakInfo_module :: Module
+ , breakInfo_number :: Int
+ }
+
+data Resume = Resume
+ { resumeStmt :: String -- the original statement
+ , resumeContext :: ForeignRef (ResumeContext [HValueRef])
+ , resumeBindings :: ([TyThing], GlobalRdrEnv)
+ , resumeFinalIds :: [Id] -- [Id] to bind on completion
+ , resumeApStack :: ForeignHValue -- The object from which we can get
+ -- value of the free variables.
+ , resumeBreakInfo :: Maybe BreakInfo
+ -- the breakpoint we stopped at
+ -- (module, index)
+ -- (Nothing <=> exception)
+ , resumeSpan :: SrcSpan -- just a copy of the SrcSpan
+ -- from the ModBreaks,
+ -- otherwise it's a pain to
+ -- fetch the ModDetails &
+ -- ModBreaks to get this.
+ , resumeDecl :: String -- ditto
+ , resumeCCS :: RemotePtr CostCentreStack
+ , resumeHistory :: [History]
+ , resumeHistoryIx :: Int -- 0 <==> at the top of the history
+ }
+
+data History
+ = History {
+ historyApStack :: ForeignHValue,
+ historyBreakInfo :: BreakInfo,
+ historyEnclosingDecls :: [String] -- declarations enclosing the breakpoint
+ }