From 8f84a493f4838c7d2769523d4964eb27d0d32eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 9 Apr 2018 22:09:10 +0200 Subject: [PATCH] remove foreach emulator --- Makefile | 4 -- lib/foreach.h | 91 ------------------------- test/testfiles.pri | 1 - test/testforeach.cpp | 158 ------------------------------------------- 4 files changed, 254 deletions(-) delete mode 100644 lib/foreach.h delete mode 100644 test/testforeach.cpp diff --git a/Makefile b/Makefile index 7233d6a8f..cc263726f 100644 --- a/Makefile +++ b/Makefile @@ -201,7 +201,6 @@ TESTOBJ = test/options.o \ test/testerrorlogger.o \ test/testexceptionsafety.o \ test/testfilelister.o \ - test/testforeach.o \ test/testfunctions.o \ test/testgarbage.o \ test/testimportproject.o \ @@ -523,9 +522,6 @@ test/testexceptionsafety.o: test/testexceptionsafety.cpp lib/cxx11emu.h lib/chec test/testfilelister.o: test/testfilelister.cpp lib/cxx11emu.h lib/pathmatch.h lib/config.h test/testsuite.h lib/errorlogger.h lib/suppressions.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testfilelister.o test/testfilelister.cpp -test/testforeach.o: test/testforeach.cpp lib/cxx11emu.h lib/foreach.h test/testsuite.h lib/config.h lib/errorlogger.h lib/suppressions.h - $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testforeach.o test/testforeach.cpp - test/testfunctions.o: test/testfunctions.cpp lib/cxx11emu.h lib/checkfunctions.h lib/check.h lib/config.h lib/errorlogger.h lib/suppressions.h lib/settings.h lib/importproject.h lib/platform.h lib/utils.h lib/library.h lib/mathlib.h lib/standards.h lib/timer.h lib/token.h lib/valueflow.h lib/tokenize.h lib/tokenlist.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testfunctions.o test/testfunctions.cpp diff --git a/lib/foreach.h b/lib/foreach.h deleted file mode 100644 index 19cbe60e6..000000000 --- a/lib/foreach.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Cppcheck - A tool for static C/C++ code analysis - * Copyright (C) 2018 Cppcheck team. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -//--------------------------------------------------------------------------- -#ifndef foreachH -#define foreachH -//--------------------------------------------------------------------------- - -#include - -#ifndef CPPCHECK_HAS_RANGE_FOR -#if (defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ < 6) || defined(_MSC_VER) -#define CPPCHECK_HAS_RANGE_FOR 0 -#else -#define CPPCHECK_HAS_RANGE_FOR 1 -#endif -#endif - -#if !CPPCHECK_HAS_RANGE_FOR - -template -typename Range::iterator range_begin(Range& r) -{ - return r.begin(); -} - -template -typename Range::iterator range_end(Range& r) -{ - return r.end(); -} - -template -typename Range::const_iterator range_begin(const Range& r) -{ - return r.begin(); -} - -template -typename Range::const_iterator range_end(const Range& r) -{ - return r.end(); -} - -template< class T, std::size_t N > -T* range_begin(T(&array)[N]) -{ - return array; -} - -template< class T, std::size_t N > -T* range_end(T(&array)[N]) -{ - return array+N; -} - -#define CPPCHECK_PRIVATE_VAR_CAT_IMPL(x, y) x ## y -#define CPPCHECK_PRIVATE_VAR_CAT(x, y) CPPCHECK_PRIVATE_VAR_CAT_IMPL(x, y) -#define CPPCHECK_PRIVATE_VAR(x) CPPCHECK_PRIVATE_VAR_CAT(_cppcheck_ ## x, __LINE__) - -#define FOREACH(VAR, ...) \ - if(bool CPPCHECK_PRIVATE_VAR(done) = false) {} \ - else for(auto && CPPCHECK_PRIVATE_VAR(rng) = (__VA_ARGS__); !CPPCHECK_PRIVATE_VAR(done);) \ - for(auto CPPCHECK_PRIVATE_VAR(begin) = range_begin(CPPCHECK_PRIVATE_VAR(rng)); !CPPCHECK_PRIVATE_VAR(done); \ - CPPCHECK_PRIVATE_VAR(done) = true) \ - for(auto CPPCHECK_PRIVATE_VAR(end) = range_end(CPPCHECK_PRIVATE_VAR(rng)); \ - !CPPCHECK_PRIVATE_VAR(done) && CPPCHECK_PRIVATE_VAR(begin) != CPPCHECK_PRIVATE_VAR(end); ++CPPCHECK_PRIVATE_VAR(begin)) \ - if(!(CPPCHECK_PRIVATE_VAR(done) = true)) {} \ - else for(VAR = *CPPCHECK_PRIVATE_VAR(begin); CPPCHECK_PRIVATE_VAR(done); CPPCHECK_PRIVATE_VAR(done) = false) \ - -#else -#define FOREACH(VAR, ...) for(VAR : (__VA_ARGS__)) -#endif - -#endif diff --git a/test/testfiles.pri b/test/testfiles.pri index 303572f2e..ad9192243 100644 --- a/test/testfiles.pri +++ b/test/testfiles.pri @@ -19,7 +19,6 @@ SOURCES += $${BASEPATH}/test64bit.cpp \ $${BASEPATH}/testerrorlogger.cpp \ $${BASEPATH}/testexceptionsafety.cpp \ $${BASEPATH}/testfilelister.cpp \ - $${BASEPATH}/testforeach.cpp \ $${BASEPATH}/testfunctions.cpp \ $${BASEPATH}/testgarbage.cpp \ $${BASEPATH}/testimportproject.cpp \ diff --git a/test/testforeach.cpp b/test/testforeach.cpp deleted file mode 100644 index 0d2d4afac..000000000 --- a/test/testforeach.cpp +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Cppcheck - A tool for static C/C++ code analysis - * Copyright (C) 2007-2018 Cppcheck team. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "foreach.h" -#include "testsuite.h" -#include - - -class TestForeach : public TestFixture { -public: - TestForeach() - : TestFixture("TestForeach"), getVectorOnceCount(0) - {} - -private: - - int getVectorOnceCount; - const std::vector& getVectorOnce() { - static std::vector v(5, 2); - getVectorOnceCount++; - return v; - } - - std::vector getVector() { - std::vector v(5, 2); - return v; - } - - void run() { - TEST_CASE(container); - TEST_CASE(rvalue); - TEST_CASE(checkBreak); - TEST_CASE(checkContinue); - TEST_CASE(arrays); - TEST_CASE(callOnce); - TEST_CASE(nested); - } - - void container() { - std::vector v(5, 2); - int total = 0; - int count = 0; - - FOREACH(int x, v) { - count++; - total += x; - } - - ASSERT_EQUALS(total, 10); - ASSERT_EQUALS(count, 5); - } - - void rvalue() { - int total = 0; - int count = 0; - - FOREACH(int x, getVector()) { - count++; - total += x; - } - - ASSERT_EQUALS(total, 10); - ASSERT_EQUALS(count, 5); - } - - void checkBreak() { - std::vector v(5, 2); - int total = 0; - int count = 0; - - FOREACH(int x, v) { - count++; - if (count == 3) break; - total += x; - } - - ASSERT_EQUALS(total, 4); - ASSERT_EQUALS(count, 3); - } - - void checkContinue() { - std::vector v(5, 2); - int total = 0; - int count = 0; - - FOREACH(int x, v) { - count++; - if (count == 3) continue; - total += x; - } - - ASSERT_EQUALS(total, 8); - ASSERT_EQUALS(count, 5); - } - - void arrays() { - int arr[] = {2, 2, 2, 2, 2}; - int total = 0; - int count = 0; - - FOREACH(int x, arr) { - count++; - total += x; - } - - ASSERT_EQUALS(total, 10); - ASSERT_EQUALS(count, 5); - } - - void callOnce() { - int total = 0; - int count = 0; - - FOREACH(int x, getVectorOnce()) { - count++; - total += x; - } - - ASSERT_EQUALS(total, 10); - ASSERT_EQUALS(count, 5); - ASSERT_EQUALS(getVectorOnceCount, 1); - } - - void nested() { - std::vector v(5, 2); - int total = 0; - int count = 0; - - FOREACH(int x, v) { - FOREACH(int y, v) { - count++; - total += x; - (void)y; - } - } - - ASSERT_EQUALS(total, 50); - ASSERT_EQUALS(count, 25); - } - -}; - -REGISTER_TEST(TestForeach)