aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-01-14 01:50:21 +0000
committerTed Kremenek <kremenek@apple.com>2010-01-14 01:50:21 +0000
commit2fee4e6446e3f8b949bd63601739389ff3632dbb (patch)
treeab53e86ac96c82b2599c0c64e2196a10ece6afb1
parent7e37a6981b8d8c7dc4caee4d05487978ff2cd770 (diff)
Further tweak USR generation by shorting names and distinguish between namespaces and functions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93404 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--tools/CIndex/CIndexUSRs.cpp63
1 files changed, 41 insertions, 22 deletions
diff --git a/tools/CIndex/CIndexUSRs.cpp b/tools/CIndex/CIndexUSRs.cpp
index b1170eb962..549c65058d 100644
--- a/tools/CIndex/CIndexUSRs.cpp
+++ b/tools/CIndex/CIndexUSRs.cpp
@@ -67,37 +67,56 @@ static inline Program &GetProgram(CXIndex CIdx) {
//===----------------------------------------------------------------------===//
namespace {
- class USRGenerator : public DeclVisitor<USRGenerator> {
- llvm::raw_ostream &Out;
- public:
- USRGenerator(llvm::raw_ostream &out) : Out(out) {}
-
- void VisitNamedDecl(NamedDecl *D);
- void VisitObjCContainerDecl(ObjCContainerDecl *CD);
- void VisitObjCMethodDecl(ObjCMethodDecl *MD);
- void VisitObjCPropertyDecl(ObjCPropertyDecl *D);
- void VisitRecordDecl(RecordDecl *D);
- void VisitTypedefDecl(TypedefDecl *D);
- };
+class USRGenerator : public DeclVisitor<USRGenerator> {
+ llvm::raw_ostream &Out;
+public:
+ USRGenerator(llvm::raw_ostream &out) : Out(out) {}
+
+ void VisitBlockDecl(BlockDecl *D);
+ void VisitDeclContext(DeclContext *D);
+ void VisitFunctionDecl(FunctionDecl *D);
+ void VisitNamedDecl(NamedDecl *D);
+ void VisitNamespaceDecl(NamespaceDecl *D);
+ void VisitObjCContainerDecl(ObjCContainerDecl *CD);
+ void VisitObjCMethodDecl(ObjCMethodDecl *MD);
+ void VisitObjCPropertyDecl(ObjCPropertyDecl *D);
+ void VisitRecordDecl(RecordDecl *D);
+ void VisitTypedefDecl(TypedefDecl *D);
+};
} // end anonymous namespace
+void USRGenerator::VisitBlockDecl(BlockDecl *D) {
+ VisitDeclContext(D->getDeclContext());
+ // FIXME: Better support for anonymous blocks.
+ Out << "@B^anon";
+}
+
+void USRGenerator::VisitDeclContext(DeclContext *DC) {
+ if (NamedDecl *D = dyn_cast<NamedDecl>(DC))
+ Visit(D);
+}
+
+void USRGenerator::VisitFunctionDecl(FunctionDecl *D) {
+ VisitDeclContext(D->getDeclContext());
+ Out << "@F^" << D->getNameAsString();
+}
void USRGenerator::VisitNamedDecl(NamedDecl *D) {
- DeclContext *DC = D->getDeclContext();
- if (NamedDecl *DCN = dyn_cast<NamedDecl>(DC))
- Visit(DCN);
-
+ VisitDeclContext(D->getDeclContext());
const std::string &s = D->getNameAsString();
assert(!s.empty());
- Out << '@' << s;
+ Out << "@^" << s;
+}
+
+void USRGenerator::VisitNamespaceDecl(NamespaceDecl *D) {
+ VisitDeclContext(D->getDeclContext());
+ Out << "@N^" << D->getNameAsString();
}
void USRGenerator::VisitRecordDecl(RecordDecl *D) {
- DeclContext *DC = D->getDeclContext();
- if (NamedDecl *DCN = dyn_cast<NamedDecl>(DC))
- Visit(DCN);
-
- Out << "@struct^";
+ VisitDeclContext(D->getDeclContext());
+ Out << "@S^";
+ // FIXME: Better support for anonymous structures.
const std::string &s = D->getNameAsString();
if (s.empty())
Out << "^anon";