diff --git a/cppcheck.cbp b/cppcheck.cbp
index ab0fc293e..599bfbea8 100644
--- a/cppcheck.cbp
+++ b/cppcheck.cbp
@@ -43,6 +43,7 @@
+
diff --git a/src/check.h b/src/check.h
index 39b414b8a..f3065bbc6 100644
--- a/src/check.h
+++ b/src/check.h
@@ -21,6 +21,7 @@
#define checkH
#include "settings.h"
+#include
class Tokenizer;
class ErrorLogger;
@@ -28,21 +29,26 @@ class ErrorLogger;
class Check
{
public:
-
- Check(const Tokenizer * const tokenizer, const Settings &settings, ErrorLogger *errorLogger)
- : _tokenizer(tokenizer), _settings(settings), _errorLogger(errorLogger)
- { }
+ // This constructor is used when registering the CheckClass
+ Check()
+ {
+ instances().push_back(this);
+ }
virtual ~Check()
- { }
+ {
+ instances().remove(this);
+ }
+
+ /** get instances of this */
+ static std::list &instances()
+ {
+ static std::list _instances;
+ return _instances;
+ }
/** run checks.. */
- virtual void runChecks() = 0;
-
-protected:
- const Tokenizer * const _tokenizer;
- const Settings &_settings;
- ErrorLogger *_errorLogger;
+ virtual void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) = 0;
};
#endif
diff --git a/src/checkstl.cpp b/src/checkstl.cpp
index 4d1fc5c20..9acc0b40e 100644
--- a/src/checkstl.cpp
+++ b/src/checkstl.cpp
@@ -22,6 +22,10 @@
#include "token.h"
+// Create a static instance of this
+static CheckStl instance;
+
+
void CheckStl::iterators()
{
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
diff --git a/src/checkstl.h b/src/checkstl.h
index c8c619a9a..625afede0 100644
--- a/src/checkstl.h
+++ b/src/checkstl.h
@@ -31,14 +31,12 @@ class CheckStl : public Check
{
public:
- CheckStl(const Tokenizer * const tokenizer, const Settings &settings, ErrorLogger *errorLogger)
- : Check(tokenizer, settings, errorLogger)
+ void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger)
{
+ _tokenizer = tokenizer;
+ _settings = settings;
+ _errorLogger = errorLogger;
- }
-
- void runChecks()
- {
stlOutOfBounds();
iterators();
erase();
@@ -76,6 +74,10 @@ private:
* @param it iterator token
*/
void eraseCheckLoop(const Token *it);
+
+ const Tokenizer *_tokenizer;
+ const Settings *_settings;
+ ErrorLogger *_errorLogger;
};
//---------------------------------------------------------------------------
diff --git a/src/cppcheck.cpp b/src/cppcheck.cpp
index aa988c4fc..fbf560d1c 100644
--- a/src/cppcheck.cpp
+++ b/src/cppcheck.cpp
@@ -30,6 +30,8 @@
#include "checkfunctionusage.h"
#include "filelister.h"
+#include "check.h"
+
#include
#include
#include
@@ -481,6 +483,11 @@ void CppCheck::checkFile(const std::string &code, const char FileName[])
// Unusual pointer arithmetic
if (ErrorLogger::strPlusChar())
checkOther.strPlusChar();
+
+ for (std::list::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it)
+ {
+ (*it)->runChecks(&_tokenizer, &_settings, this);
+ }
}
Settings CppCheck::settings() const