X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=write_fluffy.c;h=e9db530f8029657ba162c7c1c4a6847f75b7a8ea;hb=4eade33d45008f90c8952a65a92cdda17d9598f9;hp=1d6aefff22b1ec46308add27ab6ca2b4b511487f;hpb=5c350f5bc775f92a6fb5131e54b2e818574843aa;p=cparser diff --git a/write_fluffy.c b/write_fluffy.c index 1d6aeff..e9db530 100644 --- a/write_fluffy.c +++ b/write_fluffy.c @@ -5,6 +5,7 @@ #include "ast_t.h" #include "type_t.h" +#include "type.h" #include "adt/error.h" static const context_t *global_context; @@ -51,7 +52,7 @@ static declaration_t *find_typedef(const type_t *type) /* first: search for a matching typedef in the global type... */ declaration_t *declaration = global_context->declarations; while(declaration != NULL) { - if(! (declaration->storage_class & STORAGE_CLASS_TYPEDEF)) { + if(! (declaration->storage_class == STORAGE_CLASS_TYPEDEF)) { declaration = declaration->next; continue; } @@ -216,7 +217,11 @@ static void write_expression(const expression_t *expression) switch(expression->type) { case EXPR_CONST: constant = (const const_t*) expression; - fprintf(out, "%d", constant->value); + if(is_type_integer(expression->datatype)) { + fprintf(out, "%d", constant->v.int_value); + } else { + fprintf(out, "%Lf", constant->v.float_value); + } break; case EXPR_UNARY: write_unary_expression((const unary_expression_t*) expression); @@ -230,12 +235,12 @@ static void write_enum(const symbol_t *symbol, const enum_type_t *type) { fprintf(out, "enum %s:\n", symbol->string); - const enum_entry_t *entry = type->entries; - for ( ; entry != NULL; entry = entry->next) { + declaration_t *entry = type->entries_begin; + for ( ; entry != type->entries_end->next; entry = entry->next) { fprintf(out, "\t%s", entry->symbol->string); - if(entry->value != NULL) { + if(entry->initializer != NULL) { fprintf(out, " <- "); - write_expression(entry->value); + write_expression(entry->initializer); } fputc('\n', out); } @@ -313,10 +318,9 @@ void write_fluffy_decls(const translation_unit_t *unit) /* write structs,unions + enums */ declaration_t *declaration = unit->context.declarations; - while(declaration != NULL) { + for( ; declaration != NULL; declaration = declaration->next) { //fprintf(out, "// Decl: %s\n", declaration->symbol->string); - if(! (declaration->storage_class & STORAGE_CLASS_TYPEDEF)) { - declaration = declaration->next; + if(! (declaration->storage_class == STORAGE_CLASS_TYPEDEF)) { continue; } type_t *type = declaration->type; @@ -327,14 +331,13 @@ void write_fluffy_decls(const translation_unit_t *unit) } else if(type->type == TYPE_ENUM) { write_enum(declaration->symbol, (enum_type_t*) type); } - - declaration = declaration->next; } /* write global variables */ declaration = unit->context.declarations; for( ; declaration != NULL; declaration = declaration->next) { - if(declaration->storage_class & STORAGE_CLASS_TYPEDEF) + if(declaration->storage_class == STORAGE_CLASS_TYPEDEF + || declaration->storage_class == STORAGE_CLASS_ENUM_ENTRY) continue; type_t *type = declaration->type; @@ -347,7 +350,8 @@ void write_fluffy_decls(const translation_unit_t *unit) /* write functions */ declaration = unit->context.declarations; for( ; declaration != NULL; declaration = declaration->next) { - if(declaration->storage_class & STORAGE_CLASS_TYPEDEF) + if(declaration->storage_class == STORAGE_CLASS_TYPEDEF + || declaration->storage_class == STORAGE_CLASS_ENUM_ENTRY) continue; type_t *type = declaration->type;