Cosmos/source/Kernel-X86/10-CPU/Cosmos.CPU_Plugs/System/DelegateImpl.cs
2017-12-10 15:57:12 +00:00

36 lines
1.3 KiB
C#

using System;
using IL2CPU.API;
using IL2CPU.API.Attribs;
namespace Cosmos.CPU_Plugs.System {
[Plug(Target = typeof(Delegate), Inheritable = true)]
[PlugField(FieldType = typeof(int), FieldId = "$$ArgSize$$")]
[PlugField(FieldType = typeof(int), FieldId = "$$ReturnsValue$$")]
public static class DelegateImpl {
public static bool Equals(Delegate aThis, object aThat) {
// todo: implement proper Delegate.Equals(object)
return false;
}
public static unsafe bool InternalEqualTypes([ObjectPointerAccess] uint** a, [ObjectPointerAccess] uint** b) {
var xTypeA = a[0][0];
var xTypeB = b[0][0];
return xTypeA == xTypeB;
}
[PlugMethod(Signature = "System_MulticastDelegate__System_Delegate_InternalAllocLike_System_Delegate_")]
public static unsafe uint InternalAllocLike(uint* aDelegate) {
uint xNeededSize = 1024; // 24 is needed fields for Multicast Delegate
xNeededSize += 12;
uint xResultAddr = GCImplementationImpl.AllocNewObject(xNeededSize);
byte* xResult = (byte*)xResultAddr;
byte* xDelegateAsByte = (byte*)aDelegate;
for (int i = 0; i < 1024; i++) {
xResult[i] = xDelegateAsByte[i];
}
return xResultAddr;
}
}
}