C++: fix digraph parsing for <:: exception.

According to section 2.5 from the standard:
""" If the input stream has been parsed into preprocessing tokens up to
a given character: ... Otherwise, if the next three characters are <::
and the subsequent character is neither : nor >, the < is treated as a
preprocessor token by itself and not as the first character of the
alternative token <:. """

Change-Id: Ib9cdac61e3c2243d1bc1d4471a09ae6bd839fdda
Task-number: QTCREATORBUG-13253
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Francois Ferrand
2015-03-14 12:53:43 +01:00
parent dc7b6ca6c3
commit 27deb9c876
2 changed files with 14 additions and 2 deletions

View File

@@ -610,8 +610,12 @@ void Lexer::scan_helper(Token *tok)
yyinp();
tok->f.kind = T_LESS_EQUAL;
} else if (_yychar == ':') {
yyinp();
tok->f.kind = T_LBRACKET;
if (*(_currentChar+1) != ':' || *(_currentChar+2) == ':' || *(_currentChar+2) == '>') {
yyinp();
tok->f.kind = T_LBRACKET;
} else {
tok->f.kind = T_LESS;
}
} else if (_yychar == '%') {
yyinp();
tok->f.kind = T_LBRACE;