Browse Source

Made GetBoxed work for pointers to value types

Brian Fiete 5 năm trước cách đây
mục cha
commit
befcbf3ddc
1 tập tin đã thay đổi với 12 bổ sung2 xóa
  1. 12 2
      BeefLibs/corlib/src/Variant.bf

+ 12 - 2
BeefLibs/corlib/src/Variant.bf

@@ -313,14 +313,24 @@ namespace System
 			if (IsObject)
 				return .Err;
 
+			var self = this;
 			var type = VariantType;
+			void* dataPtr = self.DataPtr;
+			if (type.IsPointer)
+			{
+				type = type.UnderlyingType;
+				var boxedType = type.BoxedType;
+				if (boxedType == null)
+					return .Err;
+				dataPtr = (void*)mData;
+			}
+
 			var boxedType = type.BoxedType;
 			if (boxedType == null)
 				return .Err;
 
-			var self = this;
 			var object = Try!(boxedType.CreateObject());
-			Internal.MemCpy((uint8*)Internal.UnsafeCastToPtr(object) + boxedType.[Friend]mMemberDataOffset, self.DataPtr, type.Size);
+			Internal.MemCpy((uint8*)Internal.UnsafeCastToPtr(object) + boxedType.[Friend]mMemberDataOffset, dataPtr, type.Size);
 			return object;
 		}