X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ast_t.h;h=ac7919b26b42d908095ff5ad94eb124db18df41a;hb=43298905d2d0a8eabe545794d056bbd7a104b9bf;hp=a218987850fabf0b9e738d665d99156aae6edf5e;hpb=ff1616078536387fe31a2fc5e425274b407539d9;p=cparser diff --git a/ast_t.h b/ast_t.h index a218987..ac7919b 100644 --- a/ast_t.h +++ b/ast_t.h @@ -35,7 +35,7 @@ extern struct obstack ast_obstack; /** * Expression kinds. */ -typedef enum { +typedef enum expression_kind_t { EXPR_UNKNOWN = 0, EXPR_INVALID, EXPR_REFERENCE, @@ -120,7 +120,7 @@ typedef enum { EXPR_BINARY_LAST = EXPR_BINARY_ISUNORDERED, } expression_kind_t; -typedef enum { +typedef enum funcname_kind_t { FUNCNAME_FUNCTION, /**< C99 __func__, older __FUNCTION__ */ FUNCNAME_PRETTY_FUNCTION, /**< GNUC __PRETTY_FUNCTION__ */ FUNCNAME_FUNCSIG, /**< MS __FUNCSIG__ */ @@ -365,7 +365,7 @@ union expression_t { classify_type_expression_t classify_type; }; -typedef enum { +typedef enum storage_class_tag_t { STORAGE_CLASS_NONE, STORAGE_CLASS_EXTERN, STORAGE_CLASS_STATIC, @@ -378,7 +378,7 @@ typedef enum { STORAGE_CLASS_THREAD_STATIC, } storage_class_tag_t; -typedef enum { +typedef enum namespace_t { NAMESPACE_NORMAL, NAMESPACE_STRUCT, NAMESPACE_UNION, @@ -386,7 +386,7 @@ typedef enum { NAMESPACE_LABEL, } namespace_t; -typedef enum { +typedef enum initializer_kind_t { INITIALIZER_VALUE, INITIALIZER_LIST, INITIALIZER_STRING, @@ -509,7 +509,7 @@ typedef enum gnu_attribute_kind_t { /** * Extended microsoft modifier. */ -typedef enum { +typedef enum decl_modifier_t { DM_DLLIMPORT = 1 << 0, DM_DLLEXPORT = 1 << 1, DM_THREAD = 1 << 2, @@ -528,11 +528,13 @@ typedef enum { DM_PURE = 1 << 15, DM_CONSTRUCTOR = 1 << 16, DM_DESTRUCTOR = 1 << 17, - DM_USED = 1 << 18, - DM_CDECL = 1 << 19, - DM_FASTCALL = 1 << 20, - DM_STDCALL = 1 << 21, - DM_THISCALL = 1 << 22 + DM_UNUSED = 1 << 18, + DM_USED = 1 << 19, + DM_CDECL = 1 << 20, + DM_FASTCALL = 1 << 21, + DM_STDCALL = 1 << 22, + DM_THISCALL = 1 << 23, + DM_DEPRECATED = 1 << 24 } decl_modifier_t; typedef unsigned decl_modifiers_t; @@ -549,12 +551,12 @@ struct declaration_t { unsigned int address_taken : 1; unsigned int is_inline : 1; unsigned int used : 1; /**< Set if the declaration is used. */ - unsigned int deprecated : 1; /**< Microsoft or GNU deprecated attribute. */ + unsigned int implicit : 1; type_t *type; symbol_t *symbol; source_position_t source_position; union { - bool complete; /**< used to indicate wether struct/union types are already defined or if just the name is declared */ + bool complete; /**< used to indicate whether struct/union types are already defined or if just the name is declared */ statement_t *statement; initializer_t *initializer; expression_t *enum_value; @@ -579,7 +581,7 @@ struct declaration_t { } v; }; -typedef enum { +typedef enum statement_kind_t { STATEMENT_INVALID, STATEMENT_EMPTY, STATEMENT_COMPOUND, @@ -605,6 +607,8 @@ struct statement_base_t { statement_kind_t kind; statement_t *next; source_position_t source_position; + statement_t *parent; + bool reachable; #ifndef NDEBUG bool transformed; #endif @@ -643,10 +647,12 @@ struct if_statement_t { }; struct switch_statement_t { - statement_base_t base; + statement_base_t base; expression_t *expression; statement_t *body; - case_label_statement_t *first_case, *last_case; + case_label_statement_t *first_case, *last_case; /**< List of all cases, including default. */ + case_label_statement_t *default_label; /**< The default label if existent. */ + unsigned long default_proj_nr; /**< The Proj-number for the default Proj. */ }; struct goto_statement_t { @@ -659,8 +665,12 @@ struct case_label_statement_t { statement_base_t base; expression_t *expression; /**< The case label expression, NULL for default label. */ expression_t *end_range; /**< For GNUC case a .. b: the end range expression, NULL else. */ + case_label_statement_t *next; /**< link to the next case label in switch */ statement_t *statement; - case_label_statement_t *next; /**< link to the next case label in switch */ + long first_case; /**< The folded value of expression. */ + long last_case; /**< The folded value of end_range. */ + bool is_bad; /**< If set marked as bad to supress warnings. */ + bool is_empty; /**< If set marked this is a empty range. */ }; struct label_statement_t { @@ -694,6 +704,8 @@ struct for_statement_t { expression_t *step; statement_t *body; scope_t scope; + bool condition_reachable:1; + bool step_reachable:1; }; struct asm_argument_t {