diff --git a/SymbolTable.cc b/SymbolTable.cc index d92661e6f0954f92e1aa717a6df01146aa80f21d..dff6b9e1b2b6573bcb30df08e29da3f009fc98dd 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 bca56d5f4631de60b47c0948915e98f4c7f5fca5..81070b00cd0177a758ae626c352c152fdcc9dbe4 100644 --- a/SymbolTable.hh +++ b/SymbolTable.hh @@ -153,6 +153,9 @@ private: //! Stores the list of observed exogenous variables vector<int> varexobs; + //! Stores list of parameters declared in adl substitution + vector<int> adl_params; + public: SymbolTable(); //! Thrown when trying to access an unknown symbol (by name)