aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-07-13 20:18:13 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-07-13 20:18:13 +0000
commit66192aded85fc1140ea4fbfa3e10f1dbc232769d (patch)
treefc81aeea49d481faa8d82356a9e151250e1a7ba4
parentf8910df57799256c1897a8610dc52685729ae90e (diff)
Added pretty-printing support for constructor definition.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@75487 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AST/DeclPrinter.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp
index 12e89cd80d..9f18fc5ff2 100644
--- a/lib/AST/DeclPrinter.cpp
+++ b/lib/AST/DeclPrinter.cpp
@@ -335,7 +335,47 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
}
Proto += ")";
- AFT->getResultType().getAsStringInternal(Proto, Policy);
+ if (CXXConstructorDecl *CDecl = dyn_cast<CXXConstructorDecl>(D)) {
+ if (CDecl->getNumBaseOrMemberInitializers() > 0) {
+ Proto += " : ";
+ Out << Proto;
+ Proto.clear();
+ for (CXXConstructorDecl::init_const_iterator B = CDecl->init_begin(),
+ E = CDecl->init_end();
+ B != E; ++B) {
+ CXXBaseOrMemberInitializer * BMInitializer = (*B);
+ if (B != CDecl->init_begin())
+ Out << ", ";
+ bool hasArguments = (BMInitializer->begin() != BMInitializer->end());
+ if (BMInitializer->isMemberInitializer()) {
+ FieldDecl *FD = BMInitializer->getMember();
+ Out << FD->getNameAsString();
+ }
+ else {
+ const RecordType *RT =
+ BMInitializer->getBaseClass()->getAsRecordType();
+ const CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(RT->getDecl());
+ Out << BaseDecl->getNameAsString();
+ if (!hasArguments)
+ Out << "()";
+ }
+ if (hasArguments) {
+ Out << "(";
+ for (CXXBaseOrMemberInitializer::arg_const_iterator BE =
+ BMInitializer->begin(), EE = BMInitializer->end();
+ BE != EE; BE++) {
+ if (BE != BMInitializer->begin())
+ Out<< ", ";
+ Expr *Exp = (*BE);
+ Exp->printPretty(Out, Context, 0, Policy, Indentation);
+ }
+ Out << ")";
+ }
+ }
+ }
+ }
+ else
+ AFT->getResultType().getAsStringInternal(Proto, Policy);
} else {
D->getType().getAsStringInternal(Proto, Policy);
}