From 6d0b8e559e926ed9043538d354eab59411bd12b9 Mon Sep 17 00:00:00 2001
From: Houtan Bastani <houtan.bastani@ens.fr>
Date: Thu, 3 Mar 2011 16:03:21 +0100
Subject: [PATCH] bug fix: check that planner_objective and ramsey_policy
 statements appear together

---
 preprocessor/ComputingTasks.cc | 1 +
 preprocessor/ModFile.cc        | 7 +++++++
 preprocessor/Statement.cc      | 1 +
 preprocessor/Statement.hh      | 2 ++
 4 files changed, 11 insertions(+)

diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc
index 7d917e3555..38b0e8ba0a 100644
--- a/preprocessor/ComputingTasks.cc
+++ b/preprocessor/ComputingTasks.cc
@@ -785,6 +785,7 @@ void
 PlannerObjectiveStatement::checkPass(ModFileStructure &mod_file_struct)
 {
   assert(model_tree->equation_number() == 1);
+  mod_file_struct.planner_objective_present = true;
 }
 
 void
diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc
index 44a7225d5b..1499e8dc8b 100644
--- a/preprocessor/ModFile.cc
+++ b/preprocessor/ModFile.cc
@@ -123,6 +123,13 @@ ModFile::checkPass()
       exit(EXIT_FAILURE);
     }
 
+  if ((mod_file_struct.ramsey_policy_present && !mod_file_struct.planner_objective_present)
+      || (!mod_file_struct.ramsey_policy_present && mod_file_struct.planner_objective_present))
+    {
+      cerr << "ERROR: A planner_objective statement must be used with a ramsey_policy statement and vice versa." << endl;
+      exit(EXIT_FAILURE);
+    }
+
   if (mod_file_struct.simul_present && stochastic_statement_present)
     {
       cerr << "ERROR: A .mod file cannot contain both a simul command and one of {stoch_simul, estimation, osr, ramsey_policy}" << endl;
diff --git a/preprocessor/Statement.cc b/preprocessor/Statement.cc
index 8cff67d989..c9b2945221 100644
--- a/preprocessor/Statement.cc
+++ b/preprocessor/Statement.cc
@@ -27,6 +27,7 @@ ModFileStructure::ModFileStructure() :
   estimation_present(false),
   osr_present(false),
   ramsey_policy_present(false),
+  planner_objective_present(false),
   order_option(0),
   bvar_present(false),
   svar_identification_present(false),
diff --git a/preprocessor/Statement.hh b/preprocessor/Statement.hh
index 27a8b3d2a7..2778771bb2 100644
--- a/preprocessor/Statement.hh
+++ b/preprocessor/Statement.hh
@@ -46,6 +46,8 @@ public:
   bool osr_present;
   //! Whether a ramsey_policy statement is present
   bool ramsey_policy_present;
+  //! Whether a planner_objective statement is present
+  bool planner_objective_present;
   //! The value of the "order" option of stoch_simul, estimation, osr, ramsey_policy
   //! Derivation order
   /*! First initialized to zero. If user sets order option somewhere in the MOD file, it will be equal to the maximum of order options. Otherwise will default to 2 */
-- 
GitLab