/* * Wrapping up GHC's RtsAPI as a dict (for passing along to plugins etc.) */ #ifndef __RTSAPIWRAP_H__ #define __RTSAPIWRAP_H__ #include "Rts.h" #include "RtsAPI.h" typedef struct _rtsAPI { Capability* (*rts_lock) ( void); void (*rts_unlock) ( Capability*); HaskellObj (*rts_mkChar) ( Capability*, HsChar); HaskellObj (*rts_mkInt) ( Capability*, HsInt); HaskellObj (*rts_mkInt8) ( Capability*, HsInt8); HaskellObj (*rts_mkInt16) ( Capability*, HsInt16); HaskellObj (*rts_mkInt32) ( Capability*, HsInt32); HaskellObj (*rts_mkInt64) ( Capability*, HsInt64); HaskellObj (*rts_mkWord) ( Capability*, HsWord); HaskellObj (*rts_mkWord8) ( Capability*, HsWord8); HaskellObj (*rts_mkWord16) ( Capability*, HsWord16); HaskellObj (*rts_mkWord32) ( Capability*, HsWord32); HaskellObj (*rts_mkWord64) ( Capability*, HsWord64); HaskellObj (*rts_mkPtr) ( Capability*, HsPtr); HaskellObj (*rts_mkFunPtr) ( Capability*, HsFunPtr); HaskellObj (*rts_mkFloat) ( Capability*, HsFloat); HaskellObj (*rts_mkDouble) ( Capability*, HsDouble); HaskellObj (*rts_mkStablePtr) ( Capability*, HsStablePtr); HaskellObj (*rts_mkBool) ( Capability*, HsBool); HaskellObj (*rts_mkString) ( Capability*, char*); HaskellObj (*rts_apply) ( Capability*, HaskellObj, 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 ); Capability* (*rts_eval) (Capability* cap, HaskellObj p, /*out*/HaskellObj *ret); Capability* (*rts_eval_) (Capability* cap, HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret); Capability* (*rts_evalIO) (Capability* cap, HaskellObj p, /*out*/HaskellObj *ret); Capability* (*rts_evalStableIO) (Capability* cap, HsStablePtr s, /*out*/HsStablePtr *ret); Capability* (*rts_evalLazyIO) (Capability* cap, HaskellObj p, /*out*/HaskellObj *ret); Capability* (*rts_evalLazyIO_) (Capability* cap, HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret); void (*rts_checkSchedStatus) (char* site, Capability *cap); SchedulerStatus (*rts_getSchedStatus) (Capability *cap); void* (*rts_deRefStablePtr)(int sp); } RtsAPI; #endif