X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FHsFFI.h;h=a96cb95c9147b7870d174deb7cda4e58e8c21a2e;hb=423d477bfecd490de1449c59325c8776f91d7aac;hp=a6b26738bce5765e39e1aa48cdf7a99af91fdfaf;hpb=de209d2b0e7deb0520625847375c2595577781a2;p=ghc-hetmet.git diff --git a/ghc/includes/HsFFI.h b/ghc/includes/HsFFI.h index a6b2673..a96cb95 100644 --- a/ghc/includes/HsFFI.h +++ b/ghc/includes/HsFFI.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: HsFFI.h,v 1.2 2000/04/06 13:40:15 panne Exp $ + * $Id: HsFFI.h,v 1.20 2004/08/13 13:09:13 simonmar Exp $ * * (c) The GHC Team, 2000 * @@ -13,33 +13,57 @@ #ifndef HSFFI_H #define HSFFI_H +#ifdef __cplusplus +extern "C" { +#endif + /* get types from GHC's runtime system */ +#include "ghcconfig.h" +#include "RtsConfig.h" #include "StgTypes.h" /* get limits for integral types */ #ifdef HAVE_STDINT_H -/* ISO C 99 requires this */ +/* ISO C 99 says: + * "C++ implementations should define these macros only when + * __STDC_LIMIT_MACROS is defined before is included." + */ #define __STDC_LIMIT_MACROS #include +#elif defined(HAVE_INTTYPES_H) +#include #else /* second best guess (e.g. on Solaris) */ #include #endif +#ifdef INT8_MIN +#define __INT8_MIN INT8_MIN +#define __INT16_MIN INT16_MIN +#define __INT32_MIN INT32_MIN +#define __INT64_MIN INT64_MIN +#define __INT8_MAX INT8_MAX +#define __INT16_MAX INT16_MAX +#define __INT32_MAX INT32_MAX +#define __INT64_MAX INT64_MAX +#define __UINT8_MAX UINT8_MAX +#define __UINT16_MAX UINT16_MAX +#define __UINT32_MAX UINT32_MAX +#define __UINT64_MAX UINT64_MAX +#else /* if we had no luck, let's do it for ourselves (assuming 64bit long longs) */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#define INT16_MIN (-32767-1) -#define INT32_MIN (-2147483647-1) -#define INT64_MIN (-9223372036854775807LL-1) -#define INT8_MAX (127) -#define INT16_MAX (32767) -#define INT32_MAX (2147483647) -#define INT64_MAX (9223372036854775807LL) -#define UINT8_MAX (255U) -#define UINT16_MAX (65535U) -#define UINT32_MAX (4294967295U) -#define UINT64_MAX (18446744073709551615ULL) +#define __INT8_MIN (-128) +#define __INT16_MIN (-32767-1) +#define __INT32_MIN (-2147483647-1) +#define __INT64_MIN (-9223372036854775807LL-1) +#define __INT8_MAX (127) +#define __INT16_MAX (32767) +#define __INT32_MAX (2147483647) +#define __INT64_MAX (9223372036854775807LL) +#define __UINT8_MAX (255U) +#define __UINT16_MAX (65535U) +#define __UINT32_MAX (4294967295U) +#define __UINT64_MAX (18446744073709551615ULL) #endif /* get limits for floating point types */ @@ -51,6 +75,7 @@ typedef StgInt8 HsInt8; typedef StgInt16 HsInt16; typedef StgInt32 HsInt32; typedef StgInt64 HsInt64; +typedef StgWord HsWord; typedef StgWord8 HsWord8; typedef StgWord16 HsWord16; typedef StgWord32 HsWord32; @@ -58,54 +83,48 @@ typedef StgWord64 HsWord64; 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* HsStablePtr; /* NOTE: THIS IS CURRENTLY WRONG!!! */ +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 UINT8_MAX +#define HS_CHAR_MIN 0 +#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_INT_MIN INT64_MIN -#define HS_INT_MAX INT64_MAX +#define HS_INT_MIN __INT64_MIN +#define HS_INT_MAX __INT64_MAX #elif SIZEOF_VOID_P == 4 -#define HS_INT_MIN INT32_MIN -#define HS_INT_MAX INT32_MAX +#define HS_INT_MIN __INT32_MIN +#define HS_INT_MAX __INT32_MAX #else #error GHC untested on this architecture: sizeof(void *) != 4 or 8 #endif -#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_WORD8_MAX UINT8_MAX -#define HS_WORD16_MAX UINT16_MAX -#define HS_WORD32_MAX UINT32_MAX -#define HS_WORD64_MAX UINT64_MAX - -#ifdef FLOATS_AS_DOUBLES - -#define HS_FLOAT_RADIX DBL_RADIX -#define HS_FLOAT_ROUNDS DBL_ROUNDS -#define HS_FLOAT_EPSILON DBL_EPSILON -#define HS_FLOAT_DIG DBL_DIG -#define HS_FLOAT_MANT_DIG DBL_MANT_DIG -#define HS_FLOAT_MIN DBL_MIN -#define HS_FLOAT_MIN_EXP DBL_MIN_EXP -#define HS_FLOAT_MIN_10_EXP DBL_MIN_10_EXP -#define HS_FLOAT_MAX DBL_MAX -#define HS_FLOAT_MAX_EXP DBL_MAX_EXP -#define HS_FLOAT_MAX_10_EXP DBL_MAX_10_EXP - -#else - +#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_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_ROUNDS FLT_ROUNDS #define HS_FLOAT_EPSILON FLT_EPSILON @@ -118,8 +137,6 @@ typedef void* HsStablePtr; /* NOTE: THIS IS CURRENTLY WRONG!!! */ #define HS_FLOAT_MAX_EXP FLT_MAX_EXP #define HS_FLOAT_MAX_10_EXP FLT_MAX_10_EXP -#endif /* FLOATS_AS_DOUBLES */ - #define HS_DOUBLE_RADIX DBL_RADIX #define HS_DOUBLE_ROUNDS DBL_ROUNDS #define HS_DOUBLE_EPSILON DBL_EPSILON @@ -132,4 +149,20 @@ typedef void* HsStablePtr; /* NOTE: THIS IS CURRENTLY WRONG!!! */ #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 */