From 19048bdcae5ddbac401f13e18dcfd98509c74230 Mon Sep 17 00:00:00 2001 From: Houtan Bastani 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