From 6a684a8963a0d1f5e3251635da97122300302ee0 Mon Sep 17 00:00:00 2001 From: fcurdi Date: Sat, 8 Feb 2020 18:41:20 -0300 Subject: [PATCH 1/2] Differenciate pointers and managed pointers --- MetadataProvider/SignatureTypeProvider.cs | 2 +- Model/Types/Types.cs | 37 +++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/MetadataProvider/SignatureTypeProvider.cs b/MetadataProvider/SignatureTypeProvider.cs index 9ce7a48e..59699882 100644 --- a/MetadataProvider/SignatureTypeProvider.cs +++ b/MetadataProvider/SignatureTypeProvider.cs @@ -149,7 +149,7 @@ public virtual IType GetPointerType(IType targetType) public virtual IType GetByReferenceType(IType targetType) { - var result = new PointerType(targetType); + var result = new ManagedPointerType(targetType); return result; } diff --git a/Model/Types/Types.cs b/Model/Types/Types.cs index 0d6934db..553a249a 100644 --- a/Model/Types/Types.cs +++ b/Model/Types/Types.cs @@ -650,6 +650,43 @@ public override bool Equals(object obj) return result; } } + + public class ManagedPointerType : IReferenceType + { + public ISet Attributes { get; private set; } + public IType TargetType { get; set; } + + public ManagedPointerType(IType targetType) + { + this.TargetType = targetType; + this.Attributes = new HashSet(); + } + + public TypeKind TypeKind + { + get { return TypeKind.ReferenceType; } + } + + public override string ToString() + { + return string.Format("{0}&", this.TargetType); + } + + public override int GetHashCode() + { + return this.TargetType.GetHashCode(); + } + + public override bool Equals(object obj) + { + var other = obj as ManagedPointerType; + + var result = other != null && + this.TargetType.Equals(other.TargetType); + + return result; + } + } public class PointerType : IReferenceType { From 8d12a417d89e60de9671541fff240900255fa6f3 Mon Sep 17 00:00:00 2001 From: fcurdi Date: Thu, 6 Aug 2020 20:39:18 -0300 Subject: [PATCH 2/2] simplify to a filed instead of a new type --- MetadataProvider/SignatureTypeProvider.cs | 2 +- Model/Types/Types.cs | 47 ++++------------------- 2 files changed, 8 insertions(+), 41 deletions(-) diff --git a/MetadataProvider/SignatureTypeProvider.cs b/MetadataProvider/SignatureTypeProvider.cs index 59699882..657686d8 100644 --- a/MetadataProvider/SignatureTypeProvider.cs +++ b/MetadataProvider/SignatureTypeProvider.cs @@ -149,7 +149,7 @@ public virtual IType GetPointerType(IType targetType) public virtual IType GetByReferenceType(IType targetType) { - var result = new ManagedPointerType(targetType); + var result = new PointerType(targetType, true); return result; } diff --git a/Model/Types/Types.cs b/Model/Types/Types.cs index 553a249a..e7b163c2 100644 --- a/Model/Types/Types.cs +++ b/Model/Types/Types.cs @@ -650,53 +650,19 @@ public override bool Equals(object obj) return result; } } - - public class ManagedPointerType : IReferenceType - { - public ISet Attributes { get; private set; } - public IType TargetType { get; set; } - - public ManagedPointerType(IType targetType) - { - this.TargetType = targetType; - this.Attributes = new HashSet(); - } - - public TypeKind TypeKind - { - get { return TypeKind.ReferenceType; } - } - - public override string ToString() - { - return string.Format("{0}&", this.TargetType); - } - - public override int GetHashCode() - { - return this.TargetType.GetHashCode(); - } - - public override bool Equals(object obj) - { - var other = obj as ManagedPointerType; - - var result = other != null && - this.TargetType.Equals(other.TargetType); - - return result; - } - } public class PointerType : IReferenceType { public ISet Attributes { get; private set; } public IType TargetType { get; set; } - public PointerType(IType targetType) + public bool Managed { get; private set; } + + public PointerType(IType targetType, bool managed = false) { this.TargetType = targetType; this.Attributes = new HashSet(); + this.Managed = managed; } public TypeKind TypeKind @@ -711,7 +677,7 @@ public override string ToString() public override int GetHashCode() { - return this.TargetType.GetHashCode(); + return this.TargetType.GetHashCode() ^ this.Managed.GetHashCode(); } public override bool Equals(object obj) @@ -719,7 +685,8 @@ public override bool Equals(object obj) var other = obj as PointerType; var result = other != null && - this.TargetType.Equals(other.TargetType); + this.TargetType.Equals(other.TargetType) && + this.Managed.Equals(other.Managed); return result; }