[cfe-commits] r75487 - /cfe/trunk/lib/AST/DeclPrinter.cpp

Fariborz Jahanian fjahanian at apple.com
Mon Jul 13 13:18:14 PDT 2009


Author: fjahanian
Date: Mon Jul 13 15:18:13 2009
New Revision: 75487

URL: http://llvm.org/viewvc/llvm-project?rev=75487&view=rev
Log:
Added pretty-printing support for constructor definition.


Modified:
    cfe/trunk/lib/AST/DeclPrinter.cpp

Modified: cfe/trunk/lib/AST/DeclPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclPrinter.cpp?rev=75487&r1=75486&r2=75487&view=diff

==============================================================================
--- cfe/trunk/lib/AST/DeclPrinter.cpp (original)
+++ cfe/trunk/lib/AST/DeclPrinter.cpp Mon Jul 13 15:18:13 2009
@@ -335,7 +335,47 @@
     }
 
     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);
   }





More information about the cfe-commits mailing list