aboutsummaryrefslogtreecommitdiff
path: root/clang/tools
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-10-03 16:19:23 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-10-03 16:19:23 +0000
commit7a4253b68512edb5342047974f4080e5544dc027 (patch)
tree1d991007a3757e1c3163f81beb7e3f0cf4b06b6a /clang/tools
parent0bf8241d4bda427f47e3374f60f0203fdab0f5b1 (diff)
downloadllvm-7a4253b68512edb5342047974f4080e5544dc027.zip
llvm-7a4253b68512edb5342047974f4080e5544dc027.tar.gz
llvm-7a4253b68512edb5342047974f4080e5544dc027.tar.bz2
[libclang] Introduce clang_Type_getClassType which returns the class type of a member pointer type.
Patch by Che-Liang Chiou! llvm-svn: 191906
Diffstat (limited to 'clang/tools')
-rw-r--r--clang/tools/libclang/CXType.cpp16
-rw-r--r--clang/tools/libclang/libclang.exports1
2 files changed, 17 insertions, 0 deletions
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<ObjCObjectPointerType>(TP)->getPointeeType();
break;
+ case Type::MemberPointer:
+ T = cast<MemberPointerType>(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<MemberPointerType> (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