packages feed

MicroHs-0.16.0.0: src/runtime/HsFFI.h

#if !defined(_HSFFI_H)
#define _HSFFI_H

#include <inttypes.h>
#include <limits.h>
#include <float.h>
#include <unistd.h>
#include <string.h>

typedef uint32_t      HsChar;
typedef	intptr_t      HsInt;
typedef int8_t        HsInt8;
typedef int16_t       HsInt16;
typedef int32_t       HsInt32;
typedef int64_t       HsInt64;
typedef uintptr_t     HsWord;
typedef uint8_t       HsWord8;
typedef uint16_t      HsWord16;
typedef uint32_t      HsWord32;
typedef uint64_t      HsWord64;
typedef float         HsFloat;
typedef double        HsDouble;
typedef int           HsBool;
typedef void         *HsPtr;
typedef void        (*HsFunPtr)(void);
typedef	void         *HsStablePtr;

#define HS_CHAR_MIN     0
#define HS_CHAR_MAX     0x10ffff
#define HS_INT_MIN      INTPTR_MIN
#define HS_INT_MAX      INTPTR_MAX
#define HS_INT8_MIN     INT8_MIN
#define HS_INT8_MAX     INT8_MAX
#define HS_INT16_MIN    INT16_MIN
#define HS_INT16_MAX    INT16_MAX
#define HS_INT32_MIN    INT32_MIN
#define HS_INT32_MAX    INT32_MAX
#define HS_INT64_MIN    INT64_MIN
#define HS_INT64_MAX    INT64_MAX
#define HS_WORD_MAX     UINTPTR_MAX
#define HS_WORD8_MAX    UINT8_MAX
#define HS_WORD16_MAX   UINT16_MAX
#define HS_WORD32_MAX   UINT32_MAX
#define HS_WORD64_MAX   UINT64_MAX

#define HS_FLOAT_RADIX        FLT_RADIX
#define HS_FLOAT_ROUND        FLT_ROUNDS
#define HS_FLOAT_EPSILON      FLT_EPSILON
#define HS_DOUBLE_EPSILON     DBL_EPSILON
#define HS_FLOAT_DIG          FLT_DIG
#define HS_DOUBLE_DIG         DBL_DIG
#define HS_FLOAT_MANT_DIG     FLT_MANT_DIG
#define HS_DOUBLE_MANT_DIG    DBL_MAN_DIG
#define HS_FLOAT_MIN          FLT_MIN
#define HS_DOUBLE_MIN         DBL_MIN
#define HS_FLOAT_MIN_EXP      FLT_MIN_EXP
#define HS_DOUBLE_MIN_EXP     DBL_MIN_EXP
#define HS_FLOAT_MIN_10_EXP   FLT_MIN_10_EXP
#define HS_DOUBLE_MIN_10_EXP  DBL_MIN_10_EXP
#define HS_FLOAT_MAX          FLT_MAX
#define HS_DOUBLE_MAX         DBL_MAX
#define HS_FLOAT_MAX_EXP      FLT_MAX_EXP
#define HS_DOUBLE_MAX_EXP     DBL_MAX_EXP
#define HS_FLOAT_MAX_10_EXP   FLT_MAX_10_EXP
#define HS_DOUBLE_MAX_10_EXP  DBL_MAX_10_EXP
#define HS_BOOL_FALSE         0
#define HS_BOOL_TRUE          1

/* API functions promised by the FFI spec */
void hs_init(int *argc, char **argv[]);
void hs_exit(void);
void hs_set_argv(int argc, char *argv[]);
void hs_perform_gc(void);
void hs_free_stable_ptr(HsStablePtr sp);
void hs_free_fun_ptr(HsFunPtr fp);

#endif  /* _HSFFI_H */