X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ast_t.h;h=4c4cf9228060227e830f4d607ce67fde81697a72;hb=190e3bfeb4375a945179ab1aa8aa12509cee5861;hp=a2efa32a9a0003ae5483a0204cb9518d4abd18ef;hpb=21dbb2b9c84e8fed04ac38ebe5c0b7778ab666e3;p=cparser diff --git a/ast_t.h b/ast_t.h index a2efa32..4c4cf92 100644 --- a/ast_t.h +++ b/ast_t.h @@ -528,11 +528,13 @@ typedef enum decl_modifier_t { 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,11 @@ 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. */ 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; @@ -605,6 +606,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 +646,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 +664,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 +703,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 {