# HG changeset patch # User mjsousa # Date 1394964985 0 # Node ID c25346eac7887fec1fbfb17a7f6136762c9e777c # Parent e2c4f6f4abe20634d7003cdd8a8fbe2f16d37091 Insert #line directives in generated C code. diff -r e2c4f6f4abe2 -r c25346eac788 stage4/generate_c/generate_c_base.cc --- a/stage4/generate_c/generate_c_base.cc Sat Mar 15 20:10:20 2014 +0000 +++ b/stage4/generate_c/generate_c_base.cc Sun Mar 16 10:16:25 2014 +0000 @@ -90,6 +90,14 @@ s4o.print(variable_prefix_); } + void print_line_directive(symbol_c *symbol) { + s4o.print("#line "); + s4o.print(symbol->first_line); + s4o.print(" \""); + s4o.print(symbol->first_file); + s4o.print("\"\n"); + } + void *print_token(token_c *token, int offset = 0) { return s4o.printupper((token->value)+offset); } diff -r e2c4f6f4abe2 -r c25346eac788 stage4/generate_c/generate_c_il.cc --- a/stage4/generate_c/generate_c_il.cc Sat Mar 15 20:10:20 2014 +0000 +++ b/stage4/generate_c/generate_c_il.cc Sun Mar 16 10:16:25 2014 +0000 @@ -704,12 +704,13 @@ /* Declare the backup to the IL implicit variable, that will store the result of the IL operations executed inside a parenthesis... */ declare_implicit_variable_back(); - /* - s4o.print(s4o.indent_spaces); - this->implicit_variable_result_back.accept(*this); - s4o.print(".INTvar = 0;\n\n"); - */ - print_list(symbol, s4o.indent_spaces, ";\n" + s4o.indent_spaces, ";\n"); + + for(int i = 0; i < symbol->n; i++) { + print_line_directive(symbol->elements[i]); + s4o.print(s4o.indent_spaces); + symbol->elements[i]->accept(*this); + s4o.print(";\n"); + } return NULL; } diff -r e2c4f6f4abe2 -r c25346eac788 stage4/generate_c/generate_c_st.cc --- a/stage4/generate_c/generate_c_st.cc Sat Mar 15 20:10:20 2014 +0000 +++ b/stage4/generate_c/generate_c_st.cc Sun Mar 16 10:16:25 2014 +0000 @@ -874,7 +874,13 @@ /* B 3.2 Statements */ /********************/ void *visit(statement_list_c *symbol) { - return print_list(symbol, s4o.indent_spaces, ";\n" + s4o.indent_spaces, ";\n"); + for(int i = 0; i < symbol->n; i++) { + print_line_directive(symbol->elements[i]); + s4o.print(s4o.indent_spaces); + symbol->elements[i]->accept(*this); + s4o.print(";\n"); + } + return NULL; } /*********************************/