partial fix for #2624 (better function pointer support needed)
This commit is contained in:
parent
b9df7735c5
commit
7d2fb2ecde
|
@ -5385,7 +5385,7 @@ void Tokenizer:: simplifyFunctionPointers()
|
||||||
{
|
{
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
{
|
{
|
||||||
if (tok->previous() && !Token::Match(tok->previous(), "[{};]"))
|
if (tok->previous() && !Token::Match(tok->previous(), "{|}|;|(|public:|protected:|private:"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (Token::Match(tok, "%type% *| *| ( * %var% ) ("))
|
if (Token::Match(tok, "%type% *| *| ( * %var% ) ("))
|
||||||
|
@ -5398,8 +5398,8 @@ void Tokenizer:: simplifyFunctionPointers()
|
||||||
while (tok->next()->str() == "*")
|
while (tok->next()->str() == "*")
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
|
|
||||||
// check that the declaration ends with ;
|
// check that the declaration ends
|
||||||
if (!Token::simpleMatch(tok->tokAt(5)->link(), ") ;"))
|
if (!Token::Match(tok->tokAt(5)->link(), ") ;|,|)|="))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// ok simplify this function pointer to an ordinary pointer
|
// ok simplify this function pointer to an ordinary pointer
|
||||||
|
@ -7063,6 +7063,7 @@ bool Tokenizer::simplifyCalculations()
|
||||||
// keep parentheses here: int ( * * ( * compilerHookVector ) (void) ) ( ) ;
|
// keep parentheses here: int ( * * ( * compilerHookVector ) (void) ) ( ) ;
|
||||||
// keep parentheses here: operator new [] (size_t);
|
// keep parentheses here: operator new [] (size_t);
|
||||||
// keep parentheses here: Functor()(a ... )
|
// keep parentheses here: Functor()(a ... )
|
||||||
|
// keep parentheses here: ) ( var ) ;
|
||||||
if (Token::Match(tok->next(), "( %var% ) [;),+-*/><]]") &&
|
if (Token::Match(tok->next(), "( %var% ) [;),+-*/><]]") &&
|
||||||
!tok->isName() &&
|
!tok->isName() &&
|
||||||
tok->str() != ">" &&
|
tok->str() != ">" &&
|
||||||
|
@ -7071,7 +7072,8 @@ bool Tokenizer::simplifyCalculations()
|
||||||
!Token::simpleMatch(tok->previous(), "* )") &&
|
!Token::simpleMatch(tok->previous(), "* )") &&
|
||||||
!Token::simpleMatch(tok->previous(), ") )") &&
|
!Token::simpleMatch(tok->previous(), ") )") &&
|
||||||
!Token::Match(tok->tokAt(-2), "* %var% )") &&
|
!Token::Match(tok->tokAt(-2), "* %var% )") &&
|
||||||
!Token::Match(tok->tokAt(-2), "%type% ( ) ( %var%")
|
!Token::Match(tok->tokAt(-2), "%type% ( ) ( %var%") &&
|
||||||
|
!Token::Match(tok, ") ( %var% ) ;")
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
tok->deleteNext();
|
tok->deleteNext();
|
||||||
|
|
|
@ -3557,8 +3557,8 @@ private:
|
||||||
|
|
||||||
const char expected[] =
|
const char expected[] =
|
||||||
"; "
|
"; "
|
||||||
"void addCallback ( bool ( * callback ) ( int i ) ) { } "
|
"void addCallback ( bool * callback ) { } "
|
||||||
"void addCallback1 ( bool ( * callback ) ( int i ) , int j ) { }";
|
"void addCallback1 ( bool * callback , int j ) { }";
|
||||||
|
|
||||||
ASSERT_EQUALS(expected, tok(code, false));
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
}
|
}
|
||||||
|
@ -3574,28 +3574,12 @@ private:
|
||||||
|
|
||||||
const char expected[] =
|
const char expected[] =
|
||||||
"; "
|
"; "
|
||||||
"void g ( int ( * f ) ( ) ) "
|
"void g ( int * f ) "
|
||||||
"{ "
|
"{ "
|
||||||
"int ( * f2 ) ( ) = ( int ( * ) ( ) ) f ; "
|
"int * f2 ; f2 = ( int ( * ) ( ) ) f ; "
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
ASSERT_EQUALS(expected, tok(code, false));
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
|
|
||||||
// TODO: the definition and assignment should be split up
|
|
||||||
const char wanted[] =
|
|
||||||
"; "
|
|
||||||
"void g ( fp f ) "
|
|
||||||
"{ "
|
|
||||||
"int ( * f2 ) ( ) ; f2 = ( int ( * ) ( ) ) f ; "
|
|
||||||
"}";
|
|
||||||
const char current[] =
|
|
||||||
"; "
|
|
||||||
"void g ( int ( * f ) ( ) ) "
|
|
||||||
"{ "
|
|
||||||
"int ( * f2 ) ( ) = ( int ( * ) ( ) ) f ; "
|
|
||||||
"}";
|
|
||||||
|
|
||||||
TODO_ASSERT_EQUALS(wanted, current, tok(code, false));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -3607,9 +3591,9 @@ private:
|
||||||
|
|
||||||
const char expected[] =
|
const char expected[] =
|
||||||
"; "
|
"; "
|
||||||
"void g ( int ( * f ) ( ) ) "
|
"void g ( int * f ) "
|
||||||
"{ "
|
"{ "
|
||||||
"int ( * f2 ) ( ) = static_cast < int ( * ) ( ) > ( f ) ; "
|
"int * f2 ; f2 = static_cast < int ( * ) ( ) > ( f ) ; "
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
ASSERT_EQUALS(expected, tok(code, false));
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
|
|
Loading…
Reference in New Issue