Commit b9d15f12 authored by Leandro Melo's avatar Leandro Melo

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: default avatarRoberto Raggi <roberto.raggi@nokia.com>
Reviewed-by: default avatarhjk <qthjk@ovi.com>
parent a5900877
......@@ -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;
......
......@@ -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()
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment