From 19048bdcae5ddbac401f13e18dcfd98509c74230 Mon Sep 17 00:00:00 2001
From: Houtan Bastani <houtan@dynare.org>
Date: Mon, 9 Jul 2018 14:39:13 +0200
Subject: [PATCH] Allow for the declaration of endogenous, exogenous,
 parameters on-the-fly in equation tags

---
 src/ParsingDriver.cc | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 1549aba6..f822f7c2 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -369,9 +369,34 @@ ParsingDriver::add_predetermined_variable(string *name)
 void
 ParsingDriver::add_equation_tags(string *key, string *value)
 {
-  eq_tags.emplace_back(*key, *value);
+  bool variable_declared = false;
+  string key_lowercase = *key;
+  transform(key_lowercase.begin(), key_lowercase.end(), key_lowercase.begin(), ::tolower);
+  if (key_lowercase.compare("endogenous") == 0)
+    {
+      declare_or_change_type(eEndogenous, value);
+      variable_declared = true;
+    }
+
+  if (key_lowercase.compare("exogenous") == 0)
+    {
+      declare_or_change_type(eExogenous, value);
+      variable_declared = true;
+    }
+
+  if (key_lowercase.compare("parameter") == 0)
+    {
+      declare_or_change_type(eParameter, value);
+      variable_declared = true;
+    }
+
+  if (!variable_declared)
+    {
+      eq_tags.emplace_back(*key, *value);
+      delete value;
+    }
+
   delete key;
-  delete value;
 }
 
 expr_t
-- 
GitLab