diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 31014aa79..18236c602 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -43,6 +43,9 @@ Tokenizer::Tokenizer() : _varId(0), _codeWithTemplates(false), //is there any templates? m_timerResults(NULL) +#ifdef MAXTIME + ,maxtime(std::time(0) + MAXTIME) +#endif { } @@ -54,6 +57,9 @@ Tokenizer::Tokenizer(const Settings *settings, ErrorLogger *errorLogger) : _varId(0), _codeWithTemplates(false), //is there any templates? m_timerResults(NULL) +#ifdef MAXTIME + ,maxtime(std::time(0) + MAXTIME) +#endif { // make sure settings are specified assert(_settings); @@ -514,6 +520,11 @@ void Tokenizer::simplifyTypedef() if (_settings && _settings->terminated()) return; +#ifdef MAXTIME + if (std::time(0) > maxtime) + return; +#endif + if (goback) { //jump back once, see the comment at the end of the function goback = false; @@ -6458,6 +6469,11 @@ bool Tokenizer::simplifyKnownVariablesSimplify(Token **tok2, Token *tok3, unsign if (_errorLogger && !list.getFiles().empty()) _errorLogger->reportProgress(list.getFiles()[0], "Tokenize (simplifyKnownVariables)", tok3->progressValue()); +#ifdef MAXTIME + if (std::time(0) > maxtime) + return false; +#endif + bool ret = false; Token* bailOutFromLoop = 0; diff --git a/lib/tokenize.h b/lib/tokenize.h index fabe31948..9842012b4 100644 --- a/lib/tokenize.h +++ b/lib/tokenize.h @@ -28,6 +28,7 @@ #include #include #include +#include class Settings; class SymbolDatabase; @@ -806,6 +807,10 @@ private: * TimerResults */ TimerResults *m_timerResults; +#ifdef MAXTIME + /** Tokenizer maxtime */ + std::time_t maxtime; +#endif }; /// @}