Remove the auxfunction manipulation from the compiler proper.

It was broken code in the first place (realloc and pointers), and is
redundant with the new linking process.
This commit is contained in:
Bill Currie 2011-03-07 13:33:02 +09:00
parent 16103f9018
commit 02a70ebe1c
5 changed files with 8 additions and 41 deletions

View file

@ -50,10 +50,11 @@ typedef struct overloaded_function_s {
typedef struct function_s {
struct function_s *next;
pr_auxfunction_t *aux; ///< debug info;
int builtin; ///< if non 0, call an internal function
int code; ///< first statement
int function_num;
int line_info;
int local_defs;
string_t s_file; ///< source file with definition
string_t s_name;
int temp_num; ///< number for next temp var

View file

@ -117,20 +117,6 @@ line_info (char *text)
pr.source_file = ReuseString (strip_path (str));
}
pr_auxfunction_t *
new_auxfunction (void)
{
if (pr.num_auxfunctions == pr.auxfunctions_size) {
pr.auxfunctions_size += 1024;
pr.auxfunctions = realloc (pr.auxfunctions,
pr.auxfunctions_size
* sizeof (pr_auxfunction_t));
}
memset (&pr.auxfunctions[pr.num_auxfunctions], 0,
sizeof (pr_auxfunction_t));
return &pr.auxfunctions[pr.num_auxfunctions++];
}
pr_lineno_t *
new_lineno (void)
{

View file

@ -182,7 +182,7 @@ emit_statement (statement_t *statement)
print_statement (statement);
internal_error (statement->expr, "ice ice baby");
}
if (options.code.debug && current_func->aux) {
if (options.code.debug) {
expr_t *e = statement->expr;
pr_uint_t line = (e ? e->line : pr.source_line) - lineno_base;

View file

@ -523,8 +523,6 @@ add_function (function_t *f)
*pr.func_tail = f;
pr.func_tail = &f->next;
f->function_num = pr.num_functions++;
if (options.code.debug)
f->aux = new_auxfunction ();
}
function_t *
@ -556,14 +554,10 @@ begin_function (symbol_t *sym, const char *nicename, symtab_t *parent,
}
sym->s.func->code = pr.code->size;
if (options.code.debug && sym->s.func->aux) {
if (options.code.debug) {
pr_lineno_t *lineno = new_lineno ();
sym->s.func->aux->source_line = sym->s.func->def->line;
sym->s.func->aux->line_info = lineno - pr.linenos;
sym->s.func->aux->local_defs = pr.num_locals;
sym->s.func->aux->return_type = sym->type->t.func.type->type;
lineno->fa.func = sym->s.func->aux - pr.auxfunctions;
sym->s.func->line_info = lineno - pr.linenos;
sym->s.func->local_defs = pr.num_locals;
}
build_scope (sym, parent);
@ -640,18 +634,6 @@ build_function (function_t *f)
void
finish_function (function_t *f)
{
if (f->aux) {
def_t *def;
f->aux->function = f->function_num;
if (f->symtab && f->symtab->space) {
for (def = f->symtab->space->defs; def; def = def->next) {
if (def->name) {
def_to_ddef (def, new_local (), 0);
f->aux->num_locals++;
}
}
}
}
}
void
@ -660,8 +642,7 @@ emit_function (function_t *f, expr_t *e)
sblock_t *sblock;
f->code = pr.code->size;
if (f->aux)
lineno_base = f->aux->source_line;
lineno_base = f->def->line;
sblock = make_statements (e);
emit_statements (sblock);
}

View file

@ -267,8 +267,7 @@ qfo_encode_functions (qfo_t *qfo, qfo_def_t **defs, qfo_reloc_t **relocs,
qfo_init_data_space (qfo, defs, relocs, space++, f->symtab->space);
q->locals_space = f->symtab->space->qfo_space;
}
if (f->aux)
q->line_info = f->aux->line_info;
q->line_info = f->line_info;
q->relocs = *relocs - qfo->relocs;
q->num_relocs = qfo_encode_relocs (f->refs, relocs, q - qfo->funcs);
}