296 changes: 98 additions & 198 deletions clang/lib/AST/DeclarationName.cpp

Large diffs are not rendered by default.

29 changes: 14 additions & 15 deletions clang/lib/Basic/IdentifierTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -382,50 +382,49 @@ unsigned llvm::DenseMapInfo<clang::Selector>::getHashValue(clang::Selector S) {

namespace clang {

/// MultiKeywordSelector - One of these variable length records is kept for each
/// One of these variable length records is kept for each
/// selector containing more than one keyword. We use a folding set
/// to unique aggregate names (keyword selectors in ObjC parlance). Access to
/// this class is provided strictly through Selector.
class MultiKeywordSelector
: public DeclarationNameExtra, public llvm::FoldingSetNode {
MultiKeywordSelector(unsigned nKeys) {
ExtraKindOrNumArgs = NUM_EXTRA_KINDS + nKeys;
}
class alignas(IdentifierInfoAlignment) MultiKeywordSelector
: public detail::DeclarationNameExtra,
public llvm::FoldingSetNode {
MultiKeywordSelector(unsigned nKeys) : DeclarationNameExtra(nKeys) {}

public:
// Constructor for keyword selectors.
MultiKeywordSelector(unsigned nKeys, IdentifierInfo **IIV) {
MultiKeywordSelector(unsigned nKeys, IdentifierInfo **IIV)
: DeclarationNameExtra(nKeys) {
assert((nKeys > 1) && "not a multi-keyword selector");
ExtraKindOrNumArgs = NUM_EXTRA_KINDS + nKeys;

// Fill in the trailing keyword array.
IdentifierInfo **KeyInfo = reinterpret_cast<IdentifierInfo **>(this+1);
IdentifierInfo **KeyInfo = reinterpret_cast<IdentifierInfo **>(this + 1);
for (unsigned i = 0; i != nKeys; ++i)
KeyInfo[i] = IIV[i];
}

// getName - Derive the full selector name and return it.
std::string getName() const;

unsigned getNumArgs() const { return ExtraKindOrNumArgs - NUM_EXTRA_KINDS; }
using DeclarationNameExtra::getNumArgs;

using keyword_iterator = IdentifierInfo *const *;

keyword_iterator keyword_begin() const {
return reinterpret_cast<keyword_iterator>(this+1);
return reinterpret_cast<keyword_iterator>(this + 1);
}

keyword_iterator keyword_end() const {
return keyword_begin()+getNumArgs();
return keyword_begin() + getNumArgs();
}

IdentifierInfo *getIdentifierInfoForSlot(unsigned i) const {
assert(i < getNumArgs() && "getIdentifierInfoForSlot(): illegal index");
return keyword_begin()[i];
}

static void Profile(llvm::FoldingSetNodeID &ID,
keyword_iterator ArgTys, unsigned NumArgs) {
static void Profile(llvm::FoldingSetNodeID &ID, keyword_iterator ArgTys,
unsigned NumArgs) {
ID.AddInteger(NumArgs);
for (unsigned i = 0; i != NumArgs; ++i)
ID.AddPointer(ArgTys[i]);
Expand Down Expand Up @@ -462,7 +461,7 @@ IdentifierInfo *Selector::getIdentifierInfoForSlot(unsigned argIndex) const {

StringRef Selector::getNameForSlot(unsigned int argIndex) const {
IdentifierInfo *II = getIdentifierInfoForSlot(argIndex);
return II? II->getName() : StringRef();
return II ? II->getName() : StringRef();
}

std::string MultiKeywordSelector::getName() const {
Expand Down
14 changes: 7 additions & 7 deletions clang/lib/Sema/IdentifierResolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ void IdentifierResolver::AddDecl(NamedDecl *D) {
if (IdentifierInfo *II = Name.getAsIdentifierInfo())
updatingIdentifier(*II);

void *Ptr = Name.getFETokenInfo<void>();
void *Ptr = Name.getFETokenInfo();

if (!Ptr) {
Name.setFETokenInfo(D);
Expand All @@ -172,7 +172,7 @@ void IdentifierResolver::InsertDeclAfter(iterator Pos, NamedDecl *D) {
if (IdentifierInfo *II = Name.getAsIdentifierInfo())
updatingIdentifier(*II);

void *Ptr = Name.getFETokenInfo<void>();
void *Ptr = Name.getFETokenInfo();

if (!Ptr) {
AddDecl(D);
Expand Down Expand Up @@ -213,7 +213,7 @@ void IdentifierResolver::RemoveDecl(NamedDecl *D) {
if (IdentifierInfo *II = Name.getAsIdentifierInfo())
updatingIdentifier(*II);

void *Ptr = Name.getFETokenInfo<void>();
void *Ptr = Name.getFETokenInfo();

assert(Ptr && "Didn't find this decl on its identifier's chain!");

Expand All @@ -232,7 +232,7 @@ IdentifierResolver::begin(DeclarationName Name) {
if (IdentifierInfo *II = Name.getAsIdentifierInfo())
readingIdentifier(*II);

void *Ptr = Name.getFETokenInfo<void>();
void *Ptr = Name.getFETokenInfo();
if (!Ptr) return end();

if (isDeclPtr(Ptr))
Expand Down Expand Up @@ -304,7 +304,7 @@ bool IdentifierResolver::tryAddTopLevelDecl(NamedDecl *D, DeclarationName Name){
if (IdentifierInfo *II = Name.getAsIdentifierInfo())
readingIdentifier(*II);

void *Ptr = Name.getFETokenInfo<void>();
void *Ptr = Name.getFETokenInfo();

if (!Ptr) {
Name.setFETokenInfo(D);
Expand Down Expand Up @@ -397,7 +397,7 @@ void IdentifierResolver::updatingIdentifier(IdentifierInfo &II) {
/// It creates a new IdDeclInfo if one was not created before for this id.
IdentifierResolver::IdDeclInfo &
IdentifierResolver::IdDeclInfoMap::operator[](DeclarationName Name) {
void *Ptr = Name.getFETokenInfo<void>();
void *Ptr = Name.getFETokenInfo();

if (Ptr) return *toIdDeclInfo(Ptr);

Expand All @@ -415,7 +415,7 @@ IdentifierResolver::IdDeclInfoMap::operator[](DeclarationName Name) {

void IdentifierResolver::iterator::incrementSlowCase() {
NamedDecl *D = **this;
void *InfoPtr = D->getDeclName().getFETokenInfo<void>();
void *InfoPtr = D->getDeclName().getFETokenInfo();
assert(!isDeclPtr(InfoPtr) && "Decl with wrong id ?");
IdDeclInfo *Info = toIdDeclInfo(InfoPtr);

Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Serialization/ASTReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -908,7 +908,7 @@ static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
(IsModule ? II.hasRevertedBuiltin() : II.getObjCOrBuiltinID()) ||
II.hasRevertedTokenIDToIdentifier() ||
(!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
II.getFETokenInfo<void>());
II.getFETokenInfo());
}

static bool readBit(unsigned &Bits) {
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Serialization/ASTWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3574,7 +3574,7 @@ class ASTIdentifierTableTrait {
II->isPoisoned() ||
(IsModule ? II->hasRevertedBuiltin() : II->getObjCOrBuiltinID()) ||
II->hasRevertedTokenIDToIdentifier() ||
(NeedDecls && II->getFETokenInfo<void>()))
(NeedDecls && II->getFETokenInfo()))
return true;

return false;
Expand Down