[project @ 2000-04-05 15:20:41 by panne]
[ghc-hetmet.git] / ghc / includes / HsFFI.h
1 /* -----------------------------------------------------------------------------
2  * $Id: HsFFI.h,v 1.1 2000/04/05 15:20:41 panne Exp $
3  *
4  * (c) The GHC Team, 2000
5  *
6  * A mapping for Haskell types to C types, including the corresponding bounds.
7  * Intended to be used in conjuction with the FFI.
8  *
9  * ---------------------------------------------------------------------------*/
10
11 #ifndef HSFFI_H
12 #define HSFFI_H
13
14 /* get types from GHC's runtime system */
15 #include "StgTypes.h"
16
17 /* get limits for integral types */
18 /* NOTE: This is currently not as portable as it should be. Another route
19    would be including limits.h plus some #ifdef magic around the bounds of
20    types without a specified size. */
21 #include <stdint.h>
22
23 /* get limits for floating point types */
24 #include <float.h>
25
26 typedef StgChar   HsChar;
27 typedef StgInt    HsInt;
28 typedef StgInt8   HsInt8;
29 typedef StgInt16  HsInt16;
30 typedef StgInt32  HsInt32;
31 typedef StgInt64  HsInt64;
32 typedef StgWord8  HsWord8;
33 typedef StgWord16 HsWord16;
34 typedef StgWord32 HsWord32;
35 typedef StgWord64 HsWord64;
36 typedef StgFloat  HsFloat;
37 typedef StgDouble HsDouble;
38 typedef StgBool   HsBool;
39 typedef void*     HsAddr;         /* this should better match StgAddr */
40 typedef void*     HsForeignObj;   /* ... and this StgForeignPtr       */
41 typedef void*     HsStablePtr;    /* NOTE: THIS IS CURRENTLY WRONG!!! */
42
43 /* this should correspond to the type of StgChar in StgTypes.h */
44 #define HS_CHAR_MIN     0
45 #define HS_CHAR_MAX     UINT8_MAX
46
47 /* this mirrors the distinction of cases in StgTypes.h */
48 #if   SIZEOF_VOID_P == 8
49 #define HS_INT_MIN      INT64_MIN
50 #define HS_INT_MAX      INT64_MAX
51 #elif SIZEOF_VOID_P == 4
52 #define HS_INT_MIN      INT32_MIN
53 #define HS_INT_MAX      INT32_MAX
54 #else
55 #error GHC untested on this architecture: sizeof(void *) != 4 or 8
56 #endif
57
58 #define HS_INT8_MIN     INT8_MIN
59 #define HS_INT8_MAX     INT8_MAX
60 #define HS_INT16_MIN    INT16_MIN
61 #define HS_INT16_MAX    INT16_MAX
62 #define HS_INT32_MIN    INT32_MIN
63 #define HS_INT32_MAX    INT32_MAX
64 #define HS_INT64_MIN    INT64_MIN
65 #define HS_INT64_MAX    INT64_MAX
66 #define HS_WORD8_MAX    UINT8_MAX
67 #define HS_WORD16_MAX   UINT16_MAX
68 #define HS_WORD32_MAX   UINT32_MAX
69 #define HS_WORD64_MAX   UINT64_MAX
70
71 #ifdef FLOATS_AS_DOUBLES
72
73 #define HS_FLOAT_RADIX       DBL_RADIX
74 #define HS_FLOAT_ROUNDS      DBL_ROUNDS
75 #define HS_FLOAT_EPSILON     DBL_EPSILON
76 #define HS_FLOAT_DIG         DBL_DIG
77 #define HS_FLOAT_MANT_DIG    DBL_MANT_DIG
78 #define HS_FLOAT_MIN         DBL_MIN
79 #define HS_FLOAT_MIN_EXP     DBL_MIN_EXP
80 #define HS_FLOAT_MIN_10_EXP  DBL_MIN_10_EXP
81 #define HS_FLOAT_MAX         DBL_MAX
82 #define HS_FLOAT_MAX_EXP     DBL_MAX_EXP
83 #define HS_FLOAT_MAX_10_EXP  DBL_MAX_10_EXP
84                            
85 #else                      
86                            
87 #define HS_FLOAT_RADIX       FLT_RADIX
88 #define HS_FLOAT_ROUNDS      FLT_ROUNDS
89 #define HS_FLOAT_EPSILON     FLT_EPSILON
90 #define HS_FLOAT_DIG         FLT_DIG
91 #define HS_FLOAT_MANT_DIG    FLT_MANT_DIG
92 #define HS_FLOAT_MIN         FLT_MIN
93 #define HS_FLOAT_MIN_EXP     FLT_MIN_EXP
94 #define HS_FLOAT_MIN_10_EXP  FLT_MIN_10_EXP
95 #define HS_FLOAT_MAX         FLT_MAX
96 #define HS_FLOAT_MAX_EXP     FLT_MAX_EXP
97 #define HS_FLOAT_MAX_10_EXP  FLT_MAX_10_EXP
98
99 #endif /* FLOATS_AS_DOUBLES */
100
101 #define HS_DOUBLE_RADIX      DBL_RADIX
102 #define HS_DOUBLE_ROUNDS     DBL_ROUNDS
103 #define HS_DOUBLE_EPSILON    DBL_EPSILON
104 #define HS_DOUBLE_DIG        DBL_DIG
105 #define HS_DOUBLE_MANT_DIG   DBL_MANT_DIG
106 #define HS_DOUBLE_MIN        DBL_MIN
107 #define HS_DOUBLE_MIN_EXP    DBL_MIN_EXP
108 #define HS_DOUBLE_MIN_10_EXP DBL_MIN_10_EXP
109 #define HS_DOUBLE_MAX        DBL_MAX
110 #define HS_DOUBLE_MAX_EXP    DBL_MAX_EXP
111 #define HS_DOUBLE_MAX_10_EXP DBL_MAX_10_EXP
112
113 #endif /* HSFFI_H */