forked from qt-creator/qt-creator
C++: Fix lexing of >> / >>=
The current code always ends up setting the token to T_GREATER_GREATER. Change-Id: If75ff1f5bccffd5918ec2bf491724cd0981220ae Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io> Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
c8ef91f789
commit
c0f3094866
6
src/libs/3rdparty/cplusplus/Lexer.cpp
vendored
6
src/libs/3rdparty/cplusplus/Lexer.cpp
vendored
@@ -630,9 +630,9 @@ void Lexer::scan_helper(Token *tok)
|
||||
if (_yychar == '=') {
|
||||
yyinp();
|
||||
tok->f.kind = T_GREATER_GREATER_EQUAL;
|
||||
} else
|
||||
tok->f.kind = T_LESS_LESS;
|
||||
tok->f.kind = T_GREATER_GREATER;
|
||||
} else {
|
||||
tok->f.kind = T_GREATER_GREATER;
|
||||
}
|
||||
} else if (_yychar == '=') {
|
||||
yyinp();
|
||||
tok->f.kind = T_GREATER_EQUAL;
|
||||
|
@@ -38,6 +38,7 @@ typedef QByteArray _;
|
||||
|
||||
Q_DECLARE_METATYPE(TokenKindList)
|
||||
Q_DECLARE_METATYPE(CPlusPlus::Tokens)
|
||||
Q_DECLARE_METATYPE(CPlusPlus::Kind)
|
||||
|
||||
//TESTED_COMPONENT=src/libs/cplusplus
|
||||
using namespace CPlusPlus;
|
||||
@@ -70,6 +71,8 @@ private slots:
|
||||
void literals_data();
|
||||
void preprocessor();
|
||||
void preprocessor_data();
|
||||
void ppOpOrPunc();
|
||||
void ppOpOrPunc_data();
|
||||
void digraph();
|
||||
void digraph_data();
|
||||
void trigraph();
|
||||
@@ -395,6 +398,82 @@ void tst_SimpleLexer::preprocessor_data()
|
||||
QTest::newRow("pp-number") << source << expectedTokenKindList;
|
||||
}
|
||||
|
||||
void tst_SimpleLexer::ppOpOrPunc()
|
||||
{
|
||||
QFETCH(Kind, expectedTokenKind);
|
||||
|
||||
const QByteArray source = QTest::currentDataTag();
|
||||
run(source, toTokens({expectedTokenKind}), false, CompareKind, true);
|
||||
}
|
||||
|
||||
void tst_SimpleLexer::ppOpOrPunc_data()
|
||||
{
|
||||
QTest::addColumn<Kind>("expectedTokenKind");
|
||||
|
||||
// N4296 - [2.12]
|
||||
QTest::newRow("{") << T_LBRACE;
|
||||
QTest::newRow("}") << T_RBRACE;
|
||||
QTest::newRow("[") << T_LBRACKET;
|
||||
QTest::newRow("]") << T_RBRACKET;
|
||||
QTest::newRow("#") << T_POUND;
|
||||
QTest::newRow("##") << T_POUND_POUND;
|
||||
QTest::newRow("(") << T_LPAREN;
|
||||
QTest::newRow(")") << T_RPAREN;
|
||||
QTest::newRow("<:") << T_LBRACKET;
|
||||
QTest::newRow(":>") << T_RBRACKET;
|
||||
QTest::newRow("<%") << T_LBRACE;
|
||||
QTest::newRow("%>") << T_RBRACE;
|
||||
QTest::newRow("%:") << T_POUND;
|
||||
QTest::newRow("%:%:") << T_POUND_POUND;
|
||||
QTest::newRow(";") << T_SEMICOLON;
|
||||
QTest::newRow(":") << T_COLON;
|
||||
QTest::newRow("...") << T_DOT_DOT_DOT;
|
||||
QTest::newRow("new") << T_NEW;
|
||||
QTest::newRow("delete") << T_DELETE;
|
||||
QTest::newRow("?") << T_QUESTION;
|
||||
QTest::newRow("::") << T_COLON_COLON;
|
||||
QTest::newRow(".") << T_DOT;
|
||||
QTest::newRow(".*") << T_DOT_STAR;
|
||||
QTest::newRow("+") << T_PLUS;
|
||||
QTest::newRow("-") << T_MINUS;
|
||||
QTest::newRow("*") << T_STAR;
|
||||
QTest::newRow("/") << T_SLASH;
|
||||
QTest::newRow("%") << T_PERCENT;
|
||||
QTest::newRow("^") << T_CARET;
|
||||
QTest::newRow("&") << T_AMPER;
|
||||
QTest::newRow("|") << T_PIPE;
|
||||
QTest::newRow("~") << T_TILDE;
|
||||
QTest::newRow("^=") << T_CARET_EQUAL;
|
||||
QTest::newRow("&=") << T_AMPER_EQUAL;
|
||||
QTest::newRow("|=") << T_PIPE_EQUAL;
|
||||
QTest::newRow("<<") << T_LESS_LESS;
|
||||
QTest::newRow(">>") << T_GREATER_GREATER;
|
||||
QTest::newRow(">>=") << T_GREATER_GREATER_EQUAL;
|
||||
QTest::newRow("<<=") << T_LESS_LESS_EQUAL;
|
||||
QTest::newRow("==") << T_EQUAL_EQUAL;
|
||||
QTest::newRow("!=") << T_EXCLAIM_EQUAL;
|
||||
QTest::newRow("<=") << T_LESS_EQUAL;
|
||||
QTest::newRow(">=") << T_GREATER_EQUAL;
|
||||
QTest::newRow("&&") << T_AMPER_AMPER;
|
||||
QTest::newRow("||") << T_PIPE_PIPE;
|
||||
QTest::newRow("++") << T_PLUS_PLUS;
|
||||
QTest::newRow("--") << T_MINUS_MINUS;
|
||||
QTest::newRow(",") << T_COMMA;
|
||||
QTest::newRow("->*") << T_ARROW_STAR;
|
||||
QTest::newRow("->") << T_ARROW;
|
||||
QTest::newRow("and") << T_AND;
|
||||
QTest::newRow("and_eq") << T_AND_EQ;
|
||||
QTest::newRow("bitand") << T_BITAND;
|
||||
QTest::newRow("bitor") << T_BITOR;
|
||||
QTest::newRow("compl") << T_COMPL;
|
||||
QTest::newRow("not") << T_NOT;
|
||||
QTest::newRow("not_eq") << T_NOT_EQ;
|
||||
QTest::newRow("or") << T_OR;
|
||||
QTest::newRow("or_eq") << T_OR_EQ;
|
||||
QTest::newRow("xor") << T_XOR;
|
||||
QTest::newRow("xor_eq") << T_XOR_EQ;
|
||||
}
|
||||
|
||||
void tst_SimpleLexer::bytes_and_utf16chars()
|
||||
{
|
||||
QFETCH(QByteArray, source);
|
||||
|
Reference in New Issue
Block a user