-struct comma_expression_t {
- expression_t expression;
- expression_list_element_t *expressions;
+typedef enum {
+ STORAGE_CLASS_NONE,
+ STORAGE_CLASS_TYPEDEF,
+ STORAGE_CLASS_EXTERN,
+ STORAGE_CLASS_STATIC,
+ STORAGE_CLASS_AUTO,
+ STORAGE_CLASS_REGISTER,
+ STORAGE_CLASS_ENUM_ENTRY
+} storage_class_t;
+
+typedef enum {
+ NAMESPACE_NORMAL,
+ NAMESPACE_STRUCT,
+ NAMESPACE_UNION,
+ NAMESPACE_ENUM
+} namespace_t;
+
+typedef enum {
+ INITIALIZER_VALUE,
+ INITIALIZER_LIST,
+} initializer_type_t;
+
+struct initializer_t {
+ initializer_type_t type;
+ designator_t *designator;
+ union {
+ initializer_t *list;
+ expression_t *value;
+ } v;
+ initializer_t *next;
+};
+
+struct declaration_t {
+ unsigned char namespace;
+ unsigned char storage_class;
+ unsigned int address_taken : 1;
+ type_t *type;
+ symbol_t *symbol;
+ source_position_t source_position;
+ union {
+ bool is_defined;
+ statement_t *statement;
+ initializer_t *initializer;
+ } init;
+ context_t context;
+ context_t *parent_context;
+
+ /** next declaration in a context */
+ declaration_t *next;
+ /** next declaration with same symbol */
+ declaration_t *symbol_next;
+
+ unsigned char declaration_type; /* used in ast2firm module */
+ union {
+ unsigned int value_number; /* used in ast2firm module */
+ ir_entity *entity; /* used in ast2firm module */
+ } v;