[project @ 1999-07-03 18:39:40 by sof]
[ghc-hetmet.git] / ghc / includes / RtsAPI.h
1 /* ----------------------------------------------------------------------------
2  * $Id: RtsAPI.h,v 1.6 1999/07/03 18:39:41 sof 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 #include "SchedAPI.h"  /* for SchedulerStatus */
14
15 typedef StgClosure *HaskellObj;
16
17 /* ----------------------------------------------------------------------------
18    Starting up and shutting down the Haskell RTS.
19    ------------------------------------------------------------------------- */
20 extern void startupHaskell  ( int argc, char *argv[] );
21 extern void shutdownHaskell ( void );
22 extern void shutdownHaskellAndExit ( int exitCode );
23
24 /* ----------------------------------------------------------------------------
25    Building Haskell objects from C datatypes.
26    ------------------------------------------------------------------------- */
27 HaskellObj   rts_mkChar       ( char c );
28 HaskellObj   rts_mkInt        ( int i );
29 HaskellObj   rts_mkInt8       ( int i );
30 HaskellObj   rts_mkInt16      ( int i );
31 HaskellObj   rts_mkInt32      ( int i );
32 HaskellObj   rts_mkInt64      ( long long i );
33 HaskellObj   rts_mkWord       ( unsigned int w );
34 HaskellObj   rts_mkWord8      ( unsigned int w );
35 HaskellObj   rts_mkWord16     ( unsigned int w );
36 HaskellObj   rts_mkWord32     ( unsigned int w );
37 HaskellObj   rts_mkWord64     ( unsigned long long w );
38 HaskellObj   rts_mkFloat      ( float f );
39 HaskellObj   rts_mkDouble     ( double f );
40 HaskellObj   rts_mkStablePtr  ( StgStablePtr s );
41 HaskellObj   rts_mkAddr       ( void *a );
42 HaskellObj   rts_mkBool       ( int b );
43 HaskellObj   rts_mkString     ( char *s );
44
45 HaskellObj   rts_apply        ( HaskellObj, HaskellObj );
46
47 /* ----------------------------------------------------------------------------
48    Deconstructing Haskell objects
49    ------------------------------------------------------------------------- */
50 char         rts_getChar      ( HaskellObj );
51 int          rts_getInt       ( HaskellObj );
52 int          rts_getInt32     ( HaskellObj );
53 unsigned int rts_getWord      ( HaskellObj );
54 unsigned int rts_getWord32    ( HaskellObj );
55 float        rts_getFloat     ( HaskellObj );
56 double       rts_getDouble    ( HaskellObj );
57 StgStablePtr rts_getStablePtr ( HaskellObj );
58 void *       rts_getAddr      ( HaskellObj );
59 int          rts_getBool      ( HaskellObj );
60
61 /* ----------------------------------------------------------------------------
62    Evaluating Haskell expressions
63
64    The versions ending in '_' allow you to specify an initial stack size.
65    ------------------------------------------------------------------------- */
66 SchedulerStatus 
67 rts_eval ( HaskellObj p, /*out*/HaskellObj *ret );
68
69 SchedulerStatus 
70 rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
71
72 SchedulerStatus 
73 rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret );
74
75 SchedulerStatus 
76 rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
77
78 void
79 rts_checkSchedStatus ( char* site, SchedulerStatus rc);
80
81 #endif /* RTSAPI_H */