[project @ 1999-11-02 15:05:38 by simonmar]
[ghc-hetmet.git] / ghc / includes / RtsAPI.h
1 /* ----------------------------------------------------------------------------
2  * $Id: RtsAPI.h,v 1.8 1999/11/02 15:05:52 simonmar Exp $
3  *
4  * (c) The GHC Team, 1998-1999
5  *
6  * API for invoking Haskell functions via the RTS
7  *
8  * --------------------------------------------------------------------------*/
9
10 #ifndef RTSAPI_H
11 #define RTSAPI_H
12
13 /*
14  * Running the scheduler
15  */
16 typedef enum {
17     NoStatus,    /* not finished yet                                   */
18     Success,      
19     Killed,      /* another thread killed us                           */
20     Interrupted, /* stopped in response to a call to interruptStgRts   */
21     Deadlock,   
22     AllBlocked,  /* subtly different from Deadlock                     */
23 } SchedulerStatus;
24       
25 typedef StgClosure *HaskellObj;
26
27 /* ----------------------------------------------------------------------------
28    Starting up and shutting down the Haskell RTS.
29    ------------------------------------------------------------------------- */
30 extern void startupHaskell  ( int argc, char *argv[] );
31 extern void shutdownHaskell ( void );
32 extern void shutdownHaskellAndExit ( int exitCode );
33
34 /* ----------------------------------------------------------------------------
35    Building Haskell objects from C datatypes.
36    ------------------------------------------------------------------------- */
37 HaskellObj   rts_mkChar       ( char c );
38 HaskellObj   rts_mkInt        ( int i );
39 HaskellObj   rts_mkInt8       ( int i );
40 HaskellObj   rts_mkInt16      ( int i );
41 HaskellObj   rts_mkInt32      ( int i );
42 HaskellObj   rts_mkInt64      ( long long i );
43 HaskellObj   rts_mkWord       ( unsigned int w );
44 HaskellObj   rts_mkWord8      ( unsigned int w );
45 HaskellObj   rts_mkWord16     ( unsigned int w );
46 HaskellObj   rts_mkWord32     ( unsigned int w );
47 HaskellObj   rts_mkWord64     ( unsigned long long w );
48 HaskellObj   rts_mkFloat      ( float f );
49 HaskellObj   rts_mkDouble     ( double f );
50 HaskellObj   rts_mkStablePtr  ( StgStablePtr s );
51 HaskellObj   rts_mkAddr       ( void *a );
52 HaskellObj   rts_mkBool       ( int b );
53 HaskellObj   rts_mkString     ( char *s );
54
55 HaskellObj   rts_apply        ( HaskellObj, HaskellObj );
56
57 /* ----------------------------------------------------------------------------
58    Deconstructing Haskell objects
59    ------------------------------------------------------------------------- */
60 char         rts_getChar      ( HaskellObj );
61 int          rts_getInt       ( HaskellObj );
62 int          rts_getInt32     ( HaskellObj );
63 unsigned int rts_getWord      ( HaskellObj );
64 unsigned int rts_getWord32    ( HaskellObj );
65 float        rts_getFloat     ( HaskellObj );
66 double       rts_getDouble    ( HaskellObj );
67 StgStablePtr rts_getStablePtr ( HaskellObj );
68 void *       rts_getAddr      ( HaskellObj );
69 int          rts_getBool      ( HaskellObj );
70
71 /* ----------------------------------------------------------------------------
72    Evaluating Haskell expressions
73
74    The versions ending in '_' allow you to specify an initial stack size.
75    ------------------------------------------------------------------------- */
76 SchedulerStatus 
77 rts_eval ( HaskellObj p, /*out*/HaskellObj *ret );
78
79 SchedulerStatus 
80 rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
81
82 SchedulerStatus 
83 rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret );
84
85 SchedulerStatus 
86 rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
87
88 void
89 rts_checkSchedStatus ( char* site, SchedulerStatus rc);
90
91 #endif /* RTSAPI_H */