From ee71c8c97b67d0c120f4347a53f2da1cbf294602 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 26 Sep 2020 09:25:38 -0700 Subject: [PATCH] Fixed dynamic boxability of wrappable types (such as pointers) --- BeefLibs/corlib/src/Variant.bf | 14 ++------------ IDEHelper/Compiler/BfModule.cpp | 2 +- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/BeefLibs/corlib/src/Variant.bf b/BeefLibs/corlib/src/Variant.bf index 8755920f..06198b54 100644 --- a/BeefLibs/corlib/src/Variant.bf +++ b/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; } diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 9baeb142..eeea5b5e 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -4934,7 +4934,7 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary& usedStrin } int boxedTypeId = 0; - if (type->IsValueType()) + if ((type->IsValueType()) || (type->IsWrappableType())) { auto boxedType = CreateBoxedType(type, false); if ((boxedType != NULL) && (boxedType->mIsReified))