2 * This file is part of cparser.
3 * Copyright (C) 2012 Matthias Braun <matze@braunis.de>
15 typedef enum attribute_kind_t {
19 ATTRIBUTE_GNU_ALIAS = ATTRIBUTE_GNU_FIRST,
20 ATTRIBUTE_GNU_ALIGNED,
21 ATTRIBUTE_GNU_ALWAYS_INLINE,
26 ATTRIBUTE_GNU_CONSTRUCTOR,
27 ATTRIBUTE_GNU_DEPRECATED,
28 ATTRIBUTE_GNU_DESTRUCTOR,
29 ATTRIBUTE_GNU_DLLEXPORT,
30 ATTRIBUTE_GNU_DLLIMPORT,
31 ATTRIBUTE_GNU_EIGTHBIT_DATA,
32 ATTRIBUTE_GNU_EXTERNALLY_VISIBLE,
34 ATTRIBUTE_GNU_FASTCALL,
35 ATTRIBUTE_GNU_FLATTEN,
37 ATTRIBUTE_GNU_FORMAT_ARG,
38 ATTRIBUTE_GNU_FUNCTION_VECTOR,
39 ATTRIBUTE_GNU_GCC_STRUCT,
40 ATTRIBUTE_GNU_INTERRUPT,
41 ATTRIBUTE_GNU_INTERRUPT_HANDLER,
43 ATTRIBUTE_GNU_LONGCALL,
44 ATTRIBUTE_GNU_LONG_CALL,
46 ATTRIBUTE_GNU_MAY_ALIAS,
49 ATTRIBUTE_GNU_MS_STRUCT,
52 ATTRIBUTE_GNU_NESTING,
53 ATTRIBUTE_GNU_NMI_HANDLER,
54 ATTRIBUTE_GNU_NOCOMMON,
55 ATTRIBUTE_GNU_NOINLINE,
56 ATTRIBUTE_GNU_NO_INSTRUMENT_FUNCTION,
57 ATTRIBUTE_GNU_NONNULL,
58 ATTRIBUTE_GNU_NORETURN,
59 ATTRIBUTE_GNU_NOTHROW,
60 ATTRIBUTE_GNU_NOTSHARED,
63 ATTRIBUTE_GNU_REGPARM,
64 ATTRIBUTE_GNU_RETURNS_TWICE,
65 ATTRIBUTE_GNU_RETURN_TWICE,
66 ATTRIBUTE_GNU_SAVEALL,
67 ATTRIBUTE_GNU_SECTION,
68 ATTRIBUTE_GNU_SENTINEL,
70 ATTRIBUTE_GNU_SHORTCALL,
71 ATTRIBUTE_GNU_SHORT_CALL,
73 ATTRIBUTE_GNU_SP_SWITCH,
74 ATTRIBUTE_GNU_SSEREGPARM,
75 ATTRIBUTE_GNU_STDCALL,
76 ATTRIBUTE_GNU_TINY_DATA,
77 ATTRIBUTE_GNU_TLS_MODEL,
78 ATTRIBUTE_GNU_TRANSPARENT_UNION,
79 ATTRIBUTE_GNU_TRAP_EXIT,
82 ATTRIBUTE_GNU_VISIBILITY,
83 ATTRIBUTE_GNU_VOLATILE,
84 ATTRIBUTE_GNU_WARN_UNUSED_RESULT,
86 ATTRIBUTE_GNU_WEAKREF,
87 ATTRIBUTE_GNU_LAST = ATTRIBUTE_GNU_WEAKREF,
89 ATTRIBUTE_MS_ALIGN = ATTRIBUTE_MS_FIRST,
90 ATTRIBUTE_MS_ALLOCATE,
93 ATTRIBUTE_MS_DEPRECATED,
94 ATTRIBUTE_MS_DLLEXPORT,
95 ATTRIBUTE_MS_DLLIMPORT,
96 ATTRIBUTE_MS_FASTCALL,
97 ATTRIBUTE_MS_FORCEINLINE,
100 ATTRIBUTE_MS_NOINLINE,
101 ATTRIBUTE_MS_NORETURN,
102 ATTRIBUTE_MS_NOTHROW,
103 ATTRIBUTE_MS_NOVTABLE,
104 ATTRIBUTE_MS_PROPERTY,
105 ATTRIBUTE_MS_RESTRICT,
106 ATTRIBUTE_MS_RETURNS_TWICE,
107 ATTRIBUTE_MS_SELECTANY,
108 ATTRIBUTE_MS_STDCALL,
109 ATTRIBUTE_MS_THISCALL,
112 ATTRIBUTE_MS_LAST = ATTRIBUTE_MS_UUID,
113 ATTRIBUTE_LAST = ATTRIBUTE_MS_LAST
116 typedef enum attribute_argument_kind_t {
117 ATTRIBUTE_ARGUMENT_SYMBOL,
118 ATTRIBUTE_ARGUMENT_EXPRESSION
119 } attribute_argument_kind_t;
121 /** this argument type should be fine for 99% of the arguments */
122 typedef struct attribute_argument_t attribute_argument_t;
123 struct attribute_argument_t {
124 attribute_argument_t *next;
125 attribute_argument_kind_t kind;
128 expression_t *expression;
132 typedef struct attribute_property_argument_t attribute_property_argument_t;
133 struct attribute_property_argument_t {
134 symbol_t *put_symbol;
135 symbol_t *get_symbol;
141 attribute_kind_t kind; /**< The kind of the GNU attribute. */
143 attribute_argument_t *arguments;
144 attribute_property_argument_t *property;
148 const char *get_attribute_name(attribute_kind_t kind);
150 bool attributes_equal(const attribute_t *attr1, const attribute_t *attr2);