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