From 7aab4b0a959f451f7da9ae42745526e10d716ee8 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 24 Apr 2024 23:41:58 +0200
Subject: [PATCH] Clear symbol tables when `exit` is explicitly called in
 scripts

---
 src/language/PugsParser.cpp | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp
index f710ebe9e..77bcd91f5 100644
--- a/src/language/PugsParser.cpp
+++ b/src/language/PugsParser.cpp
@@ -39,6 +39,15 @@
 #include <unordered_map>
 #include <variant>
 
+void
+clear_symbol_tables(std::unique_ptr<ASTNode>& node)
+{
+  for (auto& child : node->children) {
+    clear_symbol_tables(child);
+  }
+  node->m_symbol_table->clearValues();
+}
+
 void
 parser(const std::string& filename)
 {
@@ -96,6 +105,7 @@ parser(const std::string& filename)
     }
     catch (language::Exit& e) {
       ExecutionStatManager::getInstance().setExitCode(e.code());
+      clear_symbol_tables(root_node);
     }
     root_node->m_symbol_table->clearValues();
 
-- 
GitLab