]> granicus.if.org Git - clang/commitdiff
Move viewInheritance to CXXRecordDecl, and make sure it builds in Release mode, too
authorDouglas Gregor <dgregor@apple.com>
Fri, 24 Oct 2008 19:53:54 +0000 (19:53 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 24 Oct 2008 19:53:54 +0000 (19:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58105 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/ASTConsumers.cpp
include/clang/AST/DeclCXX.h
include/clang/AST/Type.h
lib/AST/InheritViz.cpp

index 8c98ed4ea610b0e3fea80c9d337f42b46377225d..01014cb72a45f34ef42d9ced77dff185e0f899a8 100644 (file)
@@ -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);      
         }
       }
   }
index e9d159ee76bc2c9b24e6a7aa9614e42b09179732..89d135e3696cec00b15f9f77863d78e721dd1c1d 100644 (file)
@@ -179,6 +179,11 @@ public:
     return cast_or_null<CXXFieldDecl>(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) {
index 319447335c50192f6af8c28e1446b36ce397a848..29941aad091ee320b6ff6b231e4f65ed26ad7041 100644 (file)
@@ -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());
   }
index b4054a67ab6267a2eca5e344a1ff03aab3ee07fb..5e4dab4a5e39eb0741bce543b50003fdd96ef8d1 100644 (file)
@@ -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<CXXRecordDecl *>(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
 }
 
 }