From 696763de8346c0c469e7d6ac5fa81f5a1a1af16b Mon Sep 17 00:00:00 2001
From: Michel Juillard <michel.juillard@mjui.fr>
Date: Sun, 25 Sep 2011 20:21:30 +0200
Subject: [PATCH] preprocessor, auxiliary variables: corrects an ordering
 problem (closes: #214) (manual cherry-pick from
 347ab4d0c0c79ae9a42898c1d5409d78708bb8a8 and
 762f31bafd4b3a58c5a31c4e7d538d232e15a094)

---
 preprocessor/DynamicModel.cc     | 10 ++++++++--
 preprocessor/SteadyStateModel.cc |  2 +-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/preprocessor/DynamicModel.cc b/preprocessor/DynamicModel.cc
index a3efc2a64..4bb697c4c 100644
--- a/preprocessor/DynamicModel.cc
+++ b/preprocessor/DynamicModel.cc
@@ -3603,8 +3603,14 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
   for (int i = 0; i < (int) neweqs.size(); i++)
     addEquation(neweqs[i]);
 
-  // Add the new set of equations at the *beginning* of aux_equations
-  copy(neweqs.rbegin(), neweqs.rend(), front_inserter(aux_equations));
+  // Order of auxiliary variable definition equations:
+  //  - expectation (entered before this function is called)
+  //  - lead variables from lower lead to higher lead (need to be listed in reverse order)
+  //  - lag variables from lower lag to higher lag
+  if ((type == avEndoLead) || (type == avExoLead))
+    copy(neweqs.rbegin(), neweqs.rend(), back_inserter(aux_equations));
+  else
+    copy(neweqs.begin(), neweqs.end(), back_inserter(aux_equations));
 
   if (neweqs.size() > 0)
     {
diff --git a/preprocessor/SteadyStateModel.cc b/preprocessor/SteadyStateModel.cc
index a222aa327..d665428bb 100644
--- a/preprocessor/SteadyStateModel.cc
+++ b/preprocessor/SteadyStateModel.cc
@@ -121,7 +121,7 @@ SteadyStateModel::writeSteadyStateFile(const string &basename, bool ramsey_polic
   output << ", exo_)" << endl
          << "% Steady state generated by Dynare preprocessor" << endl;
   if (!ramsey_policy)
-    output << "    ys_=zeros(" << symbol_table.orig_endo_nbr() << ",1);" << endl;
+    output << "    ys_=zeros(" << symbol_table.endo_nbr() << ",1);" << endl;
   output << "    global M_" << endl;
 
   for (size_t i = 0; i < recursive_order.size(); i++)
-- 
GitLab