From e4916a1d84c89f4e753f6f18dc4cbbbb7f0c45c0 Mon Sep 17 00:00:00 2001 From: Houtan Bastani <houtan.bastani@ens.fr> Date: Mon, 23 Jan 2012 10:52:27 -0500 Subject: [PATCH] preprocessor: display a summary of preprocessor warnings at the end of a Dynare run --- ComputingTasks.cc | 96 ++++++++++++++++++-------------------- ComputingTasks.hh | 76 +++++++++++++++--------------- ConfigFile.cc | 8 ++-- ConfigFile.hh | 6 ++- DynareMain2.cc | 4 +- Makefile.am | 4 +- ModFile.cc | 19 +++++--- ModFile.hh | 5 +- NumericalInitialization.cc | 12 +++-- NumericalInitialization.hh | 11 +++-- ParsingDriver.cc | 7 +-- Statement.cc | 2 +- Statement.hh | 3 +- WarningConsolidation.cc | 88 ++++++++++++++++++++++++++++++++++ WarningConsolidation.hh | 51 ++++++++++++++++++++ 15 files changed, 272 insertions(+), 120 deletions(-) create mode 100644 WarningConsolidation.cc create mode 100644 WarningConsolidation.hh diff --git a/ComputingTasks.cc b/ComputingTasks.cc index fe7a3a8a..a8ac25d4 100644 --- a/ComputingTasks.cc +++ b/ComputingTasks.cc @@ -38,7 +38,7 @@ SteadyStatement::SteadyStatement(const OptionsList &options_list_arg) : } void -SteadyStatement::checkPass(ModFileStructure &mod_file_struct) +SteadyStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.steady_present = true; } @@ -63,7 +63,7 @@ CheckStatement::writeOutput(ostream &output, const string &basename) const } void -CheckStatement::checkPass(ModFileStructure &mod_file_struct) +CheckStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.check_present = true; } @@ -74,7 +74,7 @@ ModelInfoStatement::ModelInfoStatement(const OptionsList &options_list_arg) : } void -ModelInfoStatement::checkPass(ModFileStructure &mod_file_struct) +ModelInfoStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { //mod_file_struct.model_info_present = true; } @@ -92,7 +92,7 @@ SimulStatement::SimulStatement(const OptionsList &options_list_arg) : } void -SimulStatement::checkPass(ModFileStructure &mod_file_struct) +SimulStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.simul_present = true; } @@ -112,7 +112,7 @@ StochSimulStatement::StochSimulStatement(const SymbolList &symbol_list_arg, } void -StochSimulStatement::checkPass(ModFileStructure &mod_file_struct) +StochSimulStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.stoch_simul_present = true; @@ -173,7 +173,7 @@ RamseyPolicyStatement::RamseyPolicyStatement(const SymbolList &symbol_list_arg, } void -RamseyPolicyStatement::checkPass(ModFileStructure &mod_file_struct) +RamseyPolicyStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.ramsey_policy_present = true; @@ -220,7 +220,7 @@ DiscretionaryPolicyStatement::DiscretionaryPolicyStatement(const SymbolList &sym } void -DiscretionaryPolicyStatement::checkPass(ModFileStructure &mod_file_struct) +DiscretionaryPolicyStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.discretionary_policy_present = true; @@ -269,7 +269,7 @@ EstimationStatement::EstimationStatement(const SymbolList &symbol_list_arg, } void -EstimationStatement::checkPass(ModFileStructure &mod_file_struct) +EstimationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.estimation_present = true; @@ -331,20 +331,16 @@ EstimationStatement::checkPass(ModFileStructure &mod_file_struct) } if (options_list.string_options.find("datafile") != options_list.string_options.end()) - cerr << "WARNING: The datafile option of estimation has been deprecated. " - << "Use the data command instead." << endl; + warnings << "WARNING: The datafile option of estimation has been deprecated. Use the data command instead." << endl; if (options_list.string_options.find("xls_sheet") != options_list.string_options.end()) - cerr << "WARNING: The xls_sheet option of estimation has been deprecated. " - << "Use the data command instead." << endl; + warnings << "WARNING: The xls_sheet option of estimation has been deprecated. Use the data command instead." << endl; if (options_list.string_options.find("xls_range") != options_list.string_options.end()) - cerr << "WARNING: The xls_range option of estimation has been deprecated. " - << "Use the data command instead." << endl; + warnings << "WARNING: The xls_range option of estimation has been deprecated. Use the data command instead." << endl; if (options_list.num_options.find("first_obs") != options_list.num_options.end()) - cerr << "WARNING: The first_obs option of estimation has been deprecated. " - << "Use the data command instead." << endl; + warnings << "WARNING: The first_obs option of estimation has been deprecated. Use the data command instead." << endl; } void @@ -361,7 +357,7 @@ DynareSensitivityStatement::DynareSensitivityStatement(const OptionsList &option } void -DynareSensitivityStatement::checkPass(ModFileStructure &mod_file_struct) +DynareSensitivityStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { OptionsList::num_options_t::const_iterator it = options_list.num_options.find("identification"); if (it != options_list.num_options.end() @@ -437,7 +433,7 @@ EstimatedParamsStatement::EstimatedParamsStatement(const vector<EstimationParams } void -EstimatedParamsStatement::checkPass(ModFileStructure &mod_file_struct) +EstimatedParamsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { for (vector<EstimationParams>::const_iterator it = estim_params_list.begin(); it != estim_params_list.end(); it++) @@ -704,7 +700,7 @@ OsrParamsStatement::OsrParamsStatement(const SymbolList &symbol_list_arg) : } void -OsrParamsStatement::checkPass(ModFileStructure &mod_file_struct) +OsrParamsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.osr_params_present = true; } @@ -723,7 +719,7 @@ OsrStatement::OsrStatement(const SymbolList &symbol_list_arg, } void -OsrStatement::checkPass(ModFileStructure &mod_file_struct) +OsrStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.osr_present = true; @@ -762,7 +758,7 @@ OptimWeightsStatement::OptimWeightsStatement(const var_weights_t &var_weights_ar } void -OptimWeightsStatement::checkPass(ModFileStructure &mod_file_struct) +OptimWeightsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.optim_weights_present = true; } @@ -868,7 +864,7 @@ PlannerObjectiveStatement::~PlannerObjectiveStatement() } void -PlannerObjectiveStatement::checkPass(ModFileStructure &mod_file_struct) +PlannerObjectiveStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { assert(model_tree->equation_number() == 1); mod_file_struct.planner_objective_present = true; @@ -899,7 +895,7 @@ BVARDensityStatement::BVARDensityStatement(int maxnlags_arg, const OptionsList & } void -BVARDensityStatement::checkPass(ModFileStructure &mod_file_struct) +BVARDensityStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -918,7 +914,7 @@ BVARForecastStatement::BVARForecastStatement(int nlags_arg, const OptionsList &o } void -BVARForecastStatement::checkPass(ModFileStructure &mod_file_struct) +BVARForecastStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -936,7 +932,7 @@ SBVARStatement::SBVARStatement(const OptionsList &options_list_arg) : } void -SBVARStatement::checkPass(ModFileStructure &mod_file_struct) +SBVARStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -954,7 +950,7 @@ MSSBVAREstimationStatement::MSSBVAREstimationStatement(const OptionsList &option } void -MSSBVAREstimationStatement::checkPass(ModFileStructure &mod_file_struct) +MSSBVAREstimationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -973,7 +969,7 @@ MSSBVARSimulationStatement::MSSBVARSimulationStatement(const OptionsList &option } void -MSSBVARSimulationStatement::checkPass(ModFileStructure &mod_file_struct) +MSSBVARSimulationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -1001,7 +997,7 @@ MSSBVARComputeMDDStatement::MSSBVARComputeMDDStatement(const OptionsList &option } void -MSSBVARComputeMDDStatement::checkPass(ModFileStructure &mod_file_struct) +MSSBVARComputeMDDStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -1020,7 +1016,7 @@ MSSBVARComputeProbabilitiesStatement::MSSBVARComputeProbabilitiesStatement(const } void -MSSBVARComputeProbabilitiesStatement::checkPass(ModFileStructure &mod_file_struct) +MSSBVARComputeProbabilitiesStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; @@ -1049,7 +1045,7 @@ MSSBVARIrfStatement::MSSBVARIrfStatement(const SymbolList &symbol_list_arg, } void -MSSBVARIrfStatement::checkPass(ModFileStructure &mod_file_struct) +MSSBVARIrfStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -1069,7 +1065,7 @@ MSSBVARForecastStatement::MSSBVARForecastStatement(const OptionsList &options_li } void -MSSBVARForecastStatement::checkPass(ModFileStructure &mod_file_struct) +MSSBVARForecastStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -1088,7 +1084,7 @@ MSSBVARVarianceDecompositionStatement::MSSBVARVarianceDecompositionStatement(con } void -MSSBVARVarianceDecompositionStatement::checkPass(ModFileStructure &mod_file_struct) +MSSBVARVarianceDecompositionStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.bvar_present = true; } @@ -1113,7 +1109,7 @@ IdentificationStatement::IdentificationStatement(const OptionsList &options_list } void -IdentificationStatement::checkPass(ModFileStructure &mod_file_struct) +IdentificationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.identification_present = true; } @@ -1215,7 +1211,7 @@ SvarIdentificationStatement::getMaxLag() const } void -SvarIdentificationStatement::checkPass(ModFileStructure &mod_file_struct) +SvarIdentificationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { if (!mod_file_struct.svar_identification_present) mod_file_struct.svar_identification_present = true; @@ -1371,7 +1367,7 @@ MarkovSwitchingStatement::MarkovSwitchingStatement(const OptionsList &options_li } void -MarkovSwitchingStatement::checkPass(ModFileStructure &mod_file_struct) +MarkovSwitchingStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { OptionsList::num_options_t::const_iterator itChain = options_list.num_options.find("ms.chain"); assert(itChain != options_list.num_options.end()); @@ -1488,7 +1484,7 @@ SvarStatement::SvarStatement(const OptionsList &options_list_arg) : } void -SvarStatement::checkPass(ModFileStructure &mod_file_struct) +SvarStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { OptionsList::num_options_t::const_iterator it0, it1, it2; it0 = options_list.string_options.find("ms.coefficients"); @@ -1563,7 +1559,7 @@ EstimationDataStatement::EstimationDataStatement(const OptionsList &options_list } void -EstimationDataStatement::checkPass(ModFileStructure &mod_file_struct) +EstimationDataStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.estimation_data_statement_present = true; @@ -1607,7 +1603,7 @@ BasicPriorStatement::BasicPriorStatement(const string &name_arg, } void -BasicPriorStatement::checkPass(ModFileStructure &mod_file_struct) +BasicPriorStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { if (prior_shape == eNoShape) { @@ -1693,9 +1689,9 @@ PriorStatement::PriorStatement(const string &name_arg, } void -PriorStatement::checkPass(ModFileStructure &mod_file_struct) +PriorStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { - BasicPriorStatement::checkPass(mod_file_struct); + BasicPriorStatement::checkPass(mod_file_struct, warnings); if (!mod_file_struct.prior_statement_present) first_statement_encountered = true; mod_file_struct.prior_statement_present = true; @@ -1733,9 +1729,9 @@ StdPriorStatement::StdPriorStatement(const string &name_arg, } void -StdPriorStatement::checkPass(ModFileStructure &mod_file_struct) +StdPriorStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { - BasicPriorStatement::checkPass(mod_file_struct); + BasicPriorStatement::checkPass(mod_file_struct, warnings); if (!mod_file_struct.std_prior_statement_present) first_statement_encountered = true; mod_file_struct.std_prior_statement_present = true; @@ -1775,9 +1771,9 @@ CorrPriorStatement::CorrPriorStatement(const string &name_arg1, const string &na } void -CorrPriorStatement::checkPass(ModFileStructure &mod_file_struct) +CorrPriorStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { - BasicPriorStatement::checkPass(mod_file_struct); + BasicPriorStatement::checkPass(mod_file_struct, warnings); if (symbol_table.getType(name) != symbol_table.getType(name1)) { cerr << "ERROR: In the corr(A,B).prior statement, A and B must be of the same type. " @@ -1826,7 +1822,7 @@ BasicOptionsStatement::BasicOptionsStatement(const string &name_arg, } void -BasicOptionsStatement::checkPass(ModFileStructure &mod_file_struct) +BasicOptionsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { assert((options_list.num_options.find("date1") != options_list.num_options.end() && options_list.num_options.find("date2") != options_list.num_options.end()) || @@ -1873,9 +1869,9 @@ OptionsStatement::OptionsStatement(const string &name_arg, } void -OptionsStatement::checkPass(ModFileStructure &mod_file_struct) +OptionsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { - BasicOptionsStatement::checkPass(mod_file_struct); + BasicOptionsStatement::checkPass(mod_file_struct, warnings); if (!mod_file_struct.options_statement_present) first_statement_encountered = true; mod_file_struct.options_statement_present = true; @@ -1906,9 +1902,9 @@ StdOptionsStatement::StdOptionsStatement(const string &name_arg, } void -StdOptionsStatement::checkPass(ModFileStructure &mod_file_struct) +StdOptionsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { - BasicOptionsStatement::checkPass(mod_file_struct); + BasicOptionsStatement::checkPass(mod_file_struct, warnings); if (!mod_file_struct.std_options_statement_present) first_statement_encountered = true; mod_file_struct.std_options_statement_present = true; @@ -1942,7 +1938,7 @@ CorrOptionsStatement::CorrOptionsStatement(const string &name_arg1, const string } void -CorrOptionsStatement::checkPass(ModFileStructure &mod_file_struct) +CorrOptionsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { if (symbol_table.getType(name) != symbol_table.getType(name1)) { diff --git a/ComputingTasks.hh b/ComputingTasks.hh index baaa0ac8..46e1896d 100644 --- a/ComputingTasks.hh +++ b/ComputingTasks.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 Dynare Team + * Copyright (C) 2003-2012 Dynare Team * * This file is part of Dynare. * @@ -34,7 +34,7 @@ private: const OptionsList options_list; public: SteadyStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -44,7 +44,7 @@ private: const OptionsList options_list; public: CheckStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -54,7 +54,7 @@ private: const OptionsList options_list; public: SimulStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -64,7 +64,7 @@ private: const OptionsList options_list; public: ModelInfoStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -76,7 +76,7 @@ private: public: StochSimulStatement(const SymbolList &symbol_list_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -99,7 +99,7 @@ private: public: RamseyPolicyStatement(const SymbolList &symbol_list_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -111,7 +111,7 @@ private: public: DiscretionaryPolicyStatement(const SymbolList &symbol_list_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -162,7 +162,7 @@ public: EstimationStatement(const SymbolList &symbol_list_arg, const OptionsList &options_list_arg, const SymbolTable &symbol_table); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -172,7 +172,7 @@ private: const OptionsList options_list; public: DynareSensitivityStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -195,7 +195,7 @@ private: const SymbolList symbol_list; public: OsrParamsStatement(const SymbolList &symbol_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -207,7 +207,7 @@ private: public: OsrStatement(const SymbolList &symbol_list_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -281,7 +281,7 @@ private: public: EstimatedParamsStatement(const vector<EstimationParams> &estim_params_list_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -320,7 +320,7 @@ public: OptimWeightsStatement(const var_weights_t &var_weights_arg, const covar_weights_t &covar_weights_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -337,7 +337,7 @@ public: virtual ~PlannerObjectiveStatement(); /*! \todo check there are only endogenous variables at the current period in the objective (no exogenous, no lead/lag) */ - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); /*! \todo allow for the possibility of disabling temporary terms */ virtual void computingPass(); virtual void writeOutput(ostream &output, const string &basename) const; @@ -352,7 +352,7 @@ private: const OptionsList options_list; public: BVARDensityStatement(int maxnlags_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -363,7 +363,7 @@ private: const OptionsList options_list; public: BVARForecastStatement(int nlags_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -373,7 +373,7 @@ private: const OptionsList options_list; public: SBVARStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -383,7 +383,7 @@ private: const OptionsList options_list; public: MSSBVAREstimationStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -393,7 +393,7 @@ private: const OptionsList options_list; public: MSSBVARSimulationStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -403,7 +403,7 @@ private: const OptionsList options_list; public: MSSBVARComputeMDDStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -413,7 +413,7 @@ private: const OptionsList options_list; public: MSSBVARComputeProbabilitiesStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -425,7 +425,7 @@ private: public: MSSBVARIrfStatement(const SymbolList &symbol_list_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -435,7 +435,7 @@ private: const OptionsList options_list; public: MSSBVARForecastStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -445,7 +445,7 @@ private: const OptionsList options_list; public: MSSBVARVarianceDecompositionStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -455,7 +455,7 @@ private: OptionsList options_list; public: IdentificationStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -535,7 +535,7 @@ public: const bool &lower_cholesky_present_arg, const bool &constants_exclusion_present_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -546,7 +546,7 @@ private: map <pair<int, int >, double > restriction_map; public: MarkovSwitchingStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -556,7 +556,7 @@ private: const OptionsList options_list; public: SvarStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -575,7 +575,7 @@ private: const OptionsList options_list; public: EstimationDataStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -593,7 +593,7 @@ protected: const PriorDistributions &prior_shape_arg, const expr_t &variance_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); void get_base_name(const SymbolType symb_type, string &lhs_field) const; void writePriorIndex(ostream &output, const string &lhs_field) const; void writeVarianceOption(ostream &output, const string &lhs_field) const; @@ -608,7 +608,7 @@ public: const PriorDistributions &prior_shape_arg, const expr_t &variance_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -622,7 +622,7 @@ public: const expr_t &variance_arg, const OptionsList &options_list_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -638,7 +638,7 @@ public: const expr_t &variance_arg, const OptionsList &options_list_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -653,7 +653,7 @@ protected: BasicOptionsStatement(const string &name_arg, const OptionsList &options_list_arg); void get_base_name(const SymbolType symb_type, string &lhs_field) const; - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); void writeOptionsIndex(ostream &output, const string &lhs_field) const; void writeOutputHelper(ostream &output, const string &field, const string &lhs_field) const; }; @@ -662,7 +662,7 @@ class OptionsStatement : public BasicOptionsStatement { public: OptionsStatement(const string &name_arg, const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -673,7 +673,7 @@ private: public: StdOptionsStatement(const string &name_arg, const OptionsList &options_list_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -685,7 +685,7 @@ private: public: CorrOptionsStatement(const string &name_arg1, const string &name_arg2, const OptionsList &options_list_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; diff --git a/ConfigFile.cc b/ConfigFile.cc index 734c32c5..eccd1d28 100644 --- a/ConfigFile.cc +++ b/ConfigFile.cc @@ -371,7 +371,7 @@ ConfigFile::addConfFileElement(bool inNode, bool inCluster, member_nodes_t membe } void -ConfigFile::checkPass() const +ConfigFile::checkPass(WarningConsolidation &warnings) const { if (!parallel && !parallel_test) return; @@ -389,9 +389,9 @@ ConfigFile::checkPass() const #if !defined(_WIN32) && !defined(__CYGWIN32__) //For Linux/Mac, check that cpuNbr starts at 0 if (it->second->minCpuNbr != 0) - cerr << "WARNING: On Unix-based operating systems, you cannot specify the CPU that is used" << endl - << " in parallel processing. This will be adjusted for you such that the same" << endl - << " number of CPUs are used." << endl; + warnings << "WARNING: On Unix-based operating systems, you cannot specify the CPU that is " + << "used in parallel processing. This will be adjusted for you such that the " + << "same number of CPUs are used." << endl; #endif if (!it->second->computerName.compare("localhost")) // We are working locally { diff --git a/ConfigFile.hh b/ConfigFile.hh index 5a591e70..c3f56f68 100644 --- a/ConfigFile.hh +++ b/ConfigFile.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Dynare Team + * Copyright (C) 2010-2012 Dynare Team * * This file is part of Dynare. * @@ -23,6 +23,8 @@ #include <map> #include <vector> +#include "WarningConsolidation.hh" + using namespace std; typedef map<string, double> member_nodes_t; @@ -90,7 +92,7 @@ public: //! Parse config file void getConfigFileInfo(const string ¶llel_config_file); //! Check Pass - void checkPass() const; + void checkPass(WarningConsolidation &warnings) const; //! Check Pass void transformPass(); //! Create options_.parallel structure, write options diff --git a/DynareMain2.cc b/DynareMain2.cc index 9c25eafa..0892ec27 100644 --- a/DynareMain2.cc +++ b/DynareMain2.cc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 Dynare Team + * Copyright (C) 2008-2012 Dynare Team * * This file is part of Dynare. * @@ -43,7 +43,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tm // Run checking pass mod_file->checkPass(); - config_file.checkPass(); + config_file.checkPass(mod_file->warnings); // Perform transformations on the model (creation of auxiliary vars and equations) mod_file->transformPass(); diff --git a/Makefile.am b/Makefile.am index d1f6b272..38cf4082 100644 --- a/Makefile.am +++ b/Makefile.am @@ -51,7 +51,9 @@ dynare_m_SOURCES = \ ExternalFunctionsTable.cc \ ExternalFunctionsTable.hh \ SteadyStateModel.hh \ - SteadyStateModel.cc + SteadyStateModel.cc \ + WarningConsolidation.hh \ + WarningConsolidation.cc # The -I. is for <FlexLexer.h> dynare_m_CPPFLAGS = $(BOOST_CPPFLAGS) -I. diff --git a/ModFile.cc b/ModFile.cc index 709ea4ec..b6d33b6d 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -80,7 +80,8 @@ ModFile::evalAllExpressions(bool warn_uninit) && 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; + warnings << "WARNING: Can't find a numeric initial value for " + << symbol_table.getName(id) << ", using zero" << endl; global_eval_context[id] = 0; } } @@ -103,7 +104,7 @@ ModFile::checkPass() { for (vector<Statement *>::iterator it = statements.begin(); it != statements.end(); it++) - (*it)->checkPass(mod_file_struct); + (*it)->checkPass(mod_file_struct, warnings); // Check the steady state block steady_state_model.checkPass(mod_file_struct.ramsey_policy_present); @@ -192,8 +193,9 @@ ModFile::checkPass() exit(EXIT_FAILURE); } else - cerr << "WARNING: When estimating a DSGE-Var, declaring dsge_prior_weight as a parameter is deprecated. " - << "The preferred method is to do this via the dsge_var option in the estimation statement." << endl; + warnings << "WARNING: When estimating a DSGE-Var, declaring dsge_prior_weight as a " + << "parameter is deprecated. The preferred method is to do this via " + << "the dsge_var option in the estimation statement." << endl; if (mod_file_struct.dsge_var_estimated || !mod_file_struct.dsge_var_calibrated.empty()) { @@ -617,9 +619,12 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool console, config_file.writeEndParallel(mOutputFile); - mOutputFile << endl << endl - << "disp(['Total computing time : ' dynsec2hms(toc) ]);" << endl - << "diary off" << endl; + mOutputFile << endl << endl + << "disp(['Total computing time : ' dynsec2hms(toc) ]);" << endl; + + warnings.writeOutput(mOutputFile); + + mOutputFile << "diary off" << endl; mOutputFile.close(); diff --git a/ModFile.hh b/ModFile.hh index e45d5c42..cc2c8d4d 100644 --- a/ModFile.hh +++ b/ModFile.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2010 Dynare Team + * Copyright (C) 2006-2012 Dynare Team * * This file is part of Dynare. * @@ -34,6 +34,7 @@ using namespace std; #include "Statement.hh" #include "ExternalFunctionsTable.hh" #include "ConfigFile.hh" +#include "WarningConsolidation.hh" //! The abstract representation of a "mod" file class ModFile @@ -84,6 +85,8 @@ public: //! Stores the original number of equations in the model_block int ramsey_policy_orig_eqn_nbr; + //! Warnings Encountered + WarningConsolidation warnings; private: //! List of statements vector<Statement *> statements; diff --git a/NumericalInitialization.cc b/NumericalInitialization.cc index 0beb0a23..63d1d73a 100644 --- a/NumericalInitialization.cc +++ b/NumericalInitialization.cc @@ -19,6 +19,7 @@ #include <iostream> #include <fstream> +#include <sstream> #include <cstdlib> #include "NumericalInitialization.hh" @@ -33,7 +34,7 @@ InitParamStatement::InitParamStatement(int symb_id_arg, } void -InitParamStatement::checkPass(ModFileStructure &mod_file_struct) +InitParamStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { if (symbol_table.getName(symb_id) == "dsge_prior_weight") mod_file_struct.dsge_prior_weight_initialized = true; @@ -147,7 +148,7 @@ EndValStatement::EndValStatement(const init_values_t &init_values_arg, } void -EndValStatement::checkPass(ModFileStructure &mod_file_struct) +EndValStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { if (mod_file_struct.shocks_present) { @@ -177,7 +178,7 @@ HistValStatement::HistValStatement(const hist_values_t &hist_values_arg, } void -HistValStatement::checkPass(ModFileStructure &mod_file_struct) +HistValStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { mod_file_struct.histval_present = true; } @@ -298,7 +299,8 @@ SaveParamsAndSteadyStateStatement::writeOutput(ostream &output, const string &ba } LoadParamsAndSteadyStateStatement::LoadParamsAndSteadyStateStatement(const string &filename, - const SymbolTable &symbol_table_arg) : + const SymbolTable &symbol_table_arg, + WarningConsolidation &warnings) : symbol_table(symbol_table_arg) { cout << "Reading " << filename << "." << endl; @@ -325,7 +327,7 @@ LoadParamsAndSteadyStateStatement::LoadParamsAndSteadyStateStatement(const strin } catch (SymbolTable::UnknownSymbolNameException &e) { - cerr << "WARNING: Unknown symbol " << symb_name << " in " << filename << endl; + warnings << "WARNING: Unknown symbol " << symb_name << " in " << filename << endl; } } f.close(); diff --git a/NumericalInitialization.hh b/NumericalInitialization.hh index d791acac..e5ae059c 100644 --- a/NumericalInitialization.hh +++ b/NumericalInitialization.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 Dynare Team + * Copyright (C) 2003-2012 Dynare Team * * This file is part of Dynare. * @@ -39,7 +39,7 @@ private: public: InitParamStatement(int symb_id_arg, const expr_t param_value_arg, const SymbolTable &symbol_table_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; //! Fill eval context with parameter value void fillEvalContext(eval_context_t &eval_context) const; @@ -81,7 +81,7 @@ public: EndValStatement(const init_values_t &init_values_arg, const SymbolTable &symbol_table_arg); //! Workaround for trac ticket #35 - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -101,7 +101,7 @@ public: HistValStatement(const hist_values_t &hist_values_arg, const SymbolTable &symbol_table_arg); //! Workaround for trac ticket #157 - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -147,7 +147,8 @@ private: map<int, string> content; public: LoadParamsAndSteadyStateStatement(const string &filename, - const SymbolTable &symbol_table_arg); + const SymbolTable &symbol_table_arg, + WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; //! Fill eval context with parameters/variables values void fillEvalContext(eval_context_t &eval_context) const; diff --git a/ParsingDriver.cc b/ParsingDriver.cc index a35ee57d..cf58b330 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 Dynare Team + * Copyright (C) 2003-2012 Dynare Team * * This file is part of Dynare. * @@ -27,6 +27,7 @@ #include "ParsingDriver.hh" #include "Statement.hh" #include "ExprNode.hh" +#include "WarningConsolidation.hh" bool ParsingDriver::symbol_exists_and_is_not_modfile_local_or_external_function(const char *s) @@ -117,7 +118,7 @@ ParsingDriver::error(const string &m) void ParsingDriver::warning(const string &m) { - cerr << "WARNING: " << location << ": " << m << endl; + mod_file->warnings << "WARNING: " << location << ": " << m << endl; } void @@ -1541,7 +1542,7 @@ ParsingDriver::run_dynasave(string *filename) void ParsingDriver::run_load_params_and_steady_state(string *filename) { - mod_file->addStatement(new LoadParamsAndSteadyStateStatement(*filename, mod_file->symbol_table)); + mod_file->addStatement(new LoadParamsAndSteadyStateStatement(*filename, mod_file->symbol_table, mod_file->warnings)); delete filename; } diff --git a/Statement.cc b/Statement.cc index 67ca01a1..6165b8fb 100644 --- a/Statement.cc +++ b/Statement.cc @@ -60,7 +60,7 @@ Statement::~Statement() } void -Statement::checkPass(ModFileStructure &mod_file_struct) +Statement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { } diff --git a/Statement.hh b/Statement.hh index ccfcbaeb..5625c24f 100644 --- a/Statement.hh +++ b/Statement.hh @@ -27,6 +27,7 @@ using namespace std; #include <map> #include "SymbolList.hh" +#include "WarningConsolidation.hh" class ModFileStructure { @@ -109,7 +110,7 @@ class Statement public: virtual ~Statement(); //! Do some internal check, and fill the ModFileStructure class - virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void computingPass(); //! Write Matlab output code /*! diff --git a/WarningConsolidation.cc b/WarningConsolidation.cc new file mode 100644 index 00000000..7b9be917 --- /dev/null +++ b/WarningConsolidation.cc @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2012 Dynare Team + * + * This file is part of Dynare. + * + * Dynare is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dynare is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dynare. If not, see <http://www.gnu.org/licenses/>. + */ + +using namespace std; + +#include "WarningConsolidation.hh" +#include <ostream> + +WarningConsolidation& +operator<< (WarningConsolidation& wcc, const string &warning) +{ + cerr << warning; + wcc.addWarning(warning); + return wcc; +}; + +WarningConsolidation& +operator<< (WarningConsolidation& wcc, const Dynare::location& loc) +{ + stringstream ostr; + Dynare::position last = loc.end - 1; + ostr << loc.begin; + if (last.filename + && (!loc.begin.filename + || *loc.begin.filename != *last.filename)) + ostr << '-' << last; + else if (loc.begin.line != last.line) + ostr << '-' << last.line << '.' << last.column; + else if (loc.begin.column != last.column) + ostr << '-' << last.column; + + cerr << ostr.str(); + wcc.addWarning(ostr.str()); + return wcc; +}; + +WarningConsolidation& +operator<< (WarningConsolidation& wcc, ostream& (*pf) (ostream&)) +{ + cerr << pf; + wcc.addWarning(pf); + return wcc; +} + +void +WarningConsolidation::writeOutput(ostream &output) const +{ + if (warnings.str().empty()) + return; + + output << "disp([char(10) 'Dynare Preprocessor Warning(s) Encountered:']);" << endl; + + bool writedisp = true; + string warningsstr = warnings.str(); + for (size_t i = 0; i < warningsstr.length(); i++) + { + if (writedisp) + { + output << "disp(' "; + writedisp = false; + } + + if (warningsstr[i] != '\n') + output << warningsstr[i]; + else + { + output << "');" << endl; + if (i+1 < warningsstr.length()) + writedisp = true; + } + } +} diff --git a/WarningConsolidation.hh b/WarningConsolidation.hh new file mode 100644 index 00000000..8efbbc2e --- /dev/null +++ b/WarningConsolidation.hh @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2012 Dynare Team + * + * This file is part of Dynare. + * + * Dynare is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dynare is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dynare. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _WARNINGCONSOLIDATION_HH +#define _WARNINGCONSOLIDATION_HH + +using namespace std; + +#include <sstream> +#include <string> +#include "location.hh" + +//! Stores Warnings issued by the Preprocessor +class WarningConsolidation +{ +private: + stringstream warnings; + +public: + WarningConsolidation() { }; + ~WarningConsolidation() { }; + + //! Add A Warning to the StringStream + friend WarningConsolidation& operator<< (WarningConsolidation& wcc, const string &warning); + friend WarningConsolidation& operator<< (WarningConsolidation& wcc, const Dynare::location &loc); + friend WarningConsolidation& operator<< (WarningConsolidation& wcc, ostream& (*pf) (ostream&)); + + inline void addWarning(const string w) { warnings << w; }; + inline void addWarning(ostream& (*pf) (ostream&)) { warnings << pf; }; + + //! Write Warnings to m file + void writeOutput(ostream &output) const; +}; + +#endif -- GitLab