X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FRtsAPI.h;h=f554b96061c7143ef8f649fbe90e6977f726531a;hb=423d477bfecd490de1449c59325c8776f91d7aac;hp=1eb0d279010dd9779427bb6d40b1eae33001b1eb;hpb=d188050a70f6592eff40b5361883fabf135a2250;p=ghc-hetmet.git diff --git a/ghc/includes/RtsAPI.h b/ghc/includes/RtsAPI.h index 1eb0d27..f554b96 100644 --- a/ghc/includes/RtsAPI.h +++ b/ghc/includes/RtsAPI.h @@ -1,7 +1,6 @@ /* ---------------------------------------------------------------------------- - * $Id: RtsAPI.h,v 1.14 2000/06/15 13:16:16 daan Exp $ * - * (c) The GHC Team, 1998-1999 + * (c) The GHC Team, 1998-2004 * * API for invoking Haskell functions via the RTS * @@ -10,18 +9,12 @@ #ifndef RTSAPI_H #define RTSAPI_H -/* Make this compilable with Visual C++ */ -#ifndef HAVE_INT64 -#define HAVE_INT64 -#ifdef _MSC_VER -typedef __int64 int64; -typedef unsigned __int64 nat64; -#else -typedef long long int64; -typedef unsigned long long nat64; -#endif +#ifdef __cplusplus +extern "C" { #endif +#include "HsFFI.h" + /* * Running the scheduler */ @@ -29,8 +22,7 @@ typedef enum { NoStatus, /* not finished yet */ Success, /* completed successfully */ Killed, /* uncaught exception */ - Interrupted, /* stopped in response to a call to interruptStgRts */ - Deadlock /* no threads to run, but main thread hasn't finished */ + Interrupted /* stopped in response to a call to interruptStgRts */ } SchedulerStatus; typedef StgClosure *HaskellObj; @@ -38,53 +30,78 @@ typedef StgClosure *HaskellObj; /* ---------------------------------------------------------------------------- Starting up and shutting down the Haskell RTS. ------------------------------------------------------------------------- */ -extern void startupHaskell ( int argc, char *argv[], void *init_root ); +extern void startupHaskell ( int argc, char *argv[], + void (*init_root)(void) ); extern void shutdownHaskell ( void ); extern void shutdownHaskellAndExit ( int exitCode ); -extern void setProgArgv ( int argc, char *argv[] ); extern void getProgArgv ( int *argc, char **argv[] ); +extern void setProgArgv ( int argc, char *argv[] ); + + +/* ---------------------------------------------------------------------------- + Locking. + + In a multithreaded environments, you have to surround all access to the + RtsAPI with these calls. + ------------------------------------------------------------------------- */ + +void +rts_lock ( void ); + +void +rts_unlock ( void ); /* ---------------------------------------------------------------------------- Building Haskell objects from C datatypes. ------------------------------------------------------------------------- */ -HaskellObj rts_mkChar ( char c ); -HaskellObj rts_mkInt ( int i ); -HaskellObj rts_mkInt8 ( int i ); -HaskellObj rts_mkInt16 ( int i ); -HaskellObj rts_mkInt32 ( int i ); -HaskellObj rts_mkInt64 ( int64 i ); -HaskellObj rts_mkWord ( unsigned int w ); -HaskellObj rts_mkWord8 ( unsigned int w ); -HaskellObj rts_mkWord16 ( unsigned int w ); -HaskellObj rts_mkWord32 ( unsigned int w ); -HaskellObj rts_mkWord64 ( nat64 w ); -HaskellObj rts_mkFloat ( float f ); -HaskellObj rts_mkDouble ( double f ); -HaskellObj rts_mkStablePtr ( StgStablePtr s ); -HaskellObj rts_mkAddr ( void *a ); -HaskellObj rts_mkBool ( int b ); -HaskellObj rts_mkString ( char *s ); +HaskellObj rts_mkChar ( HsChar c ); +HaskellObj rts_mkInt ( HsInt i ); +HaskellObj rts_mkInt8 ( HsInt8 i ); +HaskellObj rts_mkInt16 ( HsInt16 i ); +HaskellObj rts_mkInt32 ( HsInt32 i ); +HaskellObj rts_mkInt64 ( HsInt64 i ); +HaskellObj rts_mkWord ( HsWord w ); +HaskellObj rts_mkWord8 ( HsWord8 w ); +HaskellObj rts_mkWord16 ( HsWord16 w ); +HaskellObj rts_mkWord32 ( HsWord32 w ); +HaskellObj rts_mkWord64 ( HsWord64 w ); +HaskellObj rts_mkPtr ( HsPtr a ); +HaskellObj rts_mkFunPtr ( HsFunPtr a ); +HaskellObj rts_mkFloat ( HsFloat f ); +HaskellObj rts_mkDouble ( HsDouble f ); +HaskellObj rts_mkStablePtr ( HsStablePtr s ); +HaskellObj rts_mkBool ( HsBool b ); +HaskellObj rts_mkString ( char *s ); HaskellObj rts_apply ( HaskellObj, HaskellObj ); /* ---------------------------------------------------------------------------- Deconstructing Haskell objects ------------------------------------------------------------------------- */ -char rts_getChar ( HaskellObj ); -int rts_getInt ( HaskellObj ); -int rts_getInt32 ( HaskellObj ); -unsigned int rts_getWord ( HaskellObj ); -unsigned int rts_getWord32 ( HaskellObj ); -float rts_getFloat ( HaskellObj ); -double rts_getDouble ( HaskellObj ); -StgStablePtr rts_getStablePtr ( HaskellObj ); -void * rts_getAddr ( HaskellObj ); -int rts_getBool ( HaskellObj ); +HsChar rts_getChar ( HaskellObj ); +HsInt rts_getInt ( HaskellObj ); +HsInt8 rts_getInt8 ( HaskellObj ); +HsInt16 rts_getInt16 ( HaskellObj ); +HsInt32 rts_getInt32 ( HaskellObj ); +HsInt64 rts_getInt64 ( HaskellObj ); +HsWord rts_getWord ( HaskellObj ); +HsWord8 rts_getWord8 ( HaskellObj ); +HsWord16 rts_getWord16 ( HaskellObj ); +HsWord32 rts_getWord32 ( HaskellObj ); +HsWord64 rts_getWord64 ( HaskellObj ); +HsPtr rts_getPtr ( HaskellObj ); +HsFunPtr rts_getFunPtr ( HaskellObj ); +HsFloat rts_getFloat ( HaskellObj ); +HsDouble rts_getDouble ( HaskellObj ); +HsStablePtr rts_getStablePtr ( HaskellObj ); +HsBool rts_getBool ( HaskellObj ); /* ---------------------------------------------------------------------------- Evaluating Haskell expressions The versions ending in '_' allow you to specify an initial stack size. + Note that these calls may cause Garbage Collection, so all HaskellObj + references are rendered invalid by these calls. ------------------------------------------------------------------------- */ SchedulerStatus rts_eval ( HaskellObj p, /*out*/HaskellObj *ret ); @@ -95,15 +112,33 @@ rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret ); SchedulerStatus rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret ); +SchedulerStatus +rts_evalStableIO ( HsStablePtr s, /*out*/HsStablePtr *ret ); + SchedulerStatus -rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret ); +rts_evalLazyIO ( HaskellObj p, /*out*/HaskellObj *ret ); -#if defined(PAR) || defined(SMP) -SchedulerStatus -rts_evalNothing(unsigned int stack_size); -#endif +SchedulerStatus +rts_evalLazyIO_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret ); void rts_checkSchedStatus ( char* site, SchedulerStatus rc); +/* -------------------------------------------------------------------------- + Wrapper closures + + These are used by foreign export and foreign import "wrapper" stubs. + ----------------------------------------------------------------------- */ + +extern StgWord GHCziTopHandler_runIO_closure[]; +extern StgWord GHCziTopHandler_runNonIO_closure[]; +#define runIO_closure GHCziTopHandler_runIO_closure +#define runNonIO_closure GHCziTopHandler_runNonIO_closure + +/* ------------------------------------------------------------------------ */ + +#ifdef __cplusplus +} +#endif + #endif /* RTSAPI_H */