From 06a594a9e06ec963fc688a7497941459a41c9510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 24 May 2016 13:33:21 +0200 Subject: [PATCH] Fixed #6207 ('not' misinterpreted as alternative C token) --- lib/tokenize.cpp | 12 +++++++----- test/testtokenize.cpp | 28 +++++++++++++--------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 4cd2fda8c..d9251455c 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -6044,6 +6044,9 @@ namespace { // xor_eq => ^= bool Tokenizer::simplifyCAlternativeTokens() { + if (!isC()) + return false; + /* For C code: executable scope level */ unsigned int executableScopeLevel = 0; @@ -6066,17 +6069,16 @@ bool Tokenizer::simplifyCAlternativeTokens() const std::map::const_iterator cOpIt = cAlternativeTokens.find(tok->str()); if (cOpIt != cAlternativeTokens.end()) { - if (isC() && !Token::Match(tok->previous(), "%name%|%num%|%char%|)|]|> %name% %name%|%num%|%char%|%op%|(")) + if (!Token::Match(tok->previous(), "%name%|%num%|%char%|)|]|> %name% %name%|%num%|%char%|%op%|(")) continue; tok->str(cOpIt->second); ret = true; } else if (Token::Match(tok, "not|compl")) { // Don't simplify 'not p;' (in case 'not' is a type) - if (isC() && (!Token::Match(tok->next(), "%name%|%op%|(") || - Token::Match(tok->previous(), "[;{}]") || - (executableScopeLevel == 0U && tok->strAt(-1) == "("))) + if (!Token::Match(tok->next(), "%name%|(") || + Token::Match(tok->previous(), "[;{}]") || + (executableScopeLevel == 0U && tok->strAt(-1) == "(")) continue; - tok->str((tok->str() == "not") ? "!" : "~"); ret = true; } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 6ac79a095..8bc4b868e 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -5662,22 +5662,20 @@ private: } void simplifyCAlternativeTokens() { - ASSERT_EQUALS("void f ( ) { if ( a && b ) { ; } }", tokenizeAndStringify("void f() { if (a and b); }")); - ASSERT_EQUALS("void f ( ) { if ( a || b ) { ; } }", tokenizeAndStringify("void f() { if (a or b); }")); - ASSERT_EQUALS("void f ( ) { if ( a & b ) { ; } }", tokenizeAndStringify("void f() { if (a bitand b); }")); - ASSERT_EQUALS("void f ( ) { if ( a | b ) { ; } }", tokenizeAndStringify("void f() { if (a bitor b); }")); - ASSERT_EQUALS("void f ( ) { if ( a ^ b ) { ; } }", tokenizeAndStringify("void f() { if (a xor b); }")); - 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); }")); + ASSERT_EQUALS("void f ( ) { if ( a && b ) { ; } }", tokenizeAndStringify("void f() { if (a and b); }", false, true, Settings::Native, "test.c")); + ASSERT_EQUALS("void f ( ) { if ( a || b ) { ; } }", tokenizeAndStringify("void f() { if (a or b); }", false, true, Settings::Native, "test.c")); + ASSERT_EQUALS("void f ( ) { if ( a & b ) { ; } }", tokenizeAndStringify("void f() { if (a bitand b); }", false, true, Settings::Native, "test.c")); + ASSERT_EQUALS("void f ( ) { if ( a | b ) { ; } }", tokenizeAndStringify("void f() { if (a bitor b); }", false, true, Settings::Native, "test.c")); + ASSERT_EQUALS("void f ( ) { if ( a ^ b ) { ; } }", tokenizeAndStringify("void f() { if (a xor b); }", false, true, Settings::Native, "test.c")); + ASSERT_EQUALS("void f ( ) { if ( ~ b ) { ; } }", tokenizeAndStringify("void f() { if (compl b); }", false, true, Settings::Native, "test.c")); + ASSERT_EQUALS("void f ( ) { if ( ! b ) { ; } }", tokenizeAndStringify("void f() { if (not b); }", false, true, Settings::Native, "test.c")); + ASSERT_EQUALS("void f ( ) { if ( a != b ) { ; } }", tokenizeAndStringify("void f() { if (a not_eq b); }", false, true, Settings::Native, "test.c")); // #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" - "##file 0\n" - "1: void f ( bool b@1 ) { if ( ! b@1 ) { ; } }\n", - tokenizeDebugListing("void f(bool b) { if (not b); }")); + ASSERT_EQUALS("void f ( ) { if ( ! c || ! memcmp ( a , b , s ) ) { ; } }", tokenizeAndStringify("void f() { if (!c or !memcmp(a, b, s)); }", false, true, Settings::Native, "test.c")); + // #6029 + ASSERT_EQUALS("void f ( ) { if ( ! b ) { } }", tokenizeAndStringify("void f() { if (not b){} }", false, true, Settings::Native, "test.c")); + // #6207 + ASSERT_EQUALS("void f ( ) { if ( not = x ) { } }", tokenizeAndStringify("void f() { if (not=x){} }", false, true, Settings::Native, "test.c")); } void simplifyCalculations() {