diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-13 20:18:13 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-13 20:18:13 +0000 |
commit | 66192aded85fc1140ea4fbfa3e10f1dbc232769d (patch) | |
tree | fc81aeea49d481faa8d82356a9e151250e1a7ba4 | |
parent | f8910df57799256c1897a8610dc52685729ae90e (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.cpp | 42 |
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); } |