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