X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ast_t.h;h=c5699c9ed4facf807cb529701d412ecd1a12bdf0;hb=f5a32d212adb7b0e23b0bc6bbb3043b230dbc24d;hp=182c85aa67bd8d60d5f1ed014f69b8a20eab01c5;hpb=0e799d695fb50c6e40ac46d3611c2a611312146e;p=cparser diff --git a/ast_t.h b/ast_t.h index 182c85a..c5699c9 100644 --- a/ast_t.h +++ b/ast_t.h @@ -83,6 +83,7 @@ typedef enum expression_kind_t { EXPR_FUNCNAME, EXPR_BUILTIN_SYMBOL, EXPR_BUILTIN_CONSTANT_P, + EXPR_BUILTIN_TYPES_COMPATIBLE_P, EXPR_BUILTIN_PREFETCH, EXPR_OFFSETOF, EXPR_VA_START, @@ -217,7 +218,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: \ @@ -280,6 +281,12 @@ struct builtin_constant_expression_t { expression_t *value; }; +struct builtin_types_compatible_expression_t { + expression_base_t base; + type_t *left; + type_t *right; +}; + struct builtin_prefetch_expression_t { expression_base_t base; expression_t *adr; @@ -380,30 +387,31 @@ 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; + 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; }; typedef enum initializer_kind_t { @@ -533,7 +541,6 @@ typedef enum statement_kind_t { STATEMENT_COMPOUND, STATEMENT_RETURN, STATEMENT_DECLARATION, - STATEMENT_LOCAL_LABEL, STATEMENT_IF, STATEMENT_SWITCH, STATEMENT_EXPRESSION, @@ -578,6 +585,7 @@ struct compound_statement_t { statement_base_t base; statement_t *statements; scope_t scope; + bool stmt_expr; /* The compound statement is a statement expression */ }; struct declaration_statement_t { @@ -586,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; @@ -700,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;