[project @ 2000-06-27 09:18:04 by sewardj]
[ghc-hetmet.git] / ghc / includes / RtsAPI.h
1 /* ----------------------------------------------------------------------------
2  * $Id: RtsAPI.h,v 1.15 2000/06/27 09:18:04 sewardj 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 /* Make this compilable with Visual C++.  We can't just use StgInt64 here,
28    because this file should be compilable without reference to the rest
29    of the RTS machinery.
30 */
31 #if defined(__MSVC__)
32 typedef __int64            int64;
33 typedef unsigned __int64   nat64;
34 #else
35 typedef long long          int64;
36 typedef unsigned long long nat64;
37 #endif
38
39 /* ----------------------------------------------------------------------------
40    Starting up and shutting down the Haskell RTS.
41    ------------------------------------------------------------------------- */
42 extern void startupHaskell         ( int argc, char *argv[], void *init_root );
43 extern void shutdownHaskell        ( void );
44 extern void shutdownHaskellAndExit ( int exitCode );
45 extern void setProgArgv            ( int argc, char *argv[] );
46 extern void getProgArgv            ( int *argc, char **argv[] );
47
48 /* ----------------------------------------------------------------------------
49    Building Haskell objects from C datatypes.
50    ------------------------------------------------------------------------- */
51 HaskellObj   rts_mkChar       ( char c );
52 HaskellObj   rts_mkInt        ( int i );
53 HaskellObj   rts_mkInt8       ( int i );
54 HaskellObj   rts_mkInt16      ( int i );
55 HaskellObj   rts_mkInt32      ( int i );
56 HaskellObj   rts_mkWord       ( unsigned int w );
57 HaskellObj   rts_mkWord8      ( unsigned int w );
58 HaskellObj   rts_mkWord16     ( unsigned int w );
59 HaskellObj   rts_mkWord32     ( unsigned int w );
60 HaskellObj   rts_mkInt64      ( int64 i );
61 HaskellObj   rts_mkWord64     ( nat64 w );
62 HaskellObj   rts_mkFloat      ( float f );
63 HaskellObj   rts_mkDouble     ( double f );
64 HaskellObj   rts_mkStablePtr  ( StgStablePtr s );
65 HaskellObj   rts_mkAddr       ( void *a );
66 HaskellObj   rts_mkBool       ( int b );
67 HaskellObj   rts_mkString     ( char *s );
68
69 HaskellObj   rts_apply        ( HaskellObj, HaskellObj );
70
71 /* ----------------------------------------------------------------------------
72    Deconstructing Haskell objects
73    ------------------------------------------------------------------------- */
74 char         rts_getChar      ( HaskellObj );
75 int          rts_getInt       ( HaskellObj );
76 int          rts_getInt32     ( HaskellObj );
77 unsigned int rts_getWord      ( HaskellObj );
78 unsigned int rts_getWord32    ( HaskellObj );
79 float        rts_getFloat     ( HaskellObj );
80 double       rts_getDouble    ( HaskellObj );
81 StgStablePtr rts_getStablePtr ( HaskellObj );
82 void *       rts_getAddr      ( HaskellObj );
83 int          rts_getBool      ( HaskellObj );
84
85 /* ----------------------------------------------------------------------------
86    Evaluating Haskell expressions
87
88    The versions ending in '_' allow you to specify an initial stack size.
89    ------------------------------------------------------------------------- */
90 SchedulerStatus 
91 rts_eval ( HaskellObj p, /*out*/HaskellObj *ret );
92
93 SchedulerStatus 
94 rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
95
96 SchedulerStatus 
97 rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret );
98
99 SchedulerStatus 
100 rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
101
102 #if defined(PAR) || defined(SMP)
103 SchedulerStatus
104 rts_evalNothing(unsigned int stack_size);
105 #endif
106
107 void
108 rts_checkSchedStatus ( char* site, SchedulerStatus rc);
109
110 #endif /* RTSAPI_H */