From 843c4427b070226ac6bcb9b1dda4a07b0368fe7b Mon Sep 17 00:00:00 2001 From: houtanb Date: Fri, 23 Jun 2017 18:33:08 +0200 Subject: [PATCH] preprocessor: fix bug in adl implementation that prevented the same parameter from being applied do different endogenosu variables --- SymbolTable.cc | 8 +++++++- SymbolTable.hh | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/SymbolTable.cc b/SymbolTable.cc index d92661e6..dff6b9e1 100644 --- a/SymbolTable.cc +++ b/SymbolTable.cc @@ -657,10 +657,16 @@ SymbolTable::addAdlParameter(const string &basename, int lag) throw (FrozenExcep try { - return addSymbol(varname.str(), eParameter); + int symb_id = addSymbol(varname.str(), eParameter); + adl_params.push_back(symb_id); + return symb_id; } catch (AlreadyDeclaredException &e) { + int symb_id = getID(varname.str()); + if (find(adl_params.begin(), adl_params.end(), symb_id) != adl_params.end()) + return symb_id; + cerr << "ERROR: you should rename your variable called " << varname.str() << ", this name is internally used by Dynare" << endl; exit(EXIT_FAILURE); } diff --git a/SymbolTable.hh b/SymbolTable.hh index bca56d5f..81070b00 100644 --- a/SymbolTable.hh +++ b/SymbolTable.hh @@ -153,6 +153,9 @@ private: //! Stores the list of observed exogenous variables vector varexobs; + //! Stores list of parameters declared in adl substitution + vector adl_params; + public: SymbolTable(); //! Thrown when trying to access an unknown symbol (by name)