Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ test/testbool.o: test/testbool.cpp lib/check.h lib/checkbool.h lib/color.h lib/c
test/testboost.o: test/testboost.cpp lib/check.h lib/checkboost.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testboost.cpp

test/testbufferoverrun.o: test/testbufferoverrun.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/check.h lib/checkbufferoverrun.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
test/testbufferoverrun.o: test/testbufferoverrun.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/check.h lib/checkbufferoverrun.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testbufferoverrun.cpp

test/testcharvar.o: test/testcharvar.cpp lib/check.h lib/checkother.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
Expand All @@ -699,7 +699,7 @@ test/testcharvar.o: test/testcharvar.cpp lib/check.h lib/checkother.h lib/color.
test/testclangimport.o: test/testclangimport.cpp lib/check.h lib/clangimport.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testclangimport.cpp

test/testclass.o: test/testclass.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/checkclass.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
test/testclass.o: test/testclass.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/check.h lib/checkclass.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testclass.cpp

test/testcmdlineparser.o: test/testcmdlineparser.cpp cli/cmdlineparser.h cli/cppcheckexecutor.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/fixture.h test/redirect.h
Expand All @@ -726,7 +726,7 @@ test/testfilelister.o: test/testfilelister.cpp cli/filelister.h lib/check.h lib/
test/testfunctions.o: test/testfunctions.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/checkfunctions.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testfunctions.cpp

test/testgarbage.o: test/testgarbage.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
test/testgarbage.o: test/testgarbage.cpp externals/simplecpp/simplecpp.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testgarbage.cpp

