Fix unboxing of array type Variants

This commit is contained in:
2024-05-05 13:15:31 +03:00
parent 9d830eb1e2
commit e77ae12b9b
8 changed files with 41 additions and 6 deletions

View File

@@ -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);

View File

@@ -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();