Safe Haskell | None |
---|---|
Language | Haskell2010 |
GHCi
Description
Interacting with the interpreter, whether it is running on an external process or in the current process.
- evalStmt :: HscEnv -> Bool -> EvalExpr ForeignHValue -> IO (EvalStatus_ [ForeignHValue] [HValueRef])
- data EvalStatus_ a b :: TYPE Lifted -> TYPE Lifted -> TYPE Lifted
- = EvalComplete Word64 (EvalResult a)
- | EvalBreak Bool HValueRef Int Int (RemoteRef (ResumeContext b)) (RemotePtr CostCentreStack)
- type EvalStatus a = EvalStatus_ a a
- data EvalResult a :: TYPE Lifted -> TYPE Lifted
- data EvalExpr a :: TYPE Lifted -> TYPE Lifted
- resumeStmt :: HscEnv -> Bool -> ForeignRef (ResumeContext [HValueRef]) -> IO (EvalStatus_ [ForeignHValue] [HValueRef])
- abandonStmt :: HscEnv -> ForeignRef (ResumeContext [HValueRef]) -> IO ()
- evalIO :: HscEnv -> ForeignHValue -> IO ()
- evalString :: HscEnv -> ForeignHValue -> IO String
- evalStringToIOString :: HscEnv -> ForeignHValue -> String -> IO String
- mallocData :: HscEnv -> ByteString -> IO (RemotePtr ())
- mkCostCentre :: HscEnv -> RemotePtr CChar -> String -> String -> IO (RemotePtr CostCentre)
- costCentreStackInfo :: HscEnv -> RemotePtr CostCentreStack -> IO [String]
- newBreakArray :: HscEnv -> Int -> IO (ForeignRef BreakArray)
- enableBreakpoint :: HscEnv -> ForeignRef BreakArray -> Int -> Bool -> IO ()
- breakpointStatus :: HscEnv -> ForeignRef BreakArray -> Int -> IO Bool
- initObjLinker :: HscEnv -> IO ()
- lookupSymbol :: HscEnv -> FastString -> IO (Maybe (Ptr ()))
- lookupClosure :: HscEnv -> String -> IO (Maybe HValueRef)
- loadDLL :: HscEnv -> String -> IO (Maybe String)
- loadArchive :: HscEnv -> String -> IO ()
- loadObj :: HscEnv -> String -> IO ()
- unloadObj :: HscEnv -> String -> IO ()
- addLibrarySearchPath :: HscEnv -> String -> IO (Ptr ())
- removeLibrarySearchPath :: HscEnv -> Ptr () -> IO Bool
- resolveObjs :: HscEnv -> IO SuccessFlag
- findSystemLibrary :: HscEnv -> String -> IO (Maybe String)
- iservCmd :: Binary a => HscEnv -> Message a -> IO a
- data Message a :: TYPE Lifted -> TYPE Lifted where
- Shutdown :: Message ()
- InitLinker :: Message ()
- LookupSymbol :: Message (Maybe (RemotePtr ()))
- LookupClosure :: Message (Maybe HValueRef)
- LoadDLL :: Message (Maybe String)
- LoadArchive :: Message ()
- LoadObj :: Message ()
- UnloadObj :: Message ()
- AddLibrarySearchPath :: Message (RemotePtr ())
- RemoveLibrarySearchPath :: Message Bool
- ResolveObjs :: Message Bool
- FindSystemLibrary :: Message (Maybe String)
- CreateBCOs :: Message [HValueRef]
- FreeHValueRefs :: Message ()
- MallocData :: Message (RemotePtr ())
- PrepFFI :: Message (RemotePtr C_ffi_cif)
- FreeFFI :: Message ()
- MkConInfoTable :: Message (RemotePtr StgInfoTable)
- EvalStmt :: Message (EvalStatus_ [HValueRef] [HValueRef])
- ResumeStmt :: Message (EvalStatus_ [HValueRef] [HValueRef])
- AbandonStmt :: Message ()
- EvalString :: Message (EvalResult String)
- EvalStringToString :: Message (EvalResult String)
- EvalIO :: Message (EvalResult ())
- MkCostCentre :: Message (RemotePtr CostCentre)
- CostCentreStackInfo :: Message [String]
- NewBreakArray :: Message (RemoteRef BreakArray)
- EnableBreakpoint :: Message ()
- BreakpointStatus :: Message Bool
- StartTH :: Message (RemoteRef (IORef QState))
- FinishTH :: Message ()
- RunTH :: Message ByteString
- NewName :: Message (THResult Name)
- Report :: Message (THResult ())
- LookupName :: Message (THResult (Maybe Name))
- Reify :: Message (THResult Info)
- ReifyFixity :: Message (THResult (Maybe Fixity))
- ReifyInstances :: Message (THResult [Dec])
- ReifyRoles :: Message (THResult [Role])
- ReifyAnnotations :: Message (THResult [ByteString])
- ReifyModule :: Message (THResult ModuleInfo)
- ReifyConStrictness :: Message (THResult [DecidedStrictness])
- AddDependentFile :: Message (THResult ())
- AddTopDecls :: Message (THResult ())
- IsExtEnabled :: Message (THResult Bool)
- ExtsEnabled :: Message (THResult [Extension])
- StartRecover :: Message ()
- EndRecover :: Message ()
- QDone :: Message ()
- QException :: Message ()
- QFail :: Message ()
- withIServ :: (MonadIO m, ExceptionMonad m) => HscEnv -> (IServ -> m a) -> m a
- stopIServ :: HscEnv -> IO ()
- iservCall :: Binary a => IServ -> Message a -> IO a
- readIServ :: IServ -> Get a -> IO a
- writeIServ :: IServ -> Put -> IO ()
- purgeLookupSymbolCache :: HscEnv -> IO ()
- freeHValueRefs :: HscEnv -> [HValueRef] -> IO ()
- mkFinalizedHValue :: HscEnv -> RemoteRef a -> IO (ForeignRef a)
- wormhole :: DynFlags -> ForeignRef a -> IO a
- wormholeRef :: DynFlags -> RemoteRef a -> IO a
- mkEvalOpts :: DynFlags -> Bool -> EvalOpts
- fromEvalResult :: EvalResult a -> IO a
High-level interface to the interpreter
evalStmt :: HscEnv -> Bool -> EvalExpr ForeignHValue -> IO (EvalStatus_ [ForeignHValue] [HValueRef]) Source
Execute an action of type IO [a]
, returning ForeignHValue
s for
each of the results.
data EvalStatus_ a b :: TYPE Lifted -> TYPE Lifted -> TYPE Lifted Source
Constructors
EvalComplete Word64 (EvalResult a) | |
EvalBreak Bool HValueRef Int Int (RemoteRef (ResumeContext b)) (RemotePtr CostCentreStack) |
Instances
type EvalStatus a = EvalStatus_ a a Source
data EvalResult a :: TYPE Lifted -> TYPE Lifted Source
Constructors
EvalException SerializableException | |
EvalSuccess a |
Instances
Show a => Show (EvalResult a) | |
Generic (EvalResult a) | |
Binary a => Binary (EvalResult a) | |
type Rep (EvalResult a) = D1 (MetaData "EvalResult" "GHCi.Message" "ghci-8.0.0.20160111" False) ((:+:) (C1 (MetaCons "EvalException" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 SerializableException))) (C1 (MetaCons "EvalSuccess" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a)))) |
data EvalExpr a :: TYPE Lifted -> TYPE Lifted Source
We can pass simple expressions to EvalStmt, consisting of values and application. This allows us to wrap the statement to be executed in another function, which is used by GHCi to implement :set args and :set prog. It might be worthwhile to extend this little language in the future.
Instances
Show a => Show (EvalExpr a) | |
Generic (EvalExpr a) | |
Binary a => Binary (EvalExpr a) | |
type Rep (EvalExpr a) = D1 (MetaData "EvalExpr" "GHCi.Message" "ghci-8.0.0.20160111" False) ((:+:) (C1 (MetaCons "EvalThis" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a))) (C1 (MetaCons "EvalApp" PrefixI False) ((:*:) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (EvalExpr a))) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (EvalExpr a)))))) |
resumeStmt :: HscEnv -> Bool -> ForeignRef (ResumeContext [HValueRef]) -> IO (EvalStatus_ [ForeignHValue] [HValueRef]) Source
abandonStmt :: HscEnv -> ForeignRef (ResumeContext [HValueRef]) -> IO () Source
evalIO :: HscEnv -> ForeignHValue -> IO () Source
Execute an action of type IO ()
evalString :: HscEnv -> ForeignHValue -> IO String Source
Execute an action of type IO String
evalStringToIOString :: HscEnv -> ForeignHValue -> String -> IO String Source
Execute an action of type String -> IO String
mallocData :: HscEnv -> ByteString -> IO (RemotePtr ()) Source
Allocate and store the given bytes in memory, returning a pointer to the memory in the remote process.
mkCostCentre :: HscEnv -> RemotePtr CChar -> String -> String -> IO (RemotePtr CostCentre) Source
costCentreStackInfo :: HscEnv -> RemotePtr CostCentreStack -> IO [String] Source
newBreakArray :: HscEnv -> Int -> IO (ForeignRef BreakArray) Source
enableBreakpoint :: HscEnv -> ForeignRef BreakArray -> Int -> Bool -> IO () Source
breakpointStatus :: HscEnv -> ForeignRef BreakArray -> Int -> IO Bool Source
The object-code linker
initObjLinker :: HscEnv -> IO () Source
lookupSymbol :: HscEnv -> FastString -> IO (Maybe (Ptr ())) Source
loadDLL :: HscEnv -> String -> IO (Maybe String) Source
loadDLL loads a dynamic library using the OS's native linker (i.e. dlopen() on Unix, LoadLibrary() on Windows). It takes either an absolute pathname to the file, or a relative filename (e.g. "libfoo.so" or "foo.dll"). In the latter case, loadDLL searches the standard locations for the appropriate library.
Returns:
Nothing => success Just err_msg => failure
loadArchive :: HscEnv -> String -> IO () Source
resolveObjs :: HscEnv -> IO SuccessFlag Source
Lower-level API using messages
iservCmd :: Binary a => HscEnv -> Message a -> IO a Source
Run a command in the interpreter's context. With
-fexternal-interpreter
, the command is serialized and sent to an
external iserv process, and the response is deserialized (hence the
Binary
constraint). With -fno-external-interpreter
we execute
the command directly here.
data Message a :: TYPE Lifted -> TYPE Lifted where Source
A Message a
is a message that returns a value of type a
Constructors
Shutdown :: Message () | Exit the iserv process |
InitLinker :: Message () | |
LookupSymbol :: Message (Maybe (RemotePtr ())) | |
LookupClosure :: Message (Maybe HValueRef) | |
LoadDLL :: Message (Maybe String) | |
LoadArchive :: Message () | |
LoadObj :: Message () | |
UnloadObj :: Message () | |
AddLibrarySearchPath :: Message (RemotePtr ()) | |
RemoveLibrarySearchPath :: Message Bool | |
ResolveObjs :: Message Bool | |
FindSystemLibrary :: Message (Maybe String) | |
CreateBCOs :: Message [HValueRef] | Create a set of BCO objects, and return HValueRefs to them |
FreeHValueRefs :: Message () | Release |
MallocData :: Message (RemotePtr ()) | Malloc some data and return a |
PrepFFI :: Message (RemotePtr C_ffi_cif) | Calls |
FreeFFI :: Message () | Free data previously created by |
MkConInfoTable :: Message (RemotePtr StgInfoTable) | Create an info table for a constructor |
EvalStmt :: Message (EvalStatus_ [HValueRef] [HValueRef]) | Evaluate a statement |
ResumeStmt :: Message (EvalStatus_ [HValueRef] [HValueRef]) | Resume evaluation of a statement after a breakpoint |
AbandonStmt :: Message () | Abandon evaluation of a statement after a breakpoint |
EvalString :: Message (EvalResult String) | Evaluate something of type |
EvalStringToString :: Message (EvalResult String) | Evaluate something of type |
EvalIO :: Message (EvalResult ()) | Evaluate something of type |
MkCostCentre :: Message (RemotePtr CostCentre) | Create a CostCentre |
CostCentreStackInfo :: Message [String] | Show a |
NewBreakArray :: Message (RemoteRef BreakArray) | Create a new array of breakpoint flags |
EnableBreakpoint :: Message () | Enable a breakpoint |
BreakpointStatus :: Message Bool | Query the status of a breakpoint (True = enabled) |
StartTH :: Message (RemoteRef (IORef QState)) | Start a new TH module, return a state token that should be |
FinishTH :: Message () | Run TH module finalizers, and free the HValueRef |
RunTH :: Message ByteString | Evaluate a TH computation. Returns a ByteString, because we have to force the result before returning it to ensure there are no errors lurking in it. The TH types don't have NFData instances, and even if they did, we have to serialize the value anyway, so we might as well serialize it to force it. |
NewName :: Message (THResult Name) | |
Report :: Message (THResult ()) | |
LookupName :: Message (THResult (Maybe Name)) | |
Reify :: Message (THResult Info) | |
ReifyFixity :: Message (THResult (Maybe Fixity)) | |
ReifyInstances :: Message (THResult [Dec]) | |
ReifyRoles :: Message (THResult [Role]) | |
ReifyAnnotations :: Message (THResult [ByteString]) | |
ReifyModule :: Message (THResult ModuleInfo) | |
ReifyConStrictness :: Message (THResult [DecidedStrictness]) | |
AddDependentFile :: Message (THResult ()) | |
AddTopDecls :: Message (THResult ()) | |
IsExtEnabled :: Message (THResult Bool) | |
ExtsEnabled :: Message (THResult [Extension]) | |
StartRecover :: Message () | |
EndRecover :: Message () | |
QDone :: Message () | RunTH finished successfully; return value follows |
QException :: Message () | RunTH threw an exception |
QFail :: Message () | RunTH called |
withIServ :: (MonadIO m, ExceptionMonad m) => HscEnv -> (IServ -> m a) -> m a Source
Grab a lock on the IServ
and do something with it.
Overloaded because this is used from TcM as well as IO.
iservCall :: Binary a => IServ -> Message a -> IO a Source
Send a Message
and receive the response from the iserv process
writeIServ :: IServ -> Put -> IO () Source
Send a value to the iserv process
purgeLookupSymbolCache :: HscEnv -> IO () Source
freeHValueRefs :: HscEnv -> [HValueRef] -> IO () Source
mkFinalizedHValue :: HscEnv -> RemoteRef a -> IO (ForeignRef a) Source
Creates a ForeignHValue
that will automatically release the
HValueRef
when it is no longer referenced.
wormhole :: DynFlags -> ForeignRef a -> IO a Source
Convert a ForeignHValue
to an HValue
directly. This only works
when the interpreter is running in the same process as the compiler,
so it fails when -fexternal-interpreter
is on.
wormholeRef :: DynFlags -> RemoteRef a -> IO a Source
mkEvalOpts :: DynFlags -> Bool -> EvalOpts Source
fromEvalResult :: EvalResult a -> IO a Source