X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ast_t.h;h=9216030ecde960b74f4788a79ecb78c5a8a30a71;hb=669dddef54ca072449239d2d8deaf65507fe9c17;hp=5e2819b9f1a3c85f3045ca74f20cb423e62464d4;hpb=7ef1a1bb85402943131db02b4f11092c5fbe9c0b;p=cparser diff --git a/ast_t.h b/ast_t.h index 5e2819b..9216030 100644 --- a/ast_t.h +++ b/ast_t.h @@ -33,16 +33,16 @@ typedef enum { EXPR_OFFSETOF, EXPR_VA_ARG, EXPR_STATEMENT -} expresion_type_t; +} expression_type_t; struct context_t { declaration_t *declarations; }; struct expression_base_t { - expresion_type_t type; - type_t *datatype; - source_position_t source_position; + expression_type_t type; + type_t *datatype; + source_position_t source_position; }; struct const_expression_t { @@ -92,7 +92,8 @@ typedef enum { UNEXPR_POSTFIX_DECREMENT, UNEXPR_PREFIX_INCREMENT, UNEXPR_PREFIX_DECREMENT, - UNEXPR_CAST + UNEXPR_CAST, + UNEXPR_CAST_IMPLICIT /* compiler generated cast */ } unary_expression_type_t; struct unary_expression_t { @@ -199,10 +200,10 @@ struct classify_type_expression_t { }; union expression_t { - expresion_type_t type; + expression_type_t type; expression_base_t base; const_expression_t conste; - string_literal_expression_t string_literal; + string_literal_expression_t string; builtin_symbol_expression_t builtin_symbol; reference_expression_t reference; call_expression_t call; @@ -212,7 +213,7 @@ union expression_t { array_access_expression_t array_access; sizeof_expression_t sizeofe; offsetof_expression_t offsetofe; - va_arg_expression_t va_arg; + va_arg_expression_t va_arge; conditional_expression_t conditional; statement_expression_t statement; classify_type_expression_t classify_type; @@ -225,15 +226,18 @@ typedef enum { STORAGE_CLASS_STATIC, STORAGE_CLASS_AUTO, STORAGE_CLASS_REGISTER, - STORAGE_CLASS_ENUM_ENTRY -} storage_class_t; + STORAGE_CLASS_ENUM_ENTRY, + STORAGE_CLASS_THREAD, + STORAGE_CLASS_THREAD_EXTERN, + STORAGE_CLASS_THREAD_STATIC +} storage_class_tag_t; typedef enum { NAMESPACE_NORMAL, NAMESPACE_STRUCT, NAMESPACE_UNION, NAMESPACE_ENUM, - NAMESPACE_LABEL + NAMESPACE_LABEL, } namespace_t; typedef enum { @@ -317,7 +321,8 @@ typedef enum { STATEMENT_CASE_LABEL, STATEMENT_WHILE, STATEMENT_DO_WHILE, - STATEMENT_FOR + STATEMENT_FOR, + STATEMENT_ASM } statement_type_t; struct statement_base_t { @@ -399,6 +404,27 @@ struct for_statement_t { context_t context; }; +struct asm_constraint_t { + const char *constraints; + expression_t *expression; + symbol_t *symbol; + asm_constraint_t *next; +}; + +struct asm_clobber_t { + const char *clobber; + asm_clobber_t *next; +}; + +struct asm_statement_t { + statement_base_t statement; + const char *asm_text; + asm_constraint_t *inputs; + asm_constraint_t *outputs; + asm_clobber_t *clobbers; + bool is_volatile; +}; + union statement_t { statement_type_t type; statement_base_t base; @@ -414,6 +440,7 @@ union statement_t { while_statement_t whiles; do_while_statement_t do_while; for_statement_t fors; + asm_statement_t asms; }; struct translation_unit_t {