From 038ad489f684aed72d835b7362eb03bda14c439f Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Fri, 16 Dec 2016 23:44:44 +0000 Subject: [PATCH] Fix MSVC build of libclang after r288438 llvm-svn: 290009 --- clang/tools/libclang/CXType.cpp | 78 ++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/clang/tools/libclang/CXType.cpp b/clang/tools/libclang/CXType.cpp index 2226998..475b40f 100644 --- a/clang/tools/libclang/CXType.cpp +++ b/clang/tools/libclang/CXType.cpp @@ -143,6 +143,45 @@ static inline CXTranslationUnit GetTU(CXType CT) { return static_cast(CT.data[1]); } +static Optional> +GetTemplateArguments(QualType Type) { + assert(!Type.isNull()); + if (const auto *Specialization = Type->getAs()) + return Specialization->template_arguments(); + + if (const auto *RecordDecl = Type->getAsCXXRecordDecl()) { + const auto *TemplateDecl = + dyn_cast(RecordDecl); + if (TemplateDecl) + return TemplateDecl->getTemplateArgs().asArray(); + } + + return None; +} + +static Optional TemplateArgumentToQualType(const TemplateArgument &A) { + if (A.getKind() == TemplateArgument::Type) + return A.getAsType(); + return None; +} + +static Optional +FindTemplateArgumentTypeAt(ArrayRef TA, unsigned index) { + unsigned current = 0; + for (const auto &A : TA) { + if (A.getKind() == TemplateArgument::Pack) { + if (index < current + A.pack_size()) + return TemplateArgumentToQualType(A.getPackAsArray()[index - current]); + current += A.pack_size(); + continue; + } + if (current == index) + return TemplateArgumentToQualType(A); + current++; + } + return None; +} + extern "C" { CXType clang_getCursorType(CXCursor C) { @@ -920,22 +959,6 @@ CXString clang_getDeclObjCTypeEncoding(CXCursor C) { return cxstring::createDup(encoding); } -static Optional> -GetTemplateArguments(QualType Type) { - assert(!Type.isNull()); - if (const auto *Specialization = Type->getAs()) - return Specialization->template_arguments(); - - if (const auto *RecordDecl = Type->getAsCXXRecordDecl()) { - const auto *TemplateDecl = - dyn_cast(RecordDecl); - if (TemplateDecl) - return TemplateDecl->getTemplateArgs().asArray(); - } - - return None; -} - static unsigned GetTemplateArgumentArraySize(ArrayRef TA) { unsigned size = TA.size(); for (const auto &Arg : TA) @@ -956,29 +979,6 @@ int clang_Type_getNumTemplateArguments(CXType CT) { return GetTemplateArgumentArraySize(TA.getValue()); } -static Optional TemplateArgumentToQualType(const TemplateArgument &A) { - if (A.getKind() == TemplateArgument::Type) - return A.getAsType(); - return None; -} - -static Optional -FindTemplateArgumentTypeAt(ArrayRef TA, unsigned index) { - unsigned current = 0; - for (const auto &A : TA) { - if (A.getKind() == TemplateArgument::Pack) { - if (index < current + A.pack_size()) - return TemplateArgumentToQualType(A.getPackAsArray()[index - current]); - current += A.pack_size(); - continue; - } - if (current == index) - return TemplateArgumentToQualType(A); - current++; - } - return None; -} - CXType clang_Type_getTemplateArgumentAsType(CXType CT, unsigned index) { QualType T = GetQualType(CT); if (T.isNull()) -- 2.7.4