indexer: add name for anonymous Enum

This commit is contained in:
xVan Turing 2019-11-16 05:42:51 +08:00 committed by Fangrui Song
parent 760f5e57ff
commit 06a04d5102

View File

@ -947,11 +947,12 @@ public:
}
}
[[fallthrough]];
case Decl::Enum:
case Decl::Record:
if (auto *rd = dyn_cast<RecordDecl>(d)) {
if (auto *tag_d = dyn_cast<TagDecl>(d)) {
if (type->def.detailed_name[0] == '\0' && info->short_name.empty()) {
StringRef tag;
switch (rd->getTagKind()) {
switch (tag_d->getTagKind()) {
case TTK_Struct:
tag = "struct";
break;
@ -968,7 +969,7 @@ public:
tag = "enum";
break;
}
if (TypedefNameDecl *td = rd->getTypedefNameForAnonDecl()) {
if (TypedefNameDecl *td = tag_d->getTypedefNameForAnonDecl()) {
StringRef name = td->getName();
std::string detailed = ("anon " + tag + " " + name).str();
type->def.detailed_name = intern(detailed);
@ -979,7 +980,7 @@ public:
type->def.short_name_size = name.size();
}
}
if (is_def)
if (is_def && !isa<EnumDecl>(d))
if (auto *ord = dyn_cast<RecordDecl>(origD))
collectRecordMembers(*type, ord);
}