From 61d5661b96042d3ca63ec99a38c0bd6dce700e8f Mon Sep 17 00:00:00 2001 From: r4 Date: Tue, 21 Dec 2021 14:04:50 +0100 Subject: [PATCH] fix memory leak on error --- parse.c | 2 +- util.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/parse.c b/parse.c index 870070b..8cc8a1e 100644 --- a/parse.c +++ b/parse.c @@ -371,7 +371,7 @@ IRToks parse(TokList *toks) { for (;;) { if (toks->begin->tok.kind == TokOp && toks->begin->tok.Op == OpEOF) break; - TRY_RET(stmt(&s, &global_scope, toks->begin), ir); + TRY_RET_ELSE(stmt(&s, &global_scope, toks->begin), ir, term_scope(&global_scope)); } term_scope(&global_scope); return ir; diff --git a/util.h b/util.h index 89b17c2..ede033f 100644 --- a/util.h +++ b/util.h @@ -32,7 +32,9 @@ extern char errbuf[ERRSZ]; extern bool err; extern size_t err_ln, err_col; #define TRY(expr) {expr; if (err) return;} +#define TRY_ELSE(expr, onerr) {expr; if (err) {onerr; return;}} #define TRY_RET(expr, ret) {expr; if (err) return (ret);} +#define TRY_RET_ELSE(expr, ret, onerr) {expr; if (err) {onerr; return (ret);}} void set_err(const char *fmt, ...); #define ASSERT_UNREACHED() { fprintf(stderr, "Illegal code position reached in %s:%d\n", __FILE__, __LINE__); exit(1); }