Improve Tokenizer::simplifyFuncInWhile.

Differentiate between the new cppcheck:r variables by appending a number to the name, like 'cppcheck:r1', 'cppcheck:r2' and more.
This commit is contained in:
Edoardo Prezioso 2012-11-26 02:19:35 +01:00
parent 9dae536ce3
commit 76639578ad
2 changed files with 18 additions and 18 deletions

View File

@ -8176,19 +8176,19 @@ void Tokenizer::simplifyErrNoInWhile()
void Tokenizer::simplifyFuncInWhile()
{
unsigned int count = 0;
for (Token *tok = list.front(); tok; tok = tok->next()) {
if (!Token::Match(tok, "while ( %var% ( %var% ) ) {"))
continue;
Token *func = tok->tokAt(2);
Token *var = tok->tokAt(4);
Token *end = tok->linkAt(7);
if (!end)
break;
Token *end = tok->next()->link()->next()->link();
const unsigned int varid = ++_varId; // Create new variable
const std::string varname("cppcheck:r" + MathLib::longToString(++count));
tok->str("int");
tok->next()->insertToken("cppcheck:r");
tok->next()->insertToken(varname);
tok->tokAt(2)->varId(varid);
tok->insertToken("while");
tok->insertToken(";");
@ -8198,10 +8198,10 @@ void Tokenizer::simplifyFuncInWhile()
tok->insertToken("(");
tok->insertToken(func->str());
tok->insertToken("=");
tok->insertToken("cppcheck:r");
tok->insertToken(varname);
tok->next()->varId(varid);
Token::createMutualLinks(tok->tokAt(4), tok->tokAt(6));
end->previous()->insertToken("cppcheck:r");
end->previous()->insertToken(varname);
end->previous()->varId(varid);
end->previous()->insertToken("=");
Token::move(func, func->tokAt(3), end->previous());

View File

@ -7309,30 +7309,30 @@ private:
}
void simplifyFuncInWhile() {
ASSERT_EQUALS("int cppcheck:r = fclose ( f ) ; "
"while ( cppcheck:r ) "
ASSERT_EQUALS("int cppcheck:r1 = fclose ( f ) ; "
"while ( cppcheck:r1 ) "
"{ "
"foo ( ) ; "
"cppcheck:r = fclose ( f ) ; "
"cppcheck:r1 = fclose ( f ) ; "
"}",
tok("while(fclose(f))foo();"));
ASSERT_EQUALS("int cppcheck:r = fclose ( f ) ; "
"while ( cppcheck:r ) "
ASSERT_EQUALS("int cppcheck:r1 = fclose ( f ) ; "
"while ( cppcheck:r1 ) "
"{ "
"; cppcheck:r = fclose ( f ) ; "
"; cppcheck:r1 = fclose ( f ) ; "
"}",
tok("while(fclose(f));"));
ASSERT_EQUALS("int cppcheck:r = fclose ( f ) ; "
"while ( cppcheck:r ) "
ASSERT_EQUALS("int cppcheck:r1 = fclose ( f ) ; "
"while ( cppcheck:r1 ) "
"{ "
"; cppcheck:r = fclose ( f ) ; "
"; cppcheck:r1 = fclose ( f ) ; "
"} "
"int cppcheck:r = fclose ( g ) ; "
"while ( cppcheck:r ) "
"int cppcheck:r2 = fclose ( g ) ; "
"while ( cppcheck:r2 ) "
"{ "
"; cppcheck:r = fclose ( g ) ; "
"; cppcheck:r2 = fclose ( g ) ; "
"}",
tok("while(fclose(f)); while(fclose(g));"));
}