support for pointer add/sub, no need for type_environment in ast2firm
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index 9778d36..6b922bc 100644 (file)
--- a/ast_t.h
+++ b/ast_t.h
@@ -1,6 +1,8 @@
 #ifndef AST_T_H
 #define AST_T_H
 
+#include <libfirm/firm_types.h>
+
 #include "ast.h"
 #include "symbol.h"
 #include "token_t.h"
@@ -32,9 +34,6 @@ typedef enum {
 
 struct context_t {
        declaration_t   *declarations;
-       compound_type_t *structs;
-       compound_type_t *unions;
-       enum_type_t     *enums;
 };
 
 struct expression_t {
@@ -74,7 +73,7 @@ struct call_argument_t {
 
 struct call_expression_t {
        expression_t     expression;
-       expression_t    *method;
+       expression_t    *function;
        call_argument_t *arguments;
 };
 
@@ -200,6 +199,13 @@ typedef enum {
        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,
@@ -216,15 +222,30 @@ struct initializer_t {
 };
 
 struct declaration_t {
-       storage_class_t     storage_class;
+       unsigned char       namespace;
+       unsigned char       storage_class;
+       unsigned int        address_taken : 1;
        type_t             *type;
        symbol_t           *symbol;
-       statement_t        *statement;
-       initializer_t      *initializer;
        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;
 };
 
 typedef enum {
@@ -266,9 +287,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 {