Allow windows users to include hammer.h
We substitute H_GCC_ATTRIBUTE to any occurence of __attribute__ and disable its function with non gcc, non clang compilers. We use a H_ macro so as to not pollute users' namespaces. On windows build without c4201 so as to allow anonymous struct. This shows hammer is not C99 compliant but rather C11.
This commit is contained in:
parent
e7620e3e4b
commit
6b9ba6033e
2 changed files with 13 additions and 3 deletions
13
src/hammer.h
13
src/hammer.h
|
|
@ -17,6 +17,13 @@
|
|||
|
||||
#ifndef HAMMER_HAMMER__H
|
||||
#define HAMMER_HAMMER__H
|
||||
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#define H_GCC_ATTRIBUTE(x) __attribute__(x)
|
||||
#else
|
||||
#define H_GCC_ATTRIBUTE(x)
|
||||
#endif
|
||||
|
||||
#ifndef HAMMER_INTERNAL__NO_STDARG_H
|
||||
#include <stdarg.h>
|
||||
#endif // HAMMER_INTERNAL__NO_STDARG_H
|
||||
|
|
@ -434,7 +441,7 @@ HAMMER_FN_DECL_NOARG(HParser*, h_nothing_p);
|
|||
*
|
||||
* Result token type: TT_SEQUENCE
|
||||
*/
|
||||
HAMMER_FN_DECL_VARARGS_ATTR(__attribute__((sentinel)), HParser*, h_sequence, HParser* p);
|
||||
HAMMER_FN_DECL_VARARGS_ATTR(H_GCC_ATTRIBUTE((sentinel)), HParser*, h_sequence, HParser* p);
|
||||
|
||||
/**
|
||||
* Given an array of parsers, p_array, apply each parser in order. The
|
||||
|
|
@ -443,7 +450,7 @@ HAMMER_FN_DECL_VARARGS_ATTR(__attribute__((sentinel)), HParser*, h_sequence, HPa
|
|||
*
|
||||
* Result token type: The type of the first successful parser's result.
|
||||
*/
|
||||
HAMMER_FN_DECL_VARARGS_ATTR(__attribute__((sentinel)), HParser*, h_choice, HParser* p);
|
||||
HAMMER_FN_DECL_VARARGS_ATTR(H_GCC_ATTRIBUTE((sentinel)), HParser*, h_choice, HParser* p);
|
||||
|
||||
/**
|
||||
* Given a null-terminated list of parsers, match a permutation phrase of these
|
||||
|
|
@ -469,7 +476,7 @@ HAMMER_FN_DECL_VARARGS_ATTR(__attribute__((sentinel)), HParser*, h_choice, HPars
|
|||
*
|
||||
* Result token type: TT_SEQUENCE
|
||||
*/
|
||||
HAMMER_FN_DECL_VARARGS_ATTR(__attribute__((sentinel)), HParser*, h_permutation, HParser* p);
|
||||
HAMMER_FN_DECL_VARARGS_ATTR(H_GCC_ATTRIBUTE((sentinel)), HParser*, h_permutation, HParser* p);
|
||||
|
||||
/**
|
||||
* Given two parsers, p1 and p2, this parser succeeds in the following
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@ set WARNINGS=%WARNINGS% -wd4200
|
|||
REM c4204 (non-constant aggregate initializers) ressembles C99 support
|
||||
set WARNINGS=%WARNINGS% -wd4204
|
||||
|
||||
REM c4201 (anonymous unions) ressembles C11 support
|
||||
set WARNINGS=%WARNINGS% -wd4201
|
||||
|
||||
REM c4820 (warnings about padding) is not useful
|
||||
set WARNINGS=%WARNINGS% -wd4820
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue