local defs for debug info now work

This commit is contained in:
Bill Currie 2002-07-17 15:40:08 +00:00
parent 17cd41883e
commit b0d568d85f
6 changed files with 31 additions and 17 deletions

View file

@ -124,4 +124,6 @@ void def_initialized (def_t *d);
void clear_defs (void);
void def_to_ddef (def_t *def, ddef_t *ddef, int aux);
#endif//__def_h

View file

@ -37,6 +37,7 @@ static const char rcsid[] =
#include "qfcc.h"
#include "def.h"
#include "expr.h"
#include "immediate.h"
#include "reloc.h"
#include "strpool.h"
#include "struct.h"
@ -480,3 +481,15 @@ clear_defs (void)
if (defs_by_name)
Hash_FlushTable (defs_by_name);
}
void
def_to_ddef (def_t *def, ddef_t *ddef, int aux)
{
type_t *type = def->type;
if (aux)
type = type->aux_type;
ddef->type = type->type;
ddef->ofs = def->ofs;
ddef->s_name = ReuseString (def->name);
}

View file

@ -230,11 +230,7 @@ finish_function (function_t *f)
if (f->scope) {
for (def = f->scope->head; def; def = def->def_next) {
if (def->name) {
ddef_t *d = new_local ();
d->type = def->type->type;
d->ofs = def->ofs;
d->s_name = ReuseString (def->name);
def_to_ddef (def, new_local (), 0);
f->aux->num_locals++;
}
}

View file

@ -521,8 +521,8 @@ qfo_to_progs (qfo_t *qfo, pr_info_t *pr)
pf->aux->function = i + 1;
pf->aux->source_line = qf->line;
pf->aux->line_info = qf->line_info;
pf->aux->local_defs = qf->local_defs;
pf->aux->num_locals = qf->num_local_defs;
pf->aux->local_defs = 0;
pf->aux->num_locals = 0;
pf->builtin = qf->builtin;
pf->code = qf->code;
pf->function_num = i + 1;
@ -536,6 +536,13 @@ qfo_to_progs (qfo_t *qfo, pr_info_t *pr)
pf->scope->head = pr->scope->head + qf->local_defs;
pf->scope->tail = &pf->scope->head[qf->num_local_defs - 1].def_next;
*pf->scope->tail = 0;
pf->aux->local_defs = pr->num_locals;
for (pd = pf->scope->head; pd; pd = pd->def_next) {
if (pd->name) {
def_to_ddef (pd, new_local (), 0);
pf->aux->num_locals++;
}
}
}
if (qf->num_relocs) {
pf->refs = relocs + qf->relocs;

View file

@ -173,23 +173,17 @@ WriteData (int crc)
continue;
if (def->type->type == ev_func) {
} else if (def->type->type == ev_field) {
dd = &fields[numfielddefs];
numfielddefs++;
dd->type = def->type->aux_type->type;
dd->s_name = ReuseString (def->name);
dd = &fields[numfielddefs++];
def_to_ddef (def, dd, 1);
dd->ofs = G_INT (def->ofs);
}
dd = &globals[numglobaldefs];
numglobaldefs++;
dd->type = def->type->type;
dd = &globals[numglobaldefs++];
def_to_ddef (def, dd, 0);
if (!def->constant
&& def->type->type != ev_func
&& def->type->type != ev_field && def->global)
dd->type |= DEF_SAVEGLOBAL;
dd->s_name = ReuseString (def->name);
dd->ofs = def->ofs;
}
pr.strings->size = (pr.strings->size + 3) & ~3;

View file

@ -67,6 +67,8 @@ void codespace_addcode (codespace_t *codespace, struct statement_s *code, int si
type_t *parse_type (const char *str) {return 0;}
int function_parms (function_t *f, byte *parm_size) {return 0;}
pr_auxfunction_t *new_auxfunction (void) {return 0;}
ddef_t *new_local (void) {return 0;}
void def_to_ddef (def_t *def, ddef_t *ddef, int aux) {}
static const struct option long_options[] = {
{NULL, 0, NULL, 0},