]> granicus.if.org Git - clang/commitdiff
Minor improvements to template parameter writing.
authorAnders Carlsson <andersca@mac.com>
Thu, 4 Jun 2009 05:37:43 +0000 (05:37 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 4 Jun 2009 05:37:43 +0000 (05:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72848 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/DeclPrinter.cpp

index f29da8b9f4c858e021e2ce98455b52d34bdce155..f231abf89e01e7b8e64f28c9b59bd8cb91a9bd1d 100644 (file)
@@ -508,8 +508,50 @@ void DeclPrinter::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
 }
 
 void DeclPrinter::VisitTemplateDecl(TemplateDecl *D) {
-  // TODO: Write template parameters.
-  Out << "template <...> ";
+  Out << "template <";
+  
+  TemplateParameterList *Params = D->getTemplateParameters();
+  for (unsigned i = 0, e = Params->size(); i != e; ++i) {
+    if (i != 0)
+      Out << ", ";
+    
+    const Decl *Param = Params->getParam(i);
+    if (const TemplateTypeParmDecl *TTP = 
+          dyn_cast<TemplateTypeParmDecl>(Param)) {
+      
+      QualType ParamType = 
+        Context.getTypeDeclType(const_cast<TemplateTypeParmDecl*>(TTP));
+
+      if (TTP->wasDeclaredWithTypename())
+        Out << "typename ";
+      else
+        Out << "class ";
+
+      Out << ParamType.getAsString(Policy);
+
+      if (TTP->hasDefaultArgument()) {
+        Out << " = ";
+        Out << TTP->getDefaultArgument().getAsString(Policy);
+      };
+    } else if (const NonTypeTemplateParmDecl *NTTP = 
+                 dyn_cast<NonTypeTemplateParmDecl>(Param)) {
+      Out << NTTP->getType().getAsString(Policy);
+
+      if (IdentifierInfo *Name = NTTP->getIdentifier()) {
+        Out << ' ';
+        Out << Name->getName();
+      }
+      
+      if (NTTP->hasDefaultArgument()) {
+        Out << " = ";
+        NTTP->getDefaultArgument()->printPretty(Out, Context, 0, Policy, 
+                                                Indentation);
+      }
+    }
+  }
+  
+  Out << "> ";
+
   Visit(D->getTemplatedDecl());
 }