public void GenericParametersFromTwoTypesAreNotEqual() { var listDefinition = TypeDefinitionUtils.TypeDefinitionFor(typeof(List <>), _mscorlib); var stackDefinition = TypeDefinitionUtils.TypeDefinitionFor(typeof(Comparer <>), _mscorlib); Assert.That(TypeReferenceEqualityComparer.AreEqual(listDefinition.GenericParameters[0], stackDefinition.GenericParameters[0]), Is.False); }
public void TypeReferenceEqualsTypeDefinition() { var typeDefinition = TypeDefinitionUtils.TypeDefinitionFor(typeof(Int32), _mscorlib); var typeReference = new TypeReference(typeDefinition.Namespace, typeDefinition.Name, typeDefinition.Module, typeDefinition.Scope); Assert.That(TypeReferenceEqualityComparer.AreEqual(typeDefinition, typeReference), Is.True); }
public static List <int> GetFieldOffsetsOf(TypeReference typeToFind, TypeReference typeToLookIn, int archBits) { var offsets = new List <int>(); if (typeToLookIn != null) { GetFieldOffsetsOfRecurse((_, typeRef) => TypeReferenceEqualityComparer.AreEqual(typeRef, typeToFind), 0, typeToLookIn, offsets, archBits); } return(offsets); }
public void GenericInstanceTypeForSameTypeIsEqual() { var int32Definition = TypeDefinitionUtils.TypeDefinitionFor(typeof(Int32), _mscorlib); var listDefinition = TypeDefinitionUtils.TypeDefinitionFor(typeof(List <>), _mscorlib); var listGenericInstance = new GenericInstanceType(listDefinition); listGenericInstance.GenericArguments.Add(int32Definition); var listGenericInstance2 = new GenericInstanceType(listDefinition); listGenericInstance2.GenericArguments.Add(int32Definition); Assert.That(TypeReferenceEqualityComparer.AreEqual(listGenericInstance, listGenericInstance2), Is.True); }
public void GenericInstanceTypeFromTwoTypesAreNotEqual() { var int32Definition = TypeDefinitionUtils.TypeDefinitionFor(typeof(Int32), _mscorlib); var listDefinition = TypeDefinitionUtils.TypeDefinitionFor(typeof(List <>), _mscorlib); var listGenericInstance = new GenericInstanceType(listDefinition); listGenericInstance.GenericArguments.Add(int32Definition); var stackDefinition = TypeDefinitionUtils.TypeDefinitionFor(typeof(Comparer <>), _mscorlib); var stackGenericInstance = new GenericInstanceType(stackDefinition); stackGenericInstance.GenericArguments.Add(int32Definition); Assert.That(TypeReferenceEqualityComparer.AreEqual(listGenericInstance, stackGenericInstance), Is.False); }
// It's pretty common for a component to have members that are the same type as other components, so collapse duplicate fieldinfo // so we refer to only a single name and field type that needs to be emitted void ReduceFieldInfos() { var fieldTypes = m_FieldTypes.ToList(); var fieldNames = m_FieldNames.ToList(); var trComparer = new TypeReferenceEqualityComparer(); for (int i = 0; i < m_FieldGenInfos.Count; ++i) { var fieldInfo = m_FieldGenInfos[i]; fieldInfo.FieldNameIndex = fieldNames.IndexOf(fieldInfo.FieldName); fieldInfo.FieldTypeIndex = fieldTypes.FindIndex(ft => trComparer.Equals(ft, fieldInfo.FieldType)); m_FieldGenInfos[i] = fieldInfo; } }
public void ArrayTypesWithDifferentRanksToNotMatch() { var elementType = TypeDefinitionUtils.TypeDefinitionFor(typeof(Int32), _mscorlib); Assert.That(TypeReferenceEqualityComparer.AreEqual((TypeSpecification) new ArrayType(elementType, 1), (TypeSpecification) new ArrayType(elementType, 2)), Is.False, "Two type specifications that are array types with different ranks match, which is not expected."); }
public void ArrayTypesDoNotMatchIfElementTypeIsDifferent() { Assert.That(TypeReferenceEqualityComparer.AreEqual(new ArrayType(TypeDefinitionUtils.TypeDefinitionFor(typeof(Int32), _mscorlib), 1), new ArrayType(TypeDefinitionUtils.TypeDefinitionFor(typeof(Int64), _mscorlib), 1)), Is.False, "Two array types with different element types match, which is not expected."); }
public override bool Equals(Il2CppTypeData x, Il2CppTypeData y) => ((x.Attrs == y.Attrs) && TypeReferenceEqualityComparer.AreEqual(x.Type, y.Type, TypeComparisonMode.Exact));
public override int GetHashCode(Il2CppTypeData obj) => (TypeReferenceEqualityComparer.GetHashCodeFor(obj.Type) + obj.Attrs);