コード例 #1
0
        // TODO: ReturnTypeCustomAttributes

        public MethodInfo(Il2CppInspector pkg, int methodIndex, TypeInfo declaringType) :
            base(declaringType)
        {
            Definition = pkg.Metadata.Methods[methodIndex];
            Index      = methodIndex;
            if (Definition.methodIndex >= 0)
            {
                VirtualAddress = pkg.Binary.MethodPointers[Definition.methodIndex];
                HasBody        = true;
            }
            Name = pkg.Strings[Definition.nameIndex];

            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == Il2CppConstants.METHOD_ATTRIBUTE_PRIVATE)
            {
                Attributes |= MethodAttributes.Private;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == Il2CppConstants.METHOD_ATTRIBUTE_PUBLIC)
            {
                Attributes |= MethodAttributes.Public;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == Il2CppConstants.METHOD_ATTRIBUTE_FAM_AND_ASSEM)
            {
                Attributes |= MethodAttributes.FamANDAssem;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == Il2CppConstants.METHOD_ATTRIBUTE_ASSEM)
            {
                Attributes |= MethodAttributes.Assembly;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == Il2CppConstants.METHOD_ATTRIBUTE_FAMILY)
            {
                Attributes |= MethodAttributes.Family;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == Il2CppConstants.METHOD_ATTRIBUTE_FAM_OR_ASSEM)
            {
                Attributes |= MethodAttributes.FamORAssem;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_VIRTUAL) != 0)
            {
                Attributes |= MethodAttributes.Virtual;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_ABSTRACT) != 0)
            {
                Attributes |= MethodAttributes.Abstract;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_STATIC) != 0)
            {
                Attributes |= MethodAttributes.Static;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_FINAL) != 0)
            {
                Attributes |= MethodAttributes.Final;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_HIDE_BY_SIG) != 0)
            {
                Attributes |= MethodAttributes.HideBySig;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK) == Il2CppConstants.METHOD_ATTRIBUTE_NEW_SLOT)
            {
                Attributes |= MethodAttributes.NewSlot;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_PINVOKE_IMPL) != 0)
            {
                Attributes |= MethodAttributes.PinvokeImpl;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_SPECIAL_NAME) != 0)
            {
                Attributes |= MethodAttributes.SpecialName;
            }
            if ((Definition.flags & Il2CppConstants.METHOD_ATTRIBUTE_UNMANAGED_EXPORT) != 0)
            {
                Attributes |= MethodAttributes.UnmanagedExport;
            }

            // Add return parameter
            returnType      = pkg.TypeUsages[Definition.returnType];
            ReturnParameter = new ParameterInfo(pkg, -1, this);

            // Add arguments
            for (var p = Definition.parameterStart; p < Definition.parameterStart + Definition.parameterCount; p++)
            {
                DeclaredParameters.Add(new ParameterInfo(pkg, p, this));
            }
        }