From: Douglas Gregor Date: Fri, 24 Oct 2008 19:53:54 +0000 (+0000) Subject: Move viewInheritance to CXXRecordDecl, and make sure it builds in Release mode, too X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f81230ac57b9bda8bba9c8221652842ca786132;p=clang Move viewInheritance to CXXRecordDecl, and make sure it builds in Release mode, too git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58105 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp index 8c98ed4ea6..01014cb72a 100644 --- a/Driver/ASTConsumers.cpp +++ b/Driver/ASTConsumers.cpp @@ -551,8 +551,7 @@ public: // FIXME: This lookup needs to be generalized to handle namespaces and // (when we support them) templates. if (D->getName() == clsname) { - QualType QT(T, 0); - QT.viewInheritance(C); + D->viewInheritance(C); } } } diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index e9d159ee76..89d135e369 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -179,6 +179,11 @@ public: return cast_or_null(RecordDecl::getMember(name)); } + /// viewInheritance - Renders and displays an inheritance diagram + /// for this C++ class and all of its base classes (transitively) using + /// GraphViz. + void viewInheritance(ASTContext& Context) const; + static bool classof(const Decl *D) { return D->getKind() == CXXRecord; } static bool classof(const CXXRecordDecl *D) { return true; } static DeclContext *castToDeclContext(const CXXRecordDecl *D) { diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 319447335c..29941aad09 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -182,11 +182,6 @@ public: void dump(const char *s) const; void dump() const; - /// viewInheritance - Renders and displays an inheritance diagram - /// for a C++ class and all of its base classes (transitively) using - /// GraphViz. Only available in debug builds. - void viewInheritance(ASTContext& Context); - void Profile(llvm::FoldingSetNodeID &ID) const { ID.AddPointer(getAsOpaquePtr()); } diff --git a/lib/AST/InheritViz.cpp b/lib/AST/InheritViz.cpp index b4054a67ab..5e4dab4a5e 100644 --- a/lib/AST/InheritViz.cpp +++ b/lib/AST/InheritViz.cpp @@ -25,7 +25,6 @@ using namespace llvm; namespace clang { -#ifndef NDEBUG /// InheritanceHierarchyWriter - Helper class that writes out a /// GraphViz file that diagrams the inheritance hierarchy starting at /// a given C++ class type. Note that we do not use LLVM's @@ -131,23 +130,18 @@ InheritanceHierarchyWriter::WriteNodeReference(QualType Type, Out << "_" << DirectBaseCount[CanonType]; return Out; } -#endif /// viewInheritance - Display the inheritance hierarchy of this C++ /// class using GraphViz. -void QualType::viewInheritance(ASTContext& Context) { - if (!(*this)->getAsRecordType()) { - llvm::errs() << "Type " << getAsString() << " is not a C++ class type.\n"; - return; - } -#ifndef NDEBUG +void CXXRecordDecl::viewInheritance(ASTContext& Context) const { + QualType Self = Context.getTypeDeclType(const_cast(this)); std::string ErrMsg; sys::Path Filename = sys::Path::GetTemporaryDirectory(&ErrMsg); if (Filename.isEmpty()) { llvm::errs() << "Error: " << ErrMsg << "\n"; return; } - Filename.appendComponent(getAsString() + ".dot"); + Filename.appendComponent(Self.getAsString() + ".dot"); if (Filename.makeUnique(true,&ErrMsg)) { llvm::errs() << "Error: " << ErrMsg << "\n"; return; @@ -159,7 +153,7 @@ void QualType::viewInheritance(ASTContext& Context) { if (ErrMsg.empty()) { InheritanceHierarchyWriter Writer(Context, O); - Writer.WriteGraph(*this); + Writer.WriteGraph(Self); llvm::errs() << " done. \n"; O.close(); @@ -169,10 +163,6 @@ void QualType::viewInheritance(ASTContext& Context) { } else { llvm::errs() << "error opening file for writing!\n"; } -#else - llvm::errs() << "QualType::viewInheritance is only available in debug " - << "builds on systems with Graphviz or gv!\n"; -#endif } }