diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2016-11-15 20:51:46 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2016-11-15 20:51:46 +0000 |
commit | 92a8e1a9b41aa414e5c5bde966942057ecd5c9d5 (patch) | |
tree | 1b45c2265a3e9e8b591c69227b52416140fee6e0 /tools | |
parent | 510f4199c0a4ac7e68a40b18f7b3cb6a57a9f70a (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.cpp | 25 |
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)); |