X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=entity_t.h;h=03cfd7ad8696777370b24b61b00518813d247a7a;hb=f5a32d212adb7b0e23b0bc6bbb3043b230dbc24d;hp=7c54b353d4f5f8905e03165d9395999994d705c4;hpb=5415928cc4c29c1754b6562bad26ab7d7f23882d;p=cparser diff --git a/entity_t.h b/entity_t.h index 7c54b35..03cfd7a 100644 --- a/entity_t.h +++ b/entity_t.h @@ -23,11 +23,13 @@ #include "lexer.h" #include "symbol.h" #include "entity.h" +#include typedef enum { ENTITY_INVALID, ENTITY_VARIABLE, ENTITY_COMPOUND_MEMBER, + ENTITY_PARAMETER, ENTITY_FUNCTION, ENTITY_TYPEDEF, ENTITY_STRUCT, @@ -87,7 +89,8 @@ typedef enum decl_modifier_t { DM_FASTCALL = 1 << 22, DM_STDCALL = 1 << 23, DM_THISCALL = 1 << 24, - DM_DEPRECATED = 1 << 25 + DM_DEPRECATED = 1 << 25, + DM_RETURNS_TWICE = 1 << 26, } decl_modifier_t; typedef unsigned decl_modifiers_t; @@ -98,7 +101,6 @@ typedef unsigned decl_modifiers_t; struct scope_t { entity_t *entities; entity_t *last_entity; - scope_t *parent; /**< points to the parent scope. */ unsigned depth; /**< while parsing, the depth of this scope in the scope stack. */ }; @@ -112,7 +114,8 @@ struct entity_base_t { entity_namespace_t namespc; symbol_t *symbol; source_position_t source_position; - scope_t *parent_scope; /**< The parent scope where this declaration lives. */ + scope_t *parent_scope; /**< The scope where this entity + is contained in */ /** next declaration in a scope */ entity_t *next; @@ -189,7 +192,9 @@ struct declaration_t { struct compound_member_t { declaration_t base; - bool read : 1; + unsigned char alignment; + bool read : 1; + bool address_taken : 1; /**< Set if the address of this declaration was taken. */ /* ast2firm info */ ir_entity *entity; @@ -201,7 +206,7 @@ struct variable_t { bool thread_local : 1; /**< GCC __thread */ bool address_taken : 1; /**< Set if the address of this declaration was taken. */ bool read : 1; - unsigned char alignment; /**< Alignment of the declaration, 0 for default. */ + unsigned char alignment; symbol_t *get_property_sym; /**< MS get property. */ symbol_t *put_property_sym; /**< MS put property. */ @@ -215,6 +220,18 @@ struct variable_t { } v; }; +struct parameter_t { + declaration_t base; + bool address_taken : 1; + bool read : 1; + + /* ast2firm info */ + union { + unsigned int value_number; + ir_entity *entity; + } v; +}; + struct function_t { declaration_t base; bool is_inline : 1; @@ -241,6 +258,7 @@ union entity_t { typedef_t typedefe; declaration_t declaration; variable_t variable; + parameter_t parameter; function_t function; compound_member_t compound_member; }; @@ -248,7 +266,11 @@ union entity_t { static inline bool is_declaration(const entity_t *entity) { return entity->kind == ENTITY_FUNCTION || entity->kind == ENTITY_VARIABLE + || entity->kind == ENTITY_PARAMETER || entity->kind == ENTITY_COMPOUND_MEMBER; } + +const char *get_entity_kind_name(entity_kind_t kind); + #endif