diff --git a/externals/simplecpp/simplecpp.cpp b/externals/simplecpp/simplecpp.cpp index 4aac986f6..2b7b8b00e 100644 --- a/externals/simplecpp/simplecpp.cpp +++ b/externals/simplecpp/simplecpp.cpp @@ -24,13 +24,15 @@ #include #include +#include +#include #include #include #include -#include +#include // IWYU pragma: keep #include #include -#include +#include // IWYU pragma: keep #include #include #if __cplusplus >= 201103L @@ -136,7 +138,7 @@ static bool startsWith(const std::string &str, const std::string &s) static bool endsWith(const std::string &s, const std::string &e) { - return (s.size() >= e.size() && s.compare(s.size() - e.size(), e.size(), e) == 0); + return (s.size() >= e.size()) && std::equal(e.rbegin(), e.rend(), s.rbegin()); } static bool sameline(const simplecpp::Token *tok1, const simplecpp::Token *tok2) @@ -566,7 +568,7 @@ void simplecpp::TokenList::readfile(std::istream &istr, const std::string &filen TokenString currentToken; - if (cback() && cback()->location.line == location.line && cback()->previous && cback()->previous->op == '#' && (lastLine() == "# error" || lastLine() == "# warning")) { + if (cback() && cback()->location.line == location.line && cback()->previous && cback()->previous->op == '#' && isLastLinePreprocessor() && (lastLine() == "# error" || lastLine() == "# warning")) { char prev = ' '; while (istr.good() && (prev == '\\' || (ch != '\r' && ch != '\n'))) { currentToken += ch; @@ -627,7 +629,7 @@ void simplecpp::TokenList::readfile(std::istream &istr, const std::string &filen currentToken.erase(pos,2); ++multiline; } - if (multiline || startsWith(lastLine(10),"# ")) { + if (multiline || isLastLinePreprocessor()) { pos = 0; while ((pos = currentToken.find('\n',pos)) != std::string::npos) { currentToken.erase(pos,1); @@ -708,7 +710,7 @@ void simplecpp::TokenList::readfile(std::istream &istr, const std::string &filen else back()->setstr(prefix + s); - if (newlines > 0 && lastLine().compare(0,9,"# define ") == 0) { + if (newlines > 0 && isLastLinePreprocessor() && lastLine().compare(0,9,"# define ") == 0) { multiline += newlines; location.adjust(s); } else { @@ -721,7 +723,7 @@ void simplecpp::TokenList::readfile(std::istream &istr, const std::string &filen currentToken += ch; } - if (currentToken == "<" && lastLine() == "# include") { + if (*currentToken.begin() == '<' && isLastLinePreprocessor() && lastLine() == "# include") { currentToken = readUntil(istr, location, '<', '>', outputList, bom); if (currentToken.size() < 2U) return; @@ -2862,11 +2864,15 @@ static std::string openHeader(std::ifstream &f, const simplecpp::DUI &dui, const if (systemheader) { ret = openHeaderIncludePath(f, dui, header); - return ret.empty() ? openHeaderRelative(f, sourcefile, header) : ret; + if (ret.empty()) + return openHeaderRelative(f, sourcefile, header); + return ret; } ret = openHeaderRelative(f, sourcefile, header); - return ret.empty() ? openHeaderIncludePath(f, dui, header) : ret; + if (ret.empty()) + return openHeaderIncludePath(f, dui, header); + return ret; } static std::string getFileName(const std::map &filedata, const std::string &sourcefile, const std::string &header, const simplecpp::DUI &dui, bool systemheader) diff --git a/externals/simplecpp/simplecpp.h b/externals/simplecpp/simplecpp.h index 8e04a571b..24443b074 100644 --- a/externals/simplecpp/simplecpp.h +++ b/externals/simplecpp/simplecpp.h @@ -20,7 +20,6 @@ #define simplecppH #include -#include #include #include #include