From: Ted Kremenek Date: Mon, 18 Jan 2010 22:42:20 +0000 (+0000) Subject: Refactor USR generation for TagDecls into a common method. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b82b3beda01cab3a7466dafc9cf85033364da702;p=clang Refactor USR generation for TagDecls into a common method. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93799 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/CIndex/CIndexUSRs.cpp b/tools/CIndex/CIndexUSRs.cpp index bd88ab44b8..bb74fe9321 100644 --- a/tools/CIndex/CIndexUSRs.cpp +++ b/tools/CIndex/CIndexUSRs.cpp @@ -78,7 +78,6 @@ public: void VisitBlockDecl(BlockDecl *D); void VisitDeclContext(DeclContext *D); - void VisitEnumDecl(EnumDecl *D); void VisitFieldDecl(FieldDecl *D); void VisitFunctionDecl(FunctionDecl *D); void VisitNamedDecl(NamedDecl *D); @@ -86,8 +85,7 @@ public: void VisitObjCContainerDecl(ObjCContainerDecl *CD); void VisitObjCMethodDecl(ObjCMethodDecl *MD); void VisitObjCPropertyDecl(ObjCPropertyDecl *D); - void VisitRecordDecl(RecordDecl *D); - void VisitTagDeclCommon(TagDecl *D); + void VisitTagDecl(TagDecl *D); void VisitTypedefDecl(TypedefDecl *D); }; } // end anonymous namespace @@ -103,12 +101,6 @@ void USRGenerator::VisitDeclContext(DeclContext *DC) { Visit(D); } -void USRGenerator::VisitEnumDecl(EnumDecl *D) { - VisitDeclContext(D->getDeclContext()); - Out << "@E^"; - VisitTagDeclCommon(D); -} - void USRGenerator::VisitFieldDecl(FieldDecl *D) { const std::string &s = D->getNameAsString(); if (s.empty()) { @@ -137,12 +129,6 @@ void USRGenerator::VisitNamespaceDecl(NamespaceDecl *D) { Out << "@N^" << D->getNameAsString(); } -void USRGenerator::VisitRecordDecl(RecordDecl *D) { - VisitDeclContext(D->getDeclContext()); - Out << "@S^"; - VisitTagDeclCommon(D); -} - void USRGenerator::VisitObjCMethodDecl(ObjCMethodDecl *D) { Visit(cast(D->getDeclContext())); Out << (D->isInstanceMethod() ? "(im)" : "(cm)"); @@ -180,7 +166,15 @@ void USRGenerator::VisitObjCPropertyDecl(ObjCPropertyDecl *D) { Out << "(py)" << D->getName(); } -void USRGenerator::VisitTagDeclCommon(TagDecl *D) { +void USRGenerator::VisitTagDecl(TagDecl *D) { + VisitDeclContext(D->getDeclContext()); + switch (D->getTagKind()) { + case TagDecl::TK_struct: Out << "@S^"; break; + case TagDecl::TK_class: Out << "@C^"; break; + case TagDecl::TK_union: Out << "@U^"; break; + case TagDecl::TK_enum: Out << "@E^"; break; + } + // FIXME: Better support for anonymous structures and enums. const std::string &s = D->getNameAsString(); if (s.empty()) {