From 9e618843492b580e069e7b3ba38adab1bdfcb6cc Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 14 Apr 2020 06:53:20 -0700 Subject: load: release warnings before throwing exception. * eval.c (load): When we parse TXR code, let's not release warnings unconditionally. Let's do that when throwing an exception though due to parse errors. If the load is not recursed it will release warnings at the bottom of the function. * match.c (v_load): Consistently with load, release deferred warnings if throwing exception due to the parse having failed. --- eval.c | 7 ++++--- match.c | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/eval.c b/eval.c index b7cc387d..7b3a765d 100644 --- a/eval.c +++ b/eval.c @@ -4444,11 +4444,12 @@ val load(val target) close_stream(stream, nil); - uw_release_deferred_warnings(); - - if (parser->errors) + if (parser->errors) { + uw_release_deferred_warnings(); uw_throwf(query_error_s, lit("~a: parser errors in ~a"), self, path, nao); + } + { val match_ctx = uw_get_match_context(); val bindings = cdr(match_ctx); diff --git a/match.c b/match.c index 5a711b1b..86156193 100644 --- a/match.c +++ b/match.c @@ -4408,8 +4408,10 @@ static val v_load(match_files_ctx *c) parse_once(self, stream, name); gc_state(gc); - if (parser->errors) + if (parser->errors) { + uw_release_deferred_warnings(); sem_error(specline, lit("~s: errors encountered in ~a"), sym, path, nao); + } if (sym == include_s) { ret = parser->syntax_tree; -- cgit v1.2.3