string literals as array intiailizers are supported now
[cparser] / write_fluffy.c
index 78a41fe..4ad6fc0 100644 (file)
@@ -3,6 +3,7 @@
 #include <errno.h>
 #include <string.h>
 
+#include "write_fluffy.h"
 #include "ast_t.h"
 #include "type_t.h"
 #include "type.h"
@@ -220,7 +221,7 @@ static void write_expression(const expression_t *expression)
        case EXPR_CONST:
                constant = (const const_t*) expression;
                if(is_type_integer(expression->datatype)) {
-                       fprintf(out, "%d", constant->v.int_value);
+                       fprintf(out, "%lld", constant->v.int_value);
                } else {
                        fprintf(out, "%Lf", constant->v.float_value);
                }
@@ -233,26 +234,17 @@ static void write_expression(const expression_t *expression)
        }
 }
 
-static void write_initializer(const initializer_t *initializer)
-{
-       if(initializer->type != INITIALIZER_VALUE) {
-               panic("list initializers not supported yet");
-       }
-
-       write_expression(initializer->v.value);
-}
-
 static void write_enum(const symbol_t *symbol, const enum_type_t *type)
 {
        fprintf(out, "enum %s:\n", symbol->string);
 
-       declaration_t *entry = type->declaration->context_next;
+       declaration_t *entry = type->declaration->next;
        for ( ; entry != NULL && entry->storage_class == STORAGE_CLASS_ENUM_ENTRY;
                        entry = entry->next) {
                fprintf(out, "\t%s", entry->symbol->string);
                if(entry->init.initializer != NULL) {
                        fprintf(out, " <- ");
-                       write_initializer(entry->init.initializer);
+                       write_expression(entry->init.enum_value);
                }
                fputc('\n', out);
        }
@@ -349,6 +341,8 @@ void write_fluffy_decls(const translation_unit_t *unit)
        /* write global variables */
        declaration = unit->context.declarations;
        for( ; declaration != NULL; declaration = declaration->next) {
+               if(declaration->namespc != NAMESPACE_NORMAL)
+                       continue;
                if(declaration->storage_class == STORAGE_CLASS_TYPEDEF
                                || declaration->storage_class == STORAGE_CLASS_ENUM_ENTRY)
                        continue;
@@ -363,6 +357,8 @@ void write_fluffy_decls(const translation_unit_t *unit)
        /* write functions */
        declaration = unit->context.declarations;
        for( ; declaration != NULL; declaration = declaration->next) {
+               if(declaration->namespc != NAMESPACE_NORMAL)
+                       continue;
                if(declaration->storage_class == STORAGE_CLASS_TYPEDEF
                                || declaration->storage_class == STORAGE_CLASS_ENUM_ENTRY)
                        continue;