{-# LANGUAGE CPP #-}
module GHC.Runtime.Interpreter.Types
( Interp(..)
, IServ(..)
, IServInstance(..)
, IServConfig(..)
, IServState(..)
)
where
import GhcPrelude
import GHCi.RemoteTypes
import GHCi.Message ( Pipe )
import UniqFM
import Foreign
import Control.Concurrent
import System.Process ( ProcessHandle, CreateProcess )
data Interp
= ExternalInterp !IServ
#if defined(HAVE_INTERNAL_INTERPRETER)
| InternalInterp
#endif
newtype IServ = IServ (MVar IServState)
data IServState
= IServPending !IServConfig
| IServRunning !IServInstance
data IServConfig = IServConfig
{ iservConfProgram :: !String
, iservConfOpts :: ![String]
, iservConfHook :: !(Maybe (CreateProcess -> IO ProcessHandle))
, iservConfTrace :: IO ()
}
data IServInstance = IServInstance
{ iservPipe :: !Pipe
, iservProcess :: !ProcessHandle
, iservLookupSymbolCache :: !(UniqFM (Ptr ()))
, iservPendingFrees :: ![HValueRef]
, iservConfig :: !IServConfig
}