Combine `DynareMain.cc` and `DynareMain2.cc`
parent
1dbbd87d3d
commit
de6ca5cdcc
|
@ -17,6 +17,7 @@
|
||||||
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
@ -35,22 +36,12 @@
|
||||||
#include "ParsingDriver.hh"
|
#include "ParsingDriver.hh"
|
||||||
#include "ExtendedPreprocessorTypes.hh"
|
#include "ExtendedPreprocessorTypes.hh"
|
||||||
#include "ConfigFile.hh"
|
#include "ConfigFile.hh"
|
||||||
|
#include "ModFile.hh"
|
||||||
|
|
||||||
/* Prototype for second part of main function
|
/* Prototype for second part of main function
|
||||||
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, 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,
|
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);
|
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())
|
for (const auto &it : config_file.getIncludePaths())
|
||||||
paths.emplace_back(it);
|
paths.emplace_back(it);
|
||||||
|
|
||||||
// Do macro processing
|
/*
|
||||||
|
* Macro-expand MOD file
|
||||||
|
*/
|
||||||
stringstream macro_output;
|
stringstream macro_output;
|
||||||
main1(filename, basename, modfile, debug, save_macro, save_macro_file, line_macro,
|
main1(filename, basename, modfile, debug, save_macro, save_macro_file, line_macro,
|
||||||
defines, paths, macro_output);
|
defines, paths, macro_output);
|
||||||
|
@ -441,13 +434,45 @@ main(int argc, char **argv)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do the rest
|
/*
|
||||||
main2(macro_output, basename, debug, clear_all, clear_global,
|
* Process Macro-expanded MOD file
|
||||||
no_tmp_terms, no_log, no_warn, warn_uninit, console, nograph, nointeractive,
|
*/
|
||||||
parallel, config_file, warnings, nostrict, stochastic, check_model_changes, minimal_workspace,
|
ParsingDriver p(warnings, nostrict);
|
||||||
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);
|
|
||||||
|
|
||||||
|
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;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -44,7 +44,6 @@ dynare_m_SOURCES = \
|
||||||
MinimumFeedbackSet.hh \
|
MinimumFeedbackSet.hh \
|
||||||
DynareMain.cc \
|
DynareMain.cc \
|
||||||
DynareMain1.cc \
|
DynareMain1.cc \
|
||||||
DynareMain2.cc \
|
|
||||||
CodeInterpreter.hh \
|
CodeInterpreter.hh \
|
||||||
ExternalFunctionsTable.cc \
|
ExternalFunctionsTable.cc \
|
||||||
ExternalFunctionsTable.hh \
|
ExternalFunctionsTable.hh \
|
||||||
|
|
Loading…
Reference in New Issue