preprocessor: remove extra exogenous variables. closes #841

issue#70
Houtan Bastani 2015-08-24 12:54:05 +02:00 committed by Stéphane Adjemian (Lupi)
parent d3455d42c1
commit 7591d5b6d3
3 changed files with 17 additions and 14 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008-2016 Dynare Team * Copyright (C) 2008-2017 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -42,7 +42,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all, bool clear
ModFile *mod_file = p.parse(in, debug); ModFile *mod_file = p.parse(in, debug);
// Run checking pass // Run checking pass
mod_file->checkPass(); mod_file->checkPass(nostrict);
// Perform transformations on the model (creation of auxiliary vars and equations) // Perform transformations on the model (creation of auxiliary vars and equations)
mod_file->transformPass(nostrict); mod_file->transformPass(nostrict);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2006-2016 Dynare Team * Copyright (C) 2006-2017 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -107,7 +107,7 @@ ModFile::addStatementAtFront(Statement *st)
} }
void void
ModFile::checkPass() ModFile::checkPass(bool nostrict)
{ {
for (vector<Statement *>::iterator it = statements.begin(); for (vector<Statement *>::iterator it = statements.begin();
it != statements.end(); it++) it != statements.end(); it++)
@ -299,19 +299,22 @@ ModFile::checkPass()
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
// Check if some exogenous is not used in the model block // Check if some exogenous is not used in the model block, Issue #841
set<int> unusedExo = dynamic_model.findUnusedExogenous(); set<int> unusedExo = dynamic_model.findUnusedExogenous();
if (unusedExo.size() > 0) if (unusedExo.size() > 0)
{ {
warnings << "WARNING: some exogenous ("; ostringstream unused_exos;
for (set<int>::const_iterator it = unusedExo.begin(); for (set<int>::iterator it = unusedExo.begin(); it != unusedExo.end(); it++)
it != unusedExo.end(); ) unused_exos << symbol_table.getName(*it) << " ";
if (nostrict)
warnings << "WARNING: " << unused_exos.str()
<< "not used in model block, removed by nostrict command-line option" << endl;
else
{ {
warnings << symbol_table.getName(*it); cerr << "ERROR: " << unused_exos.str() << "not used in model block. To bypass this error, use the `nostrict` option. This may lead to crashes or unexpected behavior." << endl;
if (++it != unusedExo.end()) exit(EXIT_FAILURE);
warnings << ", ";
} }
warnings << ") are declared but not used in the model. This may lead to crashes or unexpected behaviour." << endl;
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2006-2016 Dynare Team * Copyright (C) 2006-2017 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -128,7 +128,7 @@ public:
void evalAllExpressions(bool warn_uninit); void evalAllExpressions(bool warn_uninit);
//! Do some checking and fills mod_file_struct //! Do some checking and fills mod_file_struct
/*! \todo add check for number of equations and endogenous if ramsey_policy is present */ /*! \todo add check for number of equations and endogenous if ramsey_policy is present */
void checkPass(); void checkPass(bool nostrict);
//! Perform some transformations on the model (creation of auxiliary vars and equations) //! Perform some transformations on the model (creation of auxiliary vars and equations)
void transformPass(bool nostrict); void transformPass(bool nostrict);
//! Execute computations //! Execute computations