Fixed #2034 (false positive: unused private function (Borland C++ __property))

This commit is contained in:
Daniel Marjamäki 2010-09-07 18:37:43 +02:00
parent 2ab78d819e
commit 3a4cda0f0d
4 changed files with 27 additions and 1 deletions

View File

@ -1189,6 +1189,10 @@ void CheckClass::privateFunctions()
if (!_settings->_checkCodingStyle) if (!_settings->_checkCodingStyle)
return; return;
// dont check borland classes with properties..
if (Token::findmatch(_tokenizer->tokens(), "; __property ;"))
return;
createSymbolDatabase(); createSymbolDatabase();
std::multimap<std::string, SpaceInfo *>::iterator i; std::multimap<std::string, SpaceInfo *>::iterator i;

View File

@ -8390,6 +8390,11 @@ void Tokenizer::simplifyBorland()
Token::eraseTokens(tok2, tok2->link()); Token::eraseTokens(tok2, tok2->link());
tok2->deleteThis(); tok2->deleteThis();
tok2->deleteThis(); tok2->deleteThis();
// insert "; __property ;"
tok2->previous()->insertToken(";");
tok2->previous()->insertToken("__property");
tok2->previous()->insertToken(";");
} }
} }
} }

View File

@ -4649,7 +4649,7 @@ private:
tokenizeAndStringify("int (__closure *a)();", false)); tokenizeAndStringify("int (__closure *a)();", false));
// __property // __property
ASSERT_EQUALS("class Fred { } ;", ASSERT_EQUALS("class Fred { ; __property ; } ;",
tokenizeAndStringify("class Fred { __property int x = { } };", false)); tokenizeAndStringify("class Fred { __property int x = { } };", false));
} }

View File

@ -52,6 +52,8 @@ private:
TEST_CASE(incompleteImplementation); TEST_CASE(incompleteImplementation);
TEST_CASE(derivedClass); // skip warning for derived classes. It might be a virtual function. TEST_CASE(derivedClass); // skip warning for derived classes. It might be a virtual function.
TEST_CASE(borland); // skip FP when using __property
} }
@ -374,6 +376,21 @@ private:
"};\n"); "};\n");
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
} }
void borland()
{
// ticket #2034 - Borland C++ __property
check("class Foo {\n"
"private:\n"
" int getx() {\n"
" return 123;\n"
" }\n"
"public:\n"
" Foo() { }\n"
" __property int x = {read=getx}\n"
"};");
ASSERT_EQUALS("", errout.str());
}
}; };
REGISTER_TEST(TestUnusedPrivateFunction) REGISTER_TEST(TestUnusedPrivateFunction)