diff options
author | Neil <nyamatongwe@gmail.com> | 2019-03-23 08:50:32 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2019-03-23 08:50:32 +1100 |
commit | de07b9abd6711d657c170de23871ddb5503a1011 (patch) | |
tree | 16a8e1f0deac692c2fcb1da329701975bf12b246 | |
parent | 05a51adc4c0b79ab4de9e725ae768e1d10e36776 (diff) | |
download | scintilla-mirror-de07b9abd6711d657c170de23871ddb5503a1011.tar.gz |
Backport: Fix warnings from MSVC Code Analysis.
Backport of changeset 7328:521b1e23bfe2, but without C++17 std::size and
`SymbolValue() = default` instead of `SymbolValue() noexcept = default`, since
the latter causes a compile error.
-rw-r--r-- | lexers/LexCPP.cxx | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx index e2d47de6f..d96bb8dc2 100644 --- a/lexers/LexCPP.cxx +++ b/lexers/LexCPP.cxx @@ -18,6 +18,7 @@ #include <vector> #include <map> #include <algorithm> +#include <iterator> #include "ILexer.h" #include "Scintilla.h" @@ -39,7 +40,7 @@ using namespace Scintilla; namespace { // Use an unnamed namespace to protect the functions and classes from name conflicts -bool IsSpaceEquiv(int state) noexcept { +constexpr bool IsSpaceEquiv(int state) noexcept { return (state <= SCE_C_COMMENTDOC) || // including SCE_C_DEFAULT, SCE_C_COMMENT, SCE_C_COMMENTLINE (state == SCE_C_COMMENTLINEDOC) || (state == SCE_C_COMMENTDOCKEYWORD) || @@ -86,7 +87,7 @@ bool followsReturnKeyword(const StyleContext &sc, LexAccessor &styler) { return !*s; } -bool IsSpaceOrTab(int ch) noexcept { +constexpr bool IsSpaceOrTab(int ch) noexcept { return ch == ' ' || ch == '\t'; } @@ -145,7 +146,7 @@ void highlightTaskMarker(StyleContext &sc, LexAccessor &styler, if ((isoperator(sc.chPrev) || IsASpace(sc.chPrev)) && markerList.Length()) { const int lengthMarker = 50; char marker[lengthMarker+1] = ""; - const Sci_Position currPos = static_cast<Sci_Position>(sc.currentPos); + const Sci_Position currPos = sc.currentPos; int i = 0; while (i < lengthMarker) { const char ch = styler.SafeGetCharAt(currPos + i); @@ -173,7 +174,7 @@ struct EscapeSequence { CharacterSet *escapeSetValid; EscapeSequence() { digitsLeft = 0; - escapeSetValid = 0; + escapeSetValid = nullptr; setHexDigits = CharacterSet(CharacterSet::setDigits, "ABCDEFabcdef"); setOctDigits = CharacterSet(CharacterSet::setNone, "01234567"); } @@ -226,7 +227,7 @@ std::string GetRestOfLine(LexAccessor &styler, Sci_Position start, bool allowSpa return restOfLine; } -bool IsStreamCommentStyle(int style) noexcept { +constexpr bool IsStreamCommentStyle(int style) noexcept { return style == SCE_C_COMMENT || style == SCE_C_COMMENTDOC || style == SCE_C_COMMENTDOCKEYWORD || @@ -259,7 +260,7 @@ class LinePPState { } } public: - LinePPState() : state(0), ifTaken(0), level(-1) { + LinePPState() noexcept : state(0), ifTaken(0), level(-1) { } bool IsInactive() const noexcept { return state != 0; @@ -369,7 +370,7 @@ const char *const cppWordLists[] = { "Global classes and typedefs", "Preprocessor definitions", "Task marker and error marker keywords", - 0, + nullptr, }; struct OptionSetCPP : public OptionSet<OptionsCPP> { @@ -500,7 +501,8 @@ class LexerCPP : public ILexerWithMetaData { struct SymbolValue { std::string value; std::string arguments; - SymbolValue(const std::string &value_="", const std::string &arguments_="") : value(value_), arguments(arguments_) { + SymbolValue() = default; + SymbolValue(const std::string &value_, const std::string &arguments_) : value(value_), arguments(arguments_) { } SymbolValue &operator = (const std::string &value_) { value = value_; @@ -532,12 +534,17 @@ public: setLogicalOp(CharacterSet::setNone, "|&"), subStyles(styleSubable, 0x80, 0x40, activeFlag) { } + // Deleted so LexerCPP objects can not be copied. + LexerCPP(const LexerCPP &) = delete; + LexerCPP(LexerCPP &&) = delete; + void operator=(const LexerCPP &) = delete; + void operator=(LexerCPP &&) = delete; virtual ~LexerCPP() { } - void SCI_METHOD Release() override { + void SCI_METHOD Release() noexcept override { delete this; } - int SCI_METHOD Version() const override { + int SCI_METHOD Version() const noexcept override { return lvMetaData; } const char * SCI_METHOD PropertyNames() override { @@ -557,11 +564,11 @@ public: void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess) override; void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess) override; - void * SCI_METHOD PrivateCall(int, void *) override { - return 0; + void * SCI_METHOD PrivateCall(int, void *) noexcept override { + return nullptr; } - int SCI_METHOD LineEndTypesSupported() override { + int SCI_METHOD LineEndTypesSupported() noexcept override { return SC_LINE_END_TYPE_UNICODE; } @@ -579,7 +586,7 @@ public: const int active = subStyle & activeFlag; return styleBase | active; } - int SCI_METHOD PrimaryStyleFromStyle(int style) override { + int SCI_METHOD PrimaryStyleFromStyle(int style) noexcept override { return MaskActive(style); } void SCI_METHOD FreeSubStyles() override { @@ -588,10 +595,10 @@ public: void SCI_METHOD SetIdentifiers(int style, const char *identifiers) override { subStyles.SetIdentifiers(style, identifiers); } - int SCI_METHOD DistanceToSecondaryStyles() override { + int SCI_METHOD DistanceToSecondaryStyles() noexcept override { return activeFlag; } - const char * SCI_METHOD GetSubStyleBases() override { + const char * SCI_METHOD GetSubStyleBases() noexcept override { return styleSubable; } int SCI_METHOD NamedStyles() override { @@ -654,7 +661,7 @@ public: static ILexer *LexerFactoryCPPInsensitive() { return new LexerCPP(false); } - static int MaskActive(int style) noexcept { + constexpr static int MaskActive(int style) noexcept { return style & ~activeFlag; } void EvaluateTokens(std::vector<std::string> &tokens, const SymbolTable &preprocessorDefinitions); @@ -676,7 +683,7 @@ Sci_Position SCI_METHOD LexerCPP::PropertySet(const char *key, const char *val) } Sci_Position SCI_METHOD LexerCPP::WordListSet(int n, const char *wl) { - WordList *wordListN = 0; + WordList *wordListN = nullptr; switch (n) { case 0: wordListN = &keywords; @@ -818,7 +825,7 @@ void SCI_METHOD LexerCPP::Lex(Sci_PositionU startPos, Sci_Position length, int i const WordClassifier &classifierIdentifiers = subStyles.Classifier(SCE_C_IDENTIFIER); const WordClassifier &classifierDocKeyWords = subStyles.Classifier(SCE_C_COMMENTDOCKEYWORD); - Sci_Position lineEndNext = styler.LineEnd(lineCurrent); + Sci_PositionU lineEndNext = styler.LineEnd(lineCurrent); for (; sc.More();) { @@ -856,7 +863,7 @@ void SCI_METHOD LexerCPP::Lex(Sci_PositionU startPos, Sci_Position length, int i // Handle line continuation generically. if (sc.ch == '\\') { - if (static_cast<Sci_Position>((sc.currentPos+1)) >= lineEndNext) { + if ((sc.currentPos+1) >= lineEndNext) { lineCurrent++; lineEndNext = styler.LineEnd(lineCurrent); vlls.Add(lineCurrent, preproc); @@ -1128,7 +1135,7 @@ void SCI_METHOD LexerCPP::Lex(Sci_PositionU startPos, Sci_Position length, int i while ((sc.ch < 0x80) && islower(sc.ch)) sc.Forward(); // gobble regex flags sc.SetState(SCE_C_DEFAULT|activitySet); - } else if (sc.ch == '\\' && (static_cast<Sci_Position>(sc.currentPos+1) < lineEndNext)) { + } else if (sc.ch == '\\' && ((sc.currentPos+1) < lineEndNext)) { // Gobble up the escaped character sc.Forward(); } else if (sc.ch == '[') { @@ -1316,7 +1323,7 @@ void SCI_METHOD LexerCPP::Lex(Sci_PositionU startPos, Sci_Position length, int i while ((startName < restOfLine.length()) && IsSpaceOrTab(restOfLine[startName])) startName++; size_t endName = startName; - while ((endName < restOfLine.length()) && setWord.Contains(static_cast<unsigned char>(restOfLine[endName]))) + while ((endName < restOfLine.length()) && setWord.Contains(restOfLine[endName])) endName++; std::string key = restOfLine.substr(startName, endName-startName); if ((endName < restOfLine.length()) && (restOfLine.at(endName) == '(')) { @@ -1542,7 +1549,7 @@ void LexerCPP::EvaluateTokens(std::vector<std::string> &tokens, const SymbolTabl size_t iterations = 0; // Limit number of iterations in case there is a recursive macro. for (size_t i = 0; (i<tokens.size()) && (iterations < maxIterations);) { iterations++; - if (setWordStart.Contains(static_cast<unsigned char>(tokens[i][0]))) { + if (setWordStart.Contains(tokens[i][0])) { SymbolTable::const_iterator it = preprocessorDefinitions.find(tokens[i]); if (it != preprocessorDefinitions.end()) { // Tokenize value @@ -1569,7 +1576,7 @@ void LexerCPP::EvaluateTokens(std::vector<std::string> &tokens, const SymbolTabl macroTokens.erase(std::remove_if(macroTokens.begin(), macroTokens.end(), OnlySpaceOrTab), macroTokens.end()); for (size_t iMacro = 0; iMacro < macroTokens.size();) { - if (setWordStart.Contains(static_cast<unsigned char>(macroTokens[iMacro][0]))) { + if (setWordStart.Contains(macroTokens[iMacro][0])) { std::map<std::string, std::string>::const_iterator itFind = arguments.find(macroTokens[iMacro]); if (itFind != arguments.end()) { // TODO: Possible that value will be expression so should insert tokenized form @@ -1687,9 +1694,9 @@ std::vector<std::string> LexerCPP::Tokenize(const std::string &expr) const { const char *cp = expr.c_str(); while (*cp) { std::string word; - if (setWord.Contains(static_cast<unsigned char>(*cp))) { + if (setWord.Contains(*cp)) { // Identifiers and numbers - while (setWord.Contains(static_cast<unsigned char>(*cp))) { + while (setWord.Contains(*cp)) { word += *cp; cp++; } @@ -1698,17 +1705,17 @@ std::vector<std::string> LexerCPP::Tokenize(const std::string &expr) const { word += *cp; cp++; } - } else if (setRelOp.Contains(static_cast<unsigned char>(*cp))) { + } else if (setRelOp.Contains(*cp)) { word += *cp; cp++; - if (setRelOp.Contains(static_cast<unsigned char>(*cp))) { + if (setRelOp.Contains(*cp)) { word += *cp; cp++; } - } else if (setLogicalOp.Contains(static_cast<unsigned char>(*cp))) { + } else if (setLogicalOp.Contains(*cp)) { word += *cp; cp++; - if (setLogicalOp.Contains(static_cast<unsigned char>(*cp))) { + if (setLogicalOp.Contains(*cp)) { word += *cp; cp++; } |