xoofx/CppAst.NET

Integer type sizes incorrectly handled on Linux

BeanCheeseBurrito opened this issue · 0 comments

Some platforms define 8-byte types like uint64_t as unsigned long int and causes CppAst to return CppPrimitiveType objects with the wrong byte size. A possible fix would be something like:

// Old
case CXTypeKind.CXType_ULong:
    return CppPrimitiveType.UnsignedInt;

// New
case CXTypeKind.CXType_ULong:
    return type.SizeOf == 8 ? CppPrimitiveType.UnsignedLongLong : CppPrimitiveType.UnsignedInt;

private CppType GetCppTypeInternal(CXCursor cursor, CXType type, CXCursor parent, void* data)
{
switch (type.kind)
{
case CXTypeKind.CXType_Void:
return CppPrimitiveType.Void;
case CXTypeKind.CXType_Bool:
return CppPrimitiveType.Bool;
case CXTypeKind.CXType_UChar:
return CppPrimitiveType.UnsignedChar;
case CXTypeKind.CXType_UShort:
return CppPrimitiveType.UnsignedShort;
case CXTypeKind.CXType_UInt:
return CppPrimitiveType.UnsignedInt;
case CXTypeKind.CXType_ULong:
return CppPrimitiveType.UnsignedInt;
case CXTypeKind.CXType_ULongLong:
return CppPrimitiveType.UnsignedLongLong;