From 7a4253b68512edb5342047974f4080e5544dc027 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Thu, 3 Oct 2013 16:19:23 +0000 Subject: [libclang] Introduce clang_Type_getClassType which returns the class type of a member pointer type. Patch by Che-Liang Chiou! llvm-svn: 191906 --- clang/tools/libclang/CXType.cpp | 16 ++++++++++++++++ clang/tools/libclang/libclang.exports | 1 + 2 files changed, 17 insertions(+) (limited to 'clang/tools') diff --git a/clang/tools/libclang/CXType.cpp b/clang/tools/libclang/CXType.cpp index a7d6386b..9233e97 100644 --- a/clang/tools/libclang/CXType.cpp +++ b/clang/tools/libclang/CXType.cpp @@ -89,6 +89,7 @@ static CXTypeKind GetTypeKind(QualType T) { TKCASE(VariableArray); TKCASE(DependentSizedArray); TKCASE(Vector); + TKCASE(MemberPointer); default: return CXType_Unexposed; } @@ -365,6 +366,9 @@ CXType clang_getPointeeType(CXType CT) { case Type::ObjCObjectPointer: T = cast(TP)->getPointeeType(); break; + case Type::MemberPointer: + T = cast(TP)->getPointeeType(); + break; default: T = QualType(); break; @@ -478,6 +482,7 @@ CXString clang_getTypeKindSpelling(enum CXTypeKind K) { TKIND(VariableArray); TKIND(DependentSizedArray); TKIND(Vector); + TKIND(MemberPointer); } #undef TKIND return cxstring::createRef(s); @@ -707,6 +712,17 @@ long long clang_Type_getAlignOf(CXType T) { return Ctx.getTypeAlignInChars(QT).getQuantity(); } +CXType clang_Type_getClassType(CXType CT) { + QualType ET = QualType(); + QualType T = GetQualType(CT); + const Type *TP = T.getTypePtrOrNull(); + + if (TP && TP->getTypeClass() == Type::MemberPointer) { + ET = QualType(cast (TP)->getClass(), 0); + } + return MakeCXType(ET, GetTU(CT)); +} + long long clang_Type_getSizeOf(CXType T) { if (T.kind == CXType_Invalid) return CXTypeLayoutError_Invalid; diff --git a/clang/tools/libclang/libclang.exports b/clang/tools/libclang/libclang.exports index 92b060a..6f6e392 100644 --- a/clang/tools/libclang/libclang.exports +++ b/clang/tools/libclang/libclang.exports @@ -61,6 +61,7 @@ clang_TParamCommandComment_isParamPositionValid clang_TParamCommandComment_getDepth clang_TParamCommandComment_getIndex clang_Type_getAlignOf +clang_Type_getClassType clang_Type_getSizeOf clang_Type_getOffsetOf clang_VerbatimBlockLineComment_getText -- cgit v1.1