@@ -123,7 +123,13 @@ struct TokenImpl {
123
123
CppcheckAttributes* mCppcheckAttributes {};
124
124
125
125
// 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
+ }
127
133
128
134
// For memoization, to speed up parsing of huge arrays #8897
129
135
enum class Cpp11init { UNKNOWN, CPP11INIT, NOINIT } mCpp11init = Cpp11init::UNKNOWN;
@@ -549,23 +555,13 @@ class CPPCHECKLIB Token {
549
555
setFlag (fIsAttributeMaybeUnused , value);
550
556
}
551
557
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 ;
559
559
}
560
560
bool hasAttributeAlignas () const {
561
- return !mImpl ->mAttributeAlignas . empty () ;
561
+ return !! mImpl ->mAttributeAlignas ;
562
562
}
563
563
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);
569
565
}
570
566
void setCppcheckAttribute (TokenImpl::CppcheckAttributes::Type type, MathLib::bigint value) {
571
567
mImpl ->setCppcheckAttribute (type, value);
0 commit comments