X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ast_t.h;h=0a98d0238df106b41ee60c9ecc4e618c2858aabc;hb=19c5de69255b8ef805bca504a0377b305073f735;hp=fd6b62f2ea8a653e7bf1212084f2659a790cf8ae;hpb=b8bae1dab5ff7acbcec689c43dcbe39efcc72e15;p=cparser diff --git a/ast_t.h b/ast_t.h index fd6b62f..0a98d02 100644 --- a/ast_t.h +++ b/ast_t.h @@ -83,7 +83,7 @@ typedef enum expression_kind_t { EXPR_FUNCNAME, EXPR_BUILTIN_SYMBOL, EXPR_BUILTIN_CONSTANT_P, - EXPR_BUILTIN_PREFETCH, + EXPR_BUILTIN_TYPES_COMPATIBLE_P, EXPR_OFFSETOF, EXPR_VA_START, EXPR_VA_ARG, @@ -217,7 +217,7 @@ typedef enum funcname_kind_t { case EXPR_UNARY_DELETE_ARRAY: /** - * unary expression with optinal operand + * unary expression with optional operand */ #define EXPR_UNARY_CASES_OPTIONAL \ case EXPR_UNARY_THROW: \ @@ -226,13 +226,16 @@ typedef enum funcname_kind_t { EXPR_UNARY_CASES_MANDATORY \ EXPR_UNARY_CASES_OPTIONAL +/** + * The base class of every expression. + */ struct expression_base_t { - expression_kind_t kind; - type_t *type; - source_position_t source_position; + expression_kind_t kind; /**< The expression kind. */ + type_t *type; /**< The type of the expression. */ + source_position_t source_position; /**< The source position of this expression. */ bool parenthesized; #ifndef NDEBUG - bool transformed; + bool transformed; /**< Set if this expression was transformed. */ #endif }; @@ -280,11 +283,10 @@ struct builtin_constant_expression_t { expression_t *value; }; -struct builtin_prefetch_expression_t { +struct builtin_types_compatible_expression_t { expression_base_t base; - expression_t *adr; - expression_t *rw; - expression_t *locality; + type_t *left; + type_t *right; }; struct reference_expression_t { @@ -380,30 +382,30 @@ struct label_address_expression_t { }; union expression_t { - expression_kind_t kind; - expression_base_t base; - const_expression_t conste; - funcname_expression_t funcname; - string_literal_expression_t string; - wide_string_literal_expression_t wide_string; - compound_literal_expression_t compound_literal; - builtin_symbol_expression_t builtin_symbol; - builtin_constant_expression_t builtin_constant; - builtin_prefetch_expression_t builtin_prefetch; - reference_expression_t reference; - call_expression_t call; - unary_expression_t unary; - binary_expression_t binary; - select_expression_t select; - array_access_expression_t array_access; - typeprop_expression_t typeprop; - offsetof_expression_t offsetofe; - va_start_expression_t va_starte; - va_arg_expression_t va_arge; - conditional_expression_t conditional; - statement_expression_t statement; - classify_type_expression_t classify_type; - label_address_expression_t label_address; + expression_kind_t kind; + expression_base_t base; + const_expression_t conste; + funcname_expression_t funcname; + string_literal_expression_t string; + wide_string_literal_expression_t wide_string; + compound_literal_expression_t compound_literal; + builtin_symbol_expression_t builtin_symbol; + builtin_constant_expression_t builtin_constant; + builtin_types_compatible_expression_t builtin_types_compatible; + reference_expression_t reference; + call_expression_t call; + unary_expression_t unary; + binary_expression_t binary; + select_expression_t select; + array_access_expression_t array_access; + typeprop_expression_t typeprop; + offsetof_expression_t offsetofe; + va_start_expression_t va_starte; + va_arg_expression_t va_arge; + conditional_expression_t conditional; + statement_expression_t statement; + classify_type_expression_t classify_type; + label_address_expression_t label_address; }; typedef enum initializer_kind_t { @@ -527,13 +529,15 @@ typedef enum gnu_attribute_kind_t { GNU_AK_LAST } gnu_attribute_kind_t; +/** + * The statement kinds. + */ typedef enum statement_kind_t { STATEMENT_INVALID, STATEMENT_EMPTY, STATEMENT_COMPOUND, STATEMENT_RETURN, STATEMENT_DECLARATION, - STATEMENT_LOCAL_LABEL, STATEMENT_IF, STATEMENT_SWITCH, STATEMENT_EXPRESSION, @@ -550,6 +554,9 @@ typedef enum statement_kind_t { STATEMENT_LEAVE /**< MS __leave */ } statement_kind_t; +/** + * The base class of every statement. + */ struct statement_base_t { statement_kind_t kind; statement_t *next; @@ -587,12 +594,6 @@ struct declaration_statement_t { entity_t *declarations_end; }; -struct local_label_statement_t { - statement_base_t base; - entity_t *labels_begin; - entity_t *labels_end; -}; - struct if_statement_t { statement_base_t base; expression_t *condition; @@ -701,7 +702,6 @@ union statement_t { return_statement_t returns; compound_statement_t compound; declaration_statement_t declaration; - local_label_statement_t local_label; if_statement_t ifs; switch_statement_t switchs; goto_statement_t gotos;