Tokenizer : Added function for simplifying casts
This commit is contained in:
parent
4b04d38867
commit
3a1196e5f9
|
@ -135,9 +135,9 @@ private:
|
||||||
|
|
||||||
// TODO TEST_CASE( varid );
|
// TODO TEST_CASE( varid );
|
||||||
|
|
||||||
// TODO TEST_CASE( cast1 );
|
TEST_CASE( cast1 );
|
||||||
// TODO TEST_CASE( cast2 ); // Doesn't fail but for bad reasons
|
TEST_CASE( cast2 );
|
||||||
// TODO TEST_CASE( cast3 );
|
TEST_CASE( cast3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1119,7 +1119,7 @@ private:
|
||||||
check( "void foo()\n"
|
check( "void foo()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" char *a = malloc(10);\n"
|
" char *a = malloc(10);\n"
|
||||||
" free(reinterpret_cast<void *>(c));\n"
|
" free(reinterpret_cast<void *>(a));\n"
|
||||||
"}\n" );
|
"}\n" );
|
||||||
|
|
||||||
ASSERT_EQUALS( std::string(""), errout.str() );
|
ASSERT_EQUALS( std::string(""), errout.str() );
|
||||||
|
|
40
tokenize.cpp
40
tokenize.cpp
|
@ -1015,6 +1015,7 @@ void Tokenizer::simplifyTokenList()
|
||||||
for ( bool done = false; !done; done = true)
|
for ( bool done = false; !done; done = true)
|
||||||
{
|
{
|
||||||
done &= simplifyConditions();
|
done &= simplifyConditions();
|
||||||
|
done &= simplifyCasts();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -1091,6 +1092,45 @@ bool Tokenizer::simplifyConditions()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Tokenizer::simplifyCasts()
|
||||||
|
{
|
||||||
|
bool ret = true;
|
||||||
|
for ( TOKEN *tok = _tokens; tok; tok = tok->next() )
|
||||||
|
{
|
||||||
|
if ( TOKEN::Match(tok->next(), "( %type% * )") )
|
||||||
|
{
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( TOKEN::Match(tok->next(), "dynamic_cast|reinterpret_cast|const_cast <" ) )
|
||||||
|
{
|
||||||
|
while ( tok->next() && tok->next()->str() != ">" )
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->deleteNext();
|
||||||
|
TOKEN *tok2 = tok;
|
||||||
|
int parlevel = 0;
|
||||||
|
while ( tok2->next() && parlevel >= 0 )
|
||||||
|
{
|
||||||
|
tok2 = tok2->next();
|
||||||
|
if ( TOKEN::Match(tok2->next(), "(") )
|
||||||
|
++parlevel;
|
||||||
|
else if ( TOKEN::Match(tok2->next(), ")") )
|
||||||
|
--parlevel;
|
||||||
|
}
|
||||||
|
if (tok2->next())
|
||||||
|
tok2->deleteNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Helper functions for handling the tokens list
|
// Helper functions for handling the tokens list
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
|
@ -97,6 +97,8 @@ private:
|
||||||
|
|
||||||
bool simplifyConditions();
|
bool simplifyConditions();
|
||||||
|
|
||||||
|
bool simplifyCasts();
|
||||||
|
|
||||||
TOKEN *_gettok(TOKEN *tok, int index);
|
TOKEN *_gettok(TOKEN *tok, int index);
|
||||||
|
|
||||||
void InsertTokens(TOKEN *dest, TOKEN *src, unsigned int n);
|
void InsertTokens(TOKEN *dest, TOKEN *src, unsigned int n);
|
||||||
|
|
Loading…
Reference in New Issue