public MethodCacheInfo(MethodCache methodCache, Action <CpuThreadState> delegateGeneratorForPc, uint pc) { MethodCache = methodCache; _functionDelegate = delegateGeneratorForPc; StaticField = IlInstanceHolder.TaAlloc(delegateGeneratorForPc); Pc = pc; }
public uint AllocDelegateSlot(Action <CpuThreadState> Action, string ModuleImportName, HleFunctionEntry FunctionEntry) { uint DelegateId = DelegateLastId++; if (Action == null) { Action = (CpuThreadState) => { throw (new NotImplementedException("Not Implemented Syscall '" + ModuleImportName + ":" + FunctionEntry + "'")); }; } CpuProcessor.RegisteredNativeSyscallMethods[DelegateId] = new NativeSyscallInfo() { ModuleImportName = ModuleImportName, FunctionEntryName = FunctionEntry.Name, Nid = FunctionEntry.NID, PoolItem = IlInstanceHolder.TaAlloc <Action <CpuThreadState> >(FunctionEntry.Delegate), }; DelegateTable[DelegateId] = new DelegateInfo() { Action = Action, ModuleImportName = ModuleImportName, FunctionEntry = FunctionEntry, }; return(DelegateId); }
public void TestGlobalAlloc() { Assert.Equal(0, IlInstanceHolder.CapacityCount); Assert.Equal(0, IlInstanceHolder.FreeCount); var globalKey = IlInstanceHolder.TaAlloc <int>(); Assert.Equal(4, IlInstanceHolder.CapacityCount); Assert.Equal(3, IlInstanceHolder.FreeCount); globalKey.Value = 10; globalKey.Free(); Assert.Equal(4, IlInstanceHolder.CapacityCount); Assert.Equal(4, IlInstanceHolder.FreeCount); }