aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexers/LexCPP.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'lexers/LexCPP.cxx')
-rw-r--r--lexers/LexCPP.cxx25
1 files changed, 12 insertions, 13 deletions
diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx
index af60dce3a..09e5b1cb4 100644
--- a/lexers/LexCPP.cxx
+++ b/lexers/LexCPP.cxx
@@ -163,18 +163,14 @@ void highlightTaskMarker(StyleContext &sc, LexAccessor &styler,
}
}
-struct EscapeSequence {
- int digitsLeft;
- CharacterSet setHexDigits;
- CharacterSet setOctDigits;
- CharacterSet setNoneNumeric;
- CharacterSet *escapeSetValid;
- EscapeSequence() {
- digitsLeft = 0;
- escapeSetValid = nullptr;
- setHexDigits = CharacterSet(CharacterSet::setDigits, "ABCDEFabcdef");
- setOctDigits = CharacterSet(CharacterSet::setNone, "01234567");
- }
+class EscapeSequence {
+ const CharacterSet setHexDigits = CharacterSet(CharacterSet::setDigits, "ABCDEFabcdef");
+ const CharacterSet setOctDigits = CharacterSet(CharacterSet::setNone, "01234567");
+ const CharacterSet setNoneNumeric;
+ const CharacterSet *escapeSetValid = nullptr;
+ int digitsLeft = 0;
+public:
+ EscapeSequence() = default;
void resetEscapeState(int nextChar) {
digitsLeft = 0;
escapeSetValid = &setNoneNumeric;
@@ -195,6 +191,9 @@ struct EscapeSequence {
bool atEscapeEnd(int currChar) const {
return (digitsLeft <= 0) || !escapeSetValid->Contains(currChar);
}
+ void consumeDigit() noexcept {
+ digitsLeft--;
+ }
};
std::string GetRestOfLine(LexAccessor &styler, Sci_Position start, bool allowSpace) {
@@ -1107,7 +1106,7 @@ void SCI_METHOD LexerCPP::Lex(Sci_PositionU startPos, Sci_Position length, int i
}
break;
case SCE_C_ESCAPESEQUENCE:
- escapeSeq.digitsLeft--;
+ escapeSeq.consumeDigit();
if (!escapeSeq.atEscapeEnd(sc.ch)) {
break;
}