diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 165684366..0bf804e02 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -713,7 +713,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string { Timer timer("Tokenizer::createTokens", mSettings.showtime, &s_timerResults); simplecpp::TokenList tokensP = preprocessor.preprocess(tokens1, mCurrentConfig, files, true); - mTokenizer.createTokens(&tokensP); + mTokenizer.createTokens(std::move(tokensP)); } hasValidConfig = true; diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index dfe0a65bc..daa38ad66 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2302,11 +2302,11 @@ bool Tokenizer::createTokens(std::istream &code, return list.createTokens(code, FileName); } -void Tokenizer::createTokens(const simplecpp::TokenList *tokenList) +void Tokenizer::createTokens(simplecpp::TokenList&& tokenList) { // make sure settings specified assert(mSettings); - list.createTokens(tokenList); + list.createTokens(std::move(tokenList)); } bool Tokenizer::simplifyTokens1(const std::string &configuration) diff --git a/lib/tokenize.h b/lib/tokenize.h index 986c5849b..25d849fe6 100644 --- a/lib/tokenize.h +++ b/lib/tokenize.h @@ -110,7 +110,7 @@ public: bool isScopeNoReturn(const Token *endScopeToken, bool *unknown = nullptr) const; bool createTokens(std::istream &code, const std::string& FileName); - void createTokens(const simplecpp::TokenList *tokenList); + void createTokens(simplecpp::TokenList&& tokenList); bool simplifyTokens1(const std::string &configuration); /** diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 7564b098f..1ba044f7b 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -377,17 +377,17 @@ bool TokenList::createTokens(std::istream &code, const std::string& file0) simplecpp::OutputList outputList; simplecpp::TokenList tokens(code, mFiles, file0, &outputList); - createTokens(&tokens); + createTokens(std::move(tokens)); return outputList.empty(); } //--------------------------------------------------------------------------- -void TokenList::createTokens(const simplecpp::TokenList *tokenList) +void TokenList::createTokens(simplecpp::TokenList&& tokenList) { - if (tokenList->cfront()) - mOrigFiles = mFiles = tokenList->cfront()->location.files; + if (tokenList.cfront()) + mOrigFiles = mFiles = tokenList.cfront()->location.files; else mFiles.clear(); @@ -401,7 +401,7 @@ void TokenList::createTokens(const simplecpp::TokenList *tokenList) mIsCpp = (mSettings->enforcedLang == Settings::CPP); } - for (const simplecpp::Token *tok = tokenList->cfront(); tok; tok = tok->next) { + for (const simplecpp::Token *tok = tokenList.cfront(); tok;) { std::string str = tok->str(); @@ -423,6 +423,10 @@ void TokenList::createTokens(const simplecpp::TokenList *tokenList) mTokensFrontBack.back->linenr(tok->location.line); mTokensFrontBack.back->column(tok->location.col); mTokensFrontBack.back->isExpandedMacro(!tok->macro.empty()); + + tok = tok->next; + if (tok) + tokenList.deleteToken(tok->previous); } if (mSettings && mSettings->relativePaths) { diff --git a/lib/tokenlist.h b/lib/tokenlist.h index 2a954e395..ca1882924 100644 --- a/lib/tokenlist.h +++ b/lib/tokenlist.h @@ -98,7 +98,7 @@ public: */ bool createTokens(std::istream &code, const std::string& file0 = emptyString); - void createTokens(const simplecpp::TokenList *tokenList); + void createTokens(simplecpp::TokenList&& tokenList); /** Deallocate list */ void deallocateTokens(); diff --git a/test/testcondition.cpp b/test/testcondition.cpp index dc8c193ae..e7531a812 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -138,7 +138,7 @@ private: // Tokenizer.. Tokenizer tokenizer(&settings0, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Run checks.. diff --git a/test/testincompletestatement.cpp b/test/testincompletestatement.cpp index 71d2045d6..289da4022 100644 --- a/test/testincompletestatement.cpp +++ b/test/testincompletestatement.cpp @@ -51,7 +51,7 @@ private: // Tokenize.. Tokenizer tokenizer(&settings, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check for incomplete statements.. diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index f8af08931..28a6fa532 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -218,7 +218,7 @@ private: // Tokenizer.. Tokenizer tokenizer(&settings, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check for leaks.. diff --git a/test/testnullpointer.cpp b/test/testnullpointer.cpp index bfc77e103..f5205a730 100644 --- a/test/testnullpointer.cpp +++ b/test/testnullpointer.cpp @@ -163,7 +163,7 @@ private: // Tokenizer.. Tokenizer tokenizer(&settings, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check for null pointer dereferences.. diff --git a/test/testother.cpp b/test/testother.cpp index fc150fcc3..33c952dd5 100644 --- a/test/testother.cpp +++ b/test/testother.cpp @@ -300,7 +300,7 @@ private: // Tokenizer.. Tokenizer tokenizer(settings, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check.. diff --git a/test/testsizeof.cpp b/test/testsizeof.cpp index 61d0aeacb..4389447bd 100644 --- a/test/testsizeof.cpp +++ b/test/testsizeof.cpp @@ -81,7 +81,7 @@ private: // Tokenize.. Tokenizer tokenizer(&settings, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check... diff --git a/test/testunusedprivfunc.cpp b/test/testunusedprivfunc.cpp index 81c13c439..7f1cef8e4 100644 --- a/test/testunusedprivfunc.cpp +++ b/test/testunusedprivfunc.cpp @@ -103,7 +103,7 @@ private: // Tokenize.. Tokenizer tokenizer(&settings, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check for unused private functions.. diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 5f491a1f0..f0947e044 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -307,7 +307,7 @@ private: // Tokenize.. Tokenizer tokenizer(&settings, this); - tokenizer.createTokens(&tokens2); + tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); settings.debugwarnings = false;