{-# LANGUAGE DeriveGeneric #-}
module GHC.Debugger.Runtime.Interpreter.Types where

import GHC.Generics (Generic)

import GHC.Debugger.Interface.Messages (DbgStackFrameBCOArgs)
import GHC.ByteCode.Types
import GHC.Conc.Sync
import GHC.InfoProv
import qualified GHC.Stack as Stack

--------------------------------------------------------------------------------
-- * Types
--------------------------------------------------------------------------------

data ThreadInfo ref = ThreadInfo
  { forall (ref :: * -> *). ThreadInfo ref -> ref ThreadId
threadInfoRef    :: !(ref ThreadId)
  , forall (ref :: * -> *). ThreadInfo ref -> Maybe String
threadInfoLabel  :: !(Maybe String)
  , forall (ref :: * -> *). ThreadInfo ref -> ThreadStatus
threadInfoStatus :: !ThreadStatus
  }
  deriving ((forall x. ThreadInfo ref -> Rep (ThreadInfo ref) x)
-> (forall x. Rep (ThreadInfo ref) x -> ThreadInfo ref)
-> Generic (ThreadInfo ref)
forall x. Rep (ThreadInfo ref) x -> ThreadInfo ref
forall x. ThreadInfo ref -> Rep (ThreadInfo ref) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (ref :: * -> *) x. Rep (ThreadInfo ref) x -> ThreadInfo ref
forall (ref :: * -> *) x. ThreadInfo ref -> Rep (ThreadInfo ref) x
$cfrom :: forall (ref :: * -> *) x. ThreadInfo ref -> Rep (ThreadInfo ref) x
from :: forall x. ThreadInfo ref -> Rep (ThreadInfo ref) x
$cto :: forall (ref :: * -> *) x. Rep (ThreadInfo ref) x -> ThreadInfo ref
to :: forall x. Rep (ThreadInfo ref) x -> ThreadInfo ref
Generic)

-- | Information about a stack frame
data StackFrameInfo ref
  -- | Information derived from an IPE entry
  = StackFrameIPEInfo !InfoProv
  -- | User-defined Stack Frame annotation
  | StackFrameAnnotation !(Maybe Stack.SrcLoc) !String
  -- | Information derived from a continuation BCO breakpoint info.
  | StackFrameBreakpointInfo !InternalBreakpointId !(DbgStackFrameBCOArgs ref)
  deriving ((forall x. StackFrameInfo ref -> Rep (StackFrameInfo ref) x)
-> (forall x. Rep (StackFrameInfo ref) x -> StackFrameInfo ref)
-> Generic (StackFrameInfo ref)
forall x. Rep (StackFrameInfo ref) x -> StackFrameInfo ref
forall x. StackFrameInfo ref -> Rep (StackFrameInfo ref) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (ref :: * -> *) x.
Rep (StackFrameInfo ref) x -> StackFrameInfo ref
forall (ref :: * -> *) x.
StackFrameInfo ref -> Rep (StackFrameInfo ref) x
$cfrom :: forall (ref :: * -> *) x.
StackFrameInfo ref -> Rep (StackFrameInfo ref) x
from :: forall x. StackFrameInfo ref -> Rep (StackFrameInfo ref) x
$cto :: forall (ref :: * -> *) x.
Rep (StackFrameInfo ref) x -> StackFrameInfo ref
to :: forall x. Rep (StackFrameInfo ref) x -> StackFrameInfo ref
Generic, Int -> StackFrameInfo ref -> ShowS
[StackFrameInfo ref] -> ShowS
StackFrameInfo ref -> String
(Int -> StackFrameInfo ref -> ShowS)
-> (StackFrameInfo ref -> String)
-> ([StackFrameInfo ref] -> ShowS)
-> Show (StackFrameInfo ref)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (ref :: * -> *). Int -> StackFrameInfo ref -> ShowS
forall (ref :: * -> *). [StackFrameInfo ref] -> ShowS
forall (ref :: * -> *). StackFrameInfo ref -> String
$cshowsPrec :: forall (ref :: * -> *). Int -> StackFrameInfo ref -> ShowS
showsPrec :: Int -> StackFrameInfo ref -> ShowS
$cshow :: forall (ref :: * -> *). StackFrameInfo ref -> String
show :: StackFrameInfo ref -> String
$cshowList :: forall (ref :: * -> *). [StackFrameInfo ref] -> ShowS
showList :: [StackFrameInfo ref] -> ShowS
Show)