From d51a833fca6348b967323f667fbd11be74442921 Mon Sep 17 00:00:00 2001 From: panne Date: Wed, 5 Apr 2000 15:20:41 +0000 Subject: [PATCH] [project @ 2000-04-05 15:20:41 by panne] Imported sources for the much-debated HsFFI.h --- ghc/includes/HsFFI.h | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 ghc/includes/HsFFI.h diff --git a/ghc/includes/HsFFI.h b/ghc/includes/HsFFI.h new file mode 100644 index 0000000..799f675 --- /dev/null +++ b/ghc/includes/HsFFI.h @@ -0,0 +1,113 @@ +/* ----------------------------------------------------------------------------- + * $Id: HsFFI.h,v 1.1 2000/04/05 15:20:41 panne Exp $ + * + * (c) The GHC Team, 2000 + * + * A mapping for Haskell types to C types, including the corresponding bounds. + * Intended to be used in conjuction with the FFI. + * + * ---------------------------------------------------------------------------*/ + +#ifndef HSFFI_H +#define HSFFI_H + +/* get types from GHC's runtime system */ +#include "StgTypes.h" + +/* get limits for integral types */ +/* NOTE: This is currently not as portable as it should be. Another route + would be including limits.h plus some #ifdef magic around the bounds of + types without a specified size. */ +#include + +/* get limits for floating point types */ +#include + +typedef StgChar HsChar; +typedef StgInt HsInt; +typedef StgInt8 HsInt8; +typedef StgInt16 HsInt16; +typedef StgInt32 HsInt32; +typedef StgInt64 HsInt64; +typedef StgWord8 HsWord8; +typedef StgWord16 HsWord16; +typedef StgWord32 HsWord32; +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!!! */ + +/* this should correspond to the type of StgChar in StgTypes.h */ +#define HS_CHAR_MIN 0 +#define HS_CHAR_MAX UINT8_MAX + +/* 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 +#elif SIZEOF_VOID_P == 4 +#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_FLOAT_RADIX FLT_RADIX +#define HS_FLOAT_ROUNDS FLT_ROUNDS +#define HS_FLOAT_EPSILON FLT_EPSILON +#define HS_FLOAT_DIG FLT_DIG +#define HS_FLOAT_MANT_DIG FLT_MANT_DIG +#define HS_FLOAT_MIN FLT_MIN +#define HS_FLOAT_MIN_EXP FLT_MIN_EXP +#define HS_FLOAT_MIN_10_EXP FLT_MIN_10_EXP +#define HS_FLOAT_MAX FLT_MAX +#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 +#define HS_DOUBLE_DIG DBL_DIG +#define HS_DOUBLE_MANT_DIG DBL_MANT_DIG +#define HS_DOUBLE_MIN DBL_MIN +#define HS_DOUBLE_MIN_EXP DBL_MIN_EXP +#define HS_DOUBLE_MIN_10_EXP DBL_MIN_10_EXP +#define HS_DOUBLE_MAX DBL_MAX +#define HS_DOUBLE_MAX_EXP DBL_MAX_EXP +#define HS_DOUBLE_MAX_10_EXP DBL_MAX_10_EXP + +#endif /* HSFFI_H */ -- 1.7.10.4