diff options
Diffstat (limited to 'gnu/llvm/tools/clang/lib/Index/IndexSymbol.cpp')
| -rw-r--r-- | gnu/llvm/tools/clang/lib/Index/IndexSymbol.cpp | 99 |
1 files changed, 58 insertions, 41 deletions
diff --git a/gnu/llvm/tools/clang/lib/Index/IndexSymbol.cpp b/gnu/llvm/tools/clang/lib/Index/IndexSymbol.cpp index 0dc3720208c..733d4dbc2f9 100644 --- a/gnu/llvm/tools/clang/lib/Index/IndexSymbol.cpp +++ b/gnu/llvm/tools/clang/lib/Index/IndexSymbol.cpp @@ -42,10 +42,10 @@ static bool isUnitTest(const ObjCMethodDecl *D) { static void checkForIBOutlets(const Decl *D, SymbolPropertySet &PropSet) { if (D->hasAttr<IBOutletAttr>()) { - PropSet |= (unsigned)SymbolProperty::IBAnnotated; + PropSet |= (SymbolPropertySet)SymbolProperty::IBAnnotated; } else if (D->hasAttr<IBOutletCollectionAttr>()) { - PropSet |= (unsigned)SymbolProperty::IBAnnotated; - PropSet |= (unsigned)SymbolProperty::IBOutletCollection; + PropSet |= (SymbolPropertySet)SymbolProperty::IBAnnotated; + PropSet |= (SymbolPropertySet)SymbolProperty::IBOutletCollection; } } @@ -93,7 +93,7 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { Info.Lang = SymbolLanguage::C; if (isFunctionLocalSymbol(D)) { - Info.Properties |= (unsigned)SymbolProperty::Local; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Local; } if (const TagDecl *TD = dyn_cast<TagDecl>(D)) { @@ -118,17 +118,19 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { if (!CXXRec->isCLike()) { Info.Lang = SymbolLanguage::CXX; if (CXXRec->getDescribedClassTemplate()) { - Info.Properties |= (unsigned)SymbolProperty::Generic; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; } } } if (isa<ClassTemplatePartialSpecializationDecl>(D)) { - Info.Properties |= (unsigned)SymbolProperty::Generic; - Info.Properties |= (unsigned)SymbolProperty::TemplatePartialSpecialization; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + Info.Properties |= + (SymbolPropertySet)SymbolProperty::TemplatePartialSpecialization; } else if (isa<ClassTemplateSpecializationDecl>(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<VarDecl>(D)) { @@ -142,15 +144,17 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { if (isa<VarTemplatePartialSpecializationDecl>(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<VarTemplateSpecializationDecl>(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 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { if (!ClsD) ClsD = cast<ObjCImplementationDecl>(D)->getClassInterface(); if (isUnitTestCase(ClsD)) - Info.Properties |= (unsigned)SymbolProperty::UnitTest; + Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest; break; } case Decl::ObjCProtocol: @@ -198,35 +202,32 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { else ClsD = cast<ObjCCategoryImplDecl>(D)->getClassInterface(); if (isUnitTestCase(ClsD)) - Info.Properties |= (unsigned)SymbolProperty::UnitTest; + Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest; break; } - case Decl::ObjCMethod: - if (cast<ObjCMethodDecl>(D)->isInstanceMethod()) { - const ObjCMethodDecl *MD = cast<ObjCMethodDecl>(D); - Info.Kind = SymbolKind::InstanceMethod; - if (MD->isPropertyAccessor()) { - if (MD->param_size()) - Info.SubKind = SymbolSubKind::AccessorSetter; - else - Info.SubKind = SymbolSubKind::AccessorGetter; - } - } else { - Info.Kind = SymbolKind::ClassMethod; + case Decl::ObjCMethod: { + const ObjCMethodDecl *MD = cast<ObjCMethodDecl>(D); + Info.Kind = MD->isInstanceMethod() ? SymbolKind::InstanceMethod : SymbolKind::ClassMethod; + if (MD->isPropertyAccessor()) { + if (MD->param_size()) + Info.SubKind = SymbolSubKind::AccessorSetter; + else + Info.SubKind = SymbolSubKind::AccessorGetter; } Info.Lang = SymbolLanguage::ObjC; - if (isUnitTest(cast<ObjCMethodDecl>(D))) - Info.Properties |= (unsigned)SymbolProperty::UnitTest; + if (isUnitTest(MD)) + Info.Properties |= (SymbolPropertySet)SymbolProperty::UnitTest; if (D->hasAttr<IBActionAttr>()) - Info.Properties |= (unsigned)SymbolProperty::IBAnnotated; + Info.Properties |= (SymbolPropertySet)SymbolProperty::IBAnnotated; break; + } case Decl::ObjCProperty: Info.Kind = SymbolKind::InstanceProperty; Info.Lang = SymbolLanguage::ObjC; checkForIBOutlets(D, Info.Properties); if (auto *Annot = D->getAttr<AnnotateAttr>()) { if (Annot->getAnnotation() == "gk_inspectable") - Info.Properties |= (unsigned)SymbolProperty::GKInspectable; + Info.Properties |= (SymbolPropertySet)SymbolProperty::GKInspectable; } break; case Decl::ObjCIvar: @@ -271,12 +272,12 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { } 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<CXXMethodDecl>( cast<FunctionTemplateDecl>(D)->getTemplatedDecl())) { @@ -297,12 +298,24 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { 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; Info.Lang = SymbolLanguage::CXX; break; + case Decl::UnresolvedUsingTypename: + Info.Kind = SymbolKind::Using; + Info.SubKind = SymbolSubKind::UsingTypename; + Info.Lang = SymbolLanguage::CXX; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + break; + case Decl::UnresolvedUsingValue: + Info.Kind = SymbolKind::Using; + Info.SubKind = SymbolSubKind::UsingValue; + Info.Lang = SymbolLanguage::CXX; + Info.Properties |= (SymbolPropertySet)SymbolProperty::Generic; + break; case Decl::Binding: Info.Kind = SymbolKind::Variable; Info.Lang = SymbolLanguage::CXX; @@ -318,12 +331,13 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(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()) { @@ -451,6 +465,7 @@ StringRef index::getSymbolKindString(SymbolKind K) { case SymbolKind::Destructor: return "destructor"; case SymbolKind::ConversionFunction: return "coversion-func"; case SymbolKind::Parameter: return "param"; + case SymbolKind::Using: return "using"; } llvm_unreachable("invalid symbol kind"); } @@ -462,6 +477,8 @@ StringRef index::getSymbolSubKindString(SymbolSubKind K) { case SymbolSubKind::CXXMoveConstructor: return "cxx-move-ctor"; case SymbolSubKind::AccessorGetter: return "acc-get"; case SymbolSubKind::AccessorSetter: return "acc-set"; + case SymbolSubKind::UsingTypename: return "using-typename"; + case SymbolSubKind::UsingValue: return "using-value"; } llvm_unreachable("invalid symbol subkind"); } @@ -478,9 +495,9 @@ StringRef index::getSymbolLanguageString(SymbolLanguage K) { void index::applyForEachSymbolProperty(SymbolPropertySet Props, llvm::function_ref<void(SymbolProperty)> 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); |
