diff --git a/lib/checkmemoryleak.h b/lib/checkmemoryleak.h index 93b4a0f7d..b69f52662 100644 --- a/lib/checkmemoryleak.h +++ b/lib/checkmemoryleak.h @@ -196,10 +196,8 @@ public: /** @brief run all simplified checks */ void runSimplifiedChecks(const Tokenizer *tokenizr, const Settings *settings, ErrorLogger *errLog) { // Don't use these check for Java and C# programs.. - if (tokenizr->getFiles()->at(0).find(".java") != std::string::npos || - tokenizr->getFiles()->at(0).find(".cs") != std::string::npos) { + if (tokenizr->isJavaOrCSharp()) return; - } CheckMemoryLeakInFunction checkMemoryLeak(tokenizr, settings, errLog); checkMemoryLeak.checkReallocUsage(); @@ -367,10 +365,8 @@ public: void runSimplifiedChecks(const Tokenizer *tokenizr, const Settings *settings, ErrorLogger *errLog) { // Don't use these check for Java and C# programs.. - if (tokenizr->getFiles()->at(0).find(".java") != std::string::npos || - tokenizr->getFiles()->at(0).find(".cs") != std::string::npos) { + if (tokenizr->isJavaOrCSharp()) return; - } CheckMemoryLeakInClass checkMemoryLeak(tokenizr, settings, errLog); checkMemoryLeak.check(); diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 048171b15..add44f293 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -1982,6 +1982,8 @@ bool Tokenizer::tokenize(std::istream &code, } // Convert C# code + // FIXME: This should be if(isCSharp()), but that makes the lines 5931 and + // 5932 of test/testtokenize.cpp fail. if (_files[0].find(".cs")) { for (Token *tok = _tokens; tok; tok = tok->next()) { if (Token::Match(tok, "%type% [ ] %var% [=;]") && @@ -2005,9 +2007,10 @@ bool Tokenizer::tokenize(std::istream &code, // Simplify JAVA/C# code if (isJavaOrCSharp()) { - const bool isJava(_files[0].find(".java") != std::string::npos); + // better don't call isJava in the loop + bool isJava_ = isJava(); for (Token *tok = _tokens; tok; tok = tok->next()) { - if (isJava && Token::Match(tok, ") throws %var% {")) { + if (isJava_ && Token::Match(tok, ") throws %var% {")) { tok->deleteNext(2); } else if (tok->str() == "private") tok->str("private:"); diff --git a/lib/tokenize.h b/lib/tokenize.h index ba66b55ce..2666ff3d8 100644 --- a/lib/tokenize.h +++ b/lib/tokenize.h @@ -47,25 +47,35 @@ public: Tokenizer(const Settings * settings, ErrorLogger *errorLogger); virtual ~Tokenizer(); - /** Is the code JAVA/C#. Used for bailouts */ - bool isJavaOrCSharp() const { - if (_files.size() != 1) - return false; + /** The file extension. Used by isC() etc. */ + std::string fileExtension() const { + if (_files.empty()) + return std::string(""); const std::string::size_type pos = _files[0].rfind('.'); if (pos != std::string::npos) - return (_files[0].substr(pos) == ".java" || - _files[0].substr(pos) == ".cs"); - return false; + return _files[0].substr(pos); + return std::string(""); + } + + /** Is the code JAVA. Used for bailouts */ + bool isJava() const { + return fileExtension() == ".java"; + } + + /** Is the code C#. Used for bailouts */ + bool isCSharp() const { + return fileExtension() == ".cs"; + } + + /** Is the code JAVA/C#. Used for bailouts */ + bool isJavaOrCSharp() const { + return isJava() || isCSharp(); } /** Is the code C. Used for bailouts */ bool isC() const { - if (_files.empty()) - return false; - const std::string::size_type pos = _files[0].rfind('.'); - if (pos != std::string::npos) - return (_files[0].substr(pos) == ".c") || (_files[0].substr(pos) == ".C"); - return false; + std::string ext = fileExtension(); + return (ext == ".c" || ext == ".C"); } /** Is the code CPP. Used for bailouts */