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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user