private bool IsSameType(MetadataReader referenceMetadata, MetadataReader newMetadata, TypeSpecification referenceTypeSpecification, TypeSpecification newTypeSpecification) { TypeSpecificationSignature referenceSignature = referenceMetadata.GetSignature(referenceTypeSpecification); TypeSpecificationSignature newSignature = newMetadata.GetSignature(newTypeSpecification); SignatureTypeCode referenceTypeCode = referenceSignature.TypeCode; SignatureTypeCode newTypeCode = newSignature.TypeCode; if (referenceTypeCode != newTypeCode) return false; switch (referenceTypeCode) { case SignatureTypeCode.Pointer: Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode); return true; case SignatureTypeCode.FunctionPointer: Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode); return true; case SignatureTypeCode.Array: Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode); return true; case SignatureTypeCode.SZArray: Console.WriteLine("IsSameType not yet implemented for {0}.", referenceTypeCode); return true; case SignatureTypeCode.GenericTypeInstance: if (!IsSameType(referenceMetadata, newMetadata, referenceSignature.TypeHandle, newSignature.TypeHandle)) return false; ImmutableArray<TypeSignature> referenceGenericArguments = referenceSignature.GenericTypeArguments; ImmutableArray<TypeSignature> newGenericArguments = newSignature.GenericTypeArguments; if (referenceGenericArguments.Length != newGenericArguments.Length) return false; for (int i = 0; i < referenceGenericArguments.Length; i++) { if (!IsSameTypeSignature(referenceMetadata, newMetadata, referenceGenericArguments[i], newGenericArguments[i])) return false; } return true; default: return false; } }
public static TypeSpecificationSignature GetSignature(this MetadataReader metadataReader, TypeSpecification typeSpecification) { return new TypeSpecificationSignature(metadataReader.GetBlobReader(typeSpecification.Signature)); }
private void CheckBaseType(MetadataReader referenceMetadata, MetadataReader newMetadata, TypeSpecification referenceBaseTypeSpecification, TypeSpecification newBaseTypeSpecification) { Console.WriteLine("Base type checking for TypeSpecification not yet implemented."); }