X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=ghc%2Fincludes%2FRtsAPI.h;h=f554b96061c7143ef8f649fbe90e6977f726531a;hb=6417028ace33946acad62b22c629d5fa62e19515;hp=fc4507ee69ed05d09ebd3b02f3d0f7911fb5728e;hpb=33a7aa8bb2584a8e4cb8bdae27f6d56696f2dea5;p=ghc-hetmet.git diff --git a/ghc/includes/RtsAPI.h b/ghc/includes/RtsAPI.h index fc4507e..f554b96 100644 --- a/ghc/includes/RtsAPI.h +++ b/ghc/includes/RtsAPI.h @@ -1,7 +1,6 @@ /* ---------------------------------------------------------------------------- - * $Id: RtsAPI.h,v 1.25 2002/01/22 13:54:22 simonmar Exp $ * - * (c) The GHC Team, 1998-1999 + * (c) The GHC Team, 1998-2004 * * API for invoking Haskell functions via the RTS * @@ -35,8 +34,22 @@ 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. @@ -53,6 +66,7 @@ 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 ); @@ -61,9 +75,6 @@ HaskellObj rts_mkString ( char *s ); HaskellObj rts_apply ( HaskellObj, HaskellObj ); -/* DEPRECATED (use rts_mkPtr): */ -HaskellObj rts_mkAddr ( HsAddr a ); - /* ---------------------------------------------------------------------------- Deconstructing Haskell objects ------------------------------------------------------------------------- */ @@ -79,18 +90,18 @@ 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 ); -/* DEPRECATED (use rts_getPtr): */ -HsAddr rts_getAddr ( 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 ); @@ -105,12 +116,26 @@ 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 ); + +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 }