X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=entity_t.h;h=1f4c35fdf104cc8cb88679a84c9a5ababedbc49a;hb=e0a1f3bda124fbc9ed278145548da80902c7358a;hp=bfcbe1d1fd4930b071e0fe2243e0ca3a3a7bbaaf;hpb=b2c46541b3bd485f1e54ce80ecebc09c49d03c69;p=cparser diff --git a/entity_t.h b/entity_t.h index bfcbe1d..1f4c35f 100644 --- a/entity_t.h +++ b/entity_t.h @@ -20,6 +20,8 @@ #ifndef ENTITY_T_H #define ENTITY_T_H +#include "lexer.h" +#include "symbol.h" #include "entity.h" typedef enum { @@ -33,7 +35,8 @@ typedef enum { ENTITY_ENUM, ENTITY_ENUM_VALUE, ENTITY_LABEL, - ENTITY_LOCAL_LABEL + ENTITY_LOCAL_LABEL, + ENTITY_NAMESPACE } entity_kind_tag_t; typedef unsigned char entity_kind_t; @@ -43,10 +46,9 @@ typedef enum namespace_tag_t { NAMESPACE_STRUCT, NAMESPACE_UNION, NAMESPACE_ENUM, - NAMESPACE_LABEL, - NAMESPACE_LOCAL_LABEL + NAMESPACE_LABEL } namespace_tag_t; -typedef unsigned char namespace_t; +typedef unsigned char entity_namespace_t; typedef enum storage_class_tag_t { STORAGE_CLASS_NONE, @@ -62,6 +64,7 @@ typedef enum storage_class_tag_t { typedef unsigned char storage_class_t; typedef enum decl_modifier_t { + DM_NONE = 0, DM_DLLIMPORT = 1 << 0, DM_DLLEXPORT = 1 << 1, DM_THREAD = 1 << 2, @@ -92,13 +95,24 @@ typedef enum decl_modifier_t { typedef unsigned decl_modifiers_t; +/** + * A scope containing entities. + */ +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. */ +}; + /** * a named entity is something which can be referenced by its name * (a symbol) */ struct entity_base_t { entity_kind_t kind; - namespace_t namespc; + entity_namespace_t namespc; symbol_t *symbol; source_position_t source_position; scope_t *parent_scope; /**< The parent scope where this declaration lives. */ @@ -148,6 +162,11 @@ struct label_t { ir_node *block; }; +struct namespace_t { + entity_base_t base; + scope_t members; +}; + struct typedef_t { entity_base_t base; decl_modifiers_t modifiers; @@ -218,6 +237,7 @@ union entity_t { enum_t enume; enum_value_t enum_value; label_t label; + namespace_t namespacee; typedef_t typedefe; declaration_t declaration; variable_t variable;