-/**
- * Extended microsoft modifier.
- */
-typedef enum decl_modifier_t {
- DM_DLLIMPORT = 1 << 0,
- DM_DLLEXPORT = 1 << 1,
- DM_THREAD = 1 << 2,
- DM_NAKED = 1 << 3,
- DM_MICROSOFT_INLINE = 1 << 4,
- DM_FORCEINLINE = 1 << 5,
- DM_SELECTANY = 1 << 6,
- DM_NOTHROW = 1 << 7,
- DM_NOVTABLE = 1 << 8,
- DM_NORETURN = 1 << 9,
- DM_NOINLINE = 1 << 10,
- DM_RESTRICT = 1 << 11,
- DM_NOALIAS = 1 << 12,
- DM_PACKED = 1 << 13,
- DM_TRANSPARENT_UNION = 1 << 14,
- DM_PURE = 1 << 15,
- DM_CONSTRUCTOR = 1 << 16,
- DM_DESTRUCTOR = 1 << 17,
- DM_UNUSED = 1 << 18,
- DM_USED = 1 << 19,
- DM_CDECL = 1 << 20,
- DM_FASTCALL = 1 << 21,
- DM_STDCALL = 1 << 22,
- DM_THISCALL = 1 << 23,
- DM_DEPRECATED = 1 << 24
-} decl_modifier_t;
-
-typedef unsigned decl_modifiers_t;
-
-struct declaration_t {
- unsigned char namespc;
- unsigned char declared_storage_class;
- unsigned char storage_class;
- unsigned char alignment; /**< Alignment of the declaration, 0 for default. */
- decl_modifiers_t modifiers; /**< modifiers. */
- const char *deprecated_string; /**< MS deprecated string if any. */
- symbol_t *get_property_sym; /**< MS get property. */
- symbol_t *put_property_sym; /**< MS put property. */
- unsigned int address_taken : 1; /**< Set if the address of this declaration was taken. */
- unsigned int is_inline : 1;
- unsigned int used : 1; /**< Set if the declaration is used. */
- unsigned int implicit : 1; /**< Set for implicit (not found in source code) declarations. */
- type_t *type;
- il_size_t offset; /**< The offset of this member inside a compound. */
- symbol_t *symbol;
- string_t *asm_name; /**< GCC extension: ASM label. */
- source_position_t source_position;
- union {
- bool complete; /**< used to indicate whether struct/union types are already defined or if just the name is declared */
- statement_t *statement;
- initializer_t *initializer;
- expression_t *enum_value;
- } init;
- scope_t scope; /**< The scope that this declaration opens. */
- scope_t *parent_scope; /**< The parent scope where this declaration lives. */
-
- /** next declaration in a scope */
- declaration_t *next;
- /** next declaration with same symbol */
- declaration_t *symbol_next;
-
- /* the following fields are used in ast2firm module */
- unsigned char declaration_kind;
- union {
- unsigned int value_number;
- ir_entity *entity;
- ir_node *block;
- ir_node *vla_base;
- tarval *enum_val;
- ir_type *irtype;
- } v;
-};
-