From: Dale Weiler Date: Fri, 29 Nov 2013 18:13:39 +0000 (-0500) Subject: cleanup X-Git-Tag: xonotic-v0.8.0~47 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=4583cb8280dacaf514fcf5f1666663808180eae4;p=xonotic%2Fgmqcc.git cleanup --- diff --git a/gmqcc.h b/gmqcc.h index bf506ff..aa6f995 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -25,27 +25,14 @@ #define GMQCC_HDR #include #include -#include /* TODO: remove?*/ - -/* - * Disable some over protective warnings in visual studio because fixing them is a waste - * of my time. - */ -#ifdef _MSC_VER -# pragma warning(disable : 4244 ) /* conversion from 'int' to 'float', possible loss of data */ -#endif /*! _MSC_VER */ +#include #define GMQCC_VERSION_MAJOR 0 #define GMQCC_VERSION_MINOR 3 #define GMQCC_VERSION_PATCH 6 -#define GMQCC_VERSION_BUILD(J,N,P) (((J)<<16)|((N)<<8)|(P)) -#define GMQCC_VERSION \ - GMQCC_VERSION_BUILD(GMQCC_VERSION_MAJOR, GMQCC_VERSION_MINOR, GMQCC_VERSION_PATCH) -/* Undefine the following on a release-tag: */ -#define GMQCC_VERSION_TYPE_DEVEL - -/* Full version string in case we need it */ -#ifdef GMQCC_VERSION_TYPE_DEVEL +#define GMQCC_VERSION ((GMQCC_VERSION_MAJOR<<16)|(GMQCC_VERSION_MINOR<<8)|GMQCC_VERSION_PATCH) + +#ifdef GMQCC_VERSION_TYPE_RELEASE # ifdef GMQCC_GITINFO # define GMQCC_DEV_VERSION_STRING "git build: " GMQCC_GITINFO "\n" # elif defined(GMQCC_VERSION_TYPE_DEVEL) @@ -67,125 +54,47 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \ " Built " __DATE__ " " __TIME__ \ "\n" GMQCC_DEV_VERSION_STRING -/* - * We cannot rely on C99 at all, since compilers like MSVC - * simply don't support it. We define our own boolean type - * as a result (since we cannot include ). For - * compilers that are in 1999 mode (C99 compliant) we can use - * the language keyword _Bool which can allow for better code - * on GCC and GCC-like compilers, opposed to `int`. - */ #ifndef __cplusplus -# ifdef false -# undef false -# endif /*! false */ -# ifdef true -# undef true -# endif /*! true */ -# define false (unsigned)(0) -# define true (unsigned)(1) -# ifdef __STDC_VERSION__ -# if __STDC_VERSION__ < 199901L && __GNUC__ < 3 - typedef int bool; -# else - typedef _Bool bool; -# endif /*! __STDC_VERSION__ < 199901L && __GNUC__ < 3 */ -# else - typedef int bool; -# endif /*! __STDC_VERSION__ */ -#endif /*! __cplusplus */ - -/* - * Of some functions which are generated we want to make sure - * that the result isn't ignored. To find such function calls, - * we use this macro. - */ -#if defined(__GNUC__) || defined(__CLANG__) -# define GMQCC_WARN __attribute__((warn_unused_result)) -# define GMQCC_USED __attribute__((used)) -#else -# define GMQCC_WARN -# define GMQCC_USED -#endif /*! defined(__GNUC__) || defined (__CLANG__) */ - -/* - * Inline is not supported in < C90, however some compilers - * like gcc and clang might have an inline attribute we can - * use if present. - */ -#ifdef __STDC_VERSION__ -# if __STDC_VERSION__ < 199901L -# if defined(__GNUC__) || defined (__CLANG__) -# if __GNUC__ < 2 -# define GMQCC_INLINE -# else -# define GMQCC_INLINE __attribute__ ((always_inline)) -# endif /*! __GNUC__ < 2 */ -# else -# define GMQCC_INLINE -# endif /*! defined(__GNUC__) || defined (__CLANG__) */ -# else -# define GMQCC_INLINE inline -# endif /*! __STDC_VERSION < 199901L */ -/* - * Visual studio has __forcinline we can use. So lets use that - * I suspect it also has just __inline of some sort, but our use - * of inline is correct (not guessed), WE WANT IT TO BE INLINE - */ -#elif defined(_MSC_VER) -# define GMQCC_INLINE __forceinline -#else -# define GMQCC_INLINE -#endif /*! __STDC_VERSION__ */ - -/* - * noreturn is present in GCC and clang - * it's required for _ast_node_destory otherwise -Wmissing-noreturn - * in clang complains about there being no return since abort() is - * called. - */ -#if (defined(__GNUC__) && __GNUC__ >= 2) || defined(__CLANG__) -# define GMQCC_NORETURN __attribute__ ((noreturn)) -#else -# define GMQCC_NORETURN -#endif /*! (defined(__GNUC__) && __GNUC__ >= 2) || defined (__CLANG__) */ +# define false (unsigned char)(0) +# define true (unsigned char)(1) + typedef unsigned char bool; +#endif #if defined(__GNUC__) || defined(__CLANG__) +# include +# if (__GNUC__ >= 2) || defined(__CLANG__) +# define GMQCC_NORETURN __attribute__((noreturn)) +# define GMQCC_FORCEINLINE __attribute__((always_inline)) +# define GMQCC_INLINE __inline +# endif # define GMQCC_LIKELY(X) __builtin_expect((X), 1) # define GMQCC_UNLIKELY(X) __builtin_expect((X), 0) +# define GMQCC_WARN __attribute__((warn_unused_result)) +# define GMQCC_USED __attribute__((used)) +# define GMQCC_RESTRICT __restrict__ #else +# ifdef _MSC_VER + /* conversion from 'int' to 'float', possible loss of data */ +# pragma warning(disable : 4244 ) + + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; +# define GMQCC_NORETURN __declspec(noreturn) +# define GMQCC_FORCEINLINE __forceinline +# define GMQCC_INLINE __inline +# define GMQCC_RESTRICT __restrict +# endif # define GMQCC_LIKELY(X) (X) # define GMQCC_UNLIKELY(X) (X) +# define GMQCC_WARN +# define GMQCC_USED #endif -#if defined(__GNUC__) || defined(__CLANG__) -# define GMQCC_RESTRICT __restrict__ -#elif defined(__MSC_VER) -# define GMQCC_RESTRICT __restrict -#else -# define GMQCC_RESTRICT -#endif - -#define GMQCC_ARRAY_COUNT(X) (sizeof(X) / sizeof((X)[0])) - -#ifndef _MSC_VER -# include -#else - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; - typedef unsigned __int64 uint64_t; - - typedef __int16 int16_t; - typedef __int32 int32_t; - typedef __int64 int64_t; -#endif /*! _MSC_VER */ - -/* - * Very roboust way at determining endianess at compile time: this handles - * almost every possible situation. Otherwise a runtime check has to be - * performed. - */ #define GMQCC_BYTE_ORDER_LITTLE 1234 #define GMQCC_BYTE_ORDER_BIG 4321 @@ -259,7 +168,9 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \ # else # define PLATFORM_BYTE_ORDER -1 # endif -#endif /*! !defined (PLATFORM_BYTE_ORDER) */ +#endif + +#define GMQCC_ARRAY_COUNT(X) (sizeof(X) / sizeof((X)[0])) /* stat.c */ void stat_info (void); diff --git a/lexer.c b/lexer.c index 068b4dc..d153459 100644 --- a/lexer.c +++ b/lexer.c @@ -579,7 +579,7 @@ static int lex_skipwhite(lex_file *lex, bool hadwhite) if (ch == '\n') lex_tokench(lex, '\n'); else - lex_tokench(lex, ' '); /* ch); */ + lex_tokench(lex, ' '); } } ch = ' '; /* cause TRUE in the isspace check */ diff --git a/lexer.h b/lexer.h index ee9be17..3f4949d 100644 --- a/lexer.h +++ b/lexer.h @@ -22,6 +22,8 @@ */ #ifndef GMQCC_LEXER_HDR #define GMQCC_LEXER_HDR +#include "gmqcc.h" + typedef struct token_s token; struct token_s { diff --git a/stat.c b/stat.c index 6987cf7..eedb0a4 100644 --- a/stat.c +++ b/stat.c @@ -402,7 +402,7 @@ typedef struct hash_node_t { */ #if 1 #define GMQCC_ROTL32(X, R) (((X) << (R)) | ((X) >> (32 - (R)))) -GMQCC_INLINE size_t util_hthash(hash_table_t *ht, const char *key) { +size_t util_hthash(hash_table_t *ht, const char *key) { const unsigned char *data = (const unsigned char *)key; const size_t len = strlen(key); const size_t block = len / 4; diff --git a/util.c b/util.c index e9d4cfe..de0c77f 100644 --- a/util.c +++ b/util.c @@ -499,7 +499,7 @@ uint16_t util_crc16(uint16_t current, const char *GMQCC_RESTRICT k, size_t len) * modifier is the match to make and the transposition from it, while add is the upper-value that determines the * transposition from uppercase to lower case. */ -static GMQCC_INLINE size_t util_strtransform(const char *in, char *out, size_t outsz, const char *mod, int add) { +static size_t util_strtransform(const char *in, char *out, size_t outsz, const char *mod, int add) { size_t sz = 1; for (; *in && sz < outsz; ++in, ++out, ++sz) { *out = (*in == mod[0])