CheckOther: Use SymbolDatabase. Ticket: #2318

This commit is contained in:
Robert Reif 2010-12-18 20:35:40 +01:00 committed by Daniel Marjamäki
parent 1d349bf4cf
commit a2aa601899
1 changed files with 16 additions and 8 deletions

View File

@ -2484,13 +2484,21 @@ bool CheckOther::isIdentifierObjectType(const Token * const tok)
void CheckOther::checkMisusedScopedObject()
{
bool withinFunction = false;
unsigned int depth = 0;
SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
std::list<SymbolDatabase::SpaceInfo *>::iterator i;
for (i = symbolDatabase->spaceInfoList.begin(); i != symbolDatabase->spaceInfoList.end(); ++i)
{
withinFunction |= Token::Match(tok, ") const| {");
if (withinFunction)
SymbolDatabase::SpaceInfo *info = *i;
// only check functions
if (info->type != SymbolDatabase::SpaceInfo::Function)
continue;
unsigned int depth = 0;
for (const Token *tok = info->classStart; tok; tok = tok->next())
{
if (tok->str() == "{")
{
@ -2499,11 +2507,11 @@ void CheckOther::checkMisusedScopedObject()
else if (tok->str() == "}")
{
--depth;
withinFunction &= depth > 0;
if (depth == 0)
break;
}
if (withinFunction
&& Token::Match(tok, "[;{}] %var% (")
if (Token::Match(tok, "[;{}] %var% (")
&& Token::Match(tok->tokAt(2)->link(), ") ;")
&& isIdentifierObjectType(tok)
)