From 162675ecb8b3abcb9c491ff8b95d9431cf978682 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 28 Jun 2017 12:04:04 +0200 Subject: [PATCH 1/2] preprocessor: write JSON output for original model when writing after transform pass --- ModFile.cc | 42 +++++++++++++++++++++++++++++++++++++++--- ModFile.hh | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/ModFile.cc b/ModFile.cc index 510dffe6..397fee1b 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -1270,7 +1270,7 @@ ModFile::writeJsonOutput(const string &basename, JsonOutputPointType json, JsonF if (json == parsing || json == checkpass) symbol_table.freeze(); - writeJsonOutputParsingCheck(basename, json_output_mode); + writeJsonOutputParsingCheck(basename, json_output_mode, json == transformpass); if (json == parsing || json == checkpass) symbol_table.unfreeze(); @@ -1302,7 +1302,7 @@ ModFile::writeJsonOutput(const string &basename, JsonOutputPointType json, JsonF } void -ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType json_output_mode) const +ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType json_output_mode, bool transformpass) const { ostringstream output; output << "{" << endl; @@ -1325,8 +1325,21 @@ ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType } output << "}" << endl; + ostringstream original_model_output; + original_model_output << ""; + if (transformpass) + { + original_model_output << "{"; + original_model.writeJsonOriginalModelOutput(original_model_output); + original_model_output << "}" << endl; + } + if (json_output_mode == standardout) - cout << output.str(); + { + cout << output.str(); + if (!original_model_output.str().empty()) + cout << original_model_output.str(); + } else { ofstream jsonOutputFile; @@ -1350,6 +1363,29 @@ ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType jsonOutputFile << output.str(); jsonOutputFile.close(); + + if (!original_model_output.str().empty()) + { + if (basename.size()) + { + string fname(basename); + fname += "_original.json"; + jsonOutputFile.open(fname.c_str(), ios::out | ios::binary); + if (!jsonOutputFile.is_open()) + { + cerr << "ERROR: Can't open file " << fname << " for writing" << endl; + exit(EXIT_FAILURE); + } + } + else + { + cerr << "ERROR: Missing file name" << endl; + exit(EXIT_FAILURE); + } + + jsonOutputFile << original_model_output.str(); + jsonOutputFile.close(); + } } } diff --git a/ModFile.hh b/ModFile.hh index d8bb587c..1b763f63 100644 --- a/ModFile.hh +++ b/ModFile.hh @@ -118,7 +118,7 @@ private: //! Warnings Encountered WarningConsolidation &warnings; //! Functions used in writing of JSON outut. See writeJsonOutput - void writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType json_output_mode) const; + void writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType json_output_mode, bool transformpass) const; void writeJsonComputingPassOutput(const string &basename, JsonFileOutputType json_output_mode, bool jsonprintderivdetail) const; void writeJsonFileHelper(string &fname, ostringstream &output) const; public: From c66e000b5b2f2a6c1cd6caec24f8a7b9be163fdc Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 28 Jun 2017 12:06:20 +0200 Subject: [PATCH 2/2] preprocessor: remove warning on int/size_t comparison --- DynamicModel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicModel.cc b/DynamicModel.cc index 16928011..8d3ca37d 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -3726,7 +3726,7 @@ DynamicModel::cloneDynamic(DynamicModel &dynamic_model) const vector > eq_tags; for (vector > >::const_iterator it = equation_tags.begin(); it != equation_tags.end(); ++it) - if (it->first == i) + if (it->first == (int)i) eq_tags.push_back(it->second); dynamic_model.addEquation(equations[i]->cloneDynamic(dynamic_model), equations_lineno[i], eq_tags); }