diff --git a/Makefile b/Makefile index 884f81d876e..17cbd4559bf 100644 --- a/Makefile +++ b/Makefile @@ -587,7 +587,7 @@ $(libcppdir)/infer.o: lib/infer.cpp lib/calculate.h lib/config.h lib/errortypes. $(libcppdir)/keywords.o: lib/keywords.cpp lib/config.h lib/keywords.h lib/standards.h lib/utils.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/keywords.cpp -$(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 +$(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 $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/library.cpp $(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 diff --git a/lib/checkfunctions.cpp b/lib/checkfunctions.cpp index b2e375b292a..26ff9736f43 100644 --- a/lib/checkfunctions.cpp +++ b/lib/checkfunctions.cpp @@ -131,9 +131,9 @@ void CheckFunctions::invalidFunctionUsage() invalidFunctionArgBoolError(argtok, functionToken->str(), argnr); // Are the values 0 and 1 valid? - else if (!mSettings->library.isIntArgValid(functionToken, argnr, 0)) + else if (!mSettings->library.isIntArgValid(functionToken, argnr, 0, *mSettings)) invalidFunctionArgError(argtok, functionToken->str(), argnr, nullptr, mSettings->library.validarg(functionToken, argnr)); - else if (!mSettings->library.isIntArgValid(functionToken, argnr, 1)) + else if (!mSettings->library.isIntArgValid(functionToken, argnr, 1, *mSettings)) invalidFunctionArgError(argtok, functionToken->str(), argnr, nullptr, mSettings->library.validarg(functionToken, argnr)); } // check diff --git a/lib/clangimport.cpp b/lib/clangimport.cpp index 7c8de6df18e..a5af89bfb46 100644 --- a/lib/clangimport.cpp +++ b/lib/clangimport.cpp @@ -677,7 +677,7 @@ void clangimport::AstNode::setValueType(Token *tok) // TODO continue; - TokenList decl(nullptr, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); + TokenList decl(mData->mSettings, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); addTypeTokens(decl, type, tok->scope()); if (!decl.front()) break; diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index e079cf0354d..9d515276c77 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -715,7 +715,7 @@ unsigned int CppCheck::checkClang(const FileWithDetails &file) } try { - TokenList tokenlist{&mSettings, file.lang()}; + TokenList tokenlist{mSettings, file.lang()}; tokenlist.appendFileIfNew(file.spath()); Tokenizer tokenizer(std::move(tokenlist), mSettings, mErrorLogger); std::istringstream ast(output2); @@ -911,7 +911,7 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string if (mUnusedFunctionsCheck && (mSettings.useSingleJob() || analyzerInformation)) { std::size_t hash = 0; // markup files are special and do not adhere to the enforced language - TokenList tokenlist{&mSettings, Standards::Language::C}; + TokenList tokenlist{mSettings, Standards::Language::C}; if (fileStream) { std::vector files; simplecpp::TokenList tokens(*fileStream, files, file.spath()); @@ -1055,7 +1055,7 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string if (startsWith(dir.str,"#define ") || startsWith(dir.str,"#include ")) code += "#line " + std::to_string(dir.linenr) + " \"" + dir.file + "\"\n" + dir.str + '\n'; } - TokenList tokenlist(&mSettings, file.lang()); + TokenList tokenlist(mSettings, file.lang()); std::istringstream istr2(code); tokenlist.createTokens(istr2); // TODO: check result? executeRules("define", tokenlist); @@ -1133,7 +1133,7 @@ unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string } try { - TokenList tokenlist{&mSettings, file.lang()}; + TokenList tokenlist{mSettings, file.lang()}; // Create tokens, skip rest of iteration if failed Timer::run("Tokenizer::createTokens", mSettings.showtime, &s_timerResults, [&]() { diff --git a/lib/importproject.cpp b/lib/importproject.cpp index fdcf5441db9..d72b3a0941f 100644 --- a/lib/importproject.cpp +++ b/lib/importproject.cpp @@ -577,7 +577,7 @@ namespace { // TODO: improve evaluation const Settings s; - TokenList tokenlist(&s, Standards::Language::C); + TokenList tokenlist(s, Standards::Language::C); std::istringstream istr(c); tokenlist.createTokens(istr); // TODO: check result // TODO: put in a helper diff --git a/lib/library.cpp b/lib/library.cpp index d802bff118d..e8b6c40ef9c 100644 --- a/lib/library.cpp +++ b/lib/library.cpp @@ -22,6 +22,7 @@ #include "errortypes.h" #include "mathlib.h" #include "path.h" +#include "settings.h" #include "symboldatabase.h" #include "token.h" #include "tokenlist.h" @@ -1055,14 +1056,14 @@ Library::Error Library::loadFunction(const tinyxml2::XMLElement * const node, co return Error(ErrorCode::OK); } -bool Library::isIntArgValid(const Token *ftok, int argnr, const MathLib::bigint argvalue) const +bool Library::isIntArgValid(const Token *ftok, int argnr, const MathLib::bigint argvalue, const Settings& settings) const { const ArgumentChecks *ac = getarg(ftok, argnr); if (!ac || ac->valid.empty()) return true; if (ac->valid.find('.') != std::string::npos) - return isFloatArgValid(ftok, argnr, static_cast(argvalue)); - TokenList tokenList(nullptr, ftok->isCpp() ? Standards::Language::CPP : Standards::Language::C); + return isFloatArgValid(ftok, argnr, static_cast(argvalue), settings); + TokenList tokenList(settings, ftok->isCpp() ? Standards::Language::CPP : Standards::Language::C); gettokenlistfromvalid(ac->valid, tokenList); for (const Token *tok = tokenList.front(); tok; tok = tok->next()) { if (tok->isNumber() && argvalue == MathLib::toBigNumber(tok)) @@ -1077,12 +1078,12 @@ bool Library::isIntArgValid(const Token *ftok, int argnr, const MathLib::bigint return false; } -bool Library::isFloatArgValid(const Token *ftok, int argnr, double argvalue) const +bool Library::isFloatArgValid(const Token *ftok, int argnr, double argvalue, const Settings& settings) const { const ArgumentChecks *ac = getarg(ftok, argnr); if (!ac || ac->valid.empty()) return true; - TokenList tokenList(nullptr, ftok->isCpp() ? Standards::Language::CPP : Standards::Language::C); + TokenList tokenList(settings, ftok->isCpp() ? Standards::Language::CPP : Standards::Language::C); gettokenlistfromvalid(ac->valid, tokenList); for (const Token *tok = tokenList.front(); tok; tok = tok->next()) { if (Token::Match(tok, "%num% : %num%") && argvalue >= MathLib::toDoubleNumber(tok) && argvalue <= MathLib::toDoubleNumber(tok->tokAt(2))) diff --git a/lib/library.h b/lib/library.h index d8dbbfe45a5..1b0fcc20390 100644 --- a/lib/library.h +++ b/lib/library.h @@ -36,6 +36,7 @@ #include class Token; +class Settings; // TODO: remove dependency on settings enum class Severity : std::uint8_t; namespace tinyxml2 { @@ -346,8 +347,8 @@ class CPPCHECKLIB Library { return arg && arg->strz; } - bool isIntArgValid(const Token *ftok, int argnr, MathLib::bigint argvalue) const; - bool isFloatArgValid(const Token *ftok, int argnr, double argvalue) const; + bool isIntArgValid(const Token *ftok, int argnr, MathLib::bigint argvalue, const Settings& settings) const; + bool isFloatArgValid(const Token *ftok, int argnr, double argvalue, const Settings& settings) const; const std::string& validarg(const Token *ftok, int argnr) const { const ArgumentChecks *arg = getarg(ftok, argnr); diff --git a/lib/programmemory.cpp b/lib/programmemory.cpp index 96048ccc83d..5ed7d688a62 100644 --- a/lib/programmemory.cpp +++ b/lib/programmemory.cpp @@ -1750,7 +1750,7 @@ static std::shared_ptr createTokenFromExpression(const std::string& retur bool cpp, std::unordered_map& lookupVarId) { - std::shared_ptr tokenList = std::make_shared(&settings, cpp ? Standards::Language::CPP : Standards::Language::C); + std::shared_ptr tokenList = std::make_shared(settings, cpp ? Standards::Language::CPP : Standards::Language::C); { const std::string code = "return " + returnValue + ";"; std::istringstream istr(code); diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index bf188388939..99f9cbb1ca3 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -1808,7 +1808,7 @@ void SymbolDatabase::setArrayDimensionsUsingValueFlow() // In template arguments, there might not be AST // Determine size by using the "raw tokens" - TokenList tokenList(&mSettings, dimension.tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); + TokenList tokenList(mSettings, dimension.tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); tokenList.addtoken(";", 0, 0, 0, false); bool fail = false; for (const Token *tok = dimension.tok; tok && !Token::Match(tok, "[,>]"); tok = tok->next()) { @@ -7292,7 +7292,7 @@ static const Token* parsedecl(const Token* type, else if (Token::simpleMatch(type, "volatile")) valuetype->volatileness |= (1 << (valuetype->pointer - pointer0)); else if (settings.clang && type->str().size() > 2 && type->str().find("::") < type->str().find('<')) { - TokenList typeTokens(&settings, type->isCpp() ? Standards::Language::CPP : Standards::Language::C); + TokenList typeTokens(settings, type->isCpp() ? Standards::Language::CPP : Standards::Language::C); std::string::size_type pos1 = 0; do { const std::string::size_type pos2 = type->str().find("::", pos1); @@ -7715,7 +7715,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to const std::string& typestr(mSettings.library.returnValueType(tok->previous())); if (!typestr.empty()) { ValueType valuetype; - TokenList tokenList(&mSettings, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); + TokenList tokenList(mSettings, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); std::istringstream istr(typestr+";"); tokenList.createTokens(istr); // TODO: check result? tokenList.simplifyStdType(); @@ -7805,7 +7805,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to } continue; } - TokenList tokenList(&mSettings, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); + TokenList tokenList(mSettings, tok->isCpp() ? Standards::Language::CPP : Standards::Language::C); std::istringstream istr(typestr+";"); if (tokenList.createTokens(istr)) { ValueType vt; diff --git a/lib/token.cpp b/lib/token.cpp index 870aae4008a..246fa16d8b7 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -1955,8 +1955,8 @@ const ValueFlow::Value * Token::getInvalidValue(const Token *ftok, nonneg int ar for (auto it = mImpl->mValues->begin(); it != mImpl->mValues->end(); ++it) { if (it->isImpossible()) continue; - if ((it->isIntValue() && !settings.library.isIntArgValid(ftok, argnr, it->intvalue)) || - (it->isFloatValue() && !settings.library.isFloatArgValid(ftok, argnr, it->floatValue))) { + if ((it->isIntValue() && !settings.library.isIntArgValid(ftok, argnr, it->intvalue, settings)) || + (it->isFloatValue() && !settings.library.isFloatArgValid(ftok, argnr, it->floatValue, settings))) { if (!ret || ret->isInconclusive() || (ret->condition && !it->isInconclusive())) ret = &(*it); if (!ret->isInconclusive() && !ret->condition) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index fa078eaf445..ed71e23ddbf 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -10870,7 +10870,7 @@ bool Tokenizer::isPacked(const Token * bodyStart) const void Tokenizer::getErrorMessages(ErrorLogger& errorLogger, const Settings& settings) { - TokenList tokenlist{&settings, Standards::Language::C}; + TokenList tokenlist{settings, Standards::Language::C}; Tokenizer tokenizer(std::move(tokenlist), settings, errorLogger); tokenizer.invalidConstFunctionTypeError(nullptr); // checkLibraryNoReturn diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 588d0c2c8cf..8744c9dbf19 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -60,7 +60,7 @@ static constexpr int AST_MAX_DEPTH = 150; -TokenList::TokenList(const Settings* settings, Standards::Language lang) +TokenList::TokenList(const Settings& settings, Standards::Language lang) : mTokensFrontBack(new TokensFrontBack) , mSettings(settings) { @@ -102,7 +102,7 @@ void TokenList::determineCppC() // only try to determine if it wasn't enforced if (mLang == Standards::Language::None) { ASSERT_LANG(!getSourceFilePath().empty()); - mLang = Path::identify(getSourceFilePath(), mSettings ? mSettings->cppHeaderProbe : false); + mLang = Path::identify(getSourceFilePath(), mSettings.cppHeaderProbe); // TODO: cannot enable assert as this might occur for unknown extensions //ASSERT_LANG(mLang != Standards::Language::None); if (mLang == Standards::Language::None) { @@ -408,9 +408,9 @@ void TokenList::createTokens(simplecpp::TokenList&& tokenList) tokenList.deleteToken(tok->previous); } - if (mSettings && mSettings->relativePaths) { + if (mSettings.relativePaths) { for (std::string & mFile : mFiles) - mFile = Path::getRelativePath(mFile, mSettings->basePaths); + mFile = Path::getRelativePath(mFile, mSettings.basePaths); } Token::assignProgressValues(mTokensFrontBack->front); @@ -2006,20 +2006,17 @@ bool TokenList::validateToken(const Token* tok) const void TokenList::simplifyPlatformTypes() { - if (!mSettings) - return; - - const bool isCPP11 = isCPP() && (mSettings->standards.cpp >= Standards::CPP11); + const bool isCPP11 = isCPP() && (mSettings.standards.cpp >= Standards::CPP11); enum : std::uint8_t { isLongLong, isLong, isInt } type; /** @todo This assumes a flat address space. Not true for segmented address space (FAR *). */ - if (mSettings->platform.sizeof_size_t == mSettings->platform.sizeof_long) + if (mSettings.platform.sizeof_size_t == mSettings.platform.sizeof_long) type = isLong; - else if (mSettings->platform.sizeof_size_t == mSettings->platform.sizeof_long_long) + else if (mSettings.platform.sizeof_size_t == mSettings.platform.sizeof_long_long) type = isLongLong; - else if (mSettings->platform.sizeof_size_t == mSettings->platform.sizeof_int) + else if (mSettings.platform.sizeof_size_t == mSettings.platform.sizeof_int) type = isInt; else return; @@ -2072,13 +2069,13 @@ void TokenList::simplifyPlatformTypes() } } - const std::string platform_type(mSettings->platform.toString()); + const std::string platform_type(mSettings.platform.toString()); for (Token *tok = front(); tok; tok = tok->next()) { if (tok->tokType() != Token::eType && tok->tokType() != Token::eName) continue; - const Library::PlatformType * const platformtype = mSettings->library.platform_type(tok->str(), platform_type); + const Library::PlatformType * const platformtype = mSettings.library.platform_type(tok->str(), platform_type); if (platformtype) { // check for namespace @@ -2166,7 +2163,7 @@ void TokenList::simplifyStdType() continue; } - if (Token::Match(tok, "char|short|int|long|unsigned|signed|double|float") || (isC() && (!mSettings || (mSettings->standards.c >= Standards::C99)) && Token::Match(tok, "complex|_Complex"))) { + if (Token::Match(tok, "char|short|int|long|unsigned|signed|double|float") || (isC() && (mSettings.standards.c >= Standards::C99) && Token::Match(tok, "complex|_Complex"))) { bool isFloat= false; bool isSigned = false; bool isUnsigned = false; @@ -2189,7 +2186,7 @@ void TokenList::simplifyStdType() else if (Token::Match(tok2, "float|double")) { isFloat = true; typeSpec = tok2; - } else if (isC() && (!mSettings || (mSettings->standards.c >= Standards::C99)) && Token::Match(tok2, "complex|_Complex")) + } else if (isC() && (mSettings.standards.c >= Standards::C99) && Token::Match(tok2, "complex|_Complex")) isComplex = !isFloat || tok2->str() == "_Complex" || Token::Match(tok2->next(), "*|&|%name%"); // Ensure that "complex" is not the variables name else if (Token::Match(tok2, "char|int")) { if (!typeSpec) @@ -2234,13 +2231,8 @@ bool TokenList::isKeyword(const std::string &str) const if (cpp_types.find(str) != cpp_types.end()) return false; - if (mSettings) { - const auto &cpp_keywords = Keywords::getAll(mSettings->standards.cpp); - return cpp_keywords.find(str) != cpp_keywords.end(); - } - - static const auto& latest_cpp_keywords = Keywords::getAll(Standards::cppstd_t::CPPLatest); - return latest_cpp_keywords.find(str) != latest_cpp_keywords.end(); + const auto &cpp_keywords = Keywords::getAll(mSettings.standards.cpp); + return cpp_keywords.find(str) != cpp_keywords.end(); } // TODO: integrate into Keywords? @@ -2249,13 +2241,8 @@ bool TokenList::isKeyword(const std::string &str) const if (c_types.find(str) != c_types.end()) return false; - if (mSettings) { - const auto &c_keywords = Keywords::getAll(mSettings->standards.c); - return c_keywords.find(str) != c_keywords.end(); - } - - static const auto& latest_c_keywords = Keywords::getAll(Standards::cstd_t::CLatest); - return latest_c_keywords.find(str) != latest_c_keywords.end(); + const auto &c_keywords = Keywords::getAll(mSettings.standards.c); + return c_keywords.find(str) != c_keywords.end(); } bool TokenList::isC() const diff --git a/lib/tokenlist.h b/lib/tokenlist.h index 113a753c9a6..a72cb9d2d45 100644 --- a/lib/tokenlist.h +++ b/lib/tokenlist.h @@ -50,8 +50,7 @@ struct TokensFrontBack { class CPPCHECKLIB TokenList { public: - // TODO: pass settings as reference - explicit TokenList(const Settings* settings, Standards::Language lang); + explicit TokenList(const Settings& settings, Standards::Language lang); ~TokenList(); TokenList(const TokenList &) = delete; @@ -219,7 +218,7 @@ class CPPCHECKLIB TokenList { std::vector mOrigFiles; /** settings */ - const Settings* const mSettings{}; + const Settings& mSettings; /** File is known to be C/C++ code */ Standards::Language mLang{Standards::Language::None}; diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 59c9c802982..aa77d16e1f7 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1941,23 +1941,23 @@ static bool isNotEqual(std::pair x, std::pair x, const std::string& y, bool cpp) +static bool isNotEqual(std::pair x, const std::string& y, bool cpp, const Settings& settings) { - TokenList tokenList(nullptr, cpp ? Standards::Language::CPP : Standards::Language::C); + TokenList tokenList(settings, cpp ? Standards::Language::CPP : Standards::Language::C); std::istringstream istr(y); tokenList.createTokens(istr); // TODO: check result? return isNotEqual(x, std::make_pair(tokenList.front(), tokenList.back())); } -static bool isNotEqual(std::pair x, const ValueType* y, bool cpp) +static bool isNotEqual(std::pair x, const ValueType* y, bool cpp, const Settings& settings) { if (y == nullptr) return false; if (y->originalTypeName.empty()) return false; - return isNotEqual(x, y->originalTypeName, cpp); + return isNotEqual(x, y->originalTypeName, cpp, settings); } -static bool isDifferentType(const Token* src, const Token* dst) +static bool isDifferentType(const Token* src, const Token* dst, const Settings& settings) { const Type* t = Token::typeOf(src); const Type* parentT = Token::typeOf(dst); @@ -1970,9 +1970,9 @@ static bool isDifferentType(const Token* src, const Token* dst) const bool isCpp = (src && src->isCpp()) || (dst && dst->isCpp()); if (isNotEqual(decl, parentdecl) && !(isCpp && (Token::simpleMatch(decl.first, "auto") || Token::simpleMatch(parentdecl.first, "auto")))) return true; - if (isNotEqual(decl, dst->valueType(), isCpp)) + if (isNotEqual(decl, dst->valueType(), isCpp, settings)) return true; - if (isNotEqual(parentdecl, src->valueType(), isCpp)) + if (isNotEqual(parentdecl, src->valueType(), isCpp, settings)) return true; } return false; @@ -1996,7 +1996,7 @@ bool ValueFlow::isLifetimeBorrowed(const Token *tok, const Settings &settings) return false; } if (parent) { - if (isDifferentType(tok, parent)) + if (isDifferentType(tok, parent, settings)) return false; } return true; @@ -3682,7 +3682,7 @@ static void valueFlowSymbolic(const TokenList& tokenlist, const SymbolDatabase& if (isTruncated( tok->astOperand2()->valueType(), tok->astOperand1()->valueType(), settings)) continue; - } else if (isDifferentType(tok->astOperand2(), tok->astOperand1())) { + } else if (isDifferentType(tok->astOperand2(), tok->astOperand1(), settings)) { continue; } const std::set rhsVarIds = getVarIds(tok->astOperand2()); @@ -7051,7 +7051,7 @@ static bool getMinMaxValues(const std::string& typestr, MathLib::bigint& minvalue, MathLib::bigint& maxvalue) { - TokenList typeTokens(&settings, cpp ? Standards::Language::CPP : Standards::Language::C); + TokenList typeTokens(settings, cpp ? Standards::Language::CPP : Standards::Language::C); std::istringstream istr(typestr + ";"); if (!typeTokens.createTokens(istr)) return false; diff --git a/oss-fuzz/Makefile b/oss-fuzz/Makefile index 88449d09051..69a7147e895 100644 --- a/oss-fuzz/Makefile +++ b/oss-fuzz/Makefile @@ -282,7 +282,7 @@ $(libcppdir)/infer.o: ../lib/infer.cpp ../lib/calculate.h ../lib/config.h ../lib $(libcppdir)/keywords.o: ../lib/keywords.cpp ../lib/config.h ../lib/keywords.h ../lib/standards.h ../lib/utils.h $(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/keywords.cpp -$(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 +$(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 $(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/library.cpp $(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 diff --git a/test/helpers.h b/test/helpers.h index 2f1f49b4f84..ba921365548 100644 --- a/test/helpers.h +++ b/test/helpers.h @@ -45,15 +45,15 @@ namespace tinyxml2 { class SimpleTokenizer : public Tokenizer { public: explicit SimpleTokenizer(ErrorLogger& errorlogger, bool cpp = true) - : Tokenizer{TokenList{&s_settings, cpp ? Standards::Language::CPP : Standards::Language::C}, s_settings, errorlogger} + : Tokenizer{TokenList{s_settings, cpp ? Standards::Language::CPP : Standards::Language::C}, s_settings, errorlogger} {} SimpleTokenizer(const Settings& settings, ErrorLogger& errorlogger, bool cpp = true) - : Tokenizer{TokenList{&settings, cpp ? Standards::Language::CPP : Standards::Language::C}, settings, errorlogger} + : Tokenizer{TokenList{settings, cpp ? Standards::Language::CPP : Standards::Language::C}, settings, errorlogger} {} SimpleTokenizer(const Settings& settings, ErrorLogger& errorlogger, const std::string& filename) - : Tokenizer{TokenList{&settings, Path::identify(filename, false)}, settings, errorlogger} + : Tokenizer{TokenList{settings, Path::identify(filename, false)}, settings, errorlogger} { list.appendFileIfNew(filename); } @@ -99,7 +99,7 @@ class SimpleTokenList public: template explicit SimpleTokenList(const char (&code)[size], Standards::Language lang = Standards::Language::CPP) - : list{&settings, lang} + : list{settings, lang} { std::istringstream iss(code); if (!list.createTokens(iss)) @@ -234,14 +234,14 @@ class SimpleTokenizer2 : public Tokenizer { public: template SimpleTokenizer2(const Settings &settings, ErrorLogger &errorlogger, const char (&code)[size], const std::string& file0) - : Tokenizer{TokenList{&settings, Path::identify(file0, false)}, settings, errorlogger} + : Tokenizer{TokenList{settings, Path::identify(file0, false)}, settings, errorlogger} { preprocess(code, mFiles, file0, *this, errorlogger); } // TODO: get rid of this SimpleTokenizer2(const Settings &settings, ErrorLogger &errorlogger, const char code[], const std::string& file0) - : Tokenizer{TokenList{&settings, Path::identify(file0, false)}, settings, errorlogger} + : Tokenizer{TokenList{settings, Path::identify(file0, false)}, settings, errorlogger} { preprocess(code, mFiles, file0, *this, errorlogger); } diff --git a/test/testclangimport.cpp b/test/testclangimport.cpp index 1498b029605..95143600b70 100644 --- a/test/testclangimport.cpp +++ b/test/testclangimport.cpp @@ -140,7 +140,7 @@ class TestClangImport : public TestFixture { std::string parse(const char clang[]) { const Settings settings = settingsBuilder().clang().build(); - TokenList tokenlist{&settings, Standards::Language::CPP}; + TokenList tokenlist{settings, Standards::Language::CPP}; Tokenizer tokenizer(std::move(tokenlist), settings, *this); std::istringstream istr(clang); clangimport::parseClangAstDump(tokenizer, istr); @@ -1061,7 +1061,7 @@ class TestClangImport : public TestFixture { #define GET_SYMBOL_DB(AST) \ const Settings settings = settingsBuilder().clang().platform(Platform::Type::Unix64).build(); \ - TokenList tokenlist{&settings, Standards::Language::CPP}; \ + TokenList tokenlist{settings, Standards::Language::CPP}; \ Tokenizer tokenizer(std::move(tokenlist), settings, *this); \ { \ std::istringstream istr(AST); \ diff --git a/test/testlibrary.cpp b/test/testlibrary.cpp index 984ebde24ed..657df937716 100644 --- a/test/testlibrary.cpp +++ b/test/testlibrary.cpp @@ -151,7 +151,7 @@ class TestLibrary : public TestFixture { " \n" ""; - TokenList tokenList(&settingsDefault, Standards::Language::CPP); + TokenList tokenList(settingsDefault, Standards::Language::CPP); std::istringstream istr("foo();"); // <- too few arguments, not library function ASSERT(tokenList.createTokens(istr)); Token::createMutualLinks(tokenList.front()->next(), tokenList.back()->previous()); @@ -175,7 +175,7 @@ class TestLibrary : public TestFixture { ASSERT(LibraryHelper::loadxmldata(library, xmldata, sizeof(xmldata))); { - TokenList tokenList(&settingsDefault, Standards::Language::CPP); + TokenList tokenList(settingsDefault, Standards::Language::CPP); std::istringstream istr("foo();"); // <- too few arguments, not library function ASSERT(tokenList.createTokens(istr)); Token::createMutualLinks(tokenList.front()->next(), tokenList.back()->previous()); @@ -184,7 +184,7 @@ class TestLibrary : public TestFixture { ASSERT(library.isNotLibraryFunction(tokenList.front())); } { - TokenList tokenList(&settingsDefault, Standards::Language::CPP); + TokenList tokenList(settingsDefault, Standards::Language::CPP); std::istringstream istr("foo(a);"); // <- library function ASSERT(tokenList.createTokens(istr)); Token::createMutualLinks(tokenList.front()->next(), tokenList.back()->previous()); @@ -195,7 +195,7 @@ class TestLibrary : public TestFixture { ASSERT(func); } { - TokenList tokenList(&settingsDefault, Standards::Language::CPP); + TokenList tokenList(settingsDefault, Standards::Language::CPP); std::istringstream istr("foo(a, b);"); // <- library function ASSERT(tokenList.createTokens(istr)); Token::createMutualLinks(tokenList.front()->next(), tokenList.back()->previous()); @@ -206,7 +206,7 @@ class TestLibrary : public TestFixture { ASSERT(func); } { - TokenList tokenList(&settingsDefault, Standards::Language::CPP); + TokenList tokenList(settingsDefault, Standards::Language::CPP); std::istringstream istr("foo(a, b, c);"); // <- too much arguments, not library function ASSERT(tokenList.createTokens(istr)); Token::createMutualLinks(tokenList.front()->next(), tokenList.back()->previous()); @@ -344,125 +344,125 @@ class TestLibrary : public TestFixture { tokenList.front()->next()->astOperand1(tokenList.front()); // 1- - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 1, -10)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 1, -10.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 1, 0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 1, 0.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 1, 1)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 1, 1.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 1, 10)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 1, 10.0)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 1, -10, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 1, -10.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 1, 0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 1, 0.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 1, 1, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 1, 1.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 1, 10, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 1, 10.0, settingsDefault)); // -7-0 - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 2, -10)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, -10.0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, -7.5)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, -7.1)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 2, -7)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, -7.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 2, -3)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, -3.0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, -3.5)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 2, 0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, 0.0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, 0.5)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 2, 1)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, 1.0)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 2, -10, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, -10.0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, -7.5, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, -7.1, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 2, -7, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, -7.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 2, -3, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, -3.0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, -3.5, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 2, 0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 2, 0.0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, 0.5, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 2, 1, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 2, 1.0, settingsDefault)); // 1-5,8 - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 0.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 1)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 3, 1.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 3)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 3, 3.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 5)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 3, 5.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 6)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 6.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 7)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 7.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 8)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 8.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 9)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 9.0)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 0.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 1, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 3, 1.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 3, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 3, 3.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 5, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 3, 5.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 6, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 6.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 7, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 7.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 3, 8, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 8.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 3, 9, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 3, 9.0, settingsDefault)); // -1,5 - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 4, -10)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, -10.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 4, -1)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, -1.0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, 5.000001)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, 5.5)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 4, -10, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, -10.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 4, -1, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, -1.0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, 5.000001, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 4, 5.5, settingsDefault)); // :1,5 - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 5, -10)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 5, -10.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 5, 1)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 5, 1.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 5, 2)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 5, 2.0)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 5, -10, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 5, -10.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 5, 1, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 5, 1.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 5, 2, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 5, 2.0, settingsDefault)); // 1.5: - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 6, 0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 6, 0.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 6, 1)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 6, 1.499999)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 6, 1.5)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 6, 2)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 6, 10)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 6, 0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 6, 0.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 6, 1, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 6, 1.499999, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 6, 1.5, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 6, 2, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 6, 10, settingsDefault)); // -6.7:-5.5,-3.3:-2.7 - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, -7)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -7.0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -6.7000001)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -6.7)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 7, -6)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -6.0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -5.5)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -5.4999999)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -3.3000001)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -3.3)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 7, -3)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -3.0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -2.7)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -2.6999999)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, -2)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -2.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, 0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, 0.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, 3)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, 3.0)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, 6)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, 6.0)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, -7, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -7.0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -6.7000001, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -6.7, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 7, -6, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -6.0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -5.5, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -5.4999999, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -3.3000001, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -3.3, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 7, -3, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -3.0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 7, -2.7, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -2.6999999, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, -2, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, -2.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, 0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, 0.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, 3, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, 3.0, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 7, 6, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 7, 6.0, settingsDefault)); // 0.0: - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 8, -1)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 8, -1.0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 8, -0.00000001)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 8, 0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 8, 0.0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 8, 0.000000001)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 8, 1)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 8, 1.0)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 8, -1, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 8, -1.0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 8, -0.00000001, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 8, 0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 8, 0.0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 8, 0.000000001, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 8, 1, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 8, 1.0, settingsDefault)); // :2.0 - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 9, -1)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 9, -1.0)); - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 9, 2)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 9, 2.0)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 9, 2.00000001)); - ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 9, 200)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 9, 200.0)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 9, -1, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 9, -1.0, settingsDefault)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 9, 2, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 9, 2.0, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 9, 2.00000001, settingsDefault)); + ASSERT_EQUALS(false, library.isIntArgValid(tokenList.front(), 9, 200, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 9, 200.0, settingsDefault)); // 0.0 - ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 10, 0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 10, 0.0)); + ASSERT_EQUALS(true, library.isIntArgValid(tokenList.front(), 10, 0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 10, 0.0, settingsDefault)); // ! 0.0 - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 11, -0.42)); - ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 11, 0.0)); - ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 11, 0.42)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 11, -0.42, settingsDefault)); + ASSERT_EQUALS(false, library.isFloatArgValid(tokenList.front(), 11, 0.0, settingsDefault)); + ASSERT_EQUALS(true, library.isFloatArgValid(tokenList.front(), 11, 0.42, settingsDefault)); } void function_arg_minsize() const { diff --git a/test/testmathlib.cpp b/test/testmathlib.cpp index a3311a56669..dbd4a5e8837 100644 --- a/test/testmathlib.cpp +++ b/test/testmathlib.cpp @@ -410,7 +410,7 @@ class TestMathLib : public TestFixture { ASSERT_THROW_INTERNAL_EQUALS(MathLib::toBigNumber("1 invalid"), INTERNAL, "Internal Error. MathLib::toBigNumber: input was not completely consumed: 1 invalid"); { - TokenList list{&settingsDefault, Standards::Language::C}; + TokenList list{settingsDefault, Standards::Language::C}; list.appendFileIfNew("test.c"); auto tokensFrontBack = std::make_shared(); auto *tok = new Token(list, std::move(tokensFrontBack)); @@ -586,7 +586,7 @@ class TestMathLib : public TestFixture { ASSERT_THROW_INTERNAL_EQUALS(MathLib::toBigUNumber("1 invalid"), INTERNAL, "Internal Error. MathLib::toBigUNumber: input was not completely consumed: 1 invalid"); { - TokenList list{&settingsDefault, Standards::Language::C}; + TokenList list{settingsDefault, Standards::Language::C}; list.appendFileIfNew("test.c"); auto tokensFrontBack = std::make_shared(); auto *tok = new Token(list, std::move(tokensFrontBack)); @@ -716,7 +716,7 @@ class TestMathLib : public TestFixture { //ASSERT_THROW_INTERNAL_EQUALS(MathLib::toDoubleNumber("1.0LL"), INTERNAL, "Internal Error. MathLib::toDoubleNumber: input was not completely consumed: 1.0LL"); { - TokenList list{&settingsDefault, Standards::Language::C}; + TokenList list{settingsDefault, Standards::Language::C}; list.appendFileIfNew("test.c"); auto tokensFrontBack = std::make_shared(); auto *tok = new Token(list, std::move(tokensFrontBack)); diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 04fd7923468..91caca5b8af 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -2581,7 +2581,7 @@ class TestPreprocessor : public TestFixture { { dui.std = "c89"; std::vector files; - TokenList tokenlist{&settingsDefault, Standards::Language::CPP}; + TokenList tokenlist{settingsDefault, Standards::Language::CPP}; preprocess(code, files, "test.cpp", tokenlist, dui); ASSERT(tokenlist.front()); } @@ -2589,7 +2589,7 @@ class TestPreprocessor : public TestFixture { { dui.std = "gnu23"; std::vector files; - TokenList tokenlist{&settingsDefault, Standards::Language::CPP}; + TokenList tokenlist{settingsDefault, Standards::Language::CPP}; preprocess(code, files, "test.cpp", tokenlist, dui); ASSERT(tokenlist.front()); } @@ -2597,7 +2597,7 @@ class TestPreprocessor : public TestFixture { { dui.std = "c++98"; std::vector files; - TokenList tokenlist{&settingsDefault, Standards::Language::CPP}; + TokenList tokenlist{settingsDefault, Standards::Language::CPP}; preprocess(code, files, "test.cpp", tokenlist, dui); ASSERT(tokenlist.front()); } @@ -2605,7 +2605,7 @@ class TestPreprocessor : public TestFixture { { dui.std = "gnu++26"; std::vector files; - TokenList tokenlist{&settingsDefault, Standards::Language::CPP}; + TokenList tokenlist{settingsDefault, Standards::Language::CPP}; preprocess(code, files, "test.cpp", tokenlist, dui); ASSERT(tokenlist.front()); } @@ -2613,7 +2613,7 @@ class TestPreprocessor : public TestFixture { { dui.std = "gnu77"; std::vector files; - TokenList tokenlist{&settingsDefault, Standards::Language::CPP}; + TokenList tokenlist{settingsDefault, Standards::Language::CPP}; preprocess(code, files, "test.cpp", tokenlist, dui); ASSERT(!tokenlist.front()); // nothing is tokenized when an unknown standard is provided } diff --git a/test/testsimplifytemplate.cpp b/test/testsimplifytemplate.cpp index f3ec0219bf6..cbeb743a0a0 100644 --- a/test/testsimplifytemplate.cpp +++ b/test/testsimplifytemplate.cpp @@ -5428,7 +5428,7 @@ class TestSimplifyTemplate : public TestFixture { } unsigned int templateParameters(const char code[]) { - TokenList tokenlist{&settings, Standards::Language::CPP}; + TokenList tokenlist{settings, Standards::Language::CPP}; std::istringstream istr(code); tokenlist.appendFileIfNew("test.cpp"); if (!tokenlist.createTokens(istr)) @@ -5497,7 +5497,7 @@ class TestSimplifyTemplate : public TestFixture { // Helper function to unit test TemplateSimplifier::getTemplateNamePosition int templateNamePositionHelper(const char code[], unsigned offset = 0) { - TokenList tokenlist{&settings, Standards::Language::CPP}; + TokenList tokenlist{settings, Standards::Language::CPP}; std::istringstream istr(code); tokenlist.appendFileIfNew("test.cpp"); @@ -5570,7 +5570,7 @@ class TestSimplifyTemplate : public TestFixture { // Helper function to unit test TemplateSimplifier::findTemplateDeclarationEnd bool findTemplateDeclarationEndHelper(const char code[], const char pattern[], unsigned offset = 0) { - TokenList tokenlist{&settings, Standards::Language::CPP}; + TokenList tokenlist{settings, Standards::Language::CPP}; std::istringstream istr(code); if (!TokenListHelper::createTokens(tokenlist, istr, "test.cpp")) return false; @@ -5600,7 +5600,7 @@ class TestSimplifyTemplate : public TestFixture { // Helper function to unit test TemplateSimplifier::getTemplateParametersInDeclaration bool getTemplateParametersInDeclarationHelper(const char code[], const std::vector & params) { - TokenList tokenlist{&settings, Standards::Language::CPP}; + TokenList tokenlist{settings, Standards::Language::CPP}; std::istringstream istr(code); if (!TokenListHelper::createTokens(tokenlist, istr, "test.cpp")) diff --git a/test/testsimplifytypedef.cpp b/test/testsimplifytypedef.cpp index 26648f99ac7..1de15498b79 100644 --- a/test/testsimplifytypedef.cpp +++ b/test/testsimplifytypedef.cpp @@ -273,7 +273,7 @@ class TestSimplifyTypedef : public TestFixture { } std::string simplifyTypedef(const char code[]) { - TokenList tokenlist{&settings1, Standards::Language::CPP}; + TokenList tokenlist{settings1, Standards::Language::CPP}; std::istringstream istr(code); if (!tokenlist.createTokens(istr)) return ""; @@ -307,7 +307,7 @@ class TestSimplifyTypedef : public TestFixture { std::string simplifyTypedefC(const char code[]) { - TokenList tokenlist{&settings1, Standards::Language::C}; + TokenList tokenlist{settings1, Standards::Language::C}; std::istringstream istr(code); if (!TokenListHelper::createTokens(tokenlist, istr, "file.c")) @@ -324,7 +324,7 @@ class TestSimplifyTypedef : public TestFixture { } std::string dumpTypedefInfo(const char code[]) { - TokenList tokenlist{&settings1, Standards::Language::C}; + TokenList tokenlist{settings1, Standards::Language::C}; std::istringstream istr(code); if (!TokenListHelper::createTokens(tokenlist, istr, "file.c")) return {}; @@ -4453,7 +4453,7 @@ class TestSimplifyTypedef : public TestFixture { "uint8_t t;" "void test(rFunctionPointer_fp functionPointer);"; - TokenList tokenlist{&settings1, Standards::Language::C}; + TokenList tokenlist{settings1, Standards::Language::C}; std::istringstream istr(code); ASSERT(TokenListHelper::createTokens(tokenlist, istr, "file.c")); Tokenizer tokenizer(std::move(tokenlist), settings1, *this); @@ -4496,7 +4496,7 @@ class TestSimplifyTypedef : public TestFixture { " MY_INT x = 0;\n" "}"; - TokenList tokenlist{&settings1, Standards::Language::C}; + TokenList tokenlist{settings1, Standards::Language::C}; std::istringstream istr(code); ASSERT(TokenListHelper::createTokens(tokenlist, istr, "file.c")); Tokenizer tokenizer(std::move(tokenlist), settings1, *this); @@ -4515,7 +4515,7 @@ class TestSimplifyTypedef : public TestFixture { " F x = 0;\n" "}"; - TokenList tokenlist{&settings1, Standards::Language::C}; + TokenList tokenlist{settings1, Standards::Language::C}; std::istringstream istr(code); ASSERT(TokenListHelper::createTokens(tokenlist, istr, "file.c")); Tokenizer tokenizer(std::move(tokenlist), settings1, *this); diff --git a/test/testtoken.cpp b/test/testtoken.cpp index 045b0cbc59b..04a32a81dac 100644 --- a/test/testtoken.cpp +++ b/test/testtoken.cpp @@ -36,7 +36,7 @@ class TestToken : public TestFixture { TestToken() : TestFixture("TestToken") {} private: - const TokenList list{&settingsDefault, Standards::Language::C}; + const TokenList list{settingsDefault, Standards::Language::C}; std::vector arithmeticalOps; std::vector logicalOps; @@ -1370,21 +1370,21 @@ class TestToken : public TestFixture { { { const Settings s = settingsBuilder().c(Standards::cstd_t::C89).build(); - TokenList list_c{&s, Standards::Language::C}; + TokenList list_c{s, Standards::Language::C}; auto tokensFrontBack = std::make_shared(); Token tok(list_c, std::move(tokensFrontBack)); tok.str("alignas"); // not a C89 keyword assert_tok(&tok, Token::Type::eName); } { - TokenList list_c{&settingsDefault, Standards::Language::C}; + TokenList list_c{settingsDefault, Standards::Language::C}; auto tokensFrontBack = std::make_shared(); Token tok(list_c, std::move(tokensFrontBack)); tok.str("alignas"); // a C23 keyword assert_tok(&tok, Token::Type::eKeyword); } { - TokenList list_c{&settingsDefault, Standards::Language::C}; + TokenList list_c{settingsDefault, Standards::Language::C}; auto tokensFrontBack = std::make_shared(); Token tok(list_c, std::move(tokensFrontBack)); tok.str("and_eq"); // a C++ keyword @@ -1396,21 +1396,21 @@ class TestToken : public TestFixture { { { const Settings s = settingsBuilder().cpp(Standards::cppstd_t::CPP03).build(); - TokenList list_cpp{&s, Standards::Language::CPP}; + TokenList list_cpp{s, Standards::Language::CPP}; auto tokensFrontBack = std::make_shared(); Token tok(list_cpp, std::move(tokensFrontBack)); tok.str("consteval"); // not a C++03 keyword assert_tok(&tok, Token::Type::eName); } { - TokenList list_cpp{&settingsDefault, Standards::Language::CPP}; + TokenList list_cpp{settingsDefault, Standards::Language::CPP}; auto tokensFrontBack = std::make_shared(); Token tok(list_cpp, std::move(tokensFrontBack)); tok.str("consteval"); // a C++20 keyword assert_tok(&tok, Token::Type::eKeyword); } { - TokenList list_cpp{&settingsDefault, Standards::Language::CPP}; + TokenList list_cpp{settingsDefault, Standards::Language::CPP}; auto tokensFrontBack = std::make_shared(); Token tok(list_cpp, std::move(tokensFrontBack)); tok.str("typeof_unqual"); // a C keyword @@ -1469,14 +1469,14 @@ class TestToken : public TestFixture { void update_property_info_etype_c() const { { - TokenList list_c{&settingsDefault, Standards::Language::C}; + TokenList list_c{settingsDefault, Standards::Language::C}; auto tokensFrontBack = std::make_shared(); Token tok(list_c, std::move(tokensFrontBack)); tok.str("char"); // not treated as keyword in TokenList::isKeyword() assert_tok(&tok, Token::Type::eType, /*l=*/ false, /*std=*/ true); } { - TokenList list_c{&settingsDefault, Standards::Language::C}; + TokenList list_c{settingsDefault, Standards::Language::C}; auto tokensFrontBack = std::make_shared(); Token tok(list_c, std::move(tokensFrontBack)); tok.str("size_t"); // not treated as keyword in TokenList::isKeyword() @@ -1487,14 +1487,14 @@ class TestToken : public TestFixture { void update_property_info_etype_cpp() const { { - TokenList list_cpp{&settingsDefault, Standards::Language::CPP}; + TokenList list_cpp{settingsDefault, Standards::Language::CPP}; auto tokensFrontBack = std::make_shared(); Token tok(list_cpp, std::move(tokensFrontBack)); tok.str("bool"); // not treated as keyword in TokenList::isKeyword() assert_tok(&tok, Token::Type::eType, /*l=*/ false, /*std=*/ true); } { - TokenList list_cpp{&settingsDefault, Standards::Language::CPP}; + TokenList list_cpp{settingsDefault, Standards::Language::CPP}; auto tokensFrontBack = std::make_shared(); Token tok(list_cpp, std::move(tokensFrontBack)); tok.str("size_t"); @@ -1514,7 +1514,7 @@ class TestToken : public TestFixture { void varid_reset() const { - TokenList list_c{&settingsDefault, Standards::Language::C}; + TokenList list_c{settingsDefault, Standards::Language::C}; auto tokensFrontBack = std::make_shared(); Token tok(list_c, std::move(tokensFrontBack)); tok.str("int"); // not treated as keyword in TokenList::isKeyword() diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 866f7a4087f..be9f85007d0 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -557,7 +557,7 @@ class TestTokenizer : public TestFixture { Preprocessor preprocessor(settings, *this, Path::identify(tokens1.getFiles()[0], false)); std::list directives = preprocessor.createDirectives(tokens1); - TokenList tokenlist{&settings, Path::identify(filename, false)}; + TokenList tokenlist{settings, Path::identify(filename, false)}; Tokenizer tokenizer(std::move(tokenlist), settings, *this); tokenizer.setDirectives(std::move(directives)); @@ -865,7 +865,7 @@ class TestTokenizer : public TestFixture { ASSERT_THROW_INTERNAL(tokenizeAndStringify(";template class X { };",false,Platform::Type::Native,false), SYNTAX); ASSERT_THROW_INTERNAL(tokenizeAndStringify("int X() {};",false,Platform::Type::Native,false), SYNTAX); { - TokenList tokenlist{&settings1, Standards::Language::C}; // headers are treated as C files + TokenList tokenlist{settings1, Standards::Language::C}; // headers are treated as C files const char code[] = "void foo(int i) { reinterpret_cast(i) };"; std::istringstream istr(code); tokenlist.appendFileIfNew("test.h"); @@ -3688,7 +3688,7 @@ class TestTokenizer : public TestFixture { } void simplifyString() { - TokenList tokenlist{&settings0, Standards::Language::CPP}; + TokenList tokenlist{settings0, Standards::Language::CPP}; Tokenizer tokenizer(std::move(tokenlist), settings0, *this); ASSERT_EQUALS("\"abc\"", tokenizer.simplifyString("\"abc\"")); ASSERT_EQUALS("\"\n\"", tokenizer.simplifyString("\"\\xa\"")); @@ -6137,7 +6137,7 @@ class TestTokenizer : public TestFixture { std::string testAst(const char code[], AstStyle style = AstStyle::Simple) { // tokenize given code.. - TokenList tokenlist{&settings0, Standards::Language::CPP}; + TokenList tokenlist{settings0, Standards::Language::CPP}; std::istringstream istr(code); tokenlist.appendFileIfNew("test.cpp"); if (!tokenlist.createTokens(istr)) diff --git a/test/testtokenlist.cpp b/test/testtokenlist.cpp index e7fe97474fd..58736d886f7 100644 --- a/test/testtokenlist.cpp +++ b/test/testtokenlist.cpp @@ -55,7 +55,7 @@ class TestTokenList : public TestFixture { // inspired by #5895 void testaddtoken1() const { const std::string code = "0x89504e470d0a1a0a"; - TokenList tokenlist(&settings, Standards::Language::CPP); + TokenList tokenlist(settings, Standards::Language::CPP); tokenlist.addtoken(code, 1, 1, false); ASSERT_EQUALS("0x89504e470d0a1a0a", tokenlist.front()->str()); } @@ -64,7 +64,7 @@ class TestTokenList : public TestFixture { const std::string code = "0xF0000000"; /*const*/ Settings settings1 = settings; settings1.platform.int_bit = 32; - TokenList tokenlist(&settings1, Standards::Language::CPP); + TokenList tokenlist(settings1, Standards::Language::CPP); tokenlist.addtoken(code, 1, 1, false); ASSERT_EQUALS("0xF0000000", tokenlist.front()->str()); } @@ -128,7 +128,7 @@ class TestTokenList : public TestFixture { { const char code2[] = "_Generic"; // C11 keyword const Settings s = settingsBuilder().c(Standards::C89).build(); - TokenList tokenlist(&s, Standards::Language::C); + TokenList tokenlist(s, Standards::Language::C); std::istringstream istr(code2); tokenlist.appendFileIfNew("a.c"); ASSERT(tokenlist.createTokens(istr)); @@ -150,7 +150,7 @@ class TestTokenList : public TestFixture { { const char code2[] = "noexcept"; // C++11 keyword const Settings s = settingsBuilder().cpp(Standards::CPP03).build(); - TokenList tokenlist(&s, Standards::Language::CPP); + TokenList tokenlist(s, Standards::Language::CPP); std::istringstream istr(code2); tokenlist.appendFileIfNew("a.cpp"); ASSERT(tokenlist.createTokens(istr)); @@ -167,14 +167,14 @@ class TestTokenList : public TestFixture { simplecpp::TokenList tokens1(istr, files, "poll.h", nullptr); Preprocessor preprocessor(settingsDefault, *this, Path::identify(tokens1.getFiles()[0], false)); simplecpp::TokenList tokensP = preprocessor.preprocess(tokens1, "", files, true); - TokenList tokenlist(&settingsDefault, Standards::Language::C); // headers are treated as C files + TokenList tokenlist(settingsDefault, Standards::Language::C); // headers are treated as C files tokenlist.createTokens(std::move(tokensP)); // do not assert } void ast1() const { const std::string s = "('Release|x64' == 'Release|x64');"; - TokenList tokenlist(&settings, Standards::Language::C); + TokenList tokenlist(settings, Standards::Language::C); std::istringstream istr(s); ASSERT(tokenlist.createTokens(istr)); // TODO: put this logic in TokenList