コード例 #1
0
ファイル: MethodTable.cs プロジェクト: mayuki/Inazuma
        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());
        }