Further tweak USR generation by shorting names and distinguish between namespaces and functions.
llvm-svn: 93404
This commit is contained in:
parent
6c730dea6f
commit
e1b5525510
|
@ -67,37 +67,56 @@ static inline Program &GetProgram(CXIndex CIdx) {
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
class USRGenerator : public DeclVisitor<USRGenerator> {
|
class USRGenerator : public DeclVisitor<USRGenerator> {
|
||||||
llvm::raw_ostream &Out;
|
llvm::raw_ostream &Out;
|
||||||
public:
|
public:
|
||||||
USRGenerator(llvm::raw_ostream &out) : Out(out) {}
|
USRGenerator(llvm::raw_ostream &out) : Out(out) {}
|
||||||
|
|
||||||
void VisitNamedDecl(NamedDecl *D);
|
void VisitBlockDecl(BlockDecl *D);
|
||||||
void VisitObjCContainerDecl(ObjCContainerDecl *CD);
|
void VisitDeclContext(DeclContext *D);
|
||||||
void VisitObjCMethodDecl(ObjCMethodDecl *MD);
|
void VisitFunctionDecl(FunctionDecl *D);
|
||||||
void VisitObjCPropertyDecl(ObjCPropertyDecl *D);
|
void VisitNamedDecl(NamedDecl *D);
|
||||||
void VisitRecordDecl(RecordDecl *D);
|
void VisitNamespaceDecl(NamespaceDecl *D);
|
||||||
void VisitTypedefDecl(TypedefDecl *D);
|
void VisitObjCContainerDecl(ObjCContainerDecl *CD);
|
||||||
};
|
void VisitObjCMethodDecl(ObjCMethodDecl *MD);
|
||||||
|
void VisitObjCPropertyDecl(ObjCPropertyDecl *D);
|
||||||
|
void VisitRecordDecl(RecordDecl *D);
|
||||||
|
void VisitTypedefDecl(TypedefDecl *D);
|
||||||
|
};
|
||||||
} // end anonymous namespace
|
} // 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) {
|
void USRGenerator::VisitNamedDecl(NamedDecl *D) {
|
||||||
DeclContext *DC = D->getDeclContext();
|
VisitDeclContext(D->getDeclContext());
|
||||||
if (NamedDecl *DCN = dyn_cast<NamedDecl>(DC))
|
|
||||||
Visit(DCN);
|
|
||||||
|
|
||||||
const std::string &s = D->getNameAsString();
|
const std::string &s = D->getNameAsString();
|
||||||
assert(!s.empty());
|
assert(!s.empty());
|
||||||
Out << '@' << s;
|
Out << "@^" << s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void USRGenerator::VisitNamespaceDecl(NamespaceDecl *D) {
|
||||||
|
VisitDeclContext(D->getDeclContext());
|
||||||
|
Out << "@N^" << D->getNameAsString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void USRGenerator::VisitRecordDecl(RecordDecl *D) {
|
void USRGenerator::VisitRecordDecl(RecordDecl *D) {
|
||||||
DeclContext *DC = D->getDeclContext();
|
VisitDeclContext(D->getDeclContext());
|
||||||
if (NamedDecl *DCN = dyn_cast<NamedDecl>(DC))
|
Out << "@S^";
|
||||||
Visit(DCN);
|
// FIXME: Better support for anonymous structures.
|
||||||
|
|
||||||
Out << "@struct^";
|
|
||||||
const std::string &s = D->getNameAsString();
|
const std::string &s = D->getNameAsString();
|
||||||
if (s.empty())
|
if (s.empty())
|
||||||
Out << "^anon";
|
Out << "^anon";
|
||||||
|
|
Loading…
Reference in New Issue