summaryrefslogtreecommitdiffstats
path: root/clang/lib/Index
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2016-02-14 06:39:11 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2016-02-14 06:39:11 +0000
commit6fdcb9c5907f4b1c6d5a554b3e063089e8f3639f (patch)
treec66af6f676f52291c6a739e89c2defb3bfd0377c /clang/lib/Index
parent469c1367f1e1b3edfd314c18a233ef6800b727d7 (diff)
downloadbcm5719-llvm-6fdcb9c5907f4b1c6d5a554b3e063089e8f3639f.tar.gz
bcm5719-llvm-6fdcb9c5907f4b1c6d5a554b3e063089e8f3639f.zip
[index] Enhance c-index-test tool and have it link and test the clangIndex library directly.
llvm-svn: 260842
Diffstat (limited to 'clang/lib/Index')
-rw-r--r--clang/lib/Index/IndexSymbol.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/clang/lib/Index/IndexSymbol.cpp b/clang/lib/Index/IndexSymbol.cpp
index c7c3c8c4d64..bf3bfd1b95b 100644
--- a/clang/lib/Index/IndexSymbol.cpp
+++ b/clang/lib/Index/IndexSymbol.cpp
@@ -185,3 +185,102 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
return Info;
}
+
+void index::applyForEachSymbolRole(SymbolRoleSet Roles,
+ llvm::function_ref<void(SymbolRole)> Fn) {
+#define APPLY_FOR_ROLE(Role) \
+ if (Roles & (unsigned)SymbolRole::Role) \
+ Fn(SymbolRole::Role)
+
+ APPLY_FOR_ROLE(Declaration);
+ APPLY_FOR_ROLE(Definition);
+ APPLY_FOR_ROLE(Reference);
+ APPLY_FOR_ROLE(Read);
+ APPLY_FOR_ROLE(Write);
+ APPLY_FOR_ROLE(Call);
+ APPLY_FOR_ROLE(Dynamic);
+ APPLY_FOR_ROLE(AddressOf);
+ APPLY_FOR_ROLE(Implicit);
+ APPLY_FOR_ROLE(RelationChildOf);
+ APPLY_FOR_ROLE(RelationBaseOf);
+ APPLY_FOR_ROLE(RelationOverrideOf);
+ APPLY_FOR_ROLE(RelationReceivedBy);
+
+#undef APPLY_FOR_ROLE
+}
+
+void index::printSymbolRoles(SymbolRoleSet Roles, raw_ostream &OS) {
+ bool VisitedOnce = false;
+ applyForEachSymbolRole(Roles, [&](SymbolRole Role) {
+ if (VisitedOnce)
+ OS << '/';
+ else
+ VisitedOnce = true;
+ switch (Role) {
+ case SymbolRole::Declaration: OS << "Decl"; break;
+ case SymbolRole::Definition: OS << "Def"; break;
+ case SymbolRole::Reference: OS << "Ref"; break;
+ case SymbolRole::Read: OS << "Read"; break;
+ case SymbolRole::Write: OS << "Writ"; break;
+ case SymbolRole::Call: OS << "Call"; break;
+ case SymbolRole::Dynamic: OS << "Dyn"; break;
+ case SymbolRole::AddressOf: OS << "Addr"; break;
+ case SymbolRole::Implicit: OS << "Impl"; break;
+ case SymbolRole::RelationChildOf: OS << "RelChild"; break;
+ case SymbolRole::RelationBaseOf: OS << "RelBase"; break;
+ case SymbolRole::RelationOverrideOf: OS << "RelOver"; break;
+ case SymbolRole::RelationReceivedBy: OS << "RelRec"; break;
+ }
+ });
+}
+
+StringRef index::getSymbolKindString(SymbolKind K) {
+ switch (K) {
+ case SymbolKind::Unknown: return "<unknown>";
+ case SymbolKind::Module: return "module";
+ case SymbolKind::Macro: return "macro";
+ case SymbolKind::Enum: return "enum";
+ case SymbolKind::Struct: return "struct";
+ case SymbolKind::Union: return "union";
+ case SymbolKind::Typedef: return "typedef";
+ case SymbolKind::Function: return "function";
+ case SymbolKind::Variable: return "variable";
+ case SymbolKind::Field: return "field";
+ case SymbolKind::EnumConstant: return "enumerator";
+ case SymbolKind::ObjCClass: return "objc-class";
+ case SymbolKind::ObjCProtocol: return "objc-protocol";
+ case SymbolKind::ObjCCategory: return "objc-category";
+ case SymbolKind::ObjCInstanceMethod: return "objc-instance-method";
+ case SymbolKind::ObjCClassMethod: return "objc-class-method";
+ case SymbolKind::ObjCProperty: return "objc-property";
+ case SymbolKind::ObjCIvar: return "objc-ivar";
+ case SymbolKind::CXXClass: return "c++-class";
+ case SymbolKind::CXXNamespace: return "namespace";
+ case SymbolKind::CXXNamespaceAlias: return "namespace-alias";
+ case SymbolKind::CXXStaticVariable: return "c++-static-var";
+ case SymbolKind::CXXStaticMethod: return "c++-static-method";
+ case SymbolKind::CXXInstanceMethod: return "c++-instance-method";
+ case SymbolKind::CXXConstructor: return "constructor";
+ case SymbolKind::CXXDestructor: return "destructor";
+ case SymbolKind::CXXConversionFunction: return "coversion-func";
+ case SymbolKind::CXXTypeAlias: return "type-alias";
+ case SymbolKind::CXXInterface: return "c++-__interface";
+ }
+}
+
+StringRef index::getTemplateKindStr(SymbolCXXTemplateKind TK) {
+ switch (TK) {
+ case SymbolCXXTemplateKind::NonTemplate: return "NT";
+ case SymbolCXXTemplateKind::Template : return "T";
+ case SymbolCXXTemplateKind::TemplatePartialSpecialization : return "TPS";
+ case SymbolCXXTemplateKind::TemplateSpecialization: return "TS";
+ }
+}
+
+StringRef index::getSymbolLanguageString(SymbolLanguage K) {
+ switch (K) {
+ case SymbolLanguage::C: return "C";
+ case SymbolLanguage::ObjC: return "ObjC";
+ case SymbolLanguage::CXX: return "C++";
+ }
+}
OpenPOWER on IntegriCloud