/* -----------------------------------------------------------------------------
- * $Id: HsFFI.h,v 1.10 2000/11/14 14:47:23 simonmar Exp $
*
* (c) The GHC Team, 2000
*
#ifndef HSFFI_H
#define HSFFI_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* get types from GHC's runtime system */
-#include "config.h"
+#include "ghcconfig.h"
+#include "RtsConfig.h"
#include "StgTypes.h"
/* get limits for integral types */
typedef StgFloat HsFloat;
typedef StgDouble HsDouble;
typedef StgBool HsBool;
-typedef void* HsAddr; /* this should better match StgAddr */
-typedef void* HsForeignObj; /* ... and this StgForeignPtr */
+typedef void* HsPtr; /* this should better match StgAddr */
+typedef void (*HsFunPtr)(void); /* this should better match StgAddr */
+typedef void* HsForeignPtr; /* ... and this StgForeignPtr */
typedef void* HsStablePtr;
+typedef void* HsAddr; /* DEPRECATED */
+typedef void* HsForeignObj; /* DEPRECATED */
/* this should correspond to the type of StgChar in StgTypes.h */
#define HS_CHAR_MIN 0
-#define HS_CHAR_MAX __INT32_MAX
+#define HS_CHAR_MAX 0x10FFFF
+
+/* is it true or not? */
+#define HS_BOOL_FALSE 0
+#define HS_BOOL_TRUE 1
+
+#define HS_BOOL_MIN HS_BOOL_FALSE
+#define HS_BOOL_MAX HS_BOOL_TRUE
/* this mirrors the distinction of cases in StgTypes.h */
#if SIZEOF_VOID_P == 8
#define HS_DOUBLE_MAX_EXP DBL_MAX_EXP
#define HS_DOUBLE_MAX_10_EXP DBL_MAX_10_EXP
+extern void hs_init (int *argc, char **argv[]);
+extern void hs_exit (void);
+extern void hs_set_argv (int argc, char *argv[]);
+extern void hs_add_root (void (*init_root)(void));
+
+extern void hs_perform_gc (void);
+
+extern void hs_free_stable_ptr (HsStablePtr sp);
+extern void hs_free_fun_ptr (HsFunPtr fp);
+
+/* -------------------------------------------------------------------------- */
+
+#ifdef __cplusplus
+}
+#endif
+
#endif /* HSFFI_H */