aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/clangparser/clangbuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/ApiExtractor/clangparser/clangbuilder.cpp')
-rw-r--r--sources/shiboken6/ApiExtractor/clangparser/clangbuilder.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/sources/shiboken6/ApiExtractor/clangparser/clangbuilder.cpp b/sources/shiboken6/ApiExtractor/clangparser/clangbuilder.cpp
index a3be50249..cc2924287 100644
--- a/sources/shiboken6/ApiExtractor/clangparser/clangbuilder.cpp
+++ b/sources/shiboken6/ApiExtractor/clangparser/clangbuilder.cpp
@@ -524,6 +524,27 @@ void BuilderPrivate::addTemplateInstantiations(const CXType &type,
typeName->remove(pos.first, pos.second - pos.first);
}
+static TypeCategory typeCategoryFromClang(CXTypeKind k)
+{
+ switch (k) {
+ case CXType_Void:
+ return TypeCategory::Void;
+ case CXType_Enum:
+ return TypeCategory::Enum;
+ case CXType_Pointer:
+ case CXType_BlockPointer:
+ return TypeCategory::Pointer;
+ case CXType_FunctionNoProto:
+ case CXType_FunctionProto:
+ return TypeCategory::Function;
+ default:
+ break;
+ }
+ if (k >= CXType_FirstBuiltin && k <= CXType_LastBuiltin)
+ return TypeCategory::Builtin;
+ return TypeCategory::Other;
+}
+
TypeInfo BuilderPrivate::createTypeInfoUncached(const CXType &type,
bool *cacheable) const
{
@@ -533,6 +554,7 @@ TypeInfo BuilderPrivate::createTypeInfoUncached(const CXType &type,
if (argCount >= 0) {
TypeInfo result = createTypeInfoUncached(clang_getResultType(pointeeType),
cacheable);
+ result.setTypeCategory(TypeCategory::Pointer);
result.setFunctionPointer(true);
for (int a = 0; a < argCount; ++a)
result.addArgument(createTypeInfoUncached(clang_getArgType(pointeeType, unsigned(a)),
@@ -542,6 +564,7 @@ TypeInfo BuilderPrivate::createTypeInfoUncached(const CXType &type,
}
TypeInfo typeInfo;
+ typeInfo.setTypeCategory(typeCategoryFromClang(clang_getCanonicalType(type).kind));
CXType nestedType = type;
for (; isArrayType(nestedType.kind); nestedType = clang_getArrayElementType(nestedType)) {