Browse Source

Fixed dynamic boxability of wrappable types (such as pointers)

Brian Fiete 5 years ago
parent
commit
ee71c8c97b
2 changed files with 3 additions and 13 deletions
  1. 2 12
      BeefLibs/corlib/src/Variant.bf
  2. 1 1
      IDEHelper/Compiler/BfModule.cpp

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

@@ -313,24 +313,14 @@ 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, dataPtr, type.Size);
+			Internal.MemCpy((uint8*)Internal.UnsafeCastToPtr(object) + boxedType.[Friend]mMemberDataOffset, self.DataPtr, type.Size);
 			return object;
 		}
 

+ 1 - 1
IDEHelper/Compiler/BfModule.cpp

@@ -4934,7 +4934,7 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
 	}
 
 	int boxedTypeId = 0;
-	if (type->IsValueType())
+	if ((type->IsValueType()) || (type->IsWrappableType()))
 	{
 		auto boxedType = CreateBoxedType(type, false);
 		if ((boxedType != NULL) && (boxedType->mIsReified))