@@ -742,38 +742,10 @@ static simplecpp::DUI createDUI(const Settings &mSettings, const std::string &cf
742742 return dui;
743743}
744744
745- bool Preprocessor::hasErrors (const simplecpp::Output &output)
746- {
747- switch (output.type ) {
748- case simplecpp::Output::ERROR:
749- case simplecpp::Output::INCLUDE_NESTED_TOO_DEEPLY:
750- case simplecpp::Output::SYNTAX_ERROR:
751- case simplecpp::Output::UNHANDLED_CHAR_ERROR:
752- case simplecpp::Output::EXPLICIT_INCLUDE_NOT_FOUND:
753- case simplecpp::Output::FILE_NOT_FOUND:
754- case simplecpp::Output::DUI_ERROR:
755- return true ;
756- case simplecpp::Output::WARNING:
757- case simplecpp::Output::MISSING_HEADER:
758- case simplecpp::Output::PORTABILITY_BACKSLASH:
759- break ;
760- }
761- return false ;
762- }
763-
764- bool Preprocessor::handleErrors (const simplecpp::OutputList& outputList, bool throwError)
745+ const simplecpp::Output* Preprocessor::handleErrors (const simplecpp::OutputList& outputList)
765746{
766747 const bool showerror = (!mSettings .userDefines .empty () && !mSettings .force );
767- const bool hasError = reportOutput (outputList, showerror);
768- if (throwError) {
769- const auto it = std::find_if (outputList.cbegin (), outputList.cend (), [](const simplecpp::Output &output){
770- return hasErrors (output);
771- });
772- if (it != outputList.cend ()) {
773- throw *it;
774- }
775- }
776- return hasError;
748+ return reportOutput (outputList, showerror);
777749}
778750
779751bool Preprocessor::loadFiles (std::vector<std::string> &files)
@@ -782,7 +754,7 @@ bool Preprocessor::loadFiles(std::vector<std::string> &files)
782754
783755 simplecpp::OutputList outputList;
784756 mFileCache = simplecpp::load (mTokens , files, dui, &outputList);
785- return !handleErrors (outputList, false );
757+ return !handleErrors (outputList);
786758}
787759
788760void Preprocessor::removeComments ()
@@ -813,28 +785,27 @@ void Preprocessor::setPlatformInfo()
813785 mTokens .sizeOfType [" long double *" ] = mSettings .platform .sizeof_pointer ;
814786}
815787
816- simplecpp::TokenList Preprocessor::preprocess (const std::string &cfg, std::vector<std::string> &files, bool throwError )
788+ simplecpp::TokenList Preprocessor::preprocess (const std::string &cfg, std::vector<std::string> &files, simplecpp::OutputList& outputList )
817789{
818790 const simplecpp::DUI dui = createDUI (mSettings , cfg, mLang );
819791
820- simplecpp::OutputList outputList;
821792 std::list<simplecpp::MacroUsage> macroUsage;
822793 std::list<simplecpp::IfCond> ifCond;
823794 simplecpp::TokenList tokens2 (files);
824795 simplecpp::preprocess (tokens2, mTokens , files, mFileCache , dui, &outputList, ¯oUsage, &ifCond);
825796 mMacroUsage = std::move (macroUsage);
826797 mIfCond = std::move (ifCond);
827798
828- (void )handleErrors (outputList, throwError);
829-
830799 tokens2.removeComments ();
831800
832801 return tokens2;
833802}
834803
835804std::string Preprocessor::getcode (const std::string &cfg, std::vector<std::string> &files, const bool writeLocations)
836805{
837- simplecpp::TokenList tokens2 = preprocess (cfg, files, false );
806+ simplecpp::OutputList outputList;
807+ simplecpp::TokenList tokens2 = preprocess (cfg, files, outputList);
808+ handleErrors (outputList);
838809 unsigned int prevfile = 0 ;
839810 unsigned int line = 1 ;
840811 std::ostringstream ret;
@@ -859,14 +830,14 @@ std::string Preprocessor::getcode(const std::string &cfg, std::vector<std::strin
859830 return ret.str ();
860831}
861832
862- bool Preprocessor::reportOutput (const simplecpp::OutputList &outputList, bool showerror)
833+ const simplecpp::Output* Preprocessor::reportOutput (const simplecpp::OutputList &outputList, bool showerror)
863834{
864- bool hasError = false ;
835+ const simplecpp::Output* out_ret = nullptr ;
865836
866837 for (const simplecpp::Output &out : outputList) {
867838 switch (out.type ) {
868839 case simplecpp::Output::ERROR:
869- hasError = true ;
840+ out_ret = &out ;
870841 if (!startsWith (out.msg ," #error" ) || showerror)
871842 error (out.location .file (), out.location .line , out.location .col , out.msg , out.type );
872843 break ;
@@ -884,19 +855,19 @@ bool Preprocessor::reportOutput(const simplecpp::OutputList &outputList, bool sh
884855 case simplecpp::Output::INCLUDE_NESTED_TOO_DEEPLY:
885856 case simplecpp::Output::SYNTAX_ERROR:
886857 case simplecpp::Output::UNHANDLED_CHAR_ERROR:
887- hasError = true ;
858+ out_ret = &out ;
888859 error (out.location .file (), out.location .line , out.location .col , out.msg , out.type );
889860 break ;
890861 case simplecpp::Output::EXPLICIT_INCLUDE_NOT_FOUND:
891862 case simplecpp::Output::FILE_NOT_FOUND:
892863 case simplecpp::Output::DUI_ERROR:
893- hasError = true ;
864+ out_ret = &out ;
894865 error (" " , 0 , 0 , out.msg , out.type );
895866 break ;
896867 }
897868 }
898869
899- return hasError ;
870+ return out_ret ;
900871}
901872
902873static std::string simplecppErrToId (simplecpp::Output::Type type)
0 commit comments