forked from qt-creator/qt-creator
C++: Avoid looking ahead when lexing u8"literal"
This makes things slightly more efficient. But it will be more significant when we introduce R"rawliterals" since we would avoid an even further lookahead for cases like u8R"string". Change-Id: Id4bad8b917752d23daf2f4989330434979cf602f Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com> Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
16
src/libs/3rdparty/cplusplus/Lexer.cpp
vendored
16
src/libs/3rdparty/cplusplus/Lexer.cpp
vendored
@@ -580,19 +580,15 @@ void Lexer::scan_helper(Token *tok)
|
||||
yyinp();
|
||||
scanCharLiteral(tok, ch);
|
||||
} else if (ch == 'u' && _yychar == '8') {
|
||||
unsigned char la = 0;
|
||||
if (_currentChar + 1 != _lastChar)
|
||||
la = *(_currentChar + 1);
|
||||
if (la == '"') {
|
||||
yyinp();
|
||||
yyinp();
|
||||
if (_yychar == '"') {
|
||||
yyinp();
|
||||
scanStringLiteral(tok, '8');
|
||||
} else if (la == '\'') {
|
||||
yyinp();
|
||||
} else if (_yychar == '\'') {
|
||||
yyinp();
|
||||
scanCharLiteral(tok, '8');
|
||||
} else {
|
||||
scanIdentifier(tok);
|
||||
scanIdentifier(tok, 1);
|
||||
}
|
||||
} else {
|
||||
scanIdentifier(tok);
|
||||
@@ -691,9 +687,9 @@ void Lexer::scanNumericLiteral(Token *tok)
|
||||
tok->number = control()->numericLiteral(yytext, yylen);
|
||||
}
|
||||
|
||||
void Lexer::scanIdentifier(Token *tok)
|
||||
void Lexer::scanIdentifier(Token *tok, unsigned extraProcessedChars)
|
||||
{
|
||||
const char *yytext = _currentChar - 1;
|
||||
const char *yytext = _currentChar - 1 - extraProcessedChars;
|
||||
while (std::isalnum(_yychar) || _yychar == '_' || _yychar == '$')
|
||||
yyinp();
|
||||
int yylen = _currentChar - yytext;
|
||||
|
2
src/libs/3rdparty/cplusplus/Lexer.h
vendored
2
src/libs/3rdparty/cplusplus/Lexer.h
vendored
@@ -94,7 +94,7 @@ private:
|
||||
void scanCharLiteral(Token *tok, unsigned char hint = 0);
|
||||
void scanUntilQuote(Token *tok, unsigned char quote);
|
||||
void scanNumericLiteral(Token *tok);
|
||||
void scanIdentifier(Token *tok);
|
||||
void scanIdentifier(Token *tok, unsigned extraProcessedChars = 0);
|
||||
|
||||
inline void yyinp()
|
||||
{
|
||||
|
Reference in New Issue
Block a user