diff --git a/DynamicModel.cc b/DynamicModel.cc index e2d28f79..5abfc057 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -3816,7 +3816,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); } diff --git a/ModFile.cc b/ModFile.cc index 304e4df1..a38949a0 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -1298,7 +1298,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(); @@ -1330,7 +1330,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; @@ -1353,8 +1353,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; @@ -1378,6 +1391,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: