r191906 - [libclang] Introduce clang_Type_getClassType which returns the class type of a member pointer type.
Argyrios Kyrtzidis
akyrtzi at gmail.com
Thu Oct 3 09:19:23 PDT 2013
Author: akirtzidis
Date: Thu Oct 3 11:19:23 2013
New Revision: 191906
URL: http://llvm.org/viewvc/llvm-project?rev=191906&view=rev
Log:
[libclang] Introduce clang_Type_getClassType which returns the class type of a member pointer type.
Patch by Che-Liang Chiou!
Modified:
cfe/trunk/bindings/python/clang/cindex.py
cfe/trunk/include/clang-c/Index.h
cfe/trunk/test/Index/print-type.cpp
cfe/trunk/tools/libclang/CXType.cpp
cfe/trunk/tools/libclang/libclang.exports
Modified: cfe/trunk/bindings/python/clang/cindex.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/bindings/python/clang/cindex.py?rev=191906&r1=191905&r2=191906&view=diff
==============================================================================
--- cfe/trunk/bindings/python/clang/cindex.py (original)
+++ cfe/trunk/bindings/python/clang/cindex.py Thu Oct 3 11:19:23 2013
@@ -1487,6 +1487,7 @@ TypeKind.VECTOR = TypeKind(113)
TypeKind.INCOMPLETEARRAY = TypeKind(114)
TypeKind.VARIABLEARRAY = TypeKind(115)
TypeKind.DEPENDENTSIZEDARRAY = TypeKind(116)
+TypeKind.MEMBERPOINTER = TypeKind(117)
class Type(Structure):
"""
@@ -1662,6 +1663,12 @@ class Type(Structure):
"""
return conf.lib.clang_getArraySize(self)
+ def get_class_type(self):
+ """
+ Retrieve the class type of the member pointer type.
+ """
+ return conf.lib.clang_Type_getClassType(self)
+
def get_align(self):
"""
Retrieve the alignment of the record.
@@ -2694,6 +2701,11 @@ functionList = [
[Type],
c_longlong),
+ ("clang_Type_getClassType",
+ [Type],
+ Type,
+ Type.from_result),
+
("clang_getFieldDeclBitWidth",
[Cursor],
c_int),
Modified: cfe/trunk/include/clang-c/Index.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=191906&r1=191905&r2=191906&view=diff
==============================================================================
--- cfe/trunk/include/clang-c/Index.h (original)
+++ cfe/trunk/include/clang-c/Index.h Thu Oct 3 11:19:23 2013
@@ -2678,7 +2678,8 @@ enum CXTypeKind {
CXType_Vector = 113,
CXType_IncompleteArray = 114,
CXType_VariableArray = 115,
- CXType_DependentSizedArray = 116
+ CXType_DependentSizedArray = 116,
+ CXType_MemberPointer = 117
};
/**
@@ -2969,6 +2970,13 @@ enum CXTypeLayoutError {
CINDEX_LINKAGE long long clang_Type_getAlignOf(CXType T);
/**
+ * \brief Return the class type of an member pointer type.
+ *
+ * If a non-member-pointer type is passed in, an invalid type is returned.
+ */
+CINDEX_LINKAGE CXType clang_Type_getClassType(CXType T);
+
+/**
* \brief Return the size of a type in bytes as per C++[expr.sizeof] standard.
*
* If the type declaration is invalid, CXTypeLayoutError_Invalid is returned.
Modified: cfe/trunk/test/Index/print-type.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/print-type.cpp?rev=191906&r1=191905&r2=191906&view=diff
==============================================================================
--- cfe/trunk/test/Index/print-type.cpp (original)
+++ cfe/trunk/test/Index/print-type.cpp Thu Oct 3 11:19:23 2013
@@ -34,6 +34,11 @@ T tbar(int[size]);
void foo(int i, int incomplete_array[]) { int variable_array[i]; }
+struct Blob {
+ int i;
+};
+int Blob::*member_pointer;
+
// RUN: c-index-test -test-print-type %s | FileCheck %s
// CHECK: Namespace=outer:1:11 (Definition) [type=] [typekind=Invalid] [isPOD=0]
// CHECK: ClassTemplate=Foo:4:8 (Definition) [type=] [typekind=Invalid] [isPOD=0]
@@ -73,3 +78,4 @@ void foo(int i, int incomplete_array[])
// CHECK: ParmDecl=:33:11 (Definition) [type=int [size]] [typekind=DependentSizedArray] [isPOD=0]
// CHECK: ParmDecl=incomplete_array:35:21 (Definition) [type=int []] [typekind=IncompleteArray] [isPOD=1]
// CHECK: VarDecl=variable_array:35:47 (Definition) [type=int [i]] [typekind=VariableArray] [isPOD=1]
+// CHECK: VarDecl=member_pointer:40:12 (Definition) [type=int Blob::*] [typekind=MemberPointer] [isPOD=1]
Modified: cfe/trunk/tools/libclang/CXType.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXType.cpp?rev=191906&r1=191905&r2=191906&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CXType.cpp (original)
+++ cfe/trunk/tools/libclang/CXType.cpp Thu Oct 3 11:19:23 2013
@@ -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
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;
Modified: cfe/trunk/tools/libclang/libclang.exports
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.exports?rev=191906&r1=191905&r2=191906&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/libclang.exports (original)
+++ cfe/trunk/tools/libclang/libclang.exports Thu Oct 3 11:19:23 2013
@@ -61,6 +61,7 @@ clang_TParamCommandComment_isParamPositi
clang_TParamCommandComment_getDepth
clang_TParamCommandComment_getIndex
clang_Type_getAlignOf
+clang_Type_getClassType
clang_Type_getSizeOf
clang_Type_getOffsetOf
clang_VerbatimBlockLineComment_getText
More information about the cfe-commits
mailing list