@@ -751,18 +751,20 @@ bool exprDependsOnThis(const Token* expr, bool onVar, nonneg int depth)
751751 return true ;
752752 ++depth;
753753 // calling nonstatic method?
754- if (Token::Match (expr->previous (), " !!:: %name% (" ) && expr->function () && expr->function ()->nestedIn && expr->function ()->nestedIn ->isClassOrStruct ()) {
754+ if (Token::Match (expr->previous (), " !!:: %name% (" ) && expr->function () && expr->function ()->nestedIn &&
755+ expr->function ()->nestedIn ->isClassOrStruct ()) {
755756 // is it a method of this?
756757 const Scope* fScope = expr->scope ();
757758 while (!fScope ->functionOf && fScope ->nestedIn )
758759 fScope = fScope ->nestedIn ;
759- const Scope* nestedIn = fScope ->functionOf ;
760- if (nestedIn && nestedIn->function )
761- nestedIn = nestedIn->function ->token ->scope ();
762- while (nestedIn && nestedIn != expr->function ()->nestedIn ) {
763- nestedIn = nestedIn->nestedIn ;
764- }
765- return nestedIn == expr->function ()->nestedIn ;
760+
761+ const Scope* classScope = fScope ->functionOf ;
762+ if (classScope && classScope->function )
763+ classScope = classScope->function ->token ->scope ();
764+
765+ if (classScope && classScope->isClassOrStruct ())
766+ return contains (classScope->findAssociatedScopes (), expr->function ()->nestedIn );
767+ return false ;
766768 } else if (onVar && Token::Match (expr, " %var%" ) && expr->variable ()) {
767769 const Variable* var = expr->variable ();
768770 return (var->isPrivate () || var->isPublic () || var->isProtected ());
0 commit comments