Fixed ticket #519 (Tokenizer converts commas in for-loops)
http://sourceforge.net/apps/trac/cppcheck/ticket/519
This commit is contained in:
parent
600f3a834d
commit
c8caefa94c
|
@ -3190,8 +3190,28 @@ void Tokenizer::syntaxError(const Token *tok, char c)
|
||||||
bool Tokenizer::simplifyComma()
|
bool Tokenizer::simplifyComma()
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
bool insideLoop = false;
|
||||||
|
size_t indentlevel = 0;
|
||||||
|
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
{
|
{
|
||||||
|
if (tok->str() == "(")
|
||||||
|
{
|
||||||
|
++indentlevel;
|
||||||
|
}
|
||||||
|
else if (tok->str() == ")")
|
||||||
|
{
|
||||||
|
--indentlevel;
|
||||||
|
if (indentlevel == 0)
|
||||||
|
{
|
||||||
|
insideLoop = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (tok->str() == "for")
|
||||||
|
{
|
||||||
|
insideLoop = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (tok->str() != ",")
|
if (tok->str() != ",")
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -3218,7 +3238,7 @@ bool Tokenizer::simplifyComma()
|
||||||
{
|
{
|
||||||
for (Token *tok2 = tok->previous(); tok2; tok2 = tok2->previous())
|
for (Token *tok2 = tok->previous(); tok2; tok2 = tok2->previous())
|
||||||
{
|
{
|
||||||
if (tok2->str() == "=")
|
if (tok2->str() == "=" && !insideLoop)
|
||||||
{
|
{
|
||||||
// Handle "a = 0, b = 0;"
|
// Handle "a = 0, b = 0;"
|
||||||
tok->str(";");
|
tok->str(";");
|
||||||
|
|
|
@ -1088,6 +1088,14 @@ private:
|
||||||
"}\n";
|
"}\n";
|
||||||
ASSERT_EQUALS(" void foo ( ) { delete a ; a = 0 ; }", sizeof_(code));
|
ASSERT_EQUALS(" void foo ( ) { delete a ; a = 0 ; }", sizeof_(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code[] = "void f()\n"
|
||||||
|
"{\n"
|
||||||
|
" for(int a,b; a < 10; a = a + 1, b = b + 1);\n"
|
||||||
|
"}\n";
|
||||||
|
ASSERT_EQUALS(" void f ( ) { for ( int a , b ; a < 10 ; a = a + 1 , b = b + 1 ) { ; } }", sizeof_(code));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void remove_comma()
|
void remove_comma()
|
||||||
|
|
Loading…
Reference in New Issue