Пример #1
0
 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);
        }
Пример #3
0
        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);
        }