Fix unboxing of array type Variants
This commit is contained in:
@@ -83,6 +83,7 @@ public:
|
||||
{
|
||||
static MArray* New(const MClass* elementKlass, int32 length);
|
||||
static MClass* GetClass(MClass* elementKlass);
|
||||
static MClass* GetArrayClass(const MArray* obj);
|
||||
static int32 GetLength(const MArray* obj);
|
||||
static void* GetAddress(const MArray* obj);
|
||||
static MArray* Unbox(MObject* obj);
|
||||
|
||||
@@ -394,14 +394,15 @@ Variant MUtils::UnboxVariant(MObject* value)
|
||||
case MTypes::Array:
|
||||
{
|
||||
void* ptr = MCore::Array::GetAddress((MArray*)value);
|
||||
MClass* elementClass = klass->GetElementClass();
|
||||
const MClass* arrayClass = klass == stdTypes.ManagedArrayClass ? MCore::Array::GetArrayClass((MArray*)value) : klass;
|
||||
const MClass* elementClass = arrayClass->GetElementClass();
|
||||
if (elementClass == MCore::TypeCache::Byte)
|
||||
{
|
||||
Variant v;
|
||||
v.SetBlob(ptr, MCore::Array::GetLength((MArray*)value));
|
||||
return v;
|
||||
}
|
||||
const StringAnsiView fullname = klass->GetFullName();
|
||||
const StringAnsiView fullname = arrayClass->GetFullName();
|
||||
Variant v;
|
||||
v.SetType(MoveTemp(VariantType(VariantType::Array, fullname)));
|
||||
auto& array = v.AsArray();
|
||||
|
||||
Reference in New Issue
Block a user