Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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;
            }
        }
Exemplo n.º 7
0
        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.");
        }
Exemplo n.º 8
0
 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);