From f2a5527e606244e24262b913d1c947fd5f5aa2a3 Mon Sep 17 00:00:00 2001 From: Reijo Tomperi Date: Sat, 9 May 2009 23:12:14 +0300 Subject: [PATCH] Fix #289 (if() is not properly tokenized) http://apps.sourceforge.net/trac/cppcheck/ticket/289 --- src/tokenize.cpp | 5 +++++ test/testsimplifytokens.cpp | 2 +- test/testtokenize.cpp | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/tokenize.cpp b/src/tokenize.cpp index fbef6745f..838bf2477 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -1619,6 +1619,11 @@ bool Tokenizer::simplifyIfAddBraces() continue; } + // If there is no code after he if(), abort + if (!tok->next()) + return false; + + // insert open brace.. tok->insertToken("{"); tok = tok->next(); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index dce6610c8..622eee2b0 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -365,7 +365,7 @@ private: { // remove parantheses.. ASSERT_EQUALS("= p ; ", tok("= (p);")); - ASSERT_EQUALS("if ( a < p ) { ", tok("if(a<(p))")); + ASSERT_EQUALS("if ( a < p ) { } ", tok("if(a<(p)){}")); // keep parantheses.. ASSERT_EQUALS("= a ; ", tok("= (char)a;")); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 94d7df193..9b94005a7 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -78,6 +78,7 @@ private: TEST_CASE(ifAddBraces3); TEST_CASE(ifAddBraces4); TEST_CASE(ifAddBraces5); + TEST_CASE(ifAddBraces6); TEST_CASE(numeric_true_condition); @@ -436,6 +437,22 @@ private: ASSERT_EQUALS(std::string(" void f ( ) { for ( int i = 0 ; i < 2 ; i ++ ) { if ( true ) { return ; } } return ; }"), ostr.str()); } + void ifAddBraces6() + { + const char code[] = "if()"; + + // tokenize.. + OurTokenizer tokenizer; + std::istringstream istr(code); + tokenizer.tokenize(istr, "test.cpp"); + + ASSERT_EQUALS(false, tokenizer.simplifyIfAddBraces()); + + std::ostringstream ostr; + for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next()) + ostr << " " << tok->str(); + ASSERT_EQUALS(std::string(" if ( )"), ostr.str()); + } void simplifyKnownVariables1() {