From 0c5966d48725d61f7616b0f68e121e867914c1fc Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Sun, 25 Dec 2011 19:03:26 +0100 Subject: [PATCH] ms-dsge: add param initialization to C output --- preprocessor/ModFile.cc | 9 +++++++++ preprocessor/NumericalInitialization.cc | 10 ++++++++++ preprocessor/NumericalInitialization.hh | 1 + preprocessor/Statement.cc | 5 +++++ preprocessor/Statement.hh | 1 + 5 files changed, 26 insertions(+) diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc index 7571da2dd..a5ab0a424 100644 --- a/preprocessor/ModFile.cc +++ b/preprocessor/ModFile.cc @@ -852,6 +852,15 @@ ModFile::writeCOutputFiles(const string &basename) const dynamic_model.writeCOutput(mDriverCFile, basename, false, false, true, mod_file_struct.order_option, mod_file_struct.estimation_present); + mDriverCFile << "/*" << endl + << " * Writing statements" << endl + << " */" << endl; + + // Print statements + for (vector::const_iterator it = statements.begin(); + it != statements.end(); it++) + (*it)->writeCOutput(mDriverCFile, basename); + mDriverCFile << "}" << endl; mDriverCFile.close(); diff --git a/preprocessor/NumericalInitialization.cc b/preprocessor/NumericalInitialization.cc index 4e2fc618a..0d6bcecc1 100644 --- a/preprocessor/NumericalInitialization.cc +++ b/preprocessor/NumericalInitialization.cc @@ -50,6 +50,16 @@ InitParamStatement::writeOutput(ostream &output, const string &basename) const output << symbol_table.getName(symb_id) << " = M_.params( " << id << " );\n"; } +void +InitParamStatement::writeCOutput(ostream &output, const string &basename) +{ + int id = symbol_table.getTypeSpecificID(symb_id); + output << "params[ " << id << " ] = "; + param_value->writeOutput(output); + output << ";" << endl; + output << "double " << symbol_table.getName(symb_id) << " = params[ " << id << " ];" << endl; +} + void InitParamStatement::fillEvalContext(eval_context_t &eval_context) const { diff --git a/preprocessor/NumericalInitialization.hh b/preprocessor/NumericalInitialization.hh index f92144103..b03ab0d21 100644 --- a/preprocessor/NumericalInitialization.hh +++ b/preprocessor/NumericalInitialization.hh @@ -41,6 +41,7 @@ public: const SymbolTable &symbol_table_arg); virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename) const; + virtual void writeCOutput(ostream &output, const string &basename); //! Fill eval context with parameter value void fillEvalContext(eval_context_t &eval_context) const; }; diff --git a/preprocessor/Statement.cc b/preprocessor/Statement.cc index f990f6110..3ce955d66 100644 --- a/preprocessor/Statement.cc +++ b/preprocessor/Statement.cc @@ -63,6 +63,11 @@ Statement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &wa { } +void +Statement::writeCOutput(ostream &output, const string &basename) +{ +} + void Statement::computingPass() { diff --git a/preprocessor/Statement.hh b/preprocessor/Statement.hh index 40e37818d..6abda8fca 100644 --- a/preprocessor/Statement.hh +++ b/preprocessor/Statement.hh @@ -138,6 +138,7 @@ public: \param basename is the name of the modfile (without extension) which can be used to build auxiliary files */ virtual void writeOutput(ostream &output, const string &basename) const = 0; + virtual void writeCOutput(ostream &output, const string &basename); }; class NativeStatement : public Statement