From: Theophile Ranquet Date: Thu, 31 Jan 2013 23:49:59 +0000 (+0100) Subject: grammar: free the association tracking graph X-Git-Tag: v2.7.90~115 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/f038e56cdc211396f54f138e95693d0906d6fafa 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. --- diff --git a/src/symtab.c b/src/symtab.c index d3ad2fbb..1768d88d 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -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 (); }