preliminary Win32 support added
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index 5d40c57..321915e 100644 (file)
--- a/ast_t.h
+++ b/ast_t.h
@@ -12,7 +12,8 @@
 extern struct obstack ast_obstack;
 
 typedef enum {
-       EXPR_INVALID = 0,
+       EXPR_UNKNOWN = 0,
+       EXPR_INVALID,
        EXPR_REFERENCE,
        EXPR_CONST,
        EXPR_STRING_LITERAL,
@@ -73,7 +74,7 @@ struct call_argument_t {
 
 struct call_expression_t {
        expression_t     expression;
-       expression_t    *method;
+       expression_t    *function;
        call_argument_t *arguments;
 };
 
@@ -203,7 +204,8 @@ typedef enum {
        NAMESPACE_NORMAL,
        NAMESPACE_STRUCT,
        NAMESPACE_UNION,
-       NAMESPACE_ENUM
+       NAMESPACE_ENUM,
+       NAMESPACE_LABEL
 } namespace_t;
 
 typedef enum {
@@ -222,8 +224,10 @@ struct initializer_t {
 };
 
 struct declaration_t {
-       unsigned short      namespace;
-       unsigned short      storage_class;
+       unsigned char       namespace;
+       unsigned char       storage_class;
+       unsigned int        address_taken : 1;
+       unsigned int        is_inline     : 1;
        type_t             *type;
        symbol_t           *symbol;
        source_position_t   source_position;
@@ -236,11 +240,16 @@ struct declaration_t {
        context_t          *parent_context;
 
        /** next declaration in a context */
-       declaration_t      *context_next;
-       /** next declaration with same symbol */
        declaration_t      *next;
+       /** next declaration with same symbol */
+       declaration_t      *symbol_next;
 
-       ir_entity          *entity;
+       unsigned char       declaration_type; /* used in ast2firm module */
+       union {
+               unsigned int    value_number;     /* used in ast2firm module */
+               ir_entity      *entity;           /* used in ast2firm module */
+               ir_node        *block;            /* used in ast2firm module */
+       } v;
 };
 
 typedef enum {
@@ -282,9 +291,6 @@ struct declaration_statement_t {
        statement_t    statement;
        declaration_t *declarations_begin;
        declaration_t *declarations_end;
-
-       int            value_number; /**< filled in by semantic phase */
-       int            refs;
 };
 
 struct if_statement_t {
@@ -301,9 +307,8 @@ struct switch_statement_t {
 };
 
 struct goto_statement_t {
-       statement_t        statement;
-       symbol_t          *label_symbol;
-       label_statement_t *label;
+       statement_t    statement;
+       declaration_t *label;
 };
 
 struct case_label_statement_t {
@@ -312,8 +317,9 @@ struct case_label_statement_t {
 };
 
 struct label_statement_t {
-       statement_t        statement;
-       symbol_t          *symbol;
+       statement_t    statement;
+       declaration_t *label;
+       statement_t   *label_statement;
 };
 
 struct expression_statement_t {