From 14f15d65e75b0672198b2d34c6e5ac1b59d1c776 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Wed, 1 Oct 2014 08:41:28 +0200 Subject: [PATCH] Support more patterns when replacing stuff like 'or' (#6201) --- lib/tokenize.cpp | 4 ++-- test/testtokenize.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 74084374a..98e11554d 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -6257,14 +6257,14 @@ bool Tokenizer::simplifyCAlternativeTokens() tok = start; Token * const end = tok->link(); for (Token *tok2 = tok->next(); tok2 && tok2 != end; tok2 = tok2->next()) { - if (Token::Match(tok2, "%var%|%num%|)|] %any% %var%|%num%|(")) { + if (Token::Match(tok2, "%var%|%num%|)|]|> %any% %var%|%num%|(|%op%")) { const std::map::const_iterator cOpIt = cAlternativeTokens.find(tok2->next()->str()); if (cOpIt != cAlternativeTokens.end()) { tok2->next()->str(cOpIt->second); ret = true; } } - if (Token::Match(tok2, "not|compl %var%|(") && + if (Token::Match(tok2, "not|compl %var%|(|%op%") && !Token::Match(tok2->previous(), "[;{}]")) { // Don't simplify 'not p;' (in case 'not' is a type) tok2->str((tok2->str() == "not") ? "!" : "~"); ret = true; diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 68ee2a015..267d52ade 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -5871,6 +5871,8 @@ private: ASSERT_EQUALS("void f ( ) { if ( ~ b ) { ; } }", tokenizeAndStringify("void f() { if (compl b); }")); ASSERT_EQUALS("void f ( ) { if ( ! b ) { ; } }", tokenizeAndStringify("void f() { if (not b); }")); ASSERT_EQUALS("void f ( ) { if ( a != b ) { ; } }", tokenizeAndStringify("void f() { if (a not_eq b); }")); + // #6201 + ASSERT_EQUALS("void f ( ) { if ( ! c || ! memcmp ( a , b , s ) ) { ; } }", tokenizeAndStringify("void f() { if (!c or !memcmp(a, b, s)); }")); ASSERT_EQUALS("\n" // #6029 "\n"