From 0fd2f5e157e6236cab8be6289c15ca6bfa5c8c39 Mon Sep 17 00:00:00 2001 From: Alexandre Mutel Date: Sun, 12 May 2024 21:20:12 +0200 Subject: [PATCH] Fix long/unsigned long C++ primitive --- src/CppAst/CppModelBuilder.cs | 4 ++-- src/CppAst/CppPrimitiveKind.cs | 10 ++++++++++ src/CppAst/CppPrimitiveType.cs | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/CppAst/CppModelBuilder.cs b/src/CppAst/CppModelBuilder.cs index dda6090..aa38164 100644 --- a/src/CppAst/CppModelBuilder.cs +++ b/src/CppAst/CppModelBuilder.cs @@ -1816,7 +1816,7 @@ private CppType GetCppTypeInternal(CXCursor cursor, CXType type, CXCursor parent return CppPrimitiveType.UnsignedInt; case CXTypeKind.CXType_ULong: - return type.SizeOf == 8 ? CppPrimitiveType.UnsignedLongLong : CppPrimitiveType.UnsignedInt; + return CppPrimitiveType.UnsignedLong; case CXTypeKind.CXType_ULongLong: return CppPrimitiveType.UnsignedLongLong; @@ -1837,7 +1837,7 @@ private CppType GetCppTypeInternal(CXCursor cursor, CXType type, CXCursor parent return CppPrimitiveType.Int; case CXTypeKind.CXType_Long: - return CppPrimitiveType.Int; + return CppPrimitiveType.Long; case CXTypeKind.CXType_LongLong: return CppPrimitiveType.LongLong; diff --git a/src/CppAst/CppPrimitiveKind.cs b/src/CppAst/CppPrimitiveKind.cs index 4c9817b..c8c0284 100644 --- a/src/CppAst/CppPrimitiveKind.cs +++ b/src/CppAst/CppPrimitiveKind.cs @@ -39,6 +39,11 @@ public enum CppPrimitiveKind /// Int, + /// + /// C++ `long` + /// + Long, + /// /// C++ `long long` (64bits) /// @@ -59,6 +64,11 @@ public enum CppPrimitiveKind /// UnsignedInt, + /// + /// C++ `unsigned long` + /// + UnsignedLong, + /// /// C++ `unsigned long long` (64 bits) /// diff --git a/src/CppAst/CppPrimitiveType.cs b/src/CppAst/CppPrimitiveType.cs index 9b9cd52..5ee6765 100644 --- a/src/CppAst/CppPrimitiveType.cs +++ b/src/CppAst/CppPrimitiveType.cs @@ -41,6 +41,11 @@ public sealed class CppPrimitiveType : CppType /// public static readonly CppPrimitiveType Int = new CppPrimitiveType(CppPrimitiveKind.Int); + /// + /// Singleton instance of the `long` type. + /// + public static readonly CppPrimitiveType Long = new CppPrimitiveType(CppPrimitiveKind.Long); + /// /// Singleton instance of the `long long` type. /// @@ -61,6 +66,11 @@ public sealed class CppPrimitiveType : CppType /// public static readonly CppPrimitiveType UnsignedInt = new CppPrimitiveType(CppPrimitiveKind.UnsignedInt); + /// + /// Singleton instance of the `unsigned long` type. + /// + public static readonly CppPrimitiveType UnsignedLong = new CppPrimitiveType(CppPrimitiveKind.UnsignedLong); + /// /// Singleton instance of the `unsigned long long` type. /// @@ -120,6 +130,10 @@ private void UpdateSize(out int sizeOf) case CppPrimitiveKind.Int: sizeOf = 4; break; + case CppPrimitiveKind.Long: + case CppPrimitiveKind.UnsignedLong: + sizeOf = 4; // This is incorrect + break; case CppPrimitiveKind.LongLong: sizeOf = 8; break;