@@ -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