diff --git a/ModFile.cc b/ModFile.cc index 510dffe616f80de141af379048541d2b388ff650..397fee1bb159ca8a51a53f59a09b7a943abc2399 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 d8bb587cbf052c2dad8149a66b0b9f14f46c39b8..1b763f636c87192a0fcbf3e09f2641c8ee6a2042 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: