- create strict convs where necessary
[cparser] / ast_t.h
diff --git a/ast_t.h b/ast_t.h
index 8154643..9216030 100644 (file)
--- a/ast_t.h
+++ b/ast_t.h
@@ -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 {
@@ -202,7 +203,7 @@ union expression_t {
        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;
@@ -225,7 +226,10 @@ typedef enum {
        STORAGE_CLASS_STATIC,
        STORAGE_CLASS_AUTO,
        STORAGE_CLASS_REGISTER,
-       STORAGE_CLASS_ENUM_ENTRY
+       STORAGE_CLASS_ENUM_ENTRY,
+       STORAGE_CLASS_THREAD,
+       STORAGE_CLASS_THREAD_EXTERN,
+       STORAGE_CLASS_THREAD_STATIC
 } storage_class_tag_t;
 
 typedef enum {
@@ -233,7 +237,7 @@ typedef enum {
        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 {