X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FRtsAPI.h;h=348e57a510f903326ed69dd45bfe250edb9e653f;hb=2ffefc1bfca0c8924825cd15750e7ced457f3c81;hp=bbea2cb4f8ec4a61c5e3359921704c8890b12bd2;hpb=263aaaa57bf5564d06de6a87ebccb980b1b5d285;p=ghc-hetmet.git diff --git a/ghc/includes/RtsAPI.h b/ghc/includes/RtsAPI.h index bbea2cb..348e57a 100644 --- a/ghc/includes/RtsAPI.h +++ b/ghc/includes/RtsAPI.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * $Id: RtsAPI.h,v 1.5 1999/05/21 14:46:20 sof Exp $ + * $Id: RtsAPI.h,v 1.17 2000/08/29 13:34:21 qrczak Exp $ * * (c) The GHC Team, 1998-1999 * @@ -10,30 +10,57 @@ #ifndef RTSAPI_H #define RTSAPI_H -#include "SchedAPI.h" /* for SchedulerStatus */ +/* + * Running the scheduler + */ +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 */ +} SchedulerStatus; typedef StgClosure *HaskellObj; + +/* Make this compilable with Visual C++. We can't just use StgInt64 here, + * because this file should be compilable without reference to the rest + * of the RTS machinery. These are absolutely non-standard types, but + * I don't know what alternatives are safe if we don't #include anything + * here. + */ +#if defined(__MSVC__) +typedef __int64 HsInt64_; +typedef unsigned __int64 HsWord64_; +#else +typedef long long HsInt64_; +typedef unsigned long long HsWord64_; +#endif + /* ---------------------------------------------------------------------------- Starting up and shutting down the Haskell RTS. ------------------------------------------------------------------------- */ -extern void startupHaskell ( int argc, char *argv[] ); -extern void shutdownHaskell ( void ); +extern void startupHaskell ( int argc, char *argv[], void *init_root ); +extern void shutdownHaskell ( void ); +extern void shutdownHaskellAndExit ( int exitCode ); +extern void setProgArgv ( int argc, char *argv[] ); +extern void getProgArgv ( int *argc, char **argv[] ); /* ---------------------------------------------------------------------------- Building Haskell objects from C datatypes. ------------------------------------------------------------------------- */ -HaskellObj rts_mkChar ( char c ); +HaskellObj rts_mkChar ( unsigned int c ); HaskellObj rts_mkInt ( int i ); HaskellObj rts_mkInt8 ( int i ); HaskellObj rts_mkInt16 ( int i ); HaskellObj rts_mkInt32 ( int i ); -HaskellObj rts_mkInt64 ( long long 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 ( unsigned long long w ); +HaskellObj rts_mkInt64 ( HsInt64_ i ); +HaskellObj rts_mkWord64 ( HsWord64_ w ); HaskellObj rts_mkFloat ( float f ); HaskellObj rts_mkDouble ( double f ); HaskellObj rts_mkStablePtr ( StgStablePtr s ); @@ -46,7 +73,7 @@ HaskellObj rts_apply ( HaskellObj, HaskellObj ); /* ---------------------------------------------------------------------------- Deconstructing Haskell objects ------------------------------------------------------------------------- */ -char rts_getChar ( HaskellObj ); +unsigned int rts_getChar ( HaskellObj ); int rts_getInt ( HaskellObj ); int rts_getInt32 ( HaskellObj ); unsigned int rts_getWord ( HaskellObj ); @@ -74,6 +101,11 @@ rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret ); SchedulerStatus rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret ); +#if defined(PAR) || defined(SMP) +SchedulerStatus +rts_evalNothing(unsigned int stack_size); +#endif + void rts_checkSchedStatus ( char* site, SchedulerStatus rc);