1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/* ----------------------------------------------------------------------------
* $Id: RtsAPI.h,v 1.20 2001/02/09 12:09:33 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
* API for invoking Haskell functions via the RTS
*
* --------------------------------------------------------------------------*/
#ifndef RTSAPI_H
#define RTSAPI_H
#include "HsFFI.h"
/*
* Running the scheduler
*/
typedef enum {
NoStatus, /* not finished yet */
Success, /* completed successfully */
Killed, /* uncaught exception */
Interrupted, /* stopped in response to a call to interruptStgRts */
Deadlock /* no threads to run, but main thread hasn't finished */
} SchedulerStatus;
typedef StgClosure *HaskellObj;
/* ----------------------------------------------------------------------------
Starting up and shutting down the Haskell RTS.
------------------------------------------------------------------------- */
extern void startupHaskell ( int argc, char *argv[],
void (*init_root)(void) );
extern void shutdownHaskell ( void );
extern void shutdownHaskellAndExit ( int exitCode );
extern void setProgArgv ( int argc, char *argv[] );
extern void getProgArgv ( int *argc, char **argv[] );
/* ----------------------------------------------------------------------------
Building Haskell objects from C datatypes.
------------------------------------------------------------------------- */
HaskellObj rts_mkChar ( HsChar c );
HaskellObj rts_mkInt ( HsInt i );
HaskellObj rts_mkInt8 ( HsInt8 i );
HaskellObj rts_mkInt16 ( HsInt16 i );
HaskellObj rts_mkInt32 ( HsInt32 i );
HaskellObj rts_mkInt64 ( HsInt64 i );
HaskellObj rts_mkWord ( HsWord w );
HaskellObj rts_mkWord8 ( HsWord8 w );
HaskellObj rts_mkWord16 ( HsWord16 w );
HaskellObj rts_mkWord32 ( HsWord32 w );
HaskellObj rts_mkWord64 ( HsWord64 w );
HaskellObj rts_mkPtr ( HsPtr a );
HaskellObj rts_mkFloat ( HsFloat f );
HaskellObj rts_mkDouble ( HsDouble f );
HaskellObj rts_mkStablePtr ( HsStablePtr s );
HaskellObj rts_mkBool ( HsBool b );
HaskellObj rts_mkString ( char *s );
HaskellObj rts_apply ( HaskellObj, HaskellObj );
/* DEPRECATED (use rts_mkPtr): */
HaskellObj rts_mkAddr ( HsAddr a );
/* ----------------------------------------------------------------------------
Deconstructing Haskell objects
------------------------------------------------------------------------- */
HsChar rts_getChar ( HaskellObj );
HsInt rts_getInt ( HaskellObj );
HsInt32 rts_getInt32 ( HaskellObj );
HsWord rts_getWord ( HaskellObj );
HsWord32 rts_getWord32 ( HaskellObj );
HsPtr rts_getPtr ( HaskellObj );
HsFloat rts_getFloat ( HaskellObj );
HsDouble rts_getDouble ( HaskellObj );
HsStablePtr rts_getStablePtr ( HaskellObj );
HsBool rts_getBool ( HaskellObj );
/* DEPRECATED (use rts_getPtr): */
HsAddr rts_getAddr ( HaskellObj );
/* ----------------------------------------------------------------------------
Evaluating Haskell expressions
The versions ending in '_' allow you to specify an initial stack size.
------------------------------------------------------------------------- */
SchedulerStatus
rts_eval ( HaskellObj p, /*out*/HaskellObj *ret );
SchedulerStatus
rts_eval_ ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
SchedulerStatus
rts_evalIO ( HaskellObj p, /*out*/HaskellObj *ret );
SchedulerStatus
rts_evalLazyIO ( HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret );
#if defined(PAR) || defined(SMP)
SchedulerStatus
rts_evalNothing(unsigned int stack_size);
#endif
void
rts_checkSchedStatus ( char* site, SchedulerStatus rc);
#endif /* RTSAPI_H */
|