X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FRtsAPI.h;h=f554b96061c7143ef8f649fbe90e6977f726531a;hb=25d3ecc4ebe5eb9a2f76f5de50496aba47e22795;hp=33e48fb736383d3cbd5f887e09417514624016cc;hpb=3ccd3959a9b8712f67bf068be04b4deab6443f5e;p=ghc-hetmet.git diff --git a/ghc/includes/RtsAPI.h b/ghc/includes/RtsAPI.h index 33e48fb..f554b96 100644 --- a/ghc/includes/RtsAPI.h +++ b/ghc/includes/RtsAPI.h @@ -1,7 +1,6 @@ /* ---------------------------------------------------------------------------- - * $Id: RtsAPI.h,v 1.28 2002/07/15 08:41:02 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 ); @@ -101,17 +112,14 @@ rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret ); SchedulerStatus rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret ); -#if defined(COMPILING_RTS_MAIN) -/* Used by the RTS' main() only */ -SchedulerStatus -rts_mainEvalIO ( HaskellObj p, /*out*/HaskellObj *ret ); -#endif - 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); @@ -122,10 +130,10 @@ rts_checkSchedStatus ( char* site, SchedulerStatus rc); These are used by foreign export and foreign import "wrapper" stubs. ----------------------------------------------------------------------- */ -extern DLL_IMPORT StgClosure GHCziTopHandler_runIO_closure; -extern DLL_IMPORT StgClosure GHCziTopHandler_runNonIO_closure; -#define runIO_closure (&GHCziTopHandler_runIO_closure) -#define runNonIO_closure (&GHCziTopHandler_runNonIO_closure) +extern StgWord GHCziTopHandler_runIO_closure[]; +extern StgWord GHCziTopHandler_runNonIO_closure[]; +#define runIO_closure GHCziTopHandler_runIO_closure +#define runNonIO_closure GHCziTopHandler_runNonIO_closure /* ------------------------------------------------------------------------ */