1 #ifndef PRIVATE_SLINT_H_ 2 # define PRIVATE_SLINT_H_ 3 4 /* This file defines macros and types for ints of various types. 5 * Eventually it will make use of stdint.h. 6 */ 7 8 /* If long or short are ints, then map the slang types to ints. This is 9 * done because slang has some optimizations for ints. 10 */ 11 #define LONG_IS_INT (SIZEOF_INT == SIZEOF_LONG) 12 #define LONG_IS_NOT_INT (SIZEOF_INT != SIZEOF_LONG) 13 #define SHORT_IS_INT (SIZEOF_INT == SIZEOF_SHORT) 14 #define SHORT_IS_NOT_INT (SIZEOF_INT != SIZEOF_SHORT) 15 #define LLONG_IS_LONG (SIZEOF_LONG == SIZEOF_LONG_LONG) 16 #define LLONG_IS_NOT_LONG (SIZEOF_LONG != SIZEOF_LONG_LONG) 17 18 #if LONG_IS_INT 19 # define _pSLANG_LONG_TYPE SLANG_INT_TYPE 20 # define _pSLANG_ULONG_TYPE SLANG_UINT_TYPE 21 #else 22 # define _pSLANG_LONG_TYPE SLANG_LONG_TYPE 23 # define _pSLANG_ULONG_TYPE SLANG_ULONG_TYPE 24 #endif 25 #if SHORT_IS_INT 26 # define _pSLANG_SHORT_TYPE SLANG_INT_TYPE 27 # define _pSLANG_USHORT_TYPE SLANG_UINT_TYPE 28 #else 29 # define _pSLANG_SHORT_TYPE SLANG_SHORT_TYPE 30 # define _pSLANG_USHORT_TYPE SLANG_USHORT_TYPE 31 #endif 32 #if LLONG_IS_LONG 33 # define _pSLANG_LLONG_TYPE _pSLANG_LONG_TYPE 34 # define _pSLANG_ULLONG_TYPE _pSLANG_ULONG_TYPE 35 #else 36 # define _pSLANG_LLONG_TYPE SLANG_LLONG_TYPE 37 # define _pSLANG_ULLONG_TYPE SLANG_ULLONG_TYPE 38 #endif 39 40 /* Map off_t to a slang type */ 41 #if defined(HAVE_LONG_LONG) && (SIZEOF_OFF_T == SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG > SIZEOF_LONG) 42 # define SLANG_C_OFF_T_TYPE _pSLANG_LLONG_TYPE 43 typedef long long _pSLc_off_t_Type; 44 # define SLANG_PUSH_OFF_T SLang_push_long_long 45 #else 46 # if (SIZEOF_OFF_T == SIZEOF_INT) 47 # define SLANG_C_OFF_T_TYPE SLANG_INT_TYPE 48 # define SLANG_PUSH_OFF_T SLang_push_int 49 typedef int _pSLc_off_t_Type; 50 # else 51 # define SLANG_C_OFF_T_TYPE _pSLANG_LONG_TYPE 52 # define SLANG_PUSH_OFF_T SLang_push_long 53 typedef long _pSLc_off_t_Type; 54 # endif 55 #endif 56 57 #if SIZEOF_INT == 2 58 # define _pSLANG_INT16_TYPE SLANG_INT_TYPE 59 # define _pSLANG_UINT16_TYPE SLANG_UINT_TYPE 60 typedef int _pSLint16_Type; 61 typedef unsigned int _pSLuint16_Type; 62 #else 63 # if SIZEOF_SHORT == 2 64 # define _pSLANG_INT16_TYPE SLANG_SHORT_TYPE 65 # define _pSLANG_UINT16_TYPE SLANG_USHORT_TYPE 66 typedef short _pSLint16_Type; 67 typedef unsigned short _pSLuint16_Type; 68 # else 69 # if SIZEOF_LONG == 2 70 # define _pSLANG_INT16_TYPE SLANG_LONG_TYPE 71 # define _pSLANG_UINT16_TYPE SLANG_ULONG_TYPE 72 typedef long _pSLInt16_Type; 73 typedef unsigned long _pSLuint16_Type; 74 # else 75 # define _pSLANG_INT16_TYPE 0 76 # define _pSLANG_UINT16_TYPE 0 77 # endif 78 # endif 79 #endif 80 81 #if SIZEOF_INT == 4 82 # define _pSLANG_INT32_TYPE SLANG_INT_TYPE 83 # define _pSLANG_UINT32_TYPE SLANG_UINT_TYPE 84 typedef int _pSLint32_Type; 85 typedef unsigned int _pSLuint32_Type; 86 #else 87 # if SIZEOF_SHORT == 4 88 # define _pSLANG_INT32_TYPE SLANG_SHORT_TYPE 89 # define _pSLANG_UINT32_TYPE SLANG_USHORT_TYPE 90 typedef short _pSLInt32_Type; 91 typedef unsigned short _pSLuint32_Type; 92 # else 93 # if SIZEOF_LONG == 4 94 # define _pSLANG_INT32_TYPE SLANG_LONG_TYPE 95 # define _pSLANG_UINT32_TYPE SLANG_ULONG_TYPE 96 typedef long _pSLInt32_Type; 97 typedef unsigned long _pSLuint32_Type; 98 # else 99 # define _pSLANG_INT32_TYPE 0 100 # define _pSLANG_UINT32_TYPE 0 101 # endif 102 # endif 103 #endif 104 105 #if SIZEOF_INT == 8 106 # define _pSLANG_INT64_TYPE SLANG_INT_TYPE 107 # define _pSLANG_UINT64_TYPE SLANG_UINT_TYPE 108 typedef int _pSLint64_Type; 109 typedef unsigned int _pSLuint64_Type; 110 #else 111 # if SIZEOF_SHORT == 8 112 # define _pSLANG_INT64_TYPE SLANG_SHORT_TYPE 113 # define _pSLANG_UINT64_TYPE SLANG_USHORT_TYPE 114 typedef int _pSLint64_Type; 115 typedef unsigned int _pSLuint64_Type; 116 # else 117 # if SIZEOF_LONG == 8 118 # define _pSLANG_INT64_TYPE SLANG_LONG_TYPE 119 # define _pSLANG_UINT64_TYPE SLANG_ULONG_TYPE 120 typedef long _pSLint64_Type; 121 typedef unsigned long _pSLuint64_Type; 122 # else 123 # if SIZEOF_LONG_LONG == 8 124 # define _pSLANG_INT64_TYPE SLANG_LLONG_TYPE 125 # define _pSLANG_UINT64_TYPE SLANG_ULLONG_TYPE 126 typedef long long _pSLint64_Type; 127 typedef unsigned long long _pSLuint64_Type; 128 # else 129 # define _pSLANG_INT64_TYPE 0 130 # define _pSLANG_UINT64_TYPE 0 131 # endif 132 # endif 133 # endif 134 #endif 135 136 /* The following are commented out because they are not used by the library */ 137 /* extern int _pSLang_pop_int16 (_pSLint16_Type *); */ 138 /* extern int _pSLang_pop_uint16 (_pSLuint16_Type *); */ 139 /* extern int _pSLang_pop_int32 (_pSLint32_Type *); */ 140 /* extern int _pSLang_pop_uint32 (_pSLuint32_Type *); */ 141 #if _pSLANG_INT64_TYPE 142 extern int _pSLang_pop_int64(_pSLint64_Type *); 143 extern int _pSLang_pop_uint64 (_pSLuint64_Type *); 144 #endif 145 /* extern int _pSLang_push_int16 (_pSLint16_Type); */ 146 /* extern int _pSLang_push_uint16 (_pSLuint16_Type); */ 147 /* extern int _pSLang_push_int32 (_pSLint32_Type); */ 148 /* extern int _pSLang_push_uint32 (_pSLuint32_Type); */ 149 #if _pSLANG_INT64_TYPE 150 /* extern int _pSLang_push_int64(_pSLint64_Type); */ 151 /* extern int _pSLang_push_uint64 (_pSLuint64_Type); */ 152 #endif 153 154 #ifdef HAVE_LONG_LONG 155 # ifdef __WIN32__ 156 # define SLFMT_LLD "%I64d" 157 # define SLFMT_LLU "%I64u" 158 # else 159 # define SLFMT_LLD "%lld" 160 # define SLFMT_LLU "%llu" 161 # endif 162 #endif 163 164 #endif /* PRIVATE_SLINT_H_ */ 165