]> granicus.if.org Git - clang/commitdiff
[clangd] Print arguments in template specializations
authorKadir Cetinkaya <kadircet@google.com>
Wed, 20 Mar 2019 09:43:38 +0000 (09:43 +0000)
committerKadir Cetinkaya <kadircet@google.com>
Wed, 20 Mar 2019 09:43:38 +0000 (09:43 +0000)
Reviewers: ilya-biryukov

Subscribers: ioeric, MaskRay, jkorous, arphaman, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D59354

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@356541 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/TypePrinter.cpp

index ebcc01aa46d1c7de55d6c8e19a9b464a87d209fd..9dcffca526fcf93a8ad4cb0398e0d255963a5e78 100644 (file)
@@ -1632,6 +1632,21 @@ static const TemplateArgument &getArgument(const TemplateArgumentLoc &A) {
   return A.getArgument();
 }
 
+static void printArgument(const TemplateArgument &A, const PrintingPolicy &PP,
+                          llvm::raw_ostream &OS) {
+  A.print(PP, OS);
+}
+
+static void printArgument(const TemplateArgumentLoc &A,
+                          const PrintingPolicy &PP, llvm::raw_ostream &OS) {
+  const auto &Kind = A.getArgument().getKind();
+  assert(Kind != TemplateArgument::Null &&
+         "TemplateArgumentKind can not be null!");
+  if (Kind == TemplateArgument::ArgKind::Type)
+    return A.getTypeSourceInfo()->getType().print(OS, PP);
+  return A.getArgument().print(PP, OS);
+}
+
 template<typename TA>
 static void printTo(raw_ostream &OS, ArrayRef<TA> Args,
                     const PrintingPolicy &Policy, bool SkipBrackets) {
@@ -1653,7 +1668,7 @@ static void printTo(raw_ostream &OS, ArrayRef<TA> Args,
     } else {
       if (!FirstArg)
         OS << Comma;
-      Argument.print(Policy, ArgOS);
+      printArgument(Arg, Policy, ArgOS);
     }
     StringRef ArgString = ArgOS.str();