@@ -1177,8 +1177,8 @@ static void valueFlowGlobalStaticVar(TokenList &tokenList, const Settings &setti
11771177 }
11781178}
11791179
1180- static ValuePtr<Analyzer> makeAnalyzer (const Token* exprTok, ValueFlow::Value value, const TokenList& tokenlist, const Settings& settings);
1181- static ValuePtr<Analyzer> makeReverseAnalyzer (const Token* exprTok, ValueFlow::Value value, const TokenList& tokenlist, const Settings& settings);
1180+ static ValuePtr<Analyzer> makeAnalyzer (const Token* exprTok, ValueFlow::Value value, const Settings& settings);
1181+ static ValuePtr<Analyzer> makeReverseAnalyzer (const Token* exprTok, ValueFlow::Value value, const Settings& settings);
11821182
11831183static Analyzer::Result valueFlowForward (Token* startToken,
11841184 const Token* endToken,
@@ -1193,7 +1193,7 @@ static Analyzer::Result valueFlowForward(Token* startToken,
11931193 setSourceLocation (value, loc, startToken);
11941194 return valueFlowGenericForward (startToken,
11951195 endToken,
1196- makeAnalyzer (exprTok, std::move (value), tokenlist, settings),
1196+ makeAnalyzer (exprTok, std::move (value), settings),
11971197 tokenlist,
11981198 errorLogger,
11991199 settings);
@@ -1246,7 +1246,7 @@ static Analyzer::Result valueFlowForwardRecursive(Token* top,
12461246 if (settings.debugnormal )
12471247 setSourceLocation (v, loc, top);
12481248 result.update (
1249- valueFlowGenericForward (top, makeAnalyzer (exprTok, std::move (v), tokenlist, settings), tokenlist, errorLogger, settings));
1249+ valueFlowGenericForward (top, makeAnalyzer (exprTok, std::move (v), settings), tokenlist, errorLogger, settings));
12501250 }
12511251 return result;
12521252}
@@ -1263,7 +1263,7 @@ static void valueFlowReverse(Token* tok,
12631263 for (ValueFlow::Value& v : values) {
12641264 if (settings.debugnormal )
12651265 setSourceLocation (v, loc, tok);
1266- valueFlowGenericReverse (tok, endToken, makeReverseAnalyzer (varToken, std::move (v), tokenlist, settings), tokenlist, errorLogger, settings);
1266+ valueFlowGenericReverse (tok, endToken, makeReverseAnalyzer (varToken, std::move (v), settings), tokenlist, errorLogger, settings);
12671267 }
12681268}
12691269
@@ -1527,11 +1527,10 @@ static bool bifurcate(const Token* tok, const std::set<nonneg int>& varids, cons
15271527}
15281528
15291529struct ValueFlowAnalyzer : Analyzer {
1530- const TokenList& tokenlist;
15311530 const Settings& settings;
15321531 ProgramMemoryState pms;
15331532
1534- explicit ValueFlowAnalyzer (const TokenList& t, const Settings& s) : tokenlist(t), settings(s), pms(&settings) {}
1533+ explicit ValueFlowAnalyzer (const Settings& s) : settings(s), pms(&settings) {}
15351534
15361535 virtual const ValueFlow::Value* getValue (const Token* tok) const = 0;
15371536 virtual ValueFlow::Value* getValue (const Token* tok) = 0;
@@ -1569,10 +1568,6 @@ struct ValueFlowAnalyzer : Analyzer {
15691568 return false ;
15701569 }
15711570
1572- bool isCPP () const {
1573- return tokenlist.isCPP ();
1574- }
1575-
15761571 const Settings& getSettings () const {
15771572 return settings;
15781573 }
@@ -2184,7 +2179,7 @@ struct SingleValueFlowAnalyzer : ValueFlowAnalyzer {
21842179 std::unordered_map<nonneg int , const Variable*> aliases;
21852180 ValueFlow::Value value;
21862181
2187- SingleValueFlowAnalyzer (ValueFlow::Value v, const TokenList& t, const Settings& s) : ValueFlowAnalyzer(t, s), value(std::move(v)) {}
2182+ SingleValueFlowAnalyzer (ValueFlow::Value v, const Settings& s) : ValueFlowAnalyzer(s), value(std::move(v)) {}
21882183
21892184 const std::unordered_map<nonneg int , const Variable*>& getVars () const {
21902185 return varids;
@@ -2305,7 +2300,7 @@ struct SingleValueFlowAnalyzer : ValueFlowAnalyzer {
23052300 ValuePtr<Analyzer> reanalyze (Token* tok, const std::string& msg) const override {
23062301 ValueFlow::Value newValue = value;
23072302 newValue.errorPath .emplace_back (tok, msg);
2308- return makeAnalyzer (tok, std::move (newValue), tokenlist, settings);
2303+ return makeAnalyzer (tok, std::move (newValue), settings);
23092304 }
23102305};
23112306
@@ -2316,8 +2311,8 @@ struct ExpressionAnalyzer : SingleValueFlowAnalyzer {
23162311 bool dependOnThis{};
23172312 bool uniqueExprId{};
23182313
2319- ExpressionAnalyzer (const Token* e, ValueFlow::Value val, const TokenList& t, const Settings& s)
2320- : SingleValueFlowAnalyzer(std::move(val), t, s),
2314+ ExpressionAnalyzer (const Token* e, ValueFlow::Value val, const Settings& s)
2315+ : SingleValueFlowAnalyzer(std::move(val), s),
23212316 expr (e)
23222317 {
23232318
@@ -2420,8 +2415,8 @@ struct ExpressionAnalyzer : SingleValueFlowAnalyzer {
24202415};
24212416
24222417struct SameExpressionAnalyzer : ExpressionAnalyzer {
2423- SameExpressionAnalyzer (const Token* e, ValueFlow::Value val, const TokenList& t, const Settings& s)
2424- : ExpressionAnalyzer(e, std::move(val), t, s)
2418+ SameExpressionAnalyzer (const Token* e, ValueFlow::Value val, const Settings& s)
2419+ : ExpressionAnalyzer(e, std::move(val), s)
24252420 {}
24262421
24272422 bool skipUniqueExprIds () const override {
@@ -2437,8 +2432,8 @@ struct SameExpressionAnalyzer : ExpressionAnalyzer {
24372432struct OppositeExpressionAnalyzer : ExpressionAnalyzer {
24382433 bool isNot{};
24392434
2440- OppositeExpressionAnalyzer (bool pIsNot, const Token* e, ValueFlow::Value val, const TokenList& t, const Settings& s)
2441- : ExpressionAnalyzer(e, std::move(val), t, s), isNot(pIsNot)
2435+ OppositeExpressionAnalyzer (bool pIsNot, const Token* e, ValueFlow::Value val, const Settings& s)
2436+ : ExpressionAnalyzer(e, std::move(val), s), isNot(pIsNot)
24422437 {}
24432438
24442439 bool skipUniqueExprIds () const override {
@@ -2455,8 +2450,8 @@ struct SubExpressionAnalyzer : ExpressionAnalyzer {
24552450 // A shared_ptr is used so partial reads can be captured even after forking
24562451 std::shared_ptr<PartialReadContainer> partialReads;
24572452
2458- SubExpressionAnalyzer (const Token* e, ValueFlow::Value val, const TokenList& t, const Settings& s)
2459- : ExpressionAnalyzer(e, std::move(val), t, s), partialReads(std::make_shared<PartialReadContainer>())
2453+ SubExpressionAnalyzer (const Token* e, ValueFlow::Value val, const Settings& s)
2454+ : ExpressionAnalyzer(e, std::move(val), s), partialReads(std::make_shared<PartialReadContainer>())
24602455 {}
24612456
24622457 virtual bool submatch (const Token* tok, bool exact = true ) const = 0;
@@ -2490,8 +2485,8 @@ struct SubExpressionAnalyzer : ExpressionAnalyzer {
24902485struct MemberExpressionAnalyzer : SubExpressionAnalyzer {
24912486 std::string varname;
24922487
2493- MemberExpressionAnalyzer (std::string varname, const Token* e, ValueFlow::Value val, const TokenList& t, const Settings& s)
2494- : SubExpressionAnalyzer(e, std::move(val), t, s), varname(std::move(varname))
2488+ MemberExpressionAnalyzer (std::string varname, const Token* e, ValueFlow::Value val, const Settings& s)
2489+ : SubExpressionAnalyzer(e, std::move(val), s), varname(std::move(varname))
24952490 {}
24962491
24972492 bool submatch (const Token* tok, bool exact) const override
@@ -4486,11 +4481,11 @@ static void valueFlowConditionExpressions(const TokenList &tokenlist, const Symb
44864481 for (const Token* condTok2 : getConditions (condTok, " &&" )) {
44874482 if (is1) {
44884483 const bool isBool = astIsBool (condTok2) || Token::Match (condTok2, " %comp%|%oror%|&&" );
4489- SameExpressionAnalyzer a1 (condTok2, makeConditionValue (1 , condTok2, /* assume*/ true , !isBool, settings), tokenlist, settings); // don't set '1' for non-boolean expressions
4484+ SameExpressionAnalyzer a1 (condTok2, makeConditionValue (1 , condTok2, /* assume*/ true , !isBool, settings), settings); // don't set '1' for non-boolean expressions
44904485 valueFlowGenericForward (startTok, startTok->link (), a1, tokenlist, errorLogger, settings);
44914486 }
44924487
4493- OppositeExpressionAnalyzer a2 (true , condTok2, makeConditionValue (0 , condTok2, true , false , settings), tokenlist, settings);
4488+ OppositeExpressionAnalyzer a2 (true , condTok2, makeConditionValue (0 , condTok2, true , false , settings), settings);
44944489 valueFlowGenericForward (startTok, startTok->link (), a2, tokenlist, errorLogger, settings);
44954490 }
44964491 }
@@ -4501,11 +4496,11 @@ static void valueFlowConditionExpressions(const TokenList &tokenlist, const Symb
45014496 if (Token::simpleMatch (startTok->link (), " } else {" )) {
45024497 startTok = startTok->link ()->tokAt (2 );
45034498 for (const Token* condTok2:conds) {
4504- SameExpressionAnalyzer a1 (condTok2, makeConditionValue (0 , condTok2, false , false , settings), tokenlist, settings);
4499+ SameExpressionAnalyzer a1 (condTok2, makeConditionValue (0 , condTok2, false , false , settings), settings);
45054500 valueFlowGenericForward (startTok, startTok->link (), a1, tokenlist, errorLogger, settings);
45064501
45074502 if (is1) {
4508- OppositeExpressionAnalyzer a2 (true , condTok2, makeConditionValue (1 , condTok2, false , false , settings), tokenlist, settings);
4503+ OppositeExpressionAnalyzer a2 (true , condTok2, makeConditionValue (1 , condTok2, false , false , settings), settings);
45094504 valueFlowGenericForward (startTok, startTok->link (), a2, tokenlist, errorLogger, settings);
45104505 }
45114506 }
@@ -4521,11 +4516,11 @@ static void valueFlowConditionExpressions(const TokenList &tokenlist, const Symb
45214516 continue ;
45224517 }
45234518 for (const Token* condTok2:conds) {
4524- SameExpressionAnalyzer a1 (condTok2, makeConditionValue (0 , condTok2, false , false , settings), tokenlist, settings);
4519+ SameExpressionAnalyzer a1 (condTok2, makeConditionValue (0 , condTok2, false , false , settings), settings);
45254520 valueFlowGenericForward (startTok->link ()->next (), scope2->bodyEnd , a1, tokenlist, errorLogger, settings);
45264521
45274522 if (is1) {
4528- OppositeExpressionAnalyzer a2 (true , condTok2, makeConditionValue (1 , condTok2, false , false , settings), tokenlist, settings);
4523+ OppositeExpressionAnalyzer a2 (true , condTok2, makeConditionValue (1 , condTok2, false , false , settings), settings);
45294524 valueFlowGenericForward (startTok->link ()->next (), scope2->bodyEnd , a2, tokenlist, errorLogger, settings);
45304525 }
45314526 }
@@ -6471,8 +6466,8 @@ struct MultiValueFlowAnalyzer : ValueFlowAnalyzer {
64716466 std::unordered_map<nonneg int , ValueFlow::Value> values;
64726467 std::unordered_map<nonneg int , const Variable*> vars;
64736468
6474- MultiValueFlowAnalyzer (const std::unordered_map<const Variable*, ValueFlow::Value>& args, const TokenList& t, const Settings& set)
6475- : ValueFlowAnalyzer(t, set) {
6469+ MultiValueFlowAnalyzer (const std::unordered_map<const Variable*, ValueFlow::Value>& args, const Settings& set)
6470+ : ValueFlowAnalyzer(set) {
64766471 for (const auto & p:args) {
64776472 values[p.first ->declarationId ()] = p.second ;
64786473 vars[p.first ->declarationId ()] = p.first ;
@@ -6674,14 +6669,14 @@ static bool productParams(const Settings& settings, const std::unordered_map<Key
66746669 return !bail;
66756670}
66766671
6677- static void valueFlowInjectParameter (TokenList& tokenlist,
6672+ static void valueFlowInjectParameter (const TokenList& tokenlist,
66786673 ErrorLogger& errorLogger,
66796674 const Settings& settings,
66806675 const Scope* functionScope,
66816676 const std::unordered_map<const Variable*, std::list<ValueFlow::Value>>& vars)
66826677{
66836678 const bool r = productParams (settings, vars, [&](const std::unordered_map<const Variable*, ValueFlow::Value>& arg) {
6684- MultiValueFlowAnalyzer a (arg, tokenlist, settings);
6679+ MultiValueFlowAnalyzer a (arg, settings);
66856680 valueFlowGenericForward (const_cast <Token*>(functionScope->bodyStart ), functionScope->bodyEnd , a, tokenlist, errorLogger, settings);
66866681 });
66876682 if (!r) {
@@ -6853,7 +6848,7 @@ static IteratorRange<Iterator> MakeIteratorRange(Iterator start, Iterator last)
68536848 return {start, last};
68546849}
68556850
6856- static void valueFlowSubFunction (TokenList& tokenlist, SymbolDatabase& symboldatabase, ErrorLogger& errorLogger, const Settings& settings)
6851+ static void valueFlowSubFunction (const TokenList& tokenlist, SymbolDatabase& symboldatabase, ErrorLogger& errorLogger, const Settings& settings)
68576852{
68586853 int id = 0 ;
68596854 for (const Scope* scope : MakeIteratorRange (symboldatabase.functionScopes .crbegin (), symboldatabase.functionScopes .crend ())) {
@@ -7215,7 +7210,7 @@ static void valueFlowUninit(TokenList& tokenlist, ErrorLogger& errorLogger, cons
72157210 partial = true ;
72167211 continue ;
72177212 }
7218- MemberExpressionAnalyzer analyzer (memVar.nameToken ()->str (), tok, uninitValue, tokenlist, settings);
7213+ MemberExpressionAnalyzer analyzer (memVar.nameToken ()->str (), tok, uninitValue, settings);
72197214 valueFlowGenericForward (start, tok->scope ()->bodyEnd , analyzer, tokenlist, errorLogger, settings);
72207215
72217216 for (auto && p : *analyzer.partialReads ) {
@@ -7317,8 +7312,8 @@ static bool isContainerSizeChangedByFunction(const Token* tok,
73177312}
73187313
73197314struct ContainerExpressionAnalyzer : ExpressionAnalyzer {
7320- ContainerExpressionAnalyzer (const Token* expr, ValueFlow::Value val, const TokenList& t, const Settings& s)
7321- : ExpressionAnalyzer(expr, std::move(val), t, s)
7315+ ContainerExpressionAnalyzer (const Token* expr, ValueFlow::Value val, const Settings& s)
7316+ : ExpressionAnalyzer(expr, std::move(val), s)
73227317 {}
73237318
73247319 bool match (const Token* tok) const override {
@@ -7502,19 +7497,19 @@ static const Token* solveExprValue(const Token* expr, ValueFlow::Value& value)
75027497 value);
75037498}
75047499
7505- static ValuePtr<Analyzer> makeAnalyzer (const Token* exprTok, ValueFlow::Value value, const TokenList& tokenlist, const Settings& settings)
7500+ static ValuePtr<Analyzer> makeAnalyzer (const Token* exprTok, ValueFlow::Value value, const Settings& settings)
75067501{
75077502 if (value.isContainerSizeValue ())
7508- return ContainerExpressionAnalyzer (exprTok, std::move (value), tokenlist, settings);
7503+ return ContainerExpressionAnalyzer (exprTok, std::move (value), settings);
75097504 const Token* expr = solveExprValue (exprTok, value);
7510- return ExpressionAnalyzer (expr, std::move (value), tokenlist, settings);
7505+ return ExpressionAnalyzer (expr, std::move (value), settings);
75117506}
75127507
7513- static ValuePtr<Analyzer> makeReverseAnalyzer (const Token* exprTok, ValueFlow::Value value, const TokenList& tokenlist, const Settings& settings)
7508+ static ValuePtr<Analyzer> makeReverseAnalyzer (const Token* exprTok, ValueFlow::Value value, const Settings& settings)
75147509{
75157510 if (value.isContainerSizeValue ())
7516- return ContainerExpressionAnalyzer (exprTok, std::move (value), tokenlist, settings);
7517- return ExpressionAnalyzer (exprTok, std::move (value), tokenlist, settings);
7511+ return ContainerExpressionAnalyzer (exprTok, std::move (value), settings);
7512+ return ExpressionAnalyzer (exprTok, std::move (value), settings);
75187513}
75197514
75207515bool ValueFlow::isContainerSizeChanged (const Token* tok, int indirect, const Settings& settings, int depth)
0 commit comments