make it compile
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index 415bbc6..fabd945 100644 (file)
--- a/ast_t.h
+++ b/ast_t.h
@@ -42,10 +42,7 @@ struct reference_expression_t {
        expression_t                      expression;
        symbol_t                         *symbol;
        union {
-               variable_declaration_statement_t *variable;
-               method_t                         *method;
-               global_variable_t                *global_variable;
-               method_parameter_t               *method_parameter;
+               declaration_t    *declaration;
        } r;
 };
 
@@ -63,6 +60,7 @@ struct call_expression_t {
 typedef enum {
        UNEXPR_INVALID = 0,
        UNEXPR_NEGATE,
+       UNEXPR_PLUS,
        UNEXPR_BITWISE_NEGATE,
        UNEXPR_NOT,
        UNEXPR_DEREFERENCE,
@@ -95,7 +93,7 @@ typedef enum {
        BINEXPR_GREATEREQUAL,
        BINEXPR_BITWISE_AND,
        BINEXPR_BITWISE_OR,
-       BINEXPR_BITWSIE_XOR,
+       BINEXPR_BITWISE_XOR,
        BINEXPR_LOGICAL_AND,
        BINEXPR_LOGICAL_OR,
        BINEXPR_SHIFTLEFT,
@@ -159,11 +157,36 @@ struct comma_expression_t {
        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_t;
+
+struct method_parameter_t {
+       method_parameter_t *next;
+       symbol_t           *symbol;
+       type_t             *type;
+       int                 num;
+};
+
+struct declaration_t {
+       storage_class_t     storage_class;
+       type_t             *type;
+       symbol_t           *symbol;
+       method_parameter_t *parameters;
+       statement_t        *statement;
+       source_position_t   source_position;
+};
+
 typedef enum {
        STATEMENT_INVALID,
        STATEMENT_BLOCK,
        STATEMENT_RETURN,
-       STATEMENT_VARIABLE_DECLARATION,
+       STATEMENT_DECLARATION,
        STATEMENT_IF,
        STATEMENT_EXPRESSION,
        STATEMENT_GOTO,
@@ -186,13 +209,12 @@ struct block_statement_t {
        statement_t *first_statement;
 };
 
-struct variable_declaration_statement_t {
-       statement_t  statement;
-       type_t      *type;
-       symbol_t    *symbol;
+struct declaration_statement_t {
+       statement_t    statement;
+       declaration_t  declaration;
 
-       int          value_number; /**< filled in by semantic phase */
-       int          refs;
+       int            value_number; /**< filled in by semantic phase */
+       int            refs;
 };
 
 struct if_statement_t {
@@ -218,42 +240,13 @@ struct expression_statement_t {
        expression_t *expression;
 };
 
-enum namespace_entry_type_t {
-       NAMESPACE_ENTRY_INVALID,
-       NAMESPACE_ENTRY_METHOD,
-       NAMESPACE_ENTRY_VARIABLE,
-};
-
-struct namespace_entry_t {
-       namespace_entry_type_t  type;
-       namespace_entry_t      *next;
-       source_position_t       source_position;
-};
-
-struct method_parameter_t {
-       method_parameter_t *next;
-       symbol_t           *symbol;
-       type_t             *type;
-       int                 num;
-};
-
-struct method_t {
-       namespace_entry_t   namespace_entry;
-       symbol_t           *symbol;
-       method_type_t      *type;
-       method_parameter_t *parameters;
-
-       statement_t        *statement;
-};
-
-struct global_variable_t {
-       namespace_entry_t  namespace_entry;
-       symbol_t          *symbol;
-       type_t            *type;
+struct unit_entry_t {
+       declaration_t  declaration;
+       unit_entry_t  *next;
 };
 
-struct namespace_t {
-       namespace_entry_t *entries;
+struct translation_unit_t {
+       unit_entry_t *entries;
 };
 
 static inline