From 103588c5bce12f34fb02f671af26fe86cde713a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Neusch=C3=A4fer?= Date: Tue, 27 Dec 2011 18:01:39 +0100 Subject: [PATCH 1/3] Refactoring: tokenizer: factor out fileExtension --- lib/tokenize.h | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/tokenize.h b/lib/tokenize.h index ba66b55ce..44356f9ee 100644 --- a/lib/tokenize.h +++ b/lib/tokenize.h @@ -47,25 +47,26 @@ 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/C#. Used for bailouts */ + bool isJavaOrCSharp() const { + std::string ext = fileExtension(); + return (ext == ".java" || ext == ".cs"); } /** 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 */ From 7a5627029f3d2688a5121c9f61684b94e29e908f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Neusch=C3=A4fer?= Date: Tue, 27 Dec 2011 18:01:39 +0100 Subject: [PATCH 2/3] tokenizer: proper checks for Java and C# --- lib/tokenize.cpp | 7 +++++-- lib/tokenize.h | 13 +++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) 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 44356f9ee..2666ff3d8 100644 --- a/lib/tokenize.h +++ b/lib/tokenize.h @@ -57,10 +57,19 @@ public: 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 { - std::string ext = fileExtension(); - return (ext == ".java" || ext == ".cs"); + return isJava() || isCSharp(); } /** Is the code C. Used for bailouts */ From f10d3143911b182d68f441026af3d040544e1ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Neusch=C3=A4fer?= Date: Tue, 27 Dec 2011 18:01:39 +0100 Subject: [PATCH 3/3] checkmemleak.h: use Tokenizer::isJavaOrCSharp() --- lib/checkmemoryleak.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) 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();