Avoid double parentheses when AST printing sizeof expressions.
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index ab3e6ee..c5699c9 100644 (file)
--- 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 {
@@ -465,6 +473,7 @@ typedef enum gnu_attribute_kind_t {
        GNU_AK_FASTCALL,
        GNU_AK_DEPRECATED,
        GNU_AK_NOINLINE,
+       GNU_AK_RETURNS_TWICE,
        GNU_AK_NORETURN,
        GNU_AK_NAKED,
        GNU_AK_PURE,
@@ -532,7 +541,6 @@ typedef enum statement_kind_t {
        STATEMENT_COMPOUND,
        STATEMENT_RETURN,
        STATEMENT_DECLARATION,
-       STATEMENT_LOCAL_LABEL,
        STATEMENT_IF,
        STATEMENT_SWITCH,
        STATEMENT_EXPRESSION,
@@ -577,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 {
@@ -585,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;
@@ -699,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;