Index: cfe/trunk/include/clang/Index/IndexSymbol.h =================================================================== --- cfe/trunk/include/clang/Index/IndexSymbol.h +++ cfe/trunk/include/clang/Index/IndexSymbol.h @@ -56,7 +56,7 @@ Using, }; -enum class SymbolLanguage { +enum class SymbolLanguage : uint8_t { C, ObjC, CXX, @@ -64,7 +64,7 @@ }; /// Language specific sub-kinds. -enum class SymbolSubKind { +enum class SymbolSubKind : uint8_t { None, CXXCopyConstructor, CXXMoveConstructor, @@ -74,8 +74,9 @@ UsingValue, }; +typedef uint8_t SymbolPropertySet; /// Set of properties that provide additional info about a symbol. -enum class SymbolProperty : uint8_t { +enum class SymbolProperty : SymbolPropertySet { Generic = 1 << 0, TemplatePartialSpecialization = 1 << 1, TemplateSpecialization = 1 << 2, @@ -86,7 +87,6 @@ Local = 1 << 7, }; static const unsigned SymbolPropertyBitNum = 8; -typedef unsigned SymbolPropertySet; /// Set of roles that are attributed to symbol occurrences. enum class SymbolRole : uint32_t { @@ -127,8 +127,8 @@ struct SymbolInfo { SymbolKind Kind; SymbolSubKind SubKind; - SymbolPropertySet Properties; SymbolLanguage Lang; + SymbolPropertySet Properties; }; SymbolInfo getSymbolInfo(const Decl *D); Index: cfe/trunk/lib/Index/IndexSymbol.cpp =================================================================== --- cfe/trunk/lib/Index/IndexSymbol.cpp +++ cfe/trunk/lib/Index/IndexSymbol.cpp @@ -42,10 +42,10 @@ static void checkForIBOutlets(const Decl *D, SymbolPropertySet &PropSet) { if (D->hasAttr()) { - PropSet |= (unsigned)SymbolProperty::IBAnnotated; + PropSet |= (SymbolPropertySet)SymbolProperty::IBAnnotated; } else if (D->hasAttr()) { - PropSet |= (unsigned)SymbolProperty::IBAnnotated; - PropSet |= (unsigned)SymbolProperty::IBOutletCollection; + PropSet |= (SymbolPropertySet)SymbolProperty::IBAnnotated; + PropSet |= (SymbolPropertySet)SymbolProperty::IBOutletCollection; } } @@ -93,7 +93,7 @@ Info.Lang = SymbolLanguage::C; if (isFunctionLocalSymbol(D)) { - Info.Properties |= (unsigned)SymbolProperty::Local; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Local; } if (const TagDecl *TD = dyn_cast(D)) { @@ -118,17 +118,19 @@ if (!CXXRec->isCLike()) { Info.Lang = SymbolLanguage::CXX; if (CXXRec->getDescribedClassTemplate()) { - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; } } } if (isa(D)) { - Info.Properties |= (unsigned)SymbolProperty::Generic; - Info.Properties |= (unsigned)SymbolProperty::TemplatePartialSpecialization; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + Info.Properties |= + (SymbolPropertySet)SymbolProperty::TemplatePartialSpecialization; } else if (isa(D)) { - Info.Properties |= (unsigned)SymbolProperty::Generic; - Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + Info.Properties |= + (SymbolPropertySet)SymbolProperty::TemplateSpecialization; } } else if (auto *VD = dyn_cast(D)) { @@ -142,15 +144,17 @@ if (isa(D)) { Info.Lang = SymbolLanguage::CXX; - Info.Properties |= (unsigned)SymbolProperty::Generic; - Info.Properties |= (unsigned)SymbolProperty::TemplatePartialSpecialization; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + Info.Properties |= + (SymbolPropertySet)SymbolProperty::TemplatePartialSpecialization; } else if (isa(D)) { Info.Lang = SymbolLanguage::CXX; - Info.Properties |= (unsigned)SymbolProperty::Generic; - Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + Info.Properties |= + (SymbolPropertySet)SymbolProperty::TemplateSpecialization; } else if (VD->getDescribedVarTemplate()) { Info.Lang = SymbolLanguage::CXX; - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; } } else { @@ -181,7 +185,7 @@ if (!ClsD) ClsD = cast(D)->getClassInterface(); if (isUnitTestCase(ClsD)) - Info.Properties |= (unsigned)SymbolProperty::UnitTest; + Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest; break; } case Decl::ObjCProtocol: @@ -198,7 +202,7 @@ else ClsD = cast(D)->getClassInterface(); if (isUnitTestCase(ClsD)) - Info.Properties |= (unsigned)SymbolProperty::UnitTest; + Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest; break; } case Decl::ObjCMethod: { @@ -212,9 +216,9 @@ } Info.Lang = SymbolLanguage::ObjC; if (isUnitTest(MD)) - Info.Properties |= (unsigned)SymbolProperty::UnitTest; + Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest; if (D->hasAttr()) - Info.Properties |= (unsigned)SymbolProperty::IBAnnotated; + Info.Properties |= (SymbolPropertySet)SymbolProperty::IBAnnotated; break; } case Decl::ObjCProperty: @@ -223,7 +227,7 @@ checkForIBOutlets(D, Info.Properties); if (auto *Annot = D->getAttr()) { if (Annot->getAnnotation() == "gk_inspectable") - Info.Properties |= (unsigned)SymbolProperty::GKInspectable; + Info.Properties |= (SymbolPropertySet)SymbolProperty::GKInspectable; } break; case Decl::ObjCIvar: @@ -268,12 +272,12 @@ } case Decl::ClassTemplate: Info.Kind = SymbolKind::Class; - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; Info.Lang = SymbolLanguage::CXX; break; case Decl::FunctionTemplate: Info.Kind = SymbolKind::Function; - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; Info.Lang = SymbolLanguage::CXX; if (const CXXMethodDecl *MD = dyn_cast_or_null( cast(D)->getTemplatedDecl())) { @@ -294,7 +298,7 @@ case Decl::TypeAliasTemplate: Info.Kind = SymbolKind::TypeAlias; Info.Lang = SymbolLanguage::CXX; - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; break; case Decl::TypeAlias: Info.Kind = SymbolKind::TypeAlias; @@ -304,13 +308,13 @@ Info.Kind = SymbolKind::Using; Info.SubKind = SymbolSubKind::UsingTypename; Info.Lang = SymbolLanguage::CXX; - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; break; case Decl::UnresolvedUsingValue: Info.Kind = SymbolKind::Using; Info.SubKind = SymbolSubKind::UsingValue; Info.Lang = SymbolLanguage::CXX; - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; break; case Decl::Binding: Info.Kind = SymbolKind::Variable; @@ -327,12 +331,13 @@ if (const FunctionDecl *FD = dyn_cast(D)) { if (FD->getTemplatedKind() == FunctionDecl::TK_FunctionTemplateSpecialization) { - Info.Properties |= (unsigned)SymbolProperty::Generic; - Info.Properties |= (unsigned)SymbolProperty::TemplateSpecialization; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + Info.Properties |= + (SymbolPropertySet)SymbolProperty::TemplateSpecialization; } } - if (Info.Properties & (unsigned)SymbolProperty::Generic) + if (Info.Properties & (SymbolPropertySet)SymbolProperty::Generic) Info.Lang = SymbolLanguage::CXX; if (auto *attr = D->getExternalSourceSymbolAttr()) { @@ -490,9 +495,9 @@ void index::applyForEachSymbolProperty(SymbolPropertySet Props, llvm::function_ref Fn) { -#define APPLY_FOR_PROPERTY(K) \ - if (Props & (unsigned)SymbolProperty::K) \ - Fn(SymbolProperty::K) +#define APPLY_FOR_PROPERTY(K) \ + if (Props & (SymbolPropertySet)SymbolProperty::K) \ + Fn(SymbolProperty::K) APPLY_FOR_PROPERTY(Generic); APPLY_FOR_PROPERTY(TemplatePartialSpecialization); Index: cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp =================================================================== --- cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp +++ cfe/trunk/tools/libclang/CXIndexDataConsumer.cpp @@ -1304,11 +1304,11 @@ static CXIdxEntityCXXTemplateKind getEntityKindFromSymbolProperties(SymbolPropertySet K) { - if (K & (unsigned)SymbolProperty::TemplatePartialSpecialization) + if (K & (SymbolPropertySet)SymbolProperty::TemplatePartialSpecialization) return CXIdxEntity_TemplatePartialSpecialization; - if (K & (unsigned)SymbolProperty::TemplateSpecialization) + if (K & (SymbolPropertySet)SymbolProperty::TemplateSpecialization) return CXIdxEntity_TemplateSpecialization; - if (K & (unsigned)SymbolProperty::Generic) + if (K & (SymbolPropertySet)SymbolProperty::Generic) return CXIdxEntity_Template; return CXIdxEntity_NonTemplate; }