Skip to content

Commit c9d8f60

Browse files
committed
Optimization: Reduced peak memory usage (30% in my test case) by immediately deleting simplecpp::TokenList while creating the cppcheck TokenList.
1 parent d78ff97 commit c9d8f60

13 files changed

+22
-18
lines changed

lib/cppcheck.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
713713
{
714714
Timer timer("Tokenizer::createTokens", mSettings.showtime, &s_timerResults);
715715
simplecpp::TokenList tokensP = preprocessor.preprocess(tokens1, mCurrentConfig, files, true);
716-
mTokenizer.createTokens(&tokensP);
716+
mTokenizer.createTokens(std::move(tokensP));
717717
}
718718
hasValidConfig = true;
719719

lib/tokenize.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2302,11 +2302,11 @@ bool Tokenizer::createTokens(std::istream &code,
23022302
return list.createTokens(code, FileName);
23032303
}
23042304

2305-
void Tokenizer::createTokens(const simplecpp::TokenList *tokenList)
2305+
void Tokenizer::createTokens(simplecpp::TokenList&& tokenList)
23062306
{
23072307
// make sure settings specified
23082308
assert(mSettings);
2309-
list.createTokens(tokenList);
2309+
list.createTokens(std::move(tokenList));
23102310
}
23112311

23122312
bool Tokenizer::simplifyTokens1(const std::string &configuration)

lib/tokenize.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class CPPCHECKLIB Tokenizer {
110110
bool isScopeNoReturn(const Token *endScopeToken, bool *unknown = nullptr) const;
111111

112112
bool createTokens(std::istream &code, const std::string& FileName);
113-
void createTokens(const simplecpp::TokenList *tokenList);
113+
void createTokens(simplecpp::TokenList&& tokenList);
114114

115115
bool simplifyTokens1(const std::string &configuration);
116116
/**

lib/tokenlist.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -377,17 +377,17 @@ bool TokenList::createTokens(std::istream &code, const std::string& file0)
377377
simplecpp::OutputList outputList;
378378
simplecpp::TokenList tokens(code, mFiles, file0, &outputList);
379379

380-
createTokens(&tokens);
380+
createTokens(std::move(tokens));
381381

382382
return outputList.empty();
383383
}
384384

385385
//---------------------------------------------------------------------------
386386

387-
void TokenList::createTokens(const simplecpp::TokenList *tokenList)
387+
void TokenList::createTokens(simplecpp::TokenList&& tokenList)
388388
{
389-
if (tokenList->cfront())
390-
mOrigFiles = mFiles = tokenList->cfront()->location.files;
389+
if (tokenList.cfront())
390+
mOrigFiles = mFiles = tokenList.cfront()->location.files;
391391
else
392392
mFiles.clear();
393393

@@ -401,7 +401,7 @@ void TokenList::createTokens(const simplecpp::TokenList *tokenList)
401401
mIsCpp = (mSettings->enforcedLang == Settings::CPP);
402402
}
403403

404-
for (const simplecpp::Token *tok = tokenList->cfront(); tok; tok = tok->next) {
404+
for (const simplecpp::Token *tok = tokenList.cfront(); tok;) {
405405

406406
std::string str = tok->str();
407407

@@ -423,6 +423,10 @@ void TokenList::createTokens(const simplecpp::TokenList *tokenList)
423423
mTokensFrontBack.back->linenr(tok->location.line);
424424
mTokensFrontBack.back->column(tok->location.col);
425425
mTokensFrontBack.back->isExpandedMacro(!tok->macro.empty());
426+
427+
tok = tok->next;
428+
if (tok)
429+
tokenList.deleteToken(tok->previous);
426430
}
427431

428432
if (mSettings && mSettings->relativePaths) {

lib/tokenlist.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class CPPCHECKLIB TokenList {
9898
*/
9999
bool createTokens(std::istream &code, const std::string& file0 = emptyString);
100100

101-
void createTokens(const simplecpp::TokenList *tokenList);
101+
void createTokens(simplecpp::TokenList&& tokenList);
102102

103103
/** Deallocate list */
104104
void deallocateTokens();

test/testcondition.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class TestCondition : public TestFixture {
138138

139139
// Tokenizer..
140140
Tokenizer tokenizer(&settings0, this);
141-
tokenizer.createTokens(&tokens2);
141+
tokenizer.createTokens(std::move(tokens2));
142142
tokenizer.simplifyTokens1("");
143143

144144
// Run checks..

test/testincompletestatement.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class TestIncompleteStatement : public TestFixture {
5151

5252
// Tokenize..
5353
Tokenizer tokenizer(&settings, this);
54-
tokenizer.createTokens(&tokens2);
54+
tokenizer.createTokens(std::move(tokens2));
5555
tokenizer.simplifyTokens1("");
5656

5757
// Check for incomplete statements..

test/testleakautovar.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ class TestLeakAutoVar : public TestFixture {
218218

219219
// Tokenizer..
220220
Tokenizer tokenizer(&settings, this);
221-
tokenizer.createTokens(&tokens2);
221+
tokenizer.createTokens(std::move(tokens2));
222222
tokenizer.simplifyTokens1("");
223223

224224
// Check for leaks..

test/testnullpointer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ class TestNullPointer : public TestFixture {
163163

164164
// Tokenizer..
165165
Tokenizer tokenizer(&settings, this);
166-
tokenizer.createTokens(&tokens2);
166+
tokenizer.createTokens(std::move(tokens2));
167167
tokenizer.simplifyTokens1("");
168168

169169
// Check for null pointer dereferences..

test/testother.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ class TestOther : public TestFixture {
300300

301301
// Tokenizer..
302302
Tokenizer tokenizer(settings, this);
303-
tokenizer.createTokens(&tokens2);
303+
tokenizer.createTokens(std::move(tokens2));
304304
tokenizer.simplifyTokens1("");
305305

306306
// Check..

0 commit comments

Comments
 (0)