From a943a0739a6817659b66bb340006f66f1ce401b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Fri, 1 Aug 2014 17:19:08 +0200 Subject: [PATCH] Tokenizer: Don't remove struct member in Tokenizer::simplifyKeyword() --- lib/tokenize.cpp | 22 +++++++++++++++++++--- test/testsimplifytokens.cpp | 4 ++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 341c4c6a7..7baaf725d 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -9301,10 +9301,26 @@ void Tokenizer::simplifyAttribute() // - Not in C++ standard yet void Tokenizer::simplifyKeyword() { + std::set keywords; + keywords.insert("volatile"); + keywords.insert("inline"); + keywords.insert("_inline"); + keywords.insert("__inline"); + keywords.insert("__forceinline"); + keywords.insert("register"); + keywords.insert("__restrict"); + keywords.insert("__restrict__"); + for (Token *tok = list.front(); tok; tok = tok->next()) { - while (Token::Match(tok, "volatile|inline|_inline|__inline|__forceinline|register|__restrict|__restrict__")) { - tok->deleteThis(); - } + if (keywords.find(tok->str()) == keywords.end()) + continue; + + // Don't remove struct members + if (Token::Match(tok->previous(), ".")) + continue; + + // Simplify.. + tok->deleteThis(); } if (_settings->standards.c >= Standards::C99) { diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 4a82dffe1..216597e23 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -7621,6 +7621,10 @@ private: ASSERT_EQUALS("int * * p ;", tok("int * restrict * p;", "test.c")); ASSERT_EQUALS("void foo ( float * a , float * b ) ;", tok("void foo(float * restrict a, float * restrict b);", "test.c")); ASSERT_EQUALS("int * p ;", tok("typedef int * __restrict__ rint; rint p;", "test.c")); + + // don't remove struct members: + ASSERT_EQUALS("a = b . _inline ;", tok("a = b._inline;", true)); + } void simplifyCallingConvention() {