1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-18 16:10:26 +02:00

Reflection field value fixes and tests

This commit is contained in:
Brian Fiete 2020-08-24 10:19:17 -07:00
parent d4c78c0799
commit d864a912c5
3 changed files with 41 additions and 1 deletions

View file

@ -150,7 +150,7 @@ namespace System.Reflection
return &value;*/
if (type.IsBoxed)
return ((uint8*)(void*)value) + type.[Friend]mMemberDataOffset;
return ((uint8*)Internal.UnsafeCastToPtr(value)) + type.[Friend]mMemberDataOffset;
return ((uint8*)Internal.UnsafeCastToPtr(value));
}

View file

@ -733,6 +733,12 @@ namespace System.Reflection
public override bool IsSubtypeOf(Type checkBaseType)
{
TypeInstance curType = this;
if (curType.IsBoxed)
{
curType = curType.UnderlyingType as TypeInstance;
if (curType == null)
return false;
}
while (true)
{
if (curType == checkBaseType)

View file

@ -1,6 +1,7 @@
#pragma warning disable 168
using System;
using System.Reflection;
namespace Tests
{
@ -124,6 +125,13 @@ namespace Tests
}
}
[Reflect, AlwaysInclude(AssumeInstantiated=true, IncludeAllMethods=true)]
struct StructB
{
public int mA;
public String mB;
}
class ClassA2 : ClassA
{
public override int GetA(int32 a)
@ -470,5 +478,31 @@ namespace Tests
methodIdx++;
}
}
[Test]
static void TestStructB()
{
StructB sb;
sb.mA = 25;
sb.mB = "Struct B";
let type = sb.GetType() as TypeInstance;
let fields = type.GetFields();
int fieldIdx = 0;
for (let field in fields)
{
let refP = field.GetValue(sb);
switch (fieldIdx)
{
case 0:
Test.Assert(refP.Value.Get<int>() == 25);
case 1:
Test.Assert(refP.Value.Get<String>() === "Struct B");
case 2:
Test.FatalError();
}
fieldIdx++;
}
}
}
}