forked from OSchip/llvm-project
Move viewInheritance to CXXRecordDecl, and make sure it builds in Release mode, too
llvm-svn: 58105
This commit is contained in:
parent
33986d8f17
commit
3dfef1f2a3
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue