@@ -559,6 +559,7 @@ static bool hasErrors(const simplecpp::OutputList &outputList)
559559 case simplecpp::Output::INCLUDE_NESTED_TOO_DEEPLY:
560560 case simplecpp::Output::SYNTAX_ERROR:
561561 case simplecpp::Output::UNHANDLED_CHAR_ERROR:
562+ case simplecpp::Output::EXPLICIT_INCLUDE_NOT_FOUND:
562563 return true ;
563564 case simplecpp::Output::WARNING:
564565 case simplecpp::Output::MISSING_HEADER:
@@ -569,12 +570,36 @@ static bool hasErrors(const simplecpp::OutputList &outputList)
569570 return false ;
570571}
571572
573+ void Preprocessor::handleErrors (const simplecpp::OutputList& outputList, bool throwError)
574+ {
575+ const bool showerror = (!mSettings .userDefines .empty () && !mSettings .force );
576+ reportOutput (outputList, showerror);
577+ if (throwError) {
578+ for (const simplecpp::Output& output : outputList) {
579+ switch (output.type ) {
580+ case simplecpp::Output::ERROR:
581+ case simplecpp::Output::INCLUDE_NESTED_TOO_DEEPLY:
582+ case simplecpp::Output::SYNTAX_ERROR:
583+ case simplecpp::Output::UNHANDLED_CHAR_ERROR:
584+ case simplecpp::Output::EXPLICIT_INCLUDE_NOT_FOUND:
585+ throw output;
586+ case simplecpp::Output::WARNING:
587+ case simplecpp::Output::MISSING_HEADER:
588+ case simplecpp::Output::PORTABILITY_BACKSLASH:
589+ break ;
590+ };
591+ }
592+ }
593+ }
572594
573- void Preprocessor::loadFiles (const simplecpp::TokenList &rawtokens, std::vector<std::string> &files)
595+ bool Preprocessor::loadFiles (const simplecpp::TokenList &rawtokens, std::vector<std::string> &files)
574596{
575597 const simplecpp::DUI dui = createDUI (mSettings , emptyString, files[0 ]);
576598
577- mTokenLists = simplecpp::load (rawtokens, files, dui, nullptr );
599+ simplecpp::OutputList outputList;
600+ mTokenLists = simplecpp::load (rawtokens, files, dui, &outputList);
601+ handleErrors (outputList, false );
602+ return !hasErrors (outputList);
578603}
579604
580605void Preprocessor::removeComments ()
@@ -614,23 +639,7 @@ simplecpp::TokenList Preprocessor::preprocess(const simplecpp::TokenList &tokens
614639 simplecpp::TokenList tokens2 (files);
615640 simplecpp::preprocess (tokens2, tokens1, files, mTokenLists , dui, &outputList, ¯oUsage);
616641
617- const bool showerror = (!mSettings .userDefines .empty () && !mSettings .force );
618- reportOutput (outputList, showerror);
619- if (throwError && hasErrors (outputList)) {
620- for (const simplecpp::Output &output : outputList) {
621- switch (output.type ) {
622- case simplecpp::Output::ERROR:
623- case simplecpp::Output::INCLUDE_NESTED_TOO_DEEPLY:
624- case simplecpp::Output::SYNTAX_ERROR:
625- case simplecpp::Output::UNHANDLED_CHAR_ERROR:
626- throw output;
627- case simplecpp::Output::WARNING:
628- case simplecpp::Output::MISSING_HEADER:
629- case simplecpp::Output::PORTABILITY_BACKSLASH:
630- break ;
631- };
632- }
633- }
642+ handleErrors (outputList, throwError);
634643
635644 tokens2.removeComments ();
636645
@@ -717,6 +726,9 @@ void Preprocessor::reportOutput(const simplecpp::OutputList &outputList, bool sh
717726 case simplecpp::Output::UNHANDLED_CHAR_ERROR:
718727 error (out.location .file (), out.location .line , out.msg );
719728 break ;
729+ case simplecpp::Output::EXPLICIT_INCLUDE_NOT_FOUND:
730+ error (emptyString, 0 , out.msg );
731+ break ;
720732 };
721733 }
722734}
0 commit comments