From 843c4427b070226ac6bcb9b1dda4a07b0368fe7b Mon Sep 17 00:00:00 2001
From: houtanb <houtan@dynare.org>
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<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)
-- 
GitLab