@@ -1506,12 +1506,8 @@ bool isSameExpression(bool cpp, bool macro, const Token *tok1, const Token *tok2
15061506 if (cpp) {
15071507 if (tok1->str () == " ." && tok1->astOperand1 () && tok1->astOperand1 ()->str () == " this" )
15081508 tok1 = tok1->astOperand2 ();
1509- while (Token::simpleMatch (tok1, " ::" ) && tok1->astOperand2 ())
1510- tok1 = tok1->astOperand2 ();
15111509 if (tok2->str () == " ." && tok2->astOperand1 () && tok2->astOperand1 ()->str () == " this" )
15121510 tok2 = tok2->astOperand2 ();
1513- while (Token::simpleMatch (tok2, " ::" ) && tok2->astOperand2 ())
1514- tok2 = tok2->astOperand2 ();
15151511 }
15161512 // Skip double not
15171513 if (Token::simpleMatch (tok1, " !" ) && Token::simpleMatch (tok1->astOperand1 (), " !" ) && !Token::simpleMatch (tok1->astParent (), " =" ) && astIsBoolLike (tok2)) {
@@ -1523,20 +1519,26 @@ bool isSameExpression(bool cpp, bool macro, const Token *tok1, const Token *tok2
15231519 const bool tok_str_eq = tok1->str () == tok2->str ();
15241520 if (!tok_str_eq && isDifferentKnownValues (tok1, tok2))
15251521 return false ;
1526- if (isSameConstantValue (macro, tok1, tok2))
1522+
1523+ const Token *followTok1 = tok1, *followTok2 = tok2;
1524+ while (Token::simpleMatch (followTok1, " ::" ) && followTok1->astOperand2 ())
1525+ followTok1 = followTok1->astOperand2 ();
1526+ while (Token::simpleMatch (followTok2, " ::" ) && followTok2->astOperand2 ())
1527+ followTok2 = followTok2->astOperand2 ();
1528+ if (isSameConstantValue (macro, followTok1, followTok2))
15271529 return true ;
15281530
15291531 // Follow variable
1530- if (followVar && !tok_str_eq && (tok1 ->varId () || tok2 ->varId () || tok1 ->enumerator () || tok2 ->enumerator ())) {
1531- const Token * varTok1 = followVariableExpression (tok1 , cpp, tok2 );
1532- if ((varTok1->str () == tok2 ->str ()) || isSameConstantValue (macro, varTok1, tok2 )) {
1533- followVariableExpressionError (tok1 , varTok1, errors);
1534- return isSameExpression (cpp, macro, varTok1, tok2 , library, true , followVar, errors);
1535- }
1536- const Token * varTok2 = followVariableExpression (tok2 , cpp, tok1 );
1537- if ((tok1 ->str () == varTok2->str ()) || isSameConstantValue (macro, tok1 , varTok2)) {
1538- followVariableExpressionError (tok2 , varTok2, errors);
1539- return isSameExpression (cpp, macro, tok1 , varTok2, library, true , followVar, errors);
1532+ if (followVar && !tok_str_eq && (followTok1 ->varId () || followTok2 ->varId () || followTok1 ->enumerator () || followTok2 ->enumerator ())) {
1533+ const Token * varTok1 = followVariableExpression (followTok1 , cpp, followTok2 );
1534+ if ((varTok1->str () == followTok2 ->str ()) || isSameConstantValue (macro, varTok1, followTok2 )) {
1535+ followVariableExpressionError (followTok1 , varTok1, errors);
1536+ return isSameExpression (cpp, macro, varTok1, followTok2 , library, true , followVar, errors);
1537+ }
1538+ const Token * varTok2 = followVariableExpression (followTok2 , cpp, followTok1 );
1539+ if ((followTok1 ->str () == varTok2->str ()) || isSameConstantValue (macro, followTok1 , varTok2)) {
1540+ followVariableExpressionError (followTok2 , varTok2, errors);
1541+ return isSameExpression (cpp, macro, followTok1 , varTok2, library, true , followVar, errors);
15401542 }
15411543 if ((varTok1->str () == varTok2->str ()) || isSameConstantValue (macro, varTok1, varTok2)) {
15421544 followVariableExpressionError (tok1, varTok1, errors);
0 commit comments