bitfield is a complete type
[cparser] / ast.c
diff --git a/ast.c b/ast.c
index 175f632..7284a5b 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -1096,6 +1096,37 @@ end_of_print_asm_statement:
        fputs(");\n", out);
 }
 
+/**
+ * Print a microsoft __try statement.
+ *
+ * @param statement   the statement
+ */
+static void print_ms_try_statement(const ms_try_statement_t *statement)
+{
+       fputs("__try ", out);
+       print_statement(statement->try_statement);
+       print_indent();
+       if(statement->except_expression != NULL) {
+               fputs("__except(", out);
+               print_expression(statement->except_expression);
+               fputs(") ", out);
+       } else {
+               fputs("__finally ", out);
+       }
+       print_statement(statement->final_statement);
+}
+
+/**
+ * Print a microsoft __leave statement.
+ *
+ * @param statement   the statement
+ */
+static void print_leave_statement(const leave_statement_t *statement)
+{
+       (void) statement;
+       fputs("__leave;\n", out);
+}
+
 /**
  * Print a statement.
  *
@@ -1152,6 +1183,12 @@ void print_statement(const statement_t *statement)
        case STATEMENT_ASM:
                print_asm_statement(&statement->asms);
                break;
+       case STATEMENT_MS_TRY:
+               print_ms_try_statement(&statement->ms_try);
+               break;
+       case STATEMENT_LEAVE:
+               print_leave_statement(&statement->leave);
+               break;
        case STATEMENT_INVALID:
                fprintf(out, "$invalid statement$");
                break;
@@ -1236,7 +1273,7 @@ static void print_ms_modifiers(const declaration_t *declaration) {
        if((c_mode & _MS) == 0)
                return;
 
-       decl_modifiers_t modifiers = declaration->modifiers;
+       decl_modifiers_t modifiers = declaration->decl_modifiers;
 
        /* DM_FORCEINLINE handled outside. */
        if((modifiers & ~DM_FORCEINLINE) != 0 ||
@@ -1310,10 +1347,10 @@ static void print_normal_declaration(const declaration_t *declaration)
 {
        print_storage_class((storage_class_tag_t) declaration->declared_storage_class);
        if(declaration->is_inline) {
-               if(declaration->modifiers & DM_FORCEINLINE)
+               if(declaration->decl_modifiers & DM_FORCEINLINE)
                        fputs("__forceinline ", out);
                else {
-                       if(declaration->modifiers & DM_MICROSOFT_INLINE)
+                       if(declaration->decl_modifiers & DM_MICROSOFT_INLINE)
                                fputs("__inline ", out);
                        else
                                fputs("inline ", out);