static void emit(stmt_ty *that) { stmt_if_ty *this; size_t j; trace(("if::emit()\n{\n")); this = (stmt_if_ty *)that; emit_line_number ( this->condition->list[0]->line_number, this->condition->list[0]->file_name ); emit_str("#if"); for (j = 0; j < this->condition->length; ++j) { emit_char(' '); emit_string(this->condition->list[j]->text); } emit_char('\n'); stmt_emit(this->then_clause); emit_bol(); if (this->else_clause) { emit_str("#else\n"); stmt_emit(this->else_clause); emit_bol(); } emit_str("#endif\n"); trace(("}\n")); }
void write_asm(Syntax* complete_syntax,Stack* string_stack){ tablevar = list_new(); openf("output.s"); //open file. emit_format(); emit_str(string_stack); emit_header(); //print .text function_declare("main"); //declare .globl main emit_init(); //alloc for main. if(complete_syntax->type == BLOCK){ emitblock(complete_syntax); }else printf("invalid syntax"); emit_footer(); //ralloc for main closef(fp); //close file. free(tablevar); }