Skip to content

Commit 1976906

Browse files
committed
pass Settings as reference into TokenList
1 parent 5ac33c8 commit 1976906

20 files changed

Lines changed: 183 additions & 192 deletions

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ $(libcppdir)/infer.o: lib/infer.cpp lib/calculate.h lib/config.h lib/errortypes.
587587
$(libcppdir)/keywords.o: lib/keywords.cpp lib/config.h lib/keywords.h lib/standards.h lib/utils.h
588588
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/keywords.cpp
589589

590-
$(libcppdir)/library.o: lib/library.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
590+
$(libcppdir)/library.o: lib/library.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/astutils.h lib/checkers.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h
591591
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/library.cpp
592592

593593
$(libcppdir)/mathlib.o: lib/mathlib.cpp externals/simplecpp/simplecpp.h lib/config.h lib/errortypes.h lib/mathlib.h lib/templatesimplifier.h lib/token.h lib/utils.h lib/vfvalue.h

lib/checkfunctions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ void CheckFunctions::invalidFunctionUsage()
131131
invalidFunctionArgBoolError(argtok, functionToken->str(), argnr);
132132

133133
// Are the values 0 and 1 valid?
134-
else if (!mSettings->library.isIntArgValid(functionToken, argnr, 0))
134+
else if (!mSettings->library.isIntArgValid(functionToken, argnr, 0, *mSettings))
135135
invalidFunctionArgError(argtok, functionToken->str(), argnr, nullptr, mSettings->library.validarg(functionToken, argnr));
136-
else if (!mSettings->library.isIntArgValid(functionToken, argnr, 1))
136+
else if (!mSettings->library.isIntArgValid(functionToken, argnr, 1, *mSettings))
137137
invalidFunctionArgError(argtok, functionToken->str(), argnr, nullptr, mSettings->library.validarg(functionToken, argnr));
138138
}
139139
// check <strz>

lib/clangimport.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,8 @@ void clangimport::AstNode::setValueType(Token *tok)
672672
// TODO
673673
continue;
674674

675-
TokenList decl(nullptr);
675+
TokenList decl(*mData->mSettings);
676+
// TODO: this will override the enforced language
676677
decl.setLang(tok->isCpp() ? Standards::Language::CPP : Standards::Language::C);
677678
addTypeTokens(decl, type, tok->scope());
678679
if (!decl.front())

lib/cppcheck.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1040,7 +1040,7 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string
10401040
if (startsWith(dir.str,"#define ") || startsWith(dir.str,"#include "))
10411041
code += "#line " + std::to_string(dir.linenr) + " \"" + dir.file + "\"\n" + dir.str + '\n';
10421042
}
1043-
TokenList tokenlist(&mSettings);
1043+
TokenList tokenlist(mSettings);
10441044
std::istringstream istr2(code);
10451045
// TODO: asserts when file has unknown extension
10461046
tokenlist.createTokens(istr2, Path::identify(*files.begin(), false)); // TODO: check result?

