fix printing of array types
authorMatthias Braun <matze@braunis.de>
Thu, 22 Nov 2007 12:49:38 +0000 (12:49 +0000)
committerMatthias Braun <matze@braunis.de>
Thu, 22 Nov 2007 12:49:38 +0000 (12:49 +0000)
[r18517]

ast.c
type.c

diff --git a/ast.c b/ast.c
index 341d5f2..463bf13 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -513,22 +513,22 @@ static void print_storage_class(storage_class_t storage_class)
 void print_initializer(const initializer_t *initializer)
 {
        if(initializer->type == INITIALIZER_VALUE) {
-               //print_expression(initializer->v.value);
+               initializer_value_t *value = (initializer_value_t*) initializer;
+               print_expression(value->value);
                return;
        }
 
-#if 0
        assert(initializer->type == INITIALIZER_LIST);
        fputs("{ ", out);
-       initializer_t *iter = initializer->v.list;
-       for( ; iter != NULL; iter = iter->next) {
-               print_initializer(iter);
-               if(iter->next != NULL) {
+       initializer_list_t *list = (initializer_list_t*) initializer;
+
+       for(size_t i = 0 ; i < list->len; ++i) {
+               if(i > 0) {
                        fputs(", ", out);
                }
+               print_initializer(list->initializers[i]);
        }
        fputs("}", out);
-#endif
 }
 
 static void print_normal_declaration(const declaration_t *declaration)
diff --git a/type.c b/type.c
index 78f691a..365b3fe 100644 (file)
--- a/type.c
+++ b/type.c
@@ -133,8 +133,7 @@ static void print_function_type_post(const function_type_t *type,
        fputc(')', out);
 }
 
-static
-void print_pointer_type_pre(const pointer_type_t *type)
+static void print_pointer_type_pre(const pointer_type_t *type)
 {
        intern_print_type_pre(type->points_to);
        fputs("*", out);
@@ -146,8 +145,14 @@ static void print_pointer_type_post(const pointer_type_t *type)
        intern_print_type_post(type->points_to);
 }
 
+static void print_array_type_pre(const array_type_t *type)
+{
+       intern_print_type_pre(type->element_type);
+}
+
 static void print_array_type_post(const array_type_t *type)
 {
+       intern_print_type_post(type->element_type);
        fputc('[', out);
        if(type->is_static) {
                fputs("static ", out);
@@ -277,6 +282,7 @@ static void intern_print_type_pre(type_t *type)
                print_pointer_type_pre((pointer_type_t*) type);
                return;
        case TYPE_ARRAY:
+               print_array_type_pre((array_type_t*) type);
                return;
        case TYPE_TYPEDEF:
                print_typedef_type_pre((typedef_type_t*) type);