aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexers/LexCPP.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2020-04-13 08:06:56 +1000
committerNeil <nyamatongwe@gmail.com>2020-04-13 08:06:56 +1000
commit98fba9dcdd0b734e0788de4d731bd3dcf5ee9fc0 (patch)
treec3a81410095a73a45756f6b26f6b7ea3a24e797e /lexers/LexCPP.cxx
parent1769cc3907d3f06254053ab76bd9e827417f07cf (diff)
downloadscintilla-mirror-98fba9dcdd0b734e0788de4d731bd3dcf5ee9fc0.tar.gz
Hide implementation of EscapeSequence and use const. Add tests for escape
sequences.
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;
}