[project @ 2000-03-31 03:09:35 by hwloidl]
[ghc-hetmet.git] / ghc / includes / RtsAPI.h
1 /* ----------------------------------------------------------------------------
2  * $Id: RtsAPI.h,v 1.11 2000/03/31 03:09:35 hwloidl 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     /* no threads to run, but main thread hasn't finished */
22 } SchedulerStatus;
23
24 typedef StgClosure *HaskellObj;
25
26 /* ----------------------------------------------------------------------------
27    Starting up and shutting down the Haskell RTS.
28    ------------------------------------------------------------------------- */
29 extern void startupHaskell  ( int argc, char *argv[], void *init_root );
30 extern void shutdownHaskell ( void );
31 extern void shutdownHaskellAndExit ( int exitCode );
32
33 /* ----------------------------------------------------------------------------
34    Building Haskell objects from C datatypes.
35    ------------------------------------------------------------------------- */
36 HaskellObj   rts_mkChar       ( char c );
37 HaskellObj   rts_mkInt        ( int i );
38 HaskellObj   rts_mkInt8       ( int i );
39 HaskellObj   rts_mkInt16      ( int i );
40 HaskellObj   rts_mkInt32      ( int i );
41 HaskellObj   rts_mkInt64      ( long long i );
42 HaskellObj   rts_mkWord       ( unsigned int w );
43 HaskellObj   rts_mkWord8      ( unsigned int w );
44 HaskellObj   rts_mkWord16     ( unsigned int w );
45 HaskellObj   rts_mkWord32     ( unsigned int w );
46 HaskellObj   rts_mkWord64     ( unsigned long long w );
47 HaskellObj   rts_mkFloat      ( float f );
48 HaskellObj   rts_mkDouble     ( double f );
49 HaskellObj   rts_mkStablePtr  ( StgStablePtr s );
50 HaskellObj   rts_mkAddr       ( void *a );
51 HaskellObj   rts_mkBool       ( int b );
52 HaskellObj   rts_mkString     ( char *s );
53
54 HaskellObj   rts_apply        ( HaskellObj, HaskellObj );
55
56 /* ----------------------------------------------------------------------------
57    Deconstructing Haskell objects
58    ------------------------------------------------------------------------- */
59 char         rts_getChar      ( HaskellObj );
60 int          rts_getInt       ( HaskellObj );
61 int          rts_getInt32     ( HaskellObj );
62 unsigned int rts_getWord      ( HaskellObj );
63 unsigned int rts_getWord32    ( HaskellObj );
64 float        rts_getFloat     ( HaskellObj );
65 double       rts_getDouble    ( HaskellObj );
66 StgStablePtr rts_getStablePtr ( HaskellObj );
67 void *       rts_getAddr      ( HaskellObj );
68 int          rts_getBool      ( HaskellObj );
69
70 /* ----------------------------------------------------------------------------
71    Evaluating Haskell expressions
72
73    The versions ending in '_' allow you to specify an initial stack size.
74    ------------------------------------------------------------------------- */
75 SchedulerStatus 
76 rts_eval ( HaskellObj p, /*out*/HaskellObj *ret );
77
78 SchedulerStatus 
79 rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
80
81 SchedulerStatus 
82 rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret );
83
84 SchedulerStatus 
85 rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
86
87 #if defined(PAR) || defined(SMP)
88 SchedulerStatus
89 rts_evalNothing(unsigned int stack_size);
90 #endif
91
92 void
93 rts_checkSchedStatus ( char* site, SchedulerStatus rc);
94
95 #endif /* RTSAPI_H */