summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/DeclPrinter.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-07-21 22:36:06 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-07-21 22:36:06 +0000
commitaee31ac31696b9c956987e655dc06adb34f992df (patch)
tree8a1579aea3b3c59c2031592510cd0b035caa43f1 /clang/lib/AST/DeclPrinter.cpp
parent83e6f9370d118ab2fb08142a2b0b1f367d6c774f (diff)
downloadbcm5719-llvm-aee31ac31696b9c956987e655dc06adb34f992df.tar.gz
bcm5719-llvm-aee31ac31696b9c956987e655dc06adb34f992df.zip
Patch to accomodate Doug's comment on default
destruction of base/members for each destructor AST. llvm-svn: 76663
Diffstat (limited to 'clang/lib/AST/DeclPrinter.cpp')
-rw-r--r--clang/lib/AST/DeclPrinter.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp
index 84ae72977e6..fcc623ec787 100644
--- a/clang/lib/AST/DeclPrinter.cpp
+++ b/clang/lib/AST/DeclPrinter.cpp
@@ -376,25 +376,25 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
}
else if (CXXDestructorDecl *DDecl = dyn_cast<CXXDestructorDecl>(D)) {
if (DDecl->getNumBaseOrMemberDestructions() > 0) {
- // FIXME. This is strictly for visualization of destructor's AST for
- // how base/members are destructed. It has no other validity.
+ // List order of base/member destruction for visualization purposes.
assert (D->isThisDeclarationADefinition() && "Destructor with dtor-list");
- Proto += " : ";
- for (CXXDestructorDecl::destr_const_iterator B = DDecl->destr_begin(),
- E = DDecl->destr_end();
+ Proto += "/* : ";
+ for (CXXDestructorDecl::destr_const_iterator *B = DDecl->destr_begin(),
+ *E = DDecl->destr_end();
B != E; ++B) {
- CXXBaseOrMemberInitializer * BMInitializer = (*B);
+ uintptr_t BaseOrMember = (*B);
if (B != DDecl->destr_begin())
Proto += ", ";
- if (BMInitializer->isMemberInitializer()) {
- FieldDecl *FD = BMInitializer->getMember();
+ if (DDecl->isMemberToDestroy(BaseOrMember)) {
+ FieldDecl *FD = DDecl->getMemberToDestroy(BaseOrMember);
Proto += "~";
Proto += FD->getNameAsString();
}
else // FIXME. skip dependent types for now.
if (const RecordType *RT =
- BMInitializer->getBaseClass()->getAsRecordType()) {
+ DDecl->getAnyBaseClassToDestroy(BaseOrMember)
+ ->getAsRecordType()) {
const CXXRecordDecl *BaseDecl =
cast<CXXRecordDecl>(RT->getDecl());
Proto += "~";
@@ -402,6 +402,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
}
Proto += "()";
}
+ Proto += " */";
}
}
else
OpenPOWER on IntegriCloud