[project @ 2000-04-26 09:29:37 by simonmar]
[ghc-hetmet.git] / ghc / includes / RtsAPI.h
1 /* ----------------------------------------------------------------------------
2  * $Id: RtsAPI.h,v 1.13 2000/04/26 09:29:37 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,     /* completed successfully */
19     Killed,      /* uncaught exception */
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 extern void setProgArgv            ( int argc, char *argv[] );
33 extern void getProgArgv            ( int *argc, char **argv[] );
34
35 /* ----------------------------------------------------------------------------
36    Building Haskell objects from C datatypes.
37    ------------------------------------------------------------------------- */
38 HaskellObj   rts_mkChar       ( char c );
39 HaskellObj   rts_mkInt        ( int i );
40 HaskellObj   rts_mkInt8       ( int i );
41 HaskellObj   rts_mkInt16      ( int i );
42 HaskellObj   rts_mkInt32      ( int i );
43 HaskellObj   rts_mkInt64      ( long long i );
44 HaskellObj   rts_mkWord       ( unsigned int w );
45 HaskellObj   rts_mkWord8      ( unsigned int w );
46 HaskellObj   rts_mkWord16     ( unsigned int w );
47 HaskellObj   rts_mkWord32     ( unsigned int w );
48 HaskellObj   rts_mkWord64     ( unsigned long long w );
49 HaskellObj   rts_mkFloat      ( float f );
50 HaskellObj   rts_mkDouble     ( double f );
51 HaskellObj   rts_mkStablePtr  ( StgStablePtr s );
52 HaskellObj   rts_mkAddr       ( void *a );
53 HaskellObj   rts_mkBool       ( int b );
54 HaskellObj   rts_mkString     ( char *s );
55
56 HaskellObj   rts_apply        ( HaskellObj, HaskellObj );
57
58 /* ----------------------------------------------------------------------------
59    Deconstructing Haskell objects
60    ------------------------------------------------------------------------- */
61 char         rts_getChar      ( HaskellObj );
62 int          rts_getInt       ( HaskellObj );
63 int          rts_getInt32     ( HaskellObj );
64 unsigned int rts_getWord      ( HaskellObj );
65 unsigned int rts_getWord32    ( HaskellObj );
66 float        rts_getFloat     ( HaskellObj );
67 double       rts_getDouble    ( HaskellObj );
68 StgStablePtr rts_getStablePtr ( HaskellObj );
69 void *       rts_getAddr      ( HaskellObj );
70 int          rts_getBool      ( HaskellObj );
71
72 /* ----------------------------------------------------------------------------
73    Evaluating Haskell expressions
74
75    The versions ending in '_' allow you to specify an initial stack size.
76    ------------------------------------------------------------------------- */
77 SchedulerStatus 
78 rts_eval ( HaskellObj p, /*out*/HaskellObj *ret );
79
80 SchedulerStatus 
81 rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
82
83 SchedulerStatus 
84 rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret );
85
86 SchedulerStatus 
87 rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
88
89 #if defined(PAR) || defined(SMP)
90 SchedulerStatus
91 rts_evalNothing(unsigned int stack_size);
92 #endif
93
94 void
95 rts_checkSchedStatus ( char* site, SchedulerStatus rc);
96
97 #endif /* RTSAPI_H */