diff --git a/Il2CppInspector.Common/Reflection/EventInfo.cs b/Il2CppInspector.Common/Reflection/EventInfo.cs index 8de3589..3c1bd96 100644 --- a/Il2CppInspector.Common/Reflection/EventInfo.cs +++ b/Il2CppInspector.Common/Reflection/EventInfo.cs @@ -48,8 +48,8 @@ namespace Il2CppInspector.Reflection eventTypeReference = TypeRef.FromReferenceIndex(Assembly.Model, Definition.typeIndex); var eventType = pkg.TypeReferences[Definition.typeIndex]; - if ((eventType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_SPECIAL_NAME) == Il2CppConstants.FIELD_ATTRIBUTE_SPECIAL_NAME) - Attributes |= EventAttributes.SpecialName; + // Copy attributes + Attributes = (EventAttributes) eventType.attrs; // NOTE: This relies on methods being added to TypeInfo.DeclaredMethods in the same order they are defined in the Il2Cpp metadata // add, remove and raise are method indices from the first method of the declaring type diff --git a/Il2CppInspector.Common/Reflection/FieldInfo.cs b/Il2CppInspector.Common/Reflection/FieldInfo.cs index b792d25..e428b3c 100644 --- a/Il2CppInspector.Common/Reflection/FieldInfo.cs +++ b/Il2CppInspector.Common/Reflection/FieldInfo.cs @@ -101,34 +101,8 @@ namespace Il2CppInspector.Reflection { fieldTypeReference = TypeRef.FromReferenceIndex(Assembly.Model, Definition.typeIndex); var fieldType = pkg.TypeReferences[Definition.typeIndex]; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_FIELD_ACCESS_MASK) == Il2CppConstants.FIELD_ATTRIBUTE_PRIVATE) - Attributes |= FieldAttributes.Private; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_FIELD_ACCESS_MASK) == Il2CppConstants.FIELD_ATTRIBUTE_PUBLIC) - Attributes |= FieldAttributes.Public; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_FIELD_ACCESS_MASK) == Il2CppConstants.FIELD_ATTRIBUTE_FAM_AND_ASSEM) - Attributes |= FieldAttributes.FamANDAssem; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_FIELD_ACCESS_MASK) == Il2CppConstants.FIELD_ATTRIBUTE_ASSEMBLY) - Attributes |= FieldAttributes.Assembly; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_FIELD_ACCESS_MASK) == Il2CppConstants.FIELD_ATTRIBUTE_FAMILY) - Attributes |= FieldAttributes.Family; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_FIELD_ACCESS_MASK) == Il2CppConstants.FIELD_ATTRIBUTE_FAM_OR_ASSEM) - Attributes |= FieldAttributes.FamORAssem; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_STATIC) == Il2CppConstants.FIELD_ATTRIBUTE_STATIC) - Attributes |= FieldAttributes.Static; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_INIT_ONLY) == Il2CppConstants.FIELD_ATTRIBUTE_INIT_ONLY) - Attributes |= FieldAttributes.InitOnly; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_LITERAL) == Il2CppConstants.FIELD_ATTRIBUTE_LITERAL) - Attributes |= FieldAttributes.Literal; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_NOT_SERIALIZED) == Il2CppConstants.FIELD_ATTRIBUTE_NOT_SERIALIZED) - Attributes |= FieldAttributes.NotSerialized; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_SPECIAL_NAME) == Il2CppConstants.FIELD_ATTRIBUTE_SPECIAL_NAME) - Attributes |= FieldAttributes.SpecialName; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_PINVOKE_IMPL) == Il2CppConstants.FIELD_ATTRIBUTE_PINVOKE_IMPL) - Attributes |= FieldAttributes.PinvokeImpl; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_HAS_DEFAULT) != 0) - Attributes |= FieldAttributes.HasDefault; - if ((fieldType.attrs & Il2CppConstants.FIELD_ATTRIBUTE_HAS_FIELD_RVA) != 0) - Attributes |= FieldAttributes.HasFieldRVA; + // Copy attributes + Attributes = (FieldAttributes) fieldType.attrs; // Default initialization value if present if (pkg.FieldDefaultValue.TryGetValue(fieldIndex, out (ulong address, object variant) value)) { diff --git a/Il2CppInspector.Common/Reflection/MethodBase.cs b/Il2CppInspector.Common/Reflection/MethodBase.cs index f43422f..09e3ec6 100644 --- a/Il2CppInspector.Common/Reflection/MethodBase.cs +++ b/Il2CppInspector.Common/Reflection/MethodBase.cs @@ -138,37 +138,8 @@ namespace Il2CppInspector.Reflection genericMethodInstances[genericArguments] = this; } - // Set method attributes - 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; + // Copy attributes + Attributes = (MethodAttributes) Definition.flags; // Add arguments for (var p = Definition.parameterStart; p < Definition.parameterStart + Definition.parameterCount; p++) diff --git a/Il2CppInspector.Common/Reflection/ParameterInfo.cs b/Il2CppInspector.Common/Reflection/ParameterInfo.cs index 533f234..482cc2e 100644 --- a/Il2CppInspector.Common/Reflection/ParameterInfo.cs +++ b/Il2CppInspector.Common/Reflection/ParameterInfo.cs @@ -77,21 +77,8 @@ namespace Il2CppInspector.Reflection var paramType = pkg.TypeReferences[Definition.typeIndex]; - if ((paramType.attrs & Il2CppConstants.PARAM_ATTRIBUTE_HAS_DEFAULT) != 0) - Attributes |= ParameterAttributes.HasDefault; - if ((paramType.attrs & Il2CppConstants.PARAM_ATTRIBUTE_OPTIONAL) != 0) - Attributes |= ParameterAttributes.Optional; - if ((paramType.attrs & Il2CppConstants.PARAM_ATTRIBUTE_IN) != 0) - Attributes |= ParameterAttributes.In; - if ((paramType.attrs & Il2CppConstants.PARAM_ATTRIBUTE_OUT) != 0) - Attributes |= ParameterAttributes.Out; - if ((paramType.attrs & Il2CppConstants.PARAM_ATTRIBUTE_RESERVED_MASK) != 0) - Attributes |= ParameterAttributes.ReservedMask; - if ((paramType.attrs & Il2CppConstants.PARAM_ATTRIBUTE_HAS_FIELD_MARSHAL) != 0) - Attributes |= ParameterAttributes.HasFieldMarshal; - - if (Position == -1) - Attributes |= ParameterAttributes.Retval; + // Copy attributes + Attributes = (ParameterAttributes) paramType.attrs; // Default initialization value if present if (pkg.ParameterDefaultValue.TryGetValue(paramIndex, out (ulong address, object variant) value)) { diff --git a/Il2CppInspector.Common/Reflection/TypeInfo.cs b/Il2CppInspector.Common/Reflection/TypeInfo.cs index 0c6bbde..ea9a564 100644 --- a/Il2CppInspector.Common/Reflection/TypeInfo.cs +++ b/Il2CppInspector.Common/Reflection/TypeInfo.cs @@ -768,36 +768,8 @@ namespace Il2CppInspector.Reflection // TODO: Move this to after we've populated TypesByReferenceIndex, since FullName might touch that Assembly.Model.TypesByFullName[FullName] = this; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_SERIALIZABLE) != 0) - Attributes |= TypeAttributes.Serializable; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_PUBLIC) - Attributes |= TypeAttributes.Public; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_NOT_PUBLIC) - Attributes |= TypeAttributes.NotPublic; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_NESTED_PUBLIC) - Attributes |= TypeAttributes.NestedPublic; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_NESTED_PRIVATE) - Attributes |= TypeAttributes.NestedPrivate; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_NESTED_ASSEMBLY) - Attributes |= TypeAttributes.NestedAssembly; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_NESTED_FAMILY) - Attributes |= TypeAttributes.NestedFamily; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_NESTED_FAM_AND_ASSEM) - Attributes |= TypeAttributes.NestedFamANDAssem; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_VISIBILITY_MASK) == Il2CppConstants.TYPE_ATTRIBUTE_NESTED_FAM_OR_ASSEM) - Attributes |= TypeAttributes.NestedFamORAssem; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_ABSTRACT) != 0) - Attributes |= TypeAttributes.Abstract; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_SEALED) != 0) - Attributes |= TypeAttributes.Sealed; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_SPECIAL_NAME) != 0) - Attributes |= TypeAttributes.SpecialName; - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_IMPORT) != 0) - Attributes |= TypeAttributes.Import; - - // TypeAttributes.Class == 0 so we only care about setting TypeAttributes.Interface (it's a non-interface class by default) - if ((Definition.flags & Il2CppConstants.TYPE_ATTRIBUTE_INTERFACE) != 0) - Attributes |= TypeAttributes.Interface; + // Copy attributes + Attributes = (TypeAttributes) Definition.flags; // Enumerations - bit 1 of bitfield indicates this (also the baseTypeReference will be System.Enum) if (((Definition.bitfield >> 1) & 1) == 1) {