grammar: free the association tracking graph

The graph introduced by Valentin wasn't free'd after use.

* src/symtab.c (assoc_free): New, clear the array of linked lists with...
(linkedlist_free): This, new.
(print_precedence_warnings): Call assoc_free when done.
(print_assoc_warnings): Free used_assoc after use.
This commit is contained in:
Theophile Ranquet
2013-02-01 00:49:59 +01:00
parent f2e1d4090d
commit f038e56cdc

View File

@@ -1057,6 +1057,42 @@ register_precedence (graphid first, graphid snd)
}
/*---------------------------------------.
| Deep clear a linked / adjacency list). |
`---------------------------------------*/
static void
linkedlist_free (symgraphlink *node)
{
if (node)
{
while (node->next)
{
symgraphlink *tmp = node->next;
free (node);
node = tmp;
}
free (node);
}
}
/*----------------------------------------------.
| Clear and destroy association tracking table. |
`----------------------------------------------*/
static void
assoc_free (void)
{
int i;
for (i = 0; i < nsyms; ++i)
{
linkedlist_free (prec_nodes[i]->pred);
linkedlist_free (prec_nodes[i]->succ);
free (prec_nodes[i]);
}
free (prec_nodes);
}
/*---------------------------------------.
| Initialize association tracking table. |
`---------------------------------------*/
@@ -1127,4 +1163,6 @@ print_precedence_warnings (void)
complain (&s->location, Wprecedence,
_("useless associativity for %s, use %%precedence"), s->tag);
}
free (used_assoc);
assoc_free ();
}