@@ -1181,7 +1181,7 @@ static const Token * followVariableExpression(const Token * tok, bool cpp, const
11811181 return tok;
11821182 } else if (!precedes (startToken, endToken)) {
11831183 return tok;
1184- } else if (isExpressionChanged (varTok, startToken, endToken, nullptr , cpp)) {
1184+ } else if (findExpressionChanged (varTok, startToken, endToken, nullptr , cpp)) {
11851185 return tok;
11861186 }
11871187 return varTok;
@@ -1549,7 +1549,7 @@ bool isSameExpression(bool cpp, bool macro, const Token *tok1, const Token *tok2
15491549 const Token *start = refTok1, *end = refTok2;
15501550 if (!precedes (start, end))
15511551 std::swap (start, end);
1552- if (isExpressionChanged (start, start, end, nullptr , cpp))
1552+ if (findExpressionChanged (start, start, end, nullptr , cpp))
15531553 return false ;
15541554 }
15551555 return isSameExpression (cpp, macro, refTok1, refTok2, library, pure, followVar, errors);
@@ -2825,7 +2825,7 @@ bool isVariableChanged(const Variable * var, const Settings *settings, bool cpp,
28252825 if (next)
28262826 start = next;
28272827 }
2828- return isExpressionChanged (var->nameToken (), start->next (), var->scope ()->bodyEnd , settings, cpp, depth);
2828+ return findExpressionChanged (var->nameToken (), start->next (), var->scope ()->bodyEnd , settings, cpp, depth);
28292829}
28302830
28312831bool isVariablesChanged (const Token* start,
@@ -2871,34 +2871,36 @@ bool isThisChanged(const Token* tok, int indirect, const Settings* settings, boo
28712871 return false ;
28722872}
28732873
2874- bool isThisChanged (const Token* start, const Token* end, int indirect, const Settings* settings, bool cpp)
2874+ const Token* findThisChanged (const Token* start, const Token* end, int indirect, const Settings* settings, bool cpp)
28752875{
28762876 if (!precedes (start, end))
2877- return false ;
2877+ return nullptr ;
28782878 for (const Token* tok = start; tok != end; tok = tok->next ()) {
28792879 if (!exprDependsOnThis (tok))
28802880 continue ;
28812881 if (isThisChanged (tok, indirect, settings, cpp))
2882- return true ;
2882+ return tok ;
28832883 }
2884- return false ;
2884+ return nullptr ;
28852885}
28862886
28872887template <class Find >
2888- bool isExpressionChangedImpl (const Token* expr,
2889- const Token* start,
2890- const Token* end,
2891- const Settings* settings,
2892- bool cpp,
2893- int depth,
2894- Find find)
2888+ const Token* findExpressionChangedImpl (const Token* expr,
2889+ const Token* start,
2890+ const Token* end,
2891+ const Settings* settings,
2892+ bool cpp,
2893+ int depth,
2894+ Find find)
28952895{
28962896 if (depth < 0 )
2897- return true ;
2897+ return start ;
28982898 if (!precedes (start, end))
2899- return false ;
2900- const Token* result = findAstNode (expr, [&](const Token* tok) {
2901- if (exprDependsOnThis (tok) && isThisChanged (start, end, false , settings, cpp)) {
2899+ return nullptr ;
2900+ const Token* result = nullptr ;
2901+ findAstNode (expr, [&](const Token* tok) {
2902+ if (exprDependsOnThis (tok)) {
2903+ result = findThisChanged (start, end, false , settings, cpp);
29022904 return true ;
29032905 }
29042906 bool global = false ;
@@ -2912,7 +2914,7 @@ bool isExpressionChangedImpl(const Token* expr,
29122914 }
29132915
29142916 if (tok->exprId () > 0 ) {
2915- const Token* result = find (start, end, [&](const Token* tok2) {
2917+ const Token* modifedTok = find (start, end, [&](const Token* tok2) {
29162918 int indirect = 0 ;
29172919 if (const ValueType* vt = tok->valueType ()) {
29182920 indirect = vt->pointer ;
@@ -2924,8 +2926,10 @@ bool isExpressionChangedImpl(const Token* expr,
29242926 return true ;
29252927 return false ;
29262928 });
2927- if (result)
2929+ if (modifedTok) {
2930+ result = modifedTok;
29282931 return true ;
2932+ }
29292933 }
29302934 return false ;
29312935 });
@@ -2954,20 +2958,25 @@ struct ExpressionChangedSkipDeadCode {
29542958 }
29552959};
29562960
2957- bool isExpressionChanged (const Token* expr, const Token* start, const Token* end, const Settings* settings, bool cpp, int depth)
2961+ const Token* findExpressionChanged (const Token* expr,
2962+ const Token* start,
2963+ const Token* end,
2964+ const Settings* settings,
2965+ bool cpp,
2966+ int depth)
29582967{
2959- return isExpressionChangedImpl (expr, start, end, settings, cpp, depth, ExpressionChangedSimpleFind{});
2968+ return findExpressionChangedImpl (expr, start, end, settings, cpp, depth, ExpressionChangedSimpleFind{});
29602969}
29612970
2962- bool isExpressionChangedSkipDeadCode (const Token* expr,
2963- const Token* start,
2964- const Token* end,
2965- const Settings* settings,
2966- bool cpp,
2967- const std::function<std::vector<MathLib::bigint>(const Token* tok)>& evaluate,
2968- int depth)
2971+ const Token* findExpressionChangedSkipDeadCode (const Token* expr,
2972+ const Token* start,
2973+ const Token* end,
2974+ const Settings* settings,
2975+ bool cpp,
2976+ const std::function<std::vector<MathLib::bigint>(const Token* tok)>& evaluate,
2977+ int depth)
29692978{
2970- return isExpressionChangedImpl (
2979+ return findExpressionChangedImpl (
29712980 expr, start, end, settings, cpp, depth, ExpressionChangedSkipDeadCode{&settings->library , evaluate});
29722981}
29732982
0 commit comments