aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2021-04-17 18:15:31 +0200
committerAndré Hartmann <aha_1980@gmx.de>2021-04-19 09:16:55 +0000
commit2df71c579813f2c8c8a52941d8ec0208b32c9d5c (patch)
tree5dde368d49490e9ce8b1f1289ad963d0114e9579
parent2ae36b9e265452eae4fd3a67253fe33a6e78e95e (diff)
Lexer: Support the integer suffixes LU and LLU also
Before we only supported UL and ULL. And add tests for all variants of allowed integer suffixes. Fixes: QTCREATORBUG-25604 Change-Id: Id92f371d2effa7456d2d50891a6c29810c5c4c75 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/libs/3rdparty/cplusplus/Lexer.cpp4
-rw-r--r--tests/auto/cplusplus/lexer/tst_lexer.cpp44
2 files changed, 48 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/Lexer.cpp b/src/libs/3rdparty/cplusplus/Lexer.cpp
index e0fee4feac9..1d814845fec 100644
--- a/src/libs/3rdparty/cplusplus/Lexer.cpp
+++ b/src/libs/3rdparty/cplusplus/Lexer.cpp
@@ -926,11 +926,15 @@ bool Lexer::scanOptionalIntegerSuffix(bool allowU)
yyinp();
if (_yychar == 'l')
yyinp();
+ if (_yychar == 'u' || _yychar == 'U')
+ yyinp();
return true;
case 'L':
yyinp();
if (_yychar == 'L')
yyinp();
+ if (_yychar == 'u' || _yychar == 'U')
+ yyinp();
return true;
default:
return false;
diff --git a/tests/auto/cplusplus/lexer/tst_lexer.cpp b/tests/auto/cplusplus/lexer/tst_lexer.cpp
index 90a36c510ca..fee14648e6e 100644
--- a/tests/auto/cplusplus/lexer/tst_lexer.cpp
+++ b/tests/auto/cplusplus/lexer/tst_lexer.cpp
@@ -364,6 +364,50 @@ void tst_SimpleLexer::literals_data()
QTest::newRow("microsoft-suffix") << source << expectedTokenKindList;
source =
+ "42u\n"
+ "43U\n"
+ "44ul\n"
+ "45UL\n"
+ "46uL\n"
+ "47Ul\n"
+ "48ull\n"
+ "49ULL\n"
+ "50uLL\n"
+ "51Ull\n"
+ "52l\n"
+ "53L\n"
+ "54ll\n"
+ "55LL\n"
+ "56lu\n"
+ "57LU\n"
+ "58lU\n"
+ "59Lu\n"
+ "60llu\n"
+ "61llU\n"
+ "62LLU\n"
+ "63LLu\n"
+ "64lL\n" // wrong
+ "65Ll\n" // wrong
+ "66luu\n" // wrong
+ "67LUU\n" // wrong
+ "68lul\n" // wrong
+ "69LUL\n" // wrong
+ ;
+ expectedTokenKindList =
+ TokenKindList() << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL
+ << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL
+ << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL
+ << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL
+ << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL
+ << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL
+ << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL << T_NUMERIC_LITERAL
+ << T_NUMERIC_LITERAL
+ << T_ERROR << T_ERROR << T_ERROR
+ << T_ERROR << T_ERROR << T_ERROR
+ ;
+ QTest::newRow("integer-suffix") << source << expectedTokenKindList;
+
+ source =
"R\"(raw text)\"\n"
"R\"delimiter(raw text)delimiter\"\n"
"R\"delimiter(\nraw text line1\nraw text line2\n)delimiter\"\n"