lib/importproject.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,7 @@ namespace {
576576

577577
// TODO: improve evaluation
578578
const Settings s;
579-
TokenList tokenlist(&s);
579+
TokenList tokenlist(s);
580580
std::istringstream istr(c);
581581
tokenlist.createTokens(istr, Standards::Language::C); // TODO: check result
582582
// TODO: put in a helper

lib/library.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "errortypes.h"
2323
#include "mathlib.h"
2424
#include "path.h"
25+
#include "settings.h"
2526
#include "symboldatabase.h"
2627
#include "token.h"
2728
#include "tokenlist.h"
@@ -178,6 +179,7 @@ static std::vector<std::string> getnames(const char *names)
178179
static void gettokenlistfromvalid(const std::string& valid, bool cpp, TokenList& tokenList)
179180
{
180181
std::istringstream istr(valid + ',');
182+
// TODO: this will override the enforced language
181183
tokenList.createTokens(istr, cpp ? Standards::Language::CPP : Standards::Language::C); // TODO: check result?
182184
for (Token *tok = tokenList.front(); tok; tok = tok->next()) {
183185
if (Token::Match(tok,"- %num%")) {
@@ -1054,14 +1056,14 @@ Library::Error Library::loadFunction(const tinyxml2::XMLElement * const node, co
10541056
return Error(ErrorCode::OK);
10551057
}
10561058

1057-
bool Library::isIntArgValid(const Token *ftok, int argnr, const MathLib::bigint argvalue) const
1059+
bool Library::isIntArgValid(const Token *ftok, int argnr, const MathLib::bigint argvalue, const Settings& settings) const
10581060
{
10591061
const ArgumentChecks *ac = getarg(ftok, argnr);
10601062
if (!ac || ac->valid.empty())
10611063
return true;
10621064
if (ac->valid.find('.') != std::string::npos)
1063-
return isFloatArgValid(ftok, argnr, static_cast<double>(argvalue));
1064-
TokenList tokenList(nullptr);
1065+
return isFloatArgValid(ftok, argnr, static_cast<double>(argvalue), settings);
1066+
TokenList tokenList(settings);
10651067
gettokenlistfromvalid(ac->valid, ftok->isCpp(), tokenList);
10661068
for (const Token *tok = tokenList.front(); tok; tok = tok->next()) {
10671069
if (tok->isNumber() && argvalue == MathLib::toBigNumber(tok))
@@ -1076,12 +1078,12 @@ bool Library::isIntArgValid(const Token *ftok, int argnr, const MathLib::bigint
10761078
return false;
10771079
}
10781080

1079-
bool Library::isFloatArgValid(const Token *ftok, int argnr, double argvalue) const
1081+
bool Library::isFloatArgValid(const Token *ftok, int argnr, double argvalue, const Settings& settings) const
10801082
{
10811083
const ArgumentChecks *ac = getarg(ftok, argnr);
10821084
if (!ac || ac->valid.empty())
10831085
return true;
1084-
TokenList tokenList(nullptr);
1086+
TokenList tokenList(settings);
10851087
gettokenlistfromvalid(ac->valid, ftok->isCpp(), tokenList);
10861088
for (const Token *tok = tokenList.front(); tok; tok = tok->next()) {
10871089
if (Token::Match(tok, "%num% : %num%") && argvalue >= MathLib::toDoubleNumber(tok) && argvalue <= MathLib::toDoubleNumber(tok->tokAt(2)))

lib/library.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <vector>
3737

3838
class Token;
39+
class Settings; // TODO: remove dependency on settings
3940
enum class Severity : std::uint8_t;
4041

4142
namespace tinyxml2 {
@@ -345,8 +346,8 @@ class CPPCHECKLIB Library {
345346
return arg && arg->strz;
346347
}
347348

348-
bool isIntArgValid(const Token *ftok, int argnr, MathLib::bigint argvalue) const;
349-
bool isFloatArgValid(const Token *ftok, int argnr, double argvalue) const;
349+
bool isIntArgValid(const Token *ftok, int argnr, MathLib::bigint argvalue, const Settings& settings) const;
350+
bool isFloatArgValid(const Token *ftok, int argnr, double argvalue, const Settings& settings) const;
350351

351352
const std::string& validarg(const Token *ftok, int argnr) const {
352353
const ArgumentChecks *arg = getarg(ftok, argnr);

lib/programmemory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1750,7 +1750,7 @@ static std::shared_ptr<Token> createTokenFromExpression(const std::string& retur
17501750
bool cpp,
17511751
std::unordered_map<nonneg int, const Token*>& lookupVarId)
17521752
{
1753-
std::shared_ptr<TokenList> tokenList = std::make_shared<TokenList>(&settings);
1753+
std::shared_ptr<TokenList> tokenList = std::make_shared<TokenList>(settings);
17541754
{
17551755
const std::string code = "return " + returnValue + ";";
17561756
std::istringstream istr(code);

lib/symboldatabase.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,7 +1807,7 @@ void SymbolDatabase::setArrayDimensionsUsingValueFlow()
18071807

18081808
// In template arguments, there might not be AST
18091809
// Determine size by using the "raw tokens"
1810-
TokenList tokenList(&mSettings);
1810+
TokenList tokenList(mSettings);
18111811
tokenList.setLang(dimension.tok->isCpp() ? Standards::Language::CPP : Standards::Language::C);
18121812
tokenList.addtoken(";", 0, 0, 0, false);
18131813
bool fail = false;
@@ -7286,7 +7286,7 @@ static const Token* parsedecl(const Token* type,
72867286
else if (Token::simpleMatch(type, "volatile"))
72877287
valuetype->volatileness |= (1 << (valuetype->pointer - pointer0));
72887288
else if (settings.clang && type->str().size() > 2 && type->str().find("::") < type->str().find('<')) {
7289-
TokenList typeTokens(&settings);
7289+
TokenList typeTokens(settings);
72907290
std::string::size_type pos1 = 0;
72917291
do {
72927292
const std::string::size_type pos2 = type->str().find("::", pos1);
@@ -7709,7 +7709,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
77097709
const std::string& typestr(mSettings.library.returnValueType(tok->previous()));
77107710
if (!typestr.empty()) {
77117711
ValueType valuetype;
7712-
TokenList tokenList(&mSettings);
7712+
TokenList tokenList(mSettings);
77137713
std::istringstream istr(typestr+";");
77147714
tokenList.createTokens(istr, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); // TODO: check result?
77157715
tokenList.simplifyStdType();
@@ -7799,7 +7799,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
77997799
}
78007800
continue;
78017801
}
7802-
TokenList tokenList(&mSettings);
7802+
TokenList tokenList(mSettings);
78037803
std::istringstream istr(typestr+";");
78047804
if (tokenList.createTokens(istr, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C)) {
78057805
ValueType vt;

lib/token.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1947,8 +1947,8 @@ const ValueFlow::Value * Token::getInvalidValue(const Token *ftok, nonneg int ar
19471947
for (auto it = mImpl->mValues->begin(); it != mImpl->mValues->end(); ++it) {
19481948
if (it->isImpossible())
19491949
continue;
1950-
if ((it->isIntValue() && !settings.library.isIntArgValid(ftok, argnr, it->intvalue)) ||
1951-
(it->isFloatValue() && !settings.library.isFloatArgValid(ftok, argnr, it->floatValue))) {
1950+
if ((it->isIntValue() && !settings.library.isIntArgValid(ftok, argnr, it->intvalue, settings)) ||
1951+
(it->isFloatValue() && !settings.library.isFloatArgValid(ftok, argnr, it->floatValue, settings))) {
19521952
if (!ret || ret->isInconclusive() || (ret->condition && !it->isInconclusive()))
19531953
ret = &(*it);
19541954
if (!ret->isInconclusive() && !ret->condition)

0 commit comments

Comments
 (0)