summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2016-11-15 20:51:46 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2016-11-15 20:51:46 +0000
commit92a8e1a9b41aa414e5c5bde966942057ecd5c9d5 (patch)
tree1b45c2265a3e9e8b591c69227b52416140fee6e0 /tools
parent510f4199c0a4ac7e68a40b18f7b3cb6a57a9f70a (diff)
[libclang] Generalize clang_getNumTemplateArguments and clang_getTemplateArgumentAsType to other kind of specializations.
Patch by Emilio Cobos Álvarez! https://reviews.llvm.org/D26663 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@287024 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/libclang/CXType.cpp25
1 files changed, 10 insertions, 15 deletions
diff --git a/tools/libclang/CXType.cpp b/tools/libclang/CXType.cpp
index 056ce1793d..106fa7ed09 100644
--- a/tools/libclang/CXType.cpp
+++ b/tools/libclang/CXType.cpp
@@ -925,31 +925,26 @@ int clang_Type_getNumTemplateArguments(CXType CT) {
QualType T = GetQualType(CT);
if (T.isNull())
return -1;
- const CXXRecordDecl *RecordDecl = T->getAsCXXRecordDecl();
- if (!RecordDecl)
+ const TemplateSpecializationType *Specialization =
+ T->getAs<TemplateSpecializationType>();
+ if (!Specialization)
return -1;
- const ClassTemplateSpecializationDecl *TemplateDecl =
- dyn_cast<ClassTemplateSpecializationDecl>(RecordDecl);
- if (!TemplateDecl)
- return -1;
- return TemplateDecl->getTemplateArgs().size();
+ return Specialization->template_arguments().size();
}
CXType clang_Type_getTemplateArgumentAsType(CXType CT, unsigned i) {
QualType T = GetQualType(CT);
if (T.isNull())
return MakeCXType(QualType(), GetTU(CT));
- const CXXRecordDecl *RecordDecl = T->getAsCXXRecordDecl();
- if (!RecordDecl)
- return MakeCXType(QualType(), GetTU(CT));
- const ClassTemplateSpecializationDecl *TemplateDecl =
- dyn_cast<ClassTemplateSpecializationDecl>(RecordDecl);
- if (!TemplateDecl)
+
+ const TemplateSpecializationType *Specialization =
+ T->getAs<TemplateSpecializationType>();
+ if (!Specialization)
return MakeCXType(QualType(), GetTU(CT));
- const TemplateArgumentList &TA = TemplateDecl->getTemplateArgs();
+ auto TA = Specialization->template_arguments();
if (TA.size() <= i)
return MakeCXType(QualType(), GetTU(CT));
- const TemplateArgument &A = TA.get(i);
+ const TemplateArgument &A = TA[i];
if (A.getKind() != TemplateArgument::Type)
return MakeCXType(QualType(), GetTU(CT));
return MakeCXType(A.getAsType(), GetTU(CT));