Added Cppcheck::terminate function that will terminate the checking ASAP

This commit is contained in:
Daniel Marjamäki 2010-01-18 20:23:50 +01:00
parent cd31cd9298
commit 53d036fadf
4 changed files with 37 additions and 1 deletions

View File

@ -436,7 +436,10 @@ unsigned int CppCheck::check()
for (unsigned int c = 0; c < _filenames.size(); c++) for (unsigned int c = 0; c < _filenames.size(); c++)
{ {
_errout.str(""); _errout.str("");
std::string fname = _filenames[c]; const std::string fname = _filenames[c];
if (_settings.terminated())
break;
if (_settings._errorsOnly == false) if (_settings._errorsOnly == false)
_errorLogger.reportOut(std::string("Checking ") + fname + std::string("...")); _errorLogger.reportOut(std::string("Checking ") + fname + std::string("..."));
@ -519,6 +522,9 @@ unsigned int CppCheck::check()
void CppCheck::checkFile(const std::string &code, const char FileName[]) void CppCheck::checkFile(const std::string &code, const char FileName[])
{ {
if (_settings.terminated())
return;
Tokenizer _tokenizer(&_settings, this); Tokenizer _tokenizer(&_settings, this);
// Tokenize the file // Tokenize the file
@ -542,6 +548,9 @@ void CppCheck::checkFile(const std::string &code, const char FileName[])
// call all "runChecks" in all registered Check classes // call all "runChecks" in all registered Check classes
for (std::list<Check *>::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it) for (std::list<Check *>::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it)
{ {
if (_settings.terminated())
return;
TIMER_START(); TIMER_START();
(*it)->runChecks(&_tokenizer, &_settings, this); (*it)->runChecks(&_tokenizer, &_settings, this);
TIMER_END((*it)->name() << "::runChecks"); TIMER_END((*it)->name() << "::runChecks");
@ -567,6 +576,9 @@ void CppCheck::checkFile(const std::string &code, const char FileName[])
// call all "runSimplifiedChecks" in all registered Check classes // call all "runSimplifiedChecks" in all registered Check classes
for (std::list<Check *>::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it) for (std::list<Check *>::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it)
{ {
if (_settings.terminated())
return;
TIMER_START(); TIMER_START();
(*it)->runSimplifiedChecks(&_tokenizer, &_settings, this); (*it)->runSimplifiedChecks(&_tokenizer, &_settings, this);
TIMER_END((*it)->name() << "::runSimplifiedChecks"); TIMER_END((*it)->name() << "::runSimplifiedChecks");

View File

@ -116,6 +116,14 @@ public:
virtual void reportStatus(unsigned int index, unsigned int max); virtual void reportStatus(unsigned int index, unsigned int max);
/**
* Terminate checking. The checking will be terminated ASAP.
*/
void terminate()
{
_settings.terminate();
}
private: private:
void checkFile(const std::string &code, const char FileName[]); void checkFile(const std::string &code, const char FileName[]);

View File

@ -37,6 +37,7 @@ Settings::Settings()
_exitCode = 0; _exitCode = 0;
_showtime = false; _showtime = false;
_append = ""; _append = "";
_terminate = false;
} }
Settings::~Settings() Settings::~Settings()

View File

@ -45,6 +45,9 @@ private:
/** enable extra checks by id */ /** enable extra checks by id */
std::map<std::string, bool> _enabled; std::map<std::string, bool> _enabled;
/** terminate checking */
bool _terminate;
public: public:
Settings(); Settings();
virtual ~Settings(); virtual ~Settings();
@ -56,6 +59,18 @@ public:
bool _inlineSuppressions; bool _inlineSuppressions;
bool _verbose; bool _verbose;
/** Request termination of checking */
void terminate()
{
_terminate = true;
}
/** termination? */
bool terminated() const
{
return _terminate;
}
/** Force checking t he files with "too many" configurations. */ /** Force checking t he files with "too many" configurations. */
bool _force; bool _force;