Skip to content

Commit

Permalink
Merge pull request #655 from Endures/Fix-Stfld-and-Ldfld
Browse files Browse the repository at this point in the history
修复Stfld与Ldfld当对象为适配器时的异常
  • Loading branch information
liiir1985 authored Feb 10, 2022
2 parents 00be4a2 + 1e2470f commit 93a6786
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 10 deletions.
14 changes: 10 additions & 4 deletions ILRuntime/Runtime/Intepreter/ILIntepreter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2121,9 +2121,13 @@ public object Run(ILMethod method, object instance, object[] p)

if (obj != null)
{
ILTypeInstance instance = null;
if (obj is ILTypeInstance)
instance = obj as ILTypeInstance;
else if (obj is CrossBindingAdaptorType)
instance = (obj as CrossBindingAdaptorType).ILInstance;
if (instance != null)
{
ILTypeInstance instance = obj as ILTypeInstance;
val = esp - 1;
instance.AssignFromStack((int)ip->TokenLong, val, AppDomain, mStack);
}
Expand Down Expand Up @@ -2253,11 +2257,13 @@ public object Run(ILMethod method, object instance, object[] p)
Free(ret);
if (obj != null)
{
ILTypeInstance instance = null;
if (obj is ILTypeInstance)
{
ILTypeInstance instance = obj as ILTypeInstance;
instance = obj as ILTypeInstance;
else if (obj is CrossBindingAdaptorType)
instance = (obj as CrossBindingAdaptorType).ILInstance;
if (instance != null)
instance.PushToStack((int)ip->TokenLong, ret, this, mStack);
}
else
{
//var t = obj.GetType();
Expand Down
16 changes: 10 additions & 6 deletions ILRuntime/Runtime/Intepreter/RegisterVM/ILIntepreter.Register.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2989,11 +2989,13 @@ public unsafe partial class ILIntepreter

if (obj != null)
{
ILTypeInstance instance = null;
if (obj is ILTypeInstance)
{
ILTypeInstance instance = obj as ILTypeInstance;
instance = obj as ILTypeInstance;
else if (obj is CrossBindingAdaptorType)
instance = (obj as CrossBindingAdaptorType).ILInstance;
if (instance != null)
instance.AssignFromStack((int)ip->OperandLong, reg2, AppDomain, mStack);
}
else
{
var t = obj.GetType();
Expand Down Expand Up @@ -3092,11 +3094,13 @@ public unsafe partial class ILIntepreter
obj = RetriveObject(objRef, mStack);
if (obj != null)
{
ILTypeInstance instance = null;
if (obj is ILTypeInstance)
{
ILTypeInstance instance = obj as ILTypeInstance;
instance = obj as ILTypeInstance;
else if (obj is CrossBindingAdaptorType)
instance = (obj as CrossBindingAdaptorType).ILInstance;
if (instance != null)
instance.CopyToRegister((int)ip->OperandLong, ref info, ip->Register1);//Check #345
}
else
{
//var t = obj.GetType();
Expand Down
20 changes: 20 additions & 0 deletions TestCases/InheritanceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,26 @@ public static void InheritanceTest20()
}
}

CrossClass crossClass;
public static void InheritanceTest21()
{
var inheritanceTest = new InheritanceTest();
var dic = new Dictionary<int, CrossClass>();
dic.Add(1, new CrossClass());
dic.TryGetValue(1, out inheritanceTest.crossClass);
Console.WriteLine("InheritanceTest21:classA is " + inheritanceTest.crossClass.classA);
}

public static void InheritanceTest22()
{
var inheritanceTest = new InheritanceTest();
var dic = new Dictionary<int, CrossClass>();
dic.Add(1, new CrossClass());
dic.TryGetValue(1, out inheritanceTest.crossClass);
inheritanceTest.crossClass.classA = new ClassA();
Console.WriteLine("InheritanceTest21:classA is " + inheritanceTest.crossClass.classA);
}

class TestExplicitInterface : IDisposable
{
public bool Called { get; set; }
Expand Down

0 comments on commit 93a6786

Please sign in to comment.