]> granicus.if.org Git - clang/commitdiff
Further tweaking of USR generation. WIP.
authorTed Kremenek <kremenek@apple.com>
Tue, 12 Jan 2010 19:35:53 +0000 (19:35 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 12 Jan 2010 19:35:53 +0000 (19:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93250 91177308-0d34-0410-b5e6-96231b3b80d8

tools/CIndex/CIndexUSRs.cpp

index 5766b21d86747984ba08adac2de4f32abb839520..70006bcf3a02c1fd580fa0c6fe10e31c68a58ba1 100644 (file)
@@ -87,15 +87,29 @@ class USRGenerator : public DeclVisitor<USRGenerator> {
 public:
   USRGenerator(llvm::raw_ostream &out) : Out(out) {}
 
+  void VisitNamedDecl(NamedDecl *D);
   void VisitObjCContainerDecl(ObjCContainerDecl *CD);  
   void VisitObjCMethodDecl(ObjCMethodDecl *MD);
   void VisitObjCPropertyDecl(ObjCPropertyDecl *D);
 };
 } // end anonymous namespace
 
+
+void USRGenerator::VisitNamedDecl(NamedDecl *D) {
+  DeclContext *DC = D->getDeclContext();
+  if (NamedDecl *DCN = dyn_cast<NamedDecl>(DC)) {
+    Visit(DCN);
+    Out << '_';
+  }
+  else {
+    Out << '_';
+  }
+  Out << D->getName();
+}
+  
 void USRGenerator::VisitObjCMethodDecl(ObjCMethodDecl *D) {
   Visit(cast<Decl>(D->getDeclContext()));
-  Out << (D->isInstanceMethod() ? "_IM_" : "_CM_");
+  Out << (D->isInstanceMethod() ? "(im)" : "(cm)");
   Out << DeclarationName(D->getSelector());
 }
   
@@ -105,29 +119,29 @@ void USRGenerator::VisitObjCContainerDecl(ObjCContainerDecl *D) {
       assert(false && "Invalid ObjC container.");
     case Decl::ObjCInterface:
     case Decl::ObjCImplementation:
-      Out << "objc_class_" << D->getName();
+      Out << "objc(cs)" << D->getName();
       break;
     case Decl::ObjCCategory: {
       ObjCCategoryDecl *CD = cast<ObjCCategoryDecl>(D);
-      Out << "objc_cat_" << CD->getClassInterface()->getName()
+      Out << "objc(cy)" << CD->getClassInterface()->getName()
           << '_' << CD->getName();
       break;
     }
     case Decl::ObjCCategoryImpl: {
       ObjCCategoryImplDecl *CD = cast<ObjCCategoryImplDecl>(D);
-      Out << "objc_cat_" << CD->getClassInterface()->getName()
+      Out << "objc(cy)" << CD->getClassInterface()->getName()
           << '_' << CD->getName();
       break;
     }
     case Decl::ObjCProtocol:
-      Out << "objc_prot_" << cast<ObjCProtocolDecl>(D)->getName();
+      Out << "objc(pl)" << cast<ObjCProtocolDecl>(D)->getName();
       break;
   }
 }
   
 void USRGenerator::VisitObjCPropertyDecl(ObjCPropertyDecl *D) {
   Visit(cast<Decl>(D->getDeclContext()));
-  Out << "_prop_" << D->getName();
+  Out << "(py)" << D->getName();
 }
   
 // FIXME: This is a skeleton implementation.  It will be overhauled.