[2.7] properly free memory in pgen. (GH-7869) (closes bpo-27780
(cherry picked from commit 9ac11a752a19c3b8607582a3d5ccb615c467124b)
Co-authored-by: Benjamin Peterson <benjamin@python.org>
diff --git a/Parser/grammar.c b/Parser/grammar.c
index fa1dd7c..fcd2219 100644
--- a/Parser/grammar.c
+++ b/Parser/grammar.c
@@ -32,6 +32,24 @@
return g;
}
+void
+freegrammar(grammar *g)
+{
+ int i;
+ for (i = 0; i < g->g_ndfas; i++) {
+ int j;
+ free(g->g_dfa[i].d_name);
+ for (j = 0; j < g->g_dfa[i].d_nstates; j++)
+ PyObject_FREE(g->g_dfa[i].d_state[j].s_arc);
+ PyObject_FREE(g->g_dfa[i].d_state);
+ }
+ PyObject_FREE(g->g_dfa);
+ for (i = 0; i < g->g_ll.ll_nlabels; i++)
+ free(g->g_ll.ll_label[i].lb_str);
+ PyObject_FREE(g->g_ll.ll_label);
+ PyObject_FREE(g);
+}
+
dfa *
adddfa(grammar *g, int type, char *name)
{