From ebf26ca1255a42ef37adf7d250b195bef83caec3 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 6 Dec 2015 15:25:26 +0200 Subject: [PATCH] C++: Support negative enum values Change-Id: I93dac08a62be467918dbc9f72239d34191a81fd6 Reviewed-by: Nikolai Kosjar --- src/libs/3rdparty/cplusplus/Bind.cpp | 5 +++- .../auto/cplusplus/semantic/tst_semantic.cpp | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/libs/3rdparty/cplusplus/Bind.cpp b/src/libs/3rdparty/cplusplus/Bind.cpp index e5802d44283..d8f9861e7d2 100644 --- a/src/libs/3rdparty/cplusplus/Bind.cpp +++ b/src/libs/3rdparty/cplusplus/Bind.cpp @@ -468,7 +468,10 @@ bool isInteger(const StringLiteral *stringLiteral) { const int size = stringLiteral->size(); const char *chars = stringLiteral->chars(); - for (int i = 0; i < size; ++i) { + int i = 0; + if (chars[i] == '-') + ++i; + for (; i < size; ++i) { if (!isdigit(chars[i])) return false; } diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp index 2011f03e002..9fed8689c95 100644 --- a/tests/auto/cplusplus/semantic/tst_semantic.cpp +++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp @@ -190,6 +190,7 @@ private slots: void enum_constantValue3(); void enum_constantValue4(); void enum_constantValue5(); + void enum_constantValueNegative(); }; void tst_Semantic::function_declaration_1() @@ -916,5 +917,28 @@ void tst_Semantic::enum_constantValue5() testEnumaratorDeclarator(e, 4, "2"); } +void tst_Semantic::enum_constantValueNegative() +{ + QSharedPointer doc = document( + "enum {\n" + " E1=-2,\n" + " E2,\n" + " E3,\n" + " E4\n" + "};\n" + ); + + QCOMPARE(doc->errorCount, 0U); + QCOMPARE(doc->globals->memberCount(), 1U); + Enum *e = doc->globals->memberAt(0)->asEnum(); + QVERIFY(e); + QCOMPARE(e->memberCount(), 4U); + + testEnumaratorDeclarator(e, 0, "-2"); + testEnumaratorDeclarator(e, 1, "-1"); + testEnumaratorDeclarator(e, 2, "0"); + testEnumaratorDeclarator(e, 3, "1"); +} + QTEST_MAIN(tst_Semantic) #include "tst_semantic.moc"