#ifdef HAVE_CONFIG_H # include "config.h" #endif #include "code-generation.h" #include #include #include static void generate_global_variable(CcmmcAst *global_decl, CcmmcState *state) { fputs("\t.data\n", state->asm_output); for (CcmmcAst *var_decl = global_decl->child->right_sibling; var_decl != NULL; var_decl = var_decl->right_sibling) { CcmmcSymbol *var_sym = ccmmc_symbol_table_retrieve(state->table, var_decl->value_id.name); switch (var_decl->value_id.kind) { case CCMMC_KIND_ID_NORMAL: fprintf(state->asm_output, "\t.comm %s, 4\n", var_sym->name); break; case CCMMC_KIND_ID_ARRAY: break; case CCMMC_KIND_ID_WITH_INIT: break; default: assert(false); } } } static void generate_function(CcmmcAst *funcion, CcmmcState *state) { } static void generate_program(CcmmcState *state) { for (CcmmcAst *global_decl = state->ast->child; global_decl != NULL; global_decl = global_decl->right_sibling) { switch (global_decl->value_decl.kind) { case CCMMC_KIND_DECL_VARIABLE: generate_global_variable(global_decl, state); break; case CCMMC_KIND_DECL_FUNCTION: generate_function(global_decl, state); break; case CCMMC_KIND_DECL_FUNCTION_PARAMETER: case CCMMC_KIND_DECL_TYPE: default: assert(false); } } } void ccmmc_code_generation(CcmmcState *state) { state->table->this_scope = NULL; state->table->current = NULL; ccmmc_symbol_table_reopen_scope(state->table); generate_program(state); } // vim: set sw=4 ts=4 sts=4 et: