Amend the workaround for ticket #35, so that shocks+endval+simul can looped over

issue#70
Sébastien Villemot 2012-07-30 17:01:20 +02:00
parent dbec61ba62
commit 1c98c34724
5 changed files with 13 additions and 8 deletions

View File

@ -95,6 +95,9 @@ void
SimulStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) SimulStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
{ {
mod_file_struct.simul_present = true; mod_file_struct.simul_present = true;
// The following is necessary to allow shocks+endval+simul in a loop
mod_file_struct.shocks_present_but_simul_not_yet = false;
} }
void void

View File

@ -150,9 +150,9 @@ EndValStatement::EndValStatement(const init_values_t &init_values_arg,
void void
EndValStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) EndValStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
{ {
if (mod_file_struct.shocks_present) if (mod_file_struct.shocks_present_but_simul_not_yet)
{ {
cerr << "ERROR: Putting a \"shocks\" block before an \"endval\" block is not permitted. Please swap the two blocks. This limitation will be removed in the next major release of Dynare." << endl; cerr << "ERROR: Putting a \"shocks\" block before an \"endval\" block is not permitted. Please swap the two blocks. This limitation will be removed in a future release of Dynare." << endl;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }

View File

@ -196,7 +196,7 @@ void
ShocksStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) ShocksStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
{ {
// Workaround for trac ticket #35 // Workaround for trac ticket #35
mod_file_struct.shocks_present = true; mod_file_struct.shocks_present_but_simul_not_yet = true;
// Determine if there is a calibrated measurement error // Determine if there is a calibrated measurement error
for (var_and_std_shocks_t::const_iterator it = var_shocks.begin(); for (var_and_std_shocks_t::const_iterator it = var_shocks.begin();
@ -245,7 +245,7 @@ void
MShocksStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) MShocksStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
{ {
// Workaround for trac ticket #35 // Workaround for trac ticket #35
mod_file_struct.shocks_present = true; mod_file_struct.shocks_present_but_simul_not_yet = true;
} }
ConditionalForecastPathsStatement::ConditionalForecastPathsStatement(const AbstractShocksStatement::det_shocks_t &paths_arg, const SymbolTable &symbol_table_arg) : ConditionalForecastPathsStatement::ConditionalForecastPathsStatement(const AbstractShocksStatement::det_shocks_t &paths_arg, const SymbolTable &symbol_table_arg) :

View File

@ -37,7 +37,7 @@ ModFileStructure::ModFileStructure() :
identification_present(false), identification_present(false),
estimation_analytic_derivation(false), estimation_analytic_derivation(false),
partial_information(false), partial_information(false),
shocks_present(false), shocks_present_but_simul_not_yet(false),
histval_present(false), histval_present(false),
k_order_solver(false), k_order_solver(false),
calibrated_measurement_errors(false), calibrated_measurement_errors(false),

View File

@ -69,9 +69,11 @@ public:
bool estimation_analytic_derivation; bool estimation_analytic_derivation;
//! Whether the option partial_information is given to stoch_simul/estimation/osr/ramsey_policy //! Whether the option partial_information is given to stoch_simul/estimation/osr/ramsey_policy
bool partial_information; bool partial_information;
//! Whether a shocks or mshocks block is present //! Whether a shocks or mshocks block has been parsed and no simul command yet run
/*! Used for the workaround for trac ticket #35 */ /*! Used for the workaround for trac ticket #35. When a simul command is
bool shocks_present; seen, this flag is cleared in order to allow a sequence
shocks+endval+simul in a loop */
bool shocks_present_but_simul_not_yet;
//! Whether a histval bloc is present //! Whether a histval bloc is present
/*! Used for the workaround for trac ticket #157 */ /*! Used for the workaround for trac ticket #157 */
bool histval_present; bool histval_present;