Inazuma.PetitClr.Core.Structure.MethodTableBuilder.CreateMethodSlotsFromTypeDef C# (CSharp) Method

CreateMethodSlotsFromTypeDef() private method

private CreateMethodSlotsFromTypeDef ( TypeDefinition typeDef ) : Inazuma.PetitClr.Core.Structure.MethodDesc[]
typeDef Inazuma.Mono.Cecil.TypeDefinition
return Inazuma.PetitClr.Core.Structure.MethodDesc[]
        private MethodDesc[] CreateMethodSlotsFromTypeDef(TypeDefinition typeDef)
        {
            var methods = new List<MethodDefinition>();

            methods.AddRange(GetVirtualMethodDefsFromTypeDef(typeDef)); // virtual
            methods.AddRange(typeDef.Methods.Where(x => !x.IsVirtual && !x.IsStatic)); // non-virtual
            methods.AddRange(typeDef.Methods.Where(x => x.IsStatic)); // static

            return methods
                    .Select((x, i) =>
                    {
                        var methodDesc = _classLoader.LookupMethodDescFromMethodDef(x);
                        if (methodDesc == null)
                        {
                            methodDesc = new MethodDesc()
                            {
                                MdToken = x.MetadataToken,
                                Name = x.FullName,
                                Definition = x,
                                Slot = i
                            };
                            _classLoader.RegisterMethodDesc(x, methodDesc);
                        }
                        return methodDesc;
                    })
                    .ToArray();
        }
    }