From de209d2b0e7deb0520625847375c2595577781a2 Mon Sep 17 00:00:00 2001 From: panne Date: Thu, 6 Apr 2000 13:40:15 +0000 Subject: [PATCH] [project @ 2000-04-06 13:40:15 by panne] added autoconf magic for integral limits --- configure.in | 2 +- ghc/includes/HsFFI.h | 164 ++++++++++++++++++++++++++++---------------------- 2 files changed, 94 insertions(+), 72 deletions(-) diff --git a/configure.in b/configure.in index 8eecf21..38f838d 100644 --- a/configure.in +++ b/configure.in @@ -504,7 +504,7 @@ dnl ** check for full ANSI header (.h) files AC_HEADER_STDC dnl ** check for specific header (.h) files that we are interested in -AC_CHECK_HEADERS(Files.h assert.h console.h ctype.h dirent.h errno.h fcntl.h float.h ftw.h grp.h ieee754.h malloc.h memory.h nlist.h pascal.h pwd.h sgtty.h siginfo.h signal.h stat.h stdlib.h stdarg.h string.h sys/fault.h sys/file.h sys/ioctl.h sys/limits.h sys/mman.h sys/param.h sys/procfs.h sys/resource.h sys/signal.h sys/socket.h netinet/tcp.h sys/stat.h sys/syscall.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/types.h sys/utsname.h sys/vadvise.h sys/wait.h termio.h termios.h time.h types.h unistd.h utime.h values.h vfork.h readline/readline.h readline/history.h bfd.h winsock.h) +AC_CHECK_HEADERS(Files.h assert.h console.h ctype.h dirent.h errno.h fcntl.h float.h ftw.h grp.h ieee754.h malloc.h memory.h nlist.h pascal.h pwd.h sgtty.h siginfo.h signal.h stat.h stdint.h stdlib.h stdarg.h string.h sys/fault.h sys/file.h sys/ioctl.h sys/limits.h sys/mman.h sys/param.h sys/procfs.h sys/resource.h sys/signal.h sys/socket.h netinet/tcp.h sys/stat.h sys/syscall.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/types.h sys/utsname.h sys/vadvise.h sys/wait.h termio.h termios.h time.h types.h unistd.h utime.h values.h vfork.h readline/readline.h readline/history.h bfd.h winsock.h) dnl ** check for DOS include files AC_CHECK_HEADERS(dos.h conio.h io.h std.h) diff --git a/ghc/includes/HsFFI.h b/ghc/includes/HsFFI.h index 799f675..a6b2673 100644 --- a/ghc/includes/HsFFI.h +++ b/ghc/includes/HsFFI.h @@ -1,11 +1,13 @@ /* ----------------------------------------------------------------------------- - * $Id: HsFFI.h,v 1.1 2000/04/05 15:20:41 panne Exp $ + * $Id: HsFFI.h,v 1.2 2000/04/06 13:40:15 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. * + * WARNING: Keep this file and StgTypes.h in synch! + * * ---------------------------------------------------------------------------*/ #ifndef HSFFI_H @@ -15,99 +17,119 @@ #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. */ +#ifdef HAVE_STDINT_H +/* ISO C 99 requires this */ +#define __STDC_LIMIT_MACROS #include +#else +/* second best guess (e.g. on Solaris) */ +#include +#endif + +/* 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) +#endif /* 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!!! */ +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 +#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 +#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 +#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 +#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 +#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 +#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