introduce some builtin types
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index 5e2819b..9216030 100644 (file)
--- 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 {