test/testimportproject.o: test/testimportproject.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/fixture.h
Expand Down
25 changes: 9 additions & 16 deletions cli/cppcheckexecutor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,13 +147,13 @@ bool CppCheckExecutor::parseFromArgs(CppCheck *cppcheck, int argc, const char* c
#else
const bool caseSensitive = true;
#endif
if (!mSettings->project.fileSettings.empty() && !mSettings->fileFilters.empty()) {
if (!settings.project.fileSettings.empty() && !settings.fileFilters.empty()) {
// filter only for the selected filenames from all project files
std::list<ImportProject::FileSettings> newList;

const std::list<ImportProject::FileSettings>& fileSettings = settings.project.fileSettings;
std::copy_if(fileSettings.cbegin(), fileSettings.cend(), std::back_inserter(newList), [&](const ImportProject::FileSettings& fs) {
return matchglobs(mSettings->fileFilters, fs.filename);
return matchglobs(settings.fileFilters, fs.filename);
});
if (!newList.empty())
settings.project.fileSettings = newList;
Expand All @@ -165,7 +165,7 @@ bool CppCheckExecutor::parseFromArgs(CppCheck *cppcheck, int argc, const char* c
// Execute recursiveAddFiles() to each given file parameter
const PathMatch matcher(ignored, caseSensitive);
for (const std::string &pathname : pathnames) {
std::string err = FileLister::recursiveAddFiles(mFiles, Path::toNativeSeparators(pathname), mSettings->library.markupExtensions(), matcher);
std::string err = FileLister::recursiveAddFiles(mFiles, Path::toNativeSeparators(pathname), settings.library.markupExtensions(), matcher);
if (!err.empty()) {
std::cout << "cppcheck: " << err << std::endl;
}
Expand All @@ -177,10 +177,10 @@ bool CppCheckExecutor::parseFromArgs(CppCheck *cppcheck, int argc, const char* c
if (!ignored.empty())
std::cout << "cppcheck: Maybe all paths were ignored?" << std::endl;
return false;
} else if (!mSettings->fileFilters.empty() && settings.project.fileSettings.empty()) {
} else if (!settings.fileFilters.empty() && settings.project.fileSettings.empty()) {
std::map<std::string, std::size_t> newMap;
for (std::map<std::string, std::size_t>::const_iterator i = mFiles.cbegin(); i != mFiles.cend(); ++i)
if (matchglobs(mSettings->fileFilters, i->first)) {
if (matchglobs(settings.fileFilters, i->first)) {
newMap[i->first] = i->second;
}
mFiles = newMap;
Expand Down Expand Up @@ -226,11 +226,6 @@ int CppCheckExecutor::check(int argc, const char* const argv[])
return ret;
}

void CppCheckExecutor::setSettings(const Settings &settings)
{
mSettings = &settings;
}

int CppCheckExecutor::check_wrapper(CppCheck& cppcheck)
{
#ifdef USE_WINDOWS_SEH
Expand Down Expand Up @@ -266,7 +261,6 @@ bool CppCheckExecutor::reportSuppressions(const Settings &settings, bool unusedF
int CppCheckExecutor::check_internal(CppCheck& cppcheck)
{
Settings& settings = cppcheck.settings();
mSettings = &settings;
const bool std = tryLoadLibrary(settings.library, settings.exename, "std.cfg");

for (const std::string &lib : settings.libraries) {
Expand Down Expand Up @@ -330,8 +324,8 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck)
unsigned int c = 0;
if (settings.project.fileSettings.empty()) {
for (std::map<std::string, std::size_t>::const_iterator i = mFiles.cbegin(); i != mFiles.cend(); ++i) {
if (!mSettings->library.markupFile(i->first)
|| !mSettings->library.processMarkupAfterCode(i->first)) {
if (!settings.library.markupFile(i->first)
|| !settings.library.processMarkupAfterCode(i->first)) {
returnValue += cppcheck.check(i->first);
processedsize += i->second;
if (!settings.quiet)
Expand All @@ -355,7 +349,7 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck)
// second loop to parse all markup files which may not work until all
// c/cpp files have been parsed and checked
for (std::map<std::string, std::size_t>::const_iterator i = mFiles.cbegin(); i != mFiles.cend(); ++i) {
if (mSettings->library.markupFile(i->first) && mSettings->library.processMarkupAfterCode(i->first)) {
if (settings.library.markupFile(i->first) && settings.library.processMarkupAfterCode(i->first)) {
returnValue += cppcheck.check(i->first);
processedsize += i->second;
if (!settings.quiet)
Expand All @@ -374,7 +368,7 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck)
returnValue = executor.check();
}

cppcheck.analyseWholeProgram(mSettings->buildDir, mFiles);
cppcheck.analyseWholeProgram(settings.buildDir, mFiles);

if (settings.severity.isEnabled(Severity::information) || settings.checkConfiguration) {
const bool err = reportSuppressions(settings, cppcheck.isUnusedFunctionCheckEnabled(), mFiles, *this);
Expand Down Expand Up @@ -413,7 +407,6 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck)
reportErr(ErrorMessage::getXMLFooter());
}

mSettings = nullptr;
if (returnValue)
return settings.exitCode;
return 0;
Expand Down
8 changes: 1 addition & 7 deletions cli/cppcheckexecutor.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,6 @@ class CppCheckExecutor : public ErrorLogger {
*/
bool parseFromArgs(CppCheck *cppcheck, int argc, const char* const argv[]);

/**
* Helper function to supply settings. This can be used for testing.
* @param settings Reference to an Settings instance
*/
void setSettings(const Settings &settings);

private:

/**
Expand All @@ -166,7 +160,7 @@ class CppCheckExecutor : public ErrorLogger {
int check_internal(CppCheck& cppcheck);

/**
* Pointer to current settings; set while check() is running.
* Pointer to current settings; set while check() is running for reportError().
*/
const Settings* mSettings;

Expand Down
12 changes: 5 additions & 7 deletions lib/cppcheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -800,10 +800,10 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
}

// Run define rules on raw code
for (const Settings::Rule &rule : mSettings.rules) {
if (rule.tokenlist != "define")
continue;

const auto it = std::find_if(mSettings.rules.cbegin(), mSettings.rules.cend(), [](const Settings::Rule& rule) {
return rule.tokenlist == "define";
});
if (it != mSettings.rules.cend()) {
std::string code;
const std::list<Directive> &directives = preprocessor.getDirectives();
for (const Directive &dir : directives) {
Expand All @@ -814,7 +814,6 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
std::istringstream istr2(code);
tokenizer2.list.createTokens(istr2);
executeRules("define", tokenizer2);
break;
}

if (!mSettings.force && configurations.size() > mSettings.maxConfigs) {
Expand Down Expand Up @@ -871,8 +870,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
continue;
}

Tokenizer tokenizer(&mSettings, this);
tokenizer.setPreprocessor(&preprocessor);
Tokenizer tokenizer(&mSettings, this, &preprocessor);
if (mSettings.showtime != SHOWTIME_MODES::SHOWTIME_NONE)
tokenizer.setTimerResults(&s_timerResults);

Expand Down
2 changes: 1 addition & 1 deletion lib/importproject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ namespace {
// TODO : Better evaluation
Settings s;
std::istringstream istr(c);
Tokenizer tokenizer(&s, nullptr);
Tokenizer tokenizer(&s);
tokenizer.tokenize(istr,"vcxproj");
for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next()) {
if (tok->str() == "(" && tok->astOperand1() && tok->astOperand2()) {
Expand Down
30 changes: 5 additions & 25 deletions lib/tokenize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,35 +155,20 @@ static bool isClassStructUnionEnumStart(const Token * tok)

//---------------------------------------------------------------------------

Tokenizer::Tokenizer() :
list(nullptr),
mSettings(nullptr),
mErrorLogger(nullptr),
mSymbolDatabase(nullptr),
mTemplateSimplifier(nullptr),
mVarId(0),
mUnnamedCount(0),
mCodeWithTemplates(false), //is there any templates?
mTimerResults(nullptr),
mPreprocessor(nullptr)
{}

Tokenizer::Tokenizer(const Settings *settings, ErrorLogger *errorLogger) :
Tokenizer::Tokenizer(const Settings *settings, ErrorLogger *errorLogger, const Preprocessor *preprocessor) :
list(settings),
mSettings(settings),
mErrorLogger(errorLogger),
mSymbolDatabase(nullptr),
mTemplateSimplifier(nullptr),
mTemplateSimplifier(new TemplateSimplifier(this)),
mVarId(0),
mUnnamedCount(0),
mCodeWithTemplates(false), //is there any templates?
mTimerResults(nullptr),
mPreprocessor(nullptr)
mPreprocessor(preprocessor)
{
// make sure settings are specified
assert(mSettings);

mTemplateSimplifier = new TemplateSimplifier(this);
}

Tokenizer::~Tokenizer()
Expand Down Expand Up @@ -2768,16 +2753,11 @@ bool Tokenizer::simplifyUsing()
bool Tokenizer::createTokens(std::istream &code,
const std::string& FileName)
{
// make sure settings specified
assert(mSettings);

return list.createTokens(code, FileName);
}

void Tokenizer::createTokens(simplecpp::TokenList&& tokenList)
{
// make sure settings specified
assert(mSettings);
list.createTokens(std::move(tokenList));
}

Expand Down Expand Up @@ -9860,8 +9840,8 @@ void Tokenizer::simplifyNamespaceAliases()

bool Tokenizer::hasIfdef(const Token *start, const Token *end) const
{
if (!mPreprocessor)
return false;
assert(mPreprocessor);

return std::any_of(mPreprocessor->getDirectives().cbegin(), mPreprocessor->getDirectives().cend(), [&](const Directive& d) {
return d.str.compare(0, 3, "#if") == 0 &&
d.linenr >= start->linenr() &&
Expand Down
20 changes: 6 additions & 14 deletions lib/tokenize.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "errortypes.h"
#include "tokenlist.h"

#include <cassert>
#include <iosfwd>
#include <list>
#include <map>
Expand Down Expand Up @@ -59,8 +60,7 @@ class CPPCHECKLIB Tokenizer {
friend class TemplateSimplifier;

public:
Tokenizer();
Tokenizer(const Settings * settings, ErrorLogger *errorLogger);
explicit Tokenizer(const Settings * settings, ErrorLogger *errorLogger = nullptr, const Preprocessor *preprocessor = nullptr);
~Tokenizer();

void setTimerResults(TimerResults *tr) {
Expand Down Expand Up @@ -377,10 +377,8 @@ class CPPCHECKLIB Tokenizer {
*/
static const Token * isFunctionHead(const Token *tok, const std::string &endsWith, bool cpp);

void setPreprocessor(const Preprocessor *preprocessor) {
mPreprocessor = preprocessor;
}
const Preprocessor *getPreprocessor() const {
assert(mPreprocessor);
return mPreprocessor;
}

Expand Down Expand Up @@ -626,12 +624,6 @@ class CPPCHECKLIB Tokenizer {
return mCodeWithTemplates;
}


void setSettings(const Settings *settings) {
mSettings = settings;
list.setSettings(settings);
}

const SymbolDatabase *getSymbolDatabase() const {
return mSymbolDatabase;
}
Expand Down Expand Up @@ -707,15 +699,15 @@ class CPPCHECKLIB Tokenizer {
void setPodTypes();

/** settings */
const Settings * mSettings;
const Settings * const mSettings;

/** errorlogger */
ErrorLogger* const mErrorLogger;

/** Symbol database that all checks etc can use */
SymbolDatabase *mSymbolDatabase;

TemplateSimplifier *mTemplateSimplifier;
TemplateSimplifier * const mTemplateSimplifier;

/** E.g. "A" for code where "#ifdef A" is true. This is used to
print additional information in error situations. */
Expand Down Expand Up @@ -750,7 +742,7 @@ class CPPCHECKLIB Tokenizer {
*/
TimerResults *mTimerResults;

const Preprocessor *mPreprocessor;
const Preprocessor * const mPreprocessor;
};

/// @}
Expand Down
5 changes: 0 additions & 5 deletions test/testbufferoverrun.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "errortypes.h"
#include "standards.h"
#include "library.h"
#include "preprocessor.h"
#include "settings.h"
#include "fixture.h"
#include "tokenize.h"
Expand Down Expand Up @@ -99,14 +98,10 @@ class TestBufferOverrun : public TestFixture {
std::map<std::string, simplecpp::TokenList*> filedata;
simplecpp::preprocess(tokens2, tokens1, files, filedata, simplecpp::DUI());

Preprocessor preprocessor(*settings, nullptr);
preprocessor.setDirectives(tokens1);

// Tokenizer..
Tokenizer tokenizer(settings, this);
tokenizer.createTokens(std::move(tokens2));
tokenizer.simplifyTokens1("");
tokenizer.setPreprocessor(&preprocessor);

// Check for buffer overruns..
runChecks<CheckBufferOverrun>(&tokenizer, settings, this);
Expand Down
Loading