Skip to content

Commit bbb5099

Browse files
committed
refactor
1 parent c23f1a2 commit bbb5099

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

lib/token.h

+10-14
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,13 @@ struct TokenImpl {
123123
CppcheckAttributes* mCppcheckAttributes{};
124124

125125
// alignas expressions
126-
std::string mAttributeAlignas;
126+
std::unique_ptr<std::vector<std::string>> mAttributeAlignas;
127+
void addAttributeAlignas(const std::string& a) {
128+
if (!mAttributeAlignas)
129+
mAttributeAlignas = std::unique_ptr<std::vector<std::string>>(new std::vector<std::string>());
130+
if (std::find(mAttributeAlignas->cbegin(), mAttributeAlignas->cend(), a) == mAttributeAlignas->cend())
131+
mAttributeAlignas->push_back(a);
132+
}
127133

128134
// For memoization, to speed up parsing of huge arrays #8897
129135
enum class Cpp11init { UNKNOWN, CPP11INIT, NOINIT } mCpp11init = Cpp11init::UNKNOWN;
@@ -549,23 +555,13 @@ class CPPCHECKLIB Token {
549555
setFlag(fIsAttributeMaybeUnused, value);
550556
}
551557
std::vector<std::string> getAttributeAlignas() const {
552-
if (mImpl->mAttributeAlignas.empty())
553-
return {};
554-
const std::string::size_type pos = mImpl->mAttributeAlignas.find('\n');
555-
if (pos == std::string::npos)
556-
return {mImpl->mAttributeAlignas};
557-
return {mImpl->mAttributeAlignas.substr(0, pos),
558-
mImpl->mAttributeAlignas.substr(pos + 1)};
558+
return !mImpl->mAttributeAlignas ? std::vector<std::string>() : *mImpl->mAttributeAlignas;
559559
}
560560
bool hasAttributeAlignas() const {
561-
return !mImpl->mAttributeAlignas.empty();
561+
return !!mImpl->mAttributeAlignas;
562562
}
563563
void addAttributeAlignas(const std::string& a) {
564-
if (mImpl->mAttributeAlignas.empty())
565-
mImpl->mAttributeAlignas = a;
566-
else if (a != mImpl->mAttributeAlignas && mImpl->mAttributeAlignas.find('\n') == std::string::npos)
567-
// mismatching alignas expressions, add both
568-
mImpl->mAttributeAlignas += '\n' + a;
564+
mImpl->addAttributeAlignas(a);
569565
}
570566
void setCppcheckAttribute(TokenImpl::CppcheckAttributes::Type type, MathLib::bigint value) {
571567
mImpl->setCppcheckAttribute(type, value);

0 commit comments

Comments
 (0)