@@ -99,63 +99,6 @@ static void skipEnumBody(T *&tok)
99
99
tok = defStart->link ()->next ();
100
100
}
101
101
102
- const Token * Tokenizer::isFunctionHead (const Token *tok, const std::string &endsWith)
103
- {
104
- if (!tok)
105
- return nullptr ;
106
- if (tok->str () == " (" )
107
- tok = tok->link ();
108
- if (tok->str () != " )" )
109
- return nullptr ;
110
- if (!tok->isCpp () && !Token::Match (tok->link ()->previous (), " %name%|(|)" ))
111
- return nullptr ;
112
- if (Token::Match (tok, " ) ;|{|[" )) {
113
- tok = tok->next ();
114
- while (tok && tok->str () == " [" && tok->link ()) {
115
- if (endsWith.find (tok->str ()) != std::string::npos)
116
- return tok;
117
- tok = tok->link ()->next ();
118
- }
119
- return (tok && endsWith.find (tok->str ()) != std::string::npos) ? tok : nullptr ;
120
- }
121
- if (tok->isCpp () && tok->str () == " )" ) {
122
- tok = tok->next ();
123
- while (Token::Match (tok, " const|noexcept|override|final|volatile|mutable|&|&& !!(" ) ||
124
- (Token::Match (tok, " %name% !!(" ) && tok->isUpperCaseName ()))
125
- tok = tok->next ();
126
- if (tok && tok->str () == " )" )
127
- tok = tok->next ();
128
- while (tok && tok->str () == " [" )
129
- tok = tok->link ()->next ();
130
- if (Token::Match (tok, " throw|noexcept (" ))
131
- tok = tok->linkAt (1 )->next ();
132
- if (Token::Match (tok, " %name% (" ) && tok->isUpperCaseName ())
133
- tok = tok->linkAt (1 )->next ();
134
- if (tok && tok->originalName () == " ->" ) { // trailing return type
135
- for (tok = tok->next (); tok && !Token::Match (tok, " ;|{|override|final|}|)|]" ); tok = tok->next ())
136
- if (tok->link () && Token::Match (tok, " <|[|(" ))
137
- tok = tok->link ();
138
- }
139
- while (Token::Match (tok, " override|final !!(" ) ||
140
- (Token::Match (tok, " %name% !!(" ) && tok->isUpperCaseName ()))
141
- tok = tok->next ();
142
- if (Token::Match (tok, " = 0|default|delete ;" ))
143
- tok = tok->tokAt (2 );
144
- if (Token::simpleMatch (tok, " requires" )) {
145
- for (tok = tok->next (); tok && !Token::Match (tok, " ;|{|}|)|]" ); tok = tok->next ()) {
146
- if (tok->link () && Token::Match (tok, " <|[|(" ))
147
- tok = tok->link ();
148
- if (Token::simpleMatch (tok, " bool {" ))
149
- tok = tok->linkAt (1 );
150
- }
151
- }
152
- if (tok && tok->str () == " :" && !Token::Match (tok->next (), " %name%|::" ))
153
- return nullptr ;
154
- return (tok && endsWith.find (tok->str ()) != std::string::npos) ? tok : nullptr ;
155
- }
156
- return nullptr ;
157
- }
158
-
159
102
/* *
160
103
* is tok the start brace { of a class, struct, union, or enum
161
104
*/
@@ -1476,7 +1419,7 @@ void Tokenizer::simplifyTypedefCpp()
1476
1419
}
1477
1420
1478
1421
// function
1479
- else if (isFunctionHead (tokOffset->link (), " ;," )) {
1422
+ else if (TokenList:: isFunctionHead (tokOffset->link (), " ;," )) {
1480
1423
function = true ;
1481
1424
if (tokOffset->link ()->strAt (1 ) == " const" ) {
1482
1425
specStart = tokOffset->link ()->next ();
@@ -1774,7 +1717,7 @@ void Tokenizer::simplifyTypedefCpp()
1774
1717
}
1775
1718
1776
1719
// check for member functions
1777
- else if (cpp && tok2->str () == " (" && isFunctionHead (tok2, " {:" )) {
1720
+ else if (cpp && tok2->str () == " (" && TokenList:: isFunctionHead (tok2, " {:" )) {
1778
1721
const Token *func = tok2->previous ();
1779
1722
1780
1723
/* * @todo add support for multi-token operators */
@@ -2842,7 +2785,7 @@ bool Tokenizer::isMemberFunction(const Token *openParen)
2842
2785
{
2843
2786
return (Token::Match (openParen->tokAt (-2 ), " :: %name% (" ) ||
2844
2787
Token::Match (openParen->tokAt (-3 ), " :: ~ %name% (" )) &&
2845
- isFunctionHead (openParen, " {|:" );
2788
+ TokenList:: isFunctionHead (openParen, " {|:" );
2846
2789
}
2847
2790
2848
2791
static bool scopesMatch (const std::string &scope1, const std::string &scope2, const ScopeInfo3 *globalScope)
@@ -3976,7 +3919,7 @@ const Token * Tokenizer::startOfExecutableScope(const Token * tok)
3976
3919
if (tok->str () != " )" )
3977
3920
return nullptr ;
3978
3921
3979
- tok = Tokenizer ::isFunctionHead (tok, " :{" );
3922
+ tok = TokenList ::isFunctionHead (tok, " :{" );
3980
3923
3981
3924
if (Token::Match (tok, " : %name% [({]" )) {
3982
3925
while (Token::Match (tok, " [:,] %name% [({]" ))
@@ -4408,7 +4351,7 @@ static void setVarIdStructMembers(Token *&tok1,
4408
4351
while (Token::Match (tok->next (), " )| . %name% !!(" )) {
4409
4352
// Don't set varid for trailing return type
4410
4353
if (tok->strAt (1 ) == " )" && Token::Match (tok->linkAt (1 )->tokAt (-1 ), " %name%|]" ) &&
4411
- Tokenizer ::isFunctionHead (tok->linkAt (1 ), " {|;" )) {
4354
+ TokenList ::isFunctionHead (tok->linkAt (1 ), " {|;" )) {
4412
4355
tok = tok->tokAt (3 );
4413
4356
continue ;
4414
4357
}
@@ -4623,7 +4566,7 @@ void Tokenizer::setVarIdPass1()
4623
4566
} else if (!initlist && tok->str ()==" (" ) {
4624
4567
const Token * newFunctionDeclEnd = nullptr ;
4625
4568
if (!scopeStack.top ().isExecutable )
4626
- newFunctionDeclEnd = isFunctionHead (tok, " {:;" );
4569
+ newFunctionDeclEnd = TokenList:: isFunctionHead (tok, " {:;" );
4627
4570
else {
4628
4571
const Token* tokenLinkNext = tok->link ()->next ();
4629
4572
if (Token::simpleMatch (tokenLinkNext, " ." )) { // skip trailing return type
@@ -4713,10 +4656,10 @@ void Tokenizer::setVarIdPass1()
4713
4656
if ((!scopeStack.top ().isStructInit &&
4714
4657
(tok == list.front () ||
4715
4658
Token::Match (tok, " [;{}]" ) ||
4716
- (tok->str () == " (" && !scopeStack.top ().isExecutable && isFunctionHead (tok," ;:" )) ||
4659
+ (tok->str () == " (" && !scopeStack.top ().isExecutable && TokenList:: isFunctionHead (tok," ;:" )) ||
4717
4660
(tok->str () == " ," && (!scopeStack.top ().isExecutable || inlineFunction || !tok->previous ()->varId ())) ||
4718
4661
(tok->isName () && endsWith (tok->str (), ' :' )))) ||
4719
- (tok->str () == " (" && isFunctionHead (tok, " {" ))) {
4662
+ (tok->str () == " (" && TokenList:: isFunctionHead (tok, " {" ))) {
4720
4663
4721
4664
// No variable declarations in sizeof
4722
4665
if (Token::simpleMatch (tok->previous (), " sizeof (" )) {
@@ -4764,7 +4707,7 @@ void Tokenizer::setVarIdPass1()
4764
4707
syntaxError (errTok);
4765
4708
}
4766
4709
4767
- if (tok->str () == " (" && isFunctionHead (tok, " {" ) && scopeStack.top ().isExecutable )
4710
+ if (tok->str () == " (" && TokenList:: isFunctionHead (tok, " {" ) && scopeStack.top ().isExecutable )
4768
4711
inlineFunction = true ;
4769
4712
4770
4713
if (decl) {
@@ -5208,7 +5151,7 @@ void Tokenizer::setVarIdPass2()
5208
5151
// skip parentheses..
5209
5152
if (tok2->link ()) {
5210
5153
if (tok2->str () == " (" ) {
5211
- Token *funcstart = const_cast <Token*>(isFunctionHead (tok2, " {" ));
5154
+ Token *funcstart = const_cast <Token*>(TokenList:: isFunctionHead (tok2, " {" ));
5212
5155
if (funcstart) {
5213
5156
setVarIdClassFunction (scopeName2 + classname, funcstart, funcstart->link (), thisClassVars, structMembers, mVarId );
5214
5157
tok2 = funcstart->link ();
@@ -5264,7 +5207,7 @@ void Tokenizer::setVarIdPass2()
5264
5207
tok2 = tok2->linkAt (1 );
5265
5208
5266
5209
// If this is a function implementation.. add it to funclist
5267
- Token * start = const_cast <Token *>(isFunctionHead (tok2, " {" ));
5210
+ Token * start = const_cast <Token *>(TokenList:: isFunctionHead (tok2, " {" ));
5268
5211
if (start) {
5269
5212
setVarIdClassFunction (classname, start, start->link (), thisClassVars, structMembers, mVarId );
5270
5213
}
@@ -6501,7 +6444,7 @@ void Tokenizer::removeMacrosInGlobalScope()
6501
6444
!Token::Match (tok2, " requires|namespace|class|struct|union|private:|protected:|public:" ))
6502
6445
unknownMacroError (tok);
6503
6446
6504
- if (Token::Match (tok, " %type% (" ) && Token::Match (tok2, " %type% (" ) && !Token::Match (tok2, " noexcept|throw" ) && isFunctionHead (tok2->next (), " :;{" ))
6447
+ if (Token::Match (tok, " %type% (" ) && Token::Match (tok2, " %type% (" ) && !Token::Match (tok2, " noexcept|throw" ) && TokenList:: isFunctionHead (tok2->next (), " :;{" ))
6505
6448
unknownMacroError (tok);
6506
6449
6507
6450
// remove unknown macros before namespace|class|struct|union
@@ -6519,7 +6462,7 @@ void Tokenizer::removeMacrosInGlobalScope()
6519
6462
6520
6463
// replace unknown macros before foo(
6521
6464
/*
6522
- if (Token::Match(tok2, "%type% (") && isFunctionHead(tok2->next(), "{")) {
6465
+ if (Token::Match(tok2, "%type% (") && TokenList:: isFunctionHead(tok2->next(), "{")) {
6523
6466
std::string typeName;
6524
6467
for (const Token* tok3 = tok; tok3 != tok2; tok3 = tok3->next())
6525
6468
typeName += tok3->str();
@@ -7630,7 +7573,7 @@ bool Tokenizer::simplifyCAlternativeTokens()
7630
7573
7631
7574
for (Token *tok = list.front (); tok; tok = tok->next ()) {
7632
7575
if (tok->str () == " )" ) {
7633
- if (const Token *end = isFunctionHead (tok, " {" )) {
7576
+ if (const Token *end = TokenList:: isFunctionHead (tok, " {" )) {
7634
7577
++executableScopeLevel;
7635
7578
tok = const_cast <Token *>(end);
7636
7579
continue ;
@@ -9030,7 +8973,7 @@ void Tokenizer::simplifyFunctionTryCatch()
9030
8973
for (Token * tok = list.front (); tok; tok = tok->next ()) {
9031
8974
if (!Token::Match (tok, " try {|:" ))
9032
8975
continue ;
9033
- if (!isFunctionHead (tok->previous (), " try" ))
8976
+ if (!TokenList:: isFunctionHead (tok->previous (), " try" ))
9034
8977
continue ;
9035
8978
9036
8979
Token* tryStartToken = skipInitializerList (tok->next ());
@@ -9472,7 +9415,7 @@ void Tokenizer::simplifyCPPAttribute()
9472
9415
head = skipCPPOrAlignAttribute (head)->next ();
9473
9416
while (Token::Match (head, " %name%|::|*|&|<|>|," )) // skip return type
9474
9417
head = head->next ();
9475
- if (head && head->str () == " (" && isFunctionHead (head, " {|;" )) {
9418
+ if (head && head->str () == " (" && TokenList:: isFunctionHead (head, " {|;" )) {
9476
9419
head->previous ()->isAttributeNoreturn (true );
9477
9420
}
9478
9421
} else if (Token::findsimplematch (tok->tokAt (2 ), " nodiscard" , tok->link ())) {
@@ -9481,7 +9424,7 @@ void Tokenizer::simplifyCPPAttribute()
9481
9424
head = skipCPPOrAlignAttribute (head)->next ();
9482
9425
while (Token::Match (head, " %name%|::|*|&|<|>|," ))
9483
9426
head = head->next ();
9484
- if (head && head->str () == " (" && isFunctionHead (head, " {|;" )) {
9427
+ if (head && head->str () == " (" && TokenList:: isFunctionHead (head, " {|;" )) {
9485
9428
head->previous ()->isAttributeNodiscard (true );
9486
9429
}
9487
9430
} else if ((hasMaybeUnusedUnderscores && Token::findsimplematch (tok->tokAt (2 ), " __maybe_unused__" , tok->link ()))
@@ -10048,9 +9991,9 @@ void Tokenizer::simplifyNamespaceStd()
10048
9991
if (Token::Match (tok->previous (), " .|::|namespace" ))
10049
9992
continue ;
10050
9993
if (Token::simpleMatch (tok->next (), " (" )) {
10051
- if (isFunctionHead (tok->next (), " {" ))
9994
+ if (TokenList:: isFunctionHead (tok->next (), " {" ))
10052
9995
userFunctions.insert (tok->str ());
10053
- else if (isFunctionHead (tok->next (), " ;" )) {
9996
+ else if (TokenList:: isFunctionHead (tok->next (), " ;" )) {
10054
9997
const Token *start = tok;
10055
9998
while (Token::Match (start->previous (), " %type%|*|&" ))
10056
9999
start = start->previous ();
@@ -10276,7 +10219,7 @@ void Tokenizer::createSymbolDatabase()
10276
10219
bool Tokenizer::operatorEnd (const Token * tok)
10277
10220
{
10278
10221
if (tok && tok->str () == " )" ) {
10279
- if (isFunctionHead (tok, " {|;|?|:|[" ))
10222
+ if (TokenList:: isFunctionHead (tok, " {|;|?|:|[" ))
10280
10223
return true ;
10281
10224
10282
10225
tok = tok->next ();
@@ -10298,7 +10241,7 @@ bool Tokenizer::operatorEnd(const Token * tok)
10298
10241
tok = tok->link ()->next ();
10299
10242
}
10300
10243
} else if (Token::Match (tok, " %op% !!(" ) ||
10301
- (Token::Match (tok, " %op% (" ) && !isFunctionHead (tok->next (), " {" )))
10244
+ (Token::Match (tok, " %op% (" ) && !TokenList:: isFunctionHead (tok->next (), " {" )))
10302
10245
break ;
10303
10246
else
10304
10247
return false ;
@@ -10469,7 +10412,7 @@ void Tokenizer::simplifyOverloadedOperators()
10469
10412
++indent;
10470
10413
else
10471
10414
tok2 = tok2->link ();
10472
- } else if (indent == 1 && Token::simpleMatch (tok2, " operator() (" ) && isFunctionHead (tok2->next (), " ;{" )) {
10415
+ } else if (indent == 1 && Token::simpleMatch (tok2, " operator() (" ) && TokenList:: isFunctionHead (tok2->next (), " ;{" )) {
10473
10416
classNames.insert (tok->strAt (1 ));
10474
10417
break ;
10475
10418
}
0 commit comments