From 2df71c579813f2c8c8a52941d8ec0208b32c9d5c Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Sat, 17 Apr 2021 18:15:31 +0200 Subject: [PATCH] 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 --- src/libs/3rdparty/cplusplus/Lexer.cpp | 4 +++ tests/auto/cplusplus/lexer/tst_lexer.cpp | 44 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) 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 @@ -363,6 +363,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"