Skip to content
Snippets Groups Projects
Commit 3dfef1f2 authored by Douglas Gregor's avatar Douglas Gregor
Browse files

Move viewInheritance to CXXRecordDecl, and make sure it builds in Release mode, too

llvm-svn: 58105
parent 33986d8f
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
}
}
......
......@@ -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) {
......
......@@ -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());
}
......
......@@ -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
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment