Skip to content

Commit e792bb8

Browse files
authored
only create or set Token::mMacroName if necessary (danmar#7358)
like we do with `Token::mOriginalName`
1 parent 5c343d5 commit e792bb8

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

lib/token.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1048,7 +1048,8 @@ Token* Token::insertToken(const std::string& tokenStr, const std::string& origin
10481048
newToken->str(tokenStr);
10491049
if (!originalNameStr.empty())
10501050
newToken->originalName(originalNameStr);
1051-
newToken->setMacroName(macroNameStr);
1051+
if (!macroNameStr.empty())
1052+
newToken->setMacroName(macroNameStr);
10521053

10531054
if (newToken != this) {
10541055
newToken->mImpl->mLineNumber = mImpl->mLineNumber;
@@ -2599,6 +2600,7 @@ const ValueFlow::Value* Token::getContainerSizeValue(const MathLib::bigint val)
25992600

26002601
TokenImpl::~TokenImpl()
26012602
{
2603+
delete mMacroName;
26022604
delete mOriginalName;
26032605
delete mValueType;
26042606
delete mValues;

lib/token.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ struct TokenImpl {
101101
std::string* mOriginalName{};
102102

103103
// If this token came from a macro replacement list, this is the name of that macro
104-
std::string mMacroName;
104+
std::string* mMacroName{};
105105

106106
// ValueType
107107
ValueType* mValueType{};
@@ -480,7 +480,7 @@ class CPPCHECKLIB Token {
480480
setFlag(fIsStandardType, b);
481481
}
482482
bool isExpandedMacro() const {
483-
return !mImpl->mMacroName.empty();
483+
return !!mImpl->mMacroName;
484484
}
485485
bool isCast() const {
486486
return getFlag(fIsCast);
@@ -805,10 +805,13 @@ class CPPCHECKLIB Token {
805805
}
806806

807807
const std::string& getMacroName() const {
808-
return mImpl->mMacroName;
808+
return mImpl->mMacroName ? *mImpl->mMacroName : mEmptyString;
809809
}
810810
void setMacroName(std::string name) {
811-
mImpl->mMacroName = std::move(name);
811+
if (!mImpl->mMacroName)
812+
mImpl->mMacroName = new std::string(std::move(name));
813+
else
814+
*mImpl->mMacroName = std::move(name);
812815
}
813816

814817
template<size_t count>

lib/tokenize.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,8 @@ namespace {
781781
if (pointerType) {
782782
tok->insertToken("const");
783783
tok->next()->column(tok->column());
784-
tok->next()->setMacroName(tok->previous()->getMacroName());
784+
if (!tok->previous()->getMacroName().empty())
785+
tok->next()->setMacroName(tok->previous()->getMacroName());
785786
tok->deletePrevious();
786787
}
787788
}
@@ -7319,7 +7320,8 @@ void Tokenizer::simplifyVarDecl(Token * tokBegin, const Token * const tokEnd, co
73197320
endDecl = endDecl->next();
73207321
endDecl->next()->isSplittedVarDeclEq(true);
73217322
endDecl->insertToken(varName->str());
7322-
endDecl->next()->setMacroName(varName->getMacroName());
7323+
if (!varName->getMacroName().empty())
7324+
endDecl->next()->setMacroName(varName->getMacroName());
73237325
continue;
73247326
}
73257327
//non-VLA case

lib/tokenlist.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ void TokenList::addtoken(const Token *tok)
255255
mTokensFrontBack.back->str(tok->str());
256256
if (!tok->originalName().empty())
257257
mTokensFrontBack.back->originalName(tok->originalName());
258-
mTokensFrontBack.back->setMacroName(tok->getMacroName());
258+
if (!tok->getMacroName().empty())
259+
mTokensFrontBack.back->setMacroName(tok->getMacroName());
259260
}
260261

261262
mTokensFrontBack.back->flags(tok->flags());
@@ -332,7 +333,8 @@ void TokenList::insertTokens(Token *dest, const Token *src, nonneg int n)
332333
dest->varId(src->varId());
333334
dest->tokType(src->tokType());
334335
dest->flags(src->flags());
335-
dest->setMacroName(src->getMacroName());
336+
if (!src->getMacroName().empty())
337+
dest->setMacroName(src->getMacroName());
336338
src = src->next();
337339
--n;
338340
}
@@ -415,7 +417,8 @@ void TokenList::createTokens(simplecpp::TokenList&& tokenList)
415417
mTokensFrontBack.back->fileIndex(tok->location.fileIndex);
416418
mTokensFrontBack.back->linenr(tok->location.line);
417419
mTokensFrontBack.back->column(tok->location.col);
418-
mTokensFrontBack.back->setMacroName(tok->macro);
420+
if (!tok->macro.empty())
421+
mTokensFrontBack.back->setMacroName(tok->macro);
419422

420423
tok = tok->next;
421424
if (tok)

0 commit comments

Comments
 (0)