Clang: Distinguish between Enum and Records

Creator is distinguishing enumerations and records, so we should do too.

Change-Id: I114cfd207464abd9afd96c26c7504cf8a3a1cb8c
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Marco Bubke
2018-04-04 16:58:47 +02:00
parent bc698d4ce6
commit b0fd6c30ce
4 changed files with 27 additions and 22 deletions

View File

@@ -64,15 +64,19 @@ using SymbolKindAndTags = std::pair<SymbolKind, SymbolTags>;
class IndexingDeclVisitor : public clang::ConstDeclVisitor<IndexingDeclVisitor, SymbolKindAndTags>
{
public:
SymbolKindAndTags VisitTagDecl(const clang::TagDecl *declaration)
SymbolKindAndTags VisitEnumDecl(const clang::EnumDecl *declaration)
{
SymbolKindAndTags result = {SymbolKind::Tag, {}};
return {SymbolKind::Enumeration, {}};;
}
SymbolKindAndTags VisitRecordDecl(const clang::RecordDecl *declaration)
{
SymbolKindAndTags result = {SymbolKind::Record, {}};
switch (declaration->getTagKind()) {
case clang::TTK_Struct: result.second.push_back(SymbolTag::Struct); break;
case clang::TTK_Interface: result.second.push_back(SymbolTag::MsvcInterface); break;
case clang::TTK_Union: result.second.push_back(SymbolTag::Union); break;
case clang::TTK_Class: result.second.push_back(SymbolTag::Class); break;
case clang::TTK_Enum: result.second.push_back(SymbolTag::Enumeration); break;
case clang::TTK_Enum: break; // this case can never happen in a record but it is there to silent the warning
}
return result;

View File

@@ -41,7 +41,8 @@ using SymbolIndex = long long;
enum class SymbolKind : uchar
{
None = 0,
Tag,
Enumeration,
Record,
Function,
Variable,
Macro
@@ -50,11 +51,10 @@ enum class SymbolKind : uchar
enum class SymbolTag : uchar
{
None = 0,
Class,
Struct,
Enumeration,
Union,
MsvcInterface
Class,
Struct,
Union,
MsvcInterface
};
using SymbolTags = Utils::SizedArray<SymbolTag, 7>;