From: NeilBrown Date: Sun, 11 May 2014 07:18:21 +0000 (+1000) Subject: indent_test / parsergen: fix various memory leaks. X-Git-Tag: workingparser~35 X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=commitdiff_plain;h=c0d6db8bf51a59144d5c86d752274627b5411ad6 indent_test / parsergen: fix various memory leaks. thanks valgrind... Signed-off-by: NeilBrown --- diff --git a/csrc/indent_test.cgm b/csrc/indent_test.cgm index 50fc4a5..ac3ab55 100644 --- a/csrc/indent_test.cgm +++ b/csrc/indent_test.cgm @@ -45,6 +45,7 @@ with complete bracketing and indenting. if (!s) return; free_statement(s->next); + free_expression(s->expr); free_statement(s->thenpart); free_statement(s->elsepart); free(s); @@ -97,6 +98,12 @@ with complete bracketing and indenting. .word_cont = "", }; parse_itest(s->code, &config, argc > 2 ? stderr : NULL); + while (s) { + struct section *t = s->next; + code_free(s->code); + free(s); + s = t; + } exit(0); } diff --git a/csrc/parsergen.mdc b/csrc/parsergen.mdc index b3d1cf6..0f1dd26 100644 --- a/csrc/parsergen.mdc +++ b/csrc/parsergen.mdc @@ -2103,11 +2103,12 @@ appropriate for tokens on any terminal symbol. continue; fprintf(f, "\tcase %d:\n", s->num); - if (s->isref) + if (s->isref) { fprintf(f, "\t\tfree_%.*s(*(void**)asn);\n", s->struct_name.len, s->struct_name.txt); - else + fprintf(f, "\t\tfree(asn);\n"); + } else fprintf(f, "\t\tfree_%.*s(asn);\n", s->struct_name.len, s->struct_name.txt); @@ -2839,6 +2840,12 @@ an error. .word_cont = "", }; parse_calc(s->code, &config, argc > 2 ? stderr : NULL); + while (s) { + struct section *t = s->next; + code_free(s->code); + free(s); + s = t; + } exit(0); }