From d21ca7881c87b03f33284ca012819503b347e614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 17 Dec 2011 19:05:14 +0100 Subject: [PATCH] Fixed #3424 (Tokenizer: doesn't tokenize if-if-else-else correctly) --- lib/tokenize.cpp | 4 +++- test/testtokenize.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 71a77b4b0..11ce70a25 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -4913,7 +4913,9 @@ bool Tokenizer::simplifyIfAddBraces() tempToken = tempToken->link(); if (!tempToken || !tempToken->next()) break; - if (tempToken->next()->isName() && tempToken->next()->str() != "else") + if (Token::simpleMatch(tempToken, "} else") && !Token::Match(tempToken->tokAt(2), "if|{")) + innerIf = false; + else if (tempToken->next()->isName() && tempToken->next()->str() != "else") break; continue; } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 102b77e28..7ba167e08 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -87,6 +87,7 @@ private: TEST_CASE(ifAddBraces14); // #2610 - segfault: if()<{} TEST_CASE(ifAddBraces15); // #2616 - unknown macro before if TEST_CASE(ifAddBraces16); // '} else' should be in the same line + TEST_CASE(ifAddBraces17); // #3424 - if if { } else else TEST_CASE(whileAddBraces); TEST_CASE(doWhileAddBraces); @@ -963,6 +964,12 @@ private: "}", tokenizeAndStringify(code, true)); } + void ifAddBraces17() { + // ticket #3424 - if if { } else else + ASSERT_EQUALS("{ if ( x ) { if ( y ) { } else { ; } } else { ; } }", + tokenizeAndStringify("{ if(x) if(y){}else;else;}", false)); + } + void whileAddBraces() {