From de6ca5cdcc916ad8361c4d8a62ad125c149368e3 Mon Sep 17 00:00:00 2001 From: Houtan Bastani <houtan@dynare.org> Date: Wed, 5 Feb 2020 16:24:35 +0100 Subject: [PATCH] Combine `DynareMain.cc` and `DynareMain2.cc` --- src/DynareMain.cc | 65 ++++++++++++++++++++++++++------------ src/DynareMain2.cc | 77 ---------------------------------------------- src/Makefile.am | 1 - 3 files changed, 45 insertions(+), 98 deletions(-) delete mode 100644 src/DynareMain2.cc diff --git a/src/DynareMain.cc b/src/DynareMain.cc index 42506dac..9429c978 100644 --- a/src/DynareMain.cc +++ b/src/DynareMain.cc @@ -17,6 +17,7 @@ * along with Dynare. If not, see <http://www.gnu.org/licenses/>. */ +#include <filesystem> #include <iostream> #include <sstream> #include <fstream> @@ -35,22 +36,12 @@ #include "ParsingDriver.hh" #include "ExtendedPreprocessorTypes.hh" #include "ConfigFile.hh" +#include "ModFile.hh" /* Prototype for second part of main function Splitting main() in two parts was necessary because ParsingDriver.h and MacroDriver.h can't be included simultaneously (because of Bison limitations). */ -void main2(stringstream &in, const string &basename, bool debug, bool clear_all, bool clear_global, - bool no_tmp_terms, bool no_log, bool no_warn, bool warn_uninit, bool console, - bool nograph, bool nointeractive, bool parallel, const ConfigFile &config_file, - WarningConsolidation &warnings_arg, bool nostrict, bool stochastic, bool check_model_changes, - bool minimal_workspace, bool compute_xrefs, FileOutputType output_mode, - LanguageOutputType lang, int params_derivs_order, bool transform_unary_ops, - const string &exclude_eqs, const string &include_eqs, - JsonOutputPointType json, JsonFileOutputType json_output_mode, bool onlyjson, bool jsonderivsimple, - const string &mexext, const filesystem::path &matlabroot, - const filesystem::path &dynareroot, bool onlymodel); - void main1(const string &filename, const string &basename, istream &modfile, bool debug, bool save_macro, string &save_macro_file, bool line_macro, const vector<pair<string, string>> &defines, vector<filesystem::path> &paths, stringstream ¯o_output); @@ -427,7 +418,9 @@ main(int argc, char **argv) for (const auto &it : config_file.getIncludePaths()) paths.emplace_back(it); - // Do macro processing + /* + * Macro-expand MOD file + */ stringstream macro_output; main1(filename, basename, modfile, debug, save_macro, save_macro_file, line_macro, defines, paths, macro_output); @@ -441,13 +434,45 @@ main(int argc, char **argv) exit(EXIT_FAILURE); } - // Do the rest - main2(macro_output, basename, debug, clear_all, clear_global, - no_tmp_terms, no_log, no_warn, warn_uninit, console, nograph, nointeractive, - parallel, config_file, warnings, nostrict, stochastic, check_model_changes, minimal_workspace, - compute_xrefs, output_mode, language, params_derivs_order, transform_unary_ops, exclude_eqs, include_eqs, - json, json_output_mode, onlyjson, jsonderivsimple, - mexext, matlabroot, dynareroot, onlymodel); - + /* + * Process Macro-expanded MOD file + */ + ParsingDriver p(warnings, nostrict); + + filesystem::remove_all(basename + "/model/json"); + + // Do parsing and construct internal representation of mod file + unique_ptr<ModFile> mod_file = p.parse(macro_output, debug); + if (json == JsonOutputPointType::parsing) + mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson); + + // Run checking pass + mod_file->checkPass(nostrict, stochastic); + if (json == JsonOutputPointType::checkpass) + mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson); + + // Perform transformations on the model (creation of auxiliary vars and equations) + mod_file->transformPass(nostrict, stochastic, compute_xrefs || json == JsonOutputPointType::transformpass, + transform_unary_ops, exclude_eqs, include_eqs); + if (json == JsonOutputPointType::transformpass) + mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson); + + // Evaluate parameters initialization, initval, endval and pounds + mod_file->evalAllExpressions(warn_uninit); + + // Do computations + mod_file->computingPass(no_tmp_terms, output_mode, params_derivs_order); + if (json == JsonOutputPointType::computingpass) + mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson, jsonderivsimple); + + // Write outputs + if (output_mode != FileOutputType::none) + mod_file->writeExternalFiles(basename, language); + else + mod_file->writeOutputFiles(basename, clear_all, clear_global, no_log, no_warn, console, nograph, + nointeractive, config_file, check_model_changes, minimal_workspace, compute_xrefs, + mexext, matlabroot, dynareroot, onlymodel); + + cout << "Preprocessing completed." << endl; return EXIT_SUCCESS; } diff --git a/src/DynareMain2.cc b/src/DynareMain2.cc deleted file mode 100644 index abcb9dda..00000000 --- a/src/DynareMain2.cc +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2008-2019 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/>. - */ - -#include <iostream> -#include <filesystem> - -#include "ParsingDriver.hh" -#include "ModFile.hh" -#include "ConfigFile.hh" -#include "ExtendedPreprocessorTypes.hh" - -void -main2(stringstream &in, const string &basename, bool debug, bool clear_all, bool clear_global, - bool no_tmp_terms, bool no_log, bool no_warn, bool warn_uninit, bool console, - bool nograph, bool nointeractive, bool parallel, const ConfigFile &config_file, - WarningConsolidation &warnings, bool nostrict, bool stochastic, bool check_model_changes, - bool minimal_workspace, bool compute_xrefs, FileOutputType output_mode, - LanguageOutputType language, int params_derivs_order, bool transform_unary_ops, - const string &exclude_eqs, const string &include_eqs, - JsonOutputPointType json, JsonFileOutputType json_output_mode, bool onlyjson, bool jsonderivsimple, - const string &mexext, const filesystem::path &matlabroot, - const filesystem::path &dynareroot, bool onlymodel) -{ - ParsingDriver p(warnings, nostrict); - - filesystem::remove_all(basename + "/model/json"); - - // Do parsing and construct internal representation of mod file - unique_ptr<ModFile> mod_file = p.parse(in, debug); - if (json == JsonOutputPointType::parsing) - mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson); - - // Run checking pass - mod_file->checkPass(nostrict, stochastic); - if (json == JsonOutputPointType::checkpass) - mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson); - - // Perform transformations on the model (creation of auxiliary vars and equations) - mod_file->transformPass(nostrict, stochastic, compute_xrefs || json == JsonOutputPointType::transformpass, - transform_unary_ops, exclude_eqs, include_eqs); - if (json == JsonOutputPointType::transformpass) - mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson); - - // Evaluate parameters initialization, initval, endval and pounds - mod_file->evalAllExpressions(warn_uninit); - - // Do computations - mod_file->computingPass(no_tmp_terms, output_mode, params_derivs_order); - if (json == JsonOutputPointType::computingpass) - mod_file->writeJsonOutput(basename, json, json_output_mode, onlyjson, jsonderivsimple); - - // Write outputs - if (output_mode != FileOutputType::none) - mod_file->writeExternalFiles(basename, language); - else - mod_file->writeOutputFiles(basename, clear_all, clear_global, no_log, no_warn, console, nograph, - nointeractive, config_file, check_model_changes, minimal_workspace, compute_xrefs, - mexext, matlabroot, dynareroot, onlymodel); - - cout << "Preprocessing completed." << endl; -} diff --git a/src/Makefile.am b/src/Makefile.am index 24c56e11..ccd508d5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -44,7 +44,6 @@ dynare_m_SOURCES = \ MinimumFeedbackSet.hh \ DynareMain.cc \ DynareMain1.cc \ - DynareMain2.cc \ CodeInterpreter.hh \ ExternalFunctionsTable.cc \ ExternalFunctionsTable.hh \ -- GitLab