Esempio n. 1
0
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);
}