Tokenizer: dumpfile will say if type token is _Atomic (#5189)
This commit is contained in:
parent
60321edd0d
commit
87c2b8df04
12
lib/token.h
12
lib/token.h
|
@ -661,6 +661,13 @@ public:
|
|||
setFlag(fIsInline, b);
|
||||
}
|
||||
|
||||
bool isAtomic() const {
|
||||
return getFlag(fIsAtomic);
|
||||
}
|
||||
void isAtomic(bool b) {
|
||||
setFlag(fIsAtomic, b);
|
||||
}
|
||||
|
||||
bool isRestrict() const {
|
||||
return getFlag(fIsRestrict);
|
||||
}
|
||||
|
@ -1337,8 +1344,9 @@ private:
|
|||
fIsRemovedVoidParameter = (1ULL << 36), // A void function parameter has been removed
|
||||
fIsIncompleteConstant = (1ULL << 37),
|
||||
fIsRestrict = (1ULL << 38), // Is this a restrict pointer type
|
||||
fIsSimplifiedTypedef = (1ULL << 39),
|
||||
fIsFinalType = (1ULL << 40), // Is this a type with final specifier
|
||||
fIsAtomic = (1ULL << 39), // Is this a _Atomic declaration
|
||||
fIsSimplifiedTypedef = (1ULL << 40),
|
||||
fIsFinalType = (1ULL << 41), // Is this a type with final specifier
|
||||
};
|
||||
|
||||
enum : uint64_t {
|
||||
|
|
|
@ -5852,6 +5852,8 @@ void Tokenizer::dump(std::ostream &out) const
|
|||
out << " isComplex=\"true\"";
|
||||
if (tok->isRestrict())
|
||||
out << " isRestrict=\"true\"";
|
||||
if (tok->isAtomic())
|
||||
out << " isAtomic=\"true\"";
|
||||
if (tok->isAttributeExport())
|
||||
out << " isAttributeExport=\"true\"";
|
||||
if (tok->link())
|
||||
|
@ -9046,16 +9048,31 @@ void Tokenizer::simplifyKeyword()
|
|||
tok->deleteNext();
|
||||
|
||||
if (c99) {
|
||||
if (tok->str() == "restrict") {
|
||||
for (Token *temp = tok->next(); Token::Match(temp, "%name%"); temp = temp->next()) {
|
||||
temp->isRestrict(true);
|
||||
auto getTypeTokens = [tok]() {
|
||||
std::vector<Token*> ret;
|
||||
for (Token *temp = tok; Token::Match(temp, "%name%"); temp = temp->previous()) {
|
||||
if (!temp->isKeyword())
|
||||
ret.emplace_back(temp);
|
||||
}
|
||||
for (Token *temp = tok->next(); Token::Match(temp, "%name%"); temp = temp->next()) {
|
||||
if (!temp->isKeyword())
|
||||
ret.emplace_back(temp);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
|
||||
if (tok->str() == "restrict") {
|
||||
for (Token* temp: getTypeTokens())
|
||||
temp->isRestrict(true);
|
||||
tok->deleteThis();
|
||||
}
|
||||
|
||||
if (mSettings->standards.c >= Standards::C11) {
|
||||
while (tok->str() == "_Atomic")
|
||||
while (tok->str() == "_Atomic") {
|
||||
for (Token* temp: getTypeTokens())
|
||||
temp->isAtomic(true);
|
||||
tok->deleteThis();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue