@@ -447,7 +447,7 @@ void CheckClass::initializeVarList(const Function &func, std::list<const Functio
447447 // Class constructor.. initializing variables like this
448448 // clKalle::clKalle() : var(value) { }
449449 if (initList) {
450- if (level == 0 && Token::Match (ftok, " %var% (" )) {
450+ if (level == 0 && Token::Match (ftok, " %var% {| (" )) {
451451 if (ftok->str () != func.name ()) {
452452 initVar (ftok->str (), scope, usage);
453453 } else { // c++11 delegate constructor
@@ -476,42 +476,14 @@ void CheckClass::initializeVarList(const Function &func, std::list<const Functio
476476 }
477477 }
478478 }
479- } else if (level == 0 && Token::Match (ftok, " %var% {" ) && ftok->str () != " const" && Token::Match (ftok->next ()->link ()->next (), " %type%|,|{" )) {
480- if (ftok->str () != func.name ()) {
481- initVar (ftok->str (), scope, usage);
482- } else { // c++11 delegate constructor
483- const Function *member = scope->findFunction (ftok);
484- // member function found
485- if (member) {
486- // recursive call
487- // assume that all variables are initialized
488- if (std::find (callstack.begin (), callstack.end (), member) != callstack.end ()) {
489- /* * @todo false negative: just bail */
490- assignAllVar (usage);
491- return ;
492- }
493-
494- // member function has implementation
495- if (member->hasBody ) {
496- // initialize variable use list using member function
497- callstack.push_back (member);
498- initializeVarList (*member, callstack, scope, usage);
499- callstack.pop_back ();
500- }
501-
502- // there is a called member function, but it has no implementation, so we assume it initializes everything
503- else {
504- assignAllVar (usage);
505- }
506- }
507- }
508- ftok = ftok->linkAt (1 );
479+ ftok = ftok->next ();
480+ level++;
509481 } else if (level != 0 && Token::Match (ftok, " %var% =" )) // assignment in the initializer: var(value = x)
510482 assignVar (ftok->str (), scope, usage);
511483
512484 else if (ftok->str () == " (" )
513485 level++;
514- else if (ftok->str () == " )" )
486+ else if (ftok->str () == " )" || ftok-> str () == " } " )
515487 level--;
516488 else if (ftok->str () == " {" ) {
517489 if (level == 0 )
@@ -1993,8 +1965,8 @@ void CheckClass::initializerListOrder()
19931965 tok = tok->next ();
19941966
19951967 // find all variable initializations in list
1996- while (tok && tok-> str () != " { " ) {
1997- if (Token::Match (tok, " %var% (" )) {
1968+ while (tok && tok != func-> functionScope -> classStart ) {
1969+ if (Token::Match (tok, " %var% (|{ " )) {
19981970 const Variable *var = info->getVariable (tok->str ());
19991971
20001972 if (var)
@@ -2058,7 +2030,7 @@ void CheckClass::checkSelfInitialization()
20582030 continue ;
20592031
20602032 for (; tok != scope->classStart ; tok = tok->next ()) {
2061- if (Token::Match (tok, " [:,] %var% ( %var% )" ) && tok->next ()->varId () && tok->next ()->varId () == tok->tokAt (3 )->varId ()) {
2033+ if (Token::Match (tok, " [:,] %var% (|{ %var% )|} " ) && tok->next ()->varId () && tok->next ()->varId () == tok->tokAt (3 )->varId ()) {
20622034 selfInitializationError (tok, tok->strAt (1 ));
20632035 }
20642036 }
0 commit comments