flitter/data/cpp_stdlib/macros.h
2018-05-26 12:40:09 +09:00

137 lines
4.4 KiB
C

// ****************************************************************************
// Prelude
// ****************************************************************************
// This file must be passed to the -macros option of the C/C++ parsers in pfff.
// It should be stored as a default in Flag_parsing_cpp.macros_h
// ****************************************************************************
// MacroString
// ****************************************************************************
/* String macros are normally handled quite well by the LALR(k) technique,
* but sometimes it's not enough. For instance with 'XX YY', it could
* be considered as a declaration with XX being a typedef, so we would
* have an ambiguity. So by adding a few special cases (e.g. KERN_WARNING
* for the linux kernel), we can catch more string-macros. The idea is
* that we need to have at least one witness, a string to recognize
* a sequence of strings.
*/
//ex: #define KERN_WARNING "WARNING"
/* EX_TABLE & co.
*
* Replaced by a string. We can't put everything as comment
* because it can be part of an expression where we wait for
* something, where we wait for a string. So at least we
* must keep the EX_TABLE token and transform it as a string.
*
* normally not needed if have good stringification of macro
* but those macros are sometimes used multiple times
* as in EX_TABLE(0b) EX_TABLE(1b) and we don't detect
* it well yet.
*/
//ex: #define EX_TABLE(x) "TOTO"
// ****************************************************************************
// MacroIterator
// ****************************************************************************
// foreach
#define FOR_EACH(a,b) for(;;)
// ****************************************************************************
// MacroDeclarator
// ****************************************************************************
// static DECLARATOR(x);
// LIST_HEAD stuff
// (used in qemu, freebsd)
// ****************************************************************************
// MacroStmt
// ****************************************************************************
// with or without parameters, but no ';'
// ****************************************************************************
// MacroField
// ****************************************************************************
// ****************************************************************************
// MacroInitializer
// ****************************************************************************
// no PTVirg or shortcut for array designator
// ****************************************************************************
// MacroAttributes
// ****************************************************************************
//ex: #define __init YACFE_ATTRIBUTE
// TODO: could perhaps generalize via "__.*"
// linkage
// params (IN, OUT)
// windows: WINAPI, STDCALL, ...
#define WINAPI
#define __cdecl
// ****************************************************************************
// MacroKeywordAlias
// ****************************************************************************
// const, often defined via macro for backward compatibility with old compiler
// I guess.
// private/public
#define __asm__ asm
#define __attribute __attribute__
#define __volatile__ volatile
#define __restrict __restrict__
#define CONST const
// for xv6
#define __asm asm
#define __volatile volatile
// ****************************************************************************
// Prototype
// ****************************************************************************
// __P
// PARAMS
// ****************************************************************************
// Declarator
// ****************************************************************************
/* cf gcc-linux.h
* A trick to suppress uninitialized variable warning without generating any
* code
*/
// #define uninitialized_var(x) x = x
// as in u16 uninitialized_var(ioboard_type); /* GCC be quiet */
// ****************************************************************************
// Misc
// ****************************************************************************
// LIST_HEAD
// GENTEST, GENHEADER
// structure
// MACHINE_START
// higher order, ASSERTCMP
// parts of stuff, start of stuff
// begin end wierd, as in C++ firefox and NS_DECLARE_BEGIN/END with code in
// the middle
// testcase, reflexivity on name
// IDENT in sparse, wierd case
// if-like macros
//#define G_BEGIN_DECLS