Make defrefs a little more stupid.

Stupid code does little well :P

I forgot that spaces get realloced, and I don't remember why I had the def
list pointer separate anyway.
This commit is contained in:
Bill Currie 2011-03-01 09:19:04 +09:00
parent 1416b996d3
commit 21558864b9

View file

@ -108,7 +108,7 @@ typedef struct defref_s {
int space; int space;
} defref_t; } defref_t;
#define REF(r) ((*(r)->def_list) + (r)->def) #define REF(r) (work->spaces[(r)->space].defs + (r)->def)
static defref_t *free_defrefs; static defref_t *free_defrefs;
@ -159,17 +159,15 @@ linker_type_mismatch (qfo_def_t *def, qfo_def_t *prev)
\param def The def for which the reference will be created. \param def The def for which the reference will be created.
\param space The defspace in \c work which holds \a def. \param space The defspace in \c work which holds \a def.
\param def_list The list which currently holds the def.
\return The new reference. \return The new reference.
*/ */
static defref_t * static defref_t *
get_defref (qfo_def_t *def, qfo_mspace_t *space, qfo_def_t **def_list) get_defref (qfo_def_t *def, qfo_mspace_t *space)
{ {
defref_t *defref; defref_t *defref;
ALLOC (16384, defref_t, defrefs, defref); ALLOC (16384, defref_t, defrefs, defref);
defref->def_list = def_list; defref->def = def - space->defs;
defref->def = def - *def_list;
defref->space = space - work->spaces; defref->space = space - work->spaces;
return defref; return defref;
} }
@ -295,7 +293,7 @@ add_defs (qfo_t *qfo, qfo_mspace_t *space, qfo_mspace_t *dest_space)
odef->file = add_string (QFOSTR (qfo, idef->file)); odef->file = add_string (QFOSTR (qfo, idef->file));
type = (qfot_type_t *) (char *) (qfo_type_defs->d.data + idef->type); type = (qfot_type_t *) (char *) (qfo_type_defs->d.data + idef->type);
odef->type = type->t.class; odef->type = type->t.class;
ref = get_defref (odef, dest_space, &dest_space->defs); ref = get_defref (odef, dest_space);
work_defrefs[num_work_defrefs++] = ref; work_defrefs[num_work_defrefs++] = ref;
process_def (ref, dest_space); process_def (ref, dest_space);
} }
@ -587,7 +585,7 @@ process_type (qfo_t *qfo, qfo_mspace_t *space, int pass)
memset (type_def, 0, sizeof (*type_def)); memset (type_def, 0, sizeof (*type_def));
type_def->name = add_string (name); type_def->name = add_string (name);
type_def->offset = offset; type_def->offset = offset;
ref = get_defref (type_def, type_space, &type_space->defs); ref = get_defref (type_def, type_space);
Hash_Add (defined_type_defs, ref); Hash_Add (defined_type_defs, ref);
while ((ref = Hash_Del (extern_type_defs, name))) { while ((ref = Hash_Del (extern_type_defs, name))) {
REF (ref)->flags = 0; REF (ref)->flags = 0;