[qfcc] Free data spaces between compiliations

This commit is contained in:
Bill Currie 2020-04-03 14:14:34 +09:00
parent d69db50cf9
commit f8d9b720de
4 changed files with 36 additions and 1 deletions

View file

@ -90,6 +90,8 @@ typedef struct defspace_s {
*/
defspace_t *defspace_new (ds_type_t type);
void defspace_delete (defspace_t *defspace);
/** Allocate space from the defspace's backing memory.
If the memory is fragmented, then the first available location at least

View file

@ -139,6 +139,28 @@ defspace_new (ds_type_t type)
return space;
}
void
defspace_delete (defspace_t *space)
{
locref_t **lr;
for (lr = &space->free_locs; *lr; lr = &(*lr)->next) {
}
*lr = locrefs_freelist;
locrefs_freelist = space->free_locs;
if (space->data) {
free (space->data);
}
while (space->defs) {
def_t *def = space->defs;
space->defs = def->next;
def->space = 0;
free_def (def);
}
}
int
defspace_alloc_loc (defspace_t *space, int size)
{

View file

@ -137,10 +137,15 @@ InitData (void)
if (pr.code) {
codespace_delete (pr.code);
strpool_delete (pr.strings);
defspace_delete (pr.near_data);
defspace_delete (pr.far_data);
defspace_delete (pr.entity_data);
defspace_delete (pr.type_data);
}
if (pr.linenos)
if (pr.linenos) {
free (pr.linenos);
}
memset (&pr, 0, sizeof (pr));
pr.source_line = 1;

View file

@ -18,6 +18,12 @@ pr_info_t pr;
function_t *current_func;
class_type_t *current_class;
void
free_def (def_t *def)
{
if (0) free (def);
}
__attribute__((const))const char *
get_class_name (class_type_t *class_type, int prett)
{