Skip to content
Snippets Groups Projects
Commit bd43182a authored by sebastien's avatar sebastien
Browse files

* preprocessor: make optional the warnings about uninitialized...

* preprocessor: make optional the warnings about uninitialized parameters/endogenous/exogenous, added a new "warn_uninit" option to dynare command to display them
* reference manual: documented the new option, fixed XML conformance of the document


git-svn-id: https://www.dynare.org/svn/dynare/trunk@3135 ac1d8469-bf42-47a9-8791-bf33cf982152
parent 51e1a776
No related branches found
No related tags found
No related merge requests found
...@@ -34,12 +34,12 @@ using namespace std; ...@@ -34,12 +34,12 @@ using namespace std;
Splitting main() in two parts was necessary because ParsingDriver.h and MacroDriver.h can't be Splitting main() in two parts was necessary because ParsingDriver.h and MacroDriver.h can't be
included simultaneously (because of Bison limitations). included simultaneously (because of Bison limitations).
*/ */
void main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms); void main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms, bool warn_uninit);
void void
usage() usage()
{ {
cerr << "Dynare usage: dynare mod_file [debug] [noclearall] [savemacro[=macro_file]] [onlymacro] [nolinemacro] [notmpterms]" << endl; cerr << "Dynare usage: dynare mod_file [debug] [noclearall] [savemacro[=macro_file]] [onlymacro] [nolinemacro] [notmpterms] [warn_uninit]" << endl;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -59,6 +59,7 @@ main(int argc, char** argv) ...@@ -59,6 +59,7 @@ main(int argc, char** argv)
bool no_tmp_terms = false; bool no_tmp_terms = false;
bool only_macro = false; bool only_macro = false;
bool no_line_macro = false; bool no_line_macro = false;
bool warn_uninit = false;
// Parse options // Parse options
for (int arg = 2; arg < argc; arg++) for (int arg = 2; arg < argc; arg++)
...@@ -86,6 +87,8 @@ main(int argc, char** argv) ...@@ -86,6 +87,8 @@ main(int argc, char** argv)
no_line_macro = true; no_line_macro = true;
else if (!strcmp(argv[arg], "notmpterms")) else if (!strcmp(argv[arg], "notmpterms"))
no_tmp_terms = true; no_tmp_terms = true;
else if (!strcmp(argv[arg], "warn_uninit"))
warn_uninit = true;
else else
{ {
cerr << "Unknown option: " << argv[arg] << endl; cerr << "Unknown option: " << argv[arg] << endl;
...@@ -125,7 +128,7 @@ main(int argc, char** argv) ...@@ -125,7 +128,7 @@ main(int argc, char** argv)
return EXIT_SUCCESS; return EXIT_SUCCESS;
// Do the rest // Do the rest
main2(macro_output, basename, debug, clear_all, no_tmp_terms); main2(macro_output, basename, debug, clear_all, no_tmp_terms, warn_uninit);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
...@@ -25,7 +25,8 @@ using namespace std; ...@@ -25,7 +25,8 @@ using namespace std;
#include "ModFile.hh" #include "ModFile.hh"
void void
main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms) main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms,
bool warn_uninit)
{ {
ParsingDriver p; ParsingDriver p;
...@@ -39,7 +40,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tm ...@@ -39,7 +40,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tm
mod_file->transformPass(); mod_file->transformPass();
// Evaluate parameters initialization, initval, endval and pounds // Evaluate parameters initialization, initval, endval and pounds
mod_file->evalAllExpressions(); mod_file->evalAllExpressions(warn_uninit);
// Do computations // Do computations
mod_file->computingPass(no_tmp_terms); mod_file->computingPass(no_tmp_terms);
......
...@@ -40,7 +40,7 @@ ModFile::~ModFile() ...@@ -40,7 +40,7 @@ ModFile::~ModFile()
} }
void void
ModFile::evalAllExpressions() ModFile::evalAllExpressions(bool warn_uninit)
{ {
cout << "Evaluating expressions..."; cout << "Evaluating expressions...";
...@@ -73,6 +73,7 @@ ModFile::evalAllExpressions() ...@@ -73,6 +73,7 @@ ModFile::evalAllExpressions()
|| type == eParameter || type == eModelLocalVariable) || type == eParameter || type == eModelLocalVariable)
&& global_eval_context.find(id) == global_eval_context.end()) && global_eval_context.find(id) == global_eval_context.end())
{ {
if (warn_uninit)
cerr << "WARNING: can't find a numeric initial value for " << symbol_table.getName(id) << ", using zero" << endl; cerr << "WARNING: can't find a numeric initial value for " << symbol_table.getName(id) << ", using zero" << endl;
global_eval_context[id] = 0; global_eval_context[id] = 0;
} }
......
...@@ -77,7 +77,8 @@ public: ...@@ -77,7 +77,8 @@ public:
//! Add a statement //! Add a statement
void addStatement(Statement *st); void addStatement(Statement *st);
//! Evaluate all the statements //! Evaluate all the statements
void evalAllExpressions(); /*! \param warn_uninit Should a warning be displayed for uninitialized endogenous/exogenous/parameters ? */
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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment