Skip to content

Commit

Permalink
Use constant ids for RoArrayType GetMethodsCore (#61177)
Browse files Browse the repository at this point in the history
  • Loading branch information
buyaa-n committed Nov 4, 2021
1 parent b67f978 commit 0c8baa2
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,6 @@ public sealed override bool Equals([NotNullWhen(true)] object? obj)
if (DeclaringType != other.DeclaringType)
return false;

if (ReturnType != other.ReturnType)
return false;

if (_uniquifier != other._uniquifier)
return false;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,6 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
{
int rank = _rank;

int uniquifier = 0;
RoType systemInt32 = Loader.GetCoreType(CoreType.Int32);
RoType elementType = GetRoElementType();
RoType systemVoid = Loader.GetCoreType(CoreType.Void);
Expand All @@ -163,7 +162,7 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
{
getParameters[i] = systemInt32;
}
yield return new RoSyntheticMethod(this, uniquifier++, "Get", elementType, getParameters);
yield return new RoSyntheticMethod(this, 0, "Get", elementType, getParameters);
}

if (filter == null || filter.Matches("Set"))
Expand All @@ -174,7 +173,7 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
setParameters[i] = systemInt32;
}
setParameters[rank] = elementType;
yield return new RoSyntheticMethod(this, uniquifier++, "Set", systemVoid, setParameters);
yield return new RoSyntheticMethod(this, 1, "Set", systemVoid, setParameters);
}

if (filter == null || filter.Matches("Address"))
Expand All @@ -184,7 +183,7 @@ internal sealed override IEnumerable<MethodInfo> GetMethodsCore(NameFilter? filt
{
addressParameters[i] = systemInt32;
}
yield return new RoSyntheticMethod(this, uniquifier++, "Address", elementType.GetUniqueByRefType(), addressParameters);
yield return new RoSyntheticMethod(this, 2, "Address", elementType.GetUniqueByRefType(), addressParameters);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,20 @@ void testEqual(Type type1, Type type2)
testEqual(typeof(long[]).Project(), typeof(long[]).Project());
}

[Fact]
static void TestArrayGetMethodsResultEqualsFilteredGetMethod()
{
Type type = typeof(int[]).Project();

Assert.Equal(type.GetMethod("Get"), type.GetMethods().First(m => m.Name == "Get"));
Assert.Equal(type.GetMethod("Set"), type.GetMethods().First(m => m.Name == "Set"));
Assert.Equal(type.GetMethod("Address"), type.GetMethods().First(m => m.Name == "Address"));

Assert.NotEqual(type.GetMethod("Get"), type.GetMethods().First(m => m.Name == "Set"));
Assert.NotEqual(type.GetMethod("Set"), type.GetMethods().First(m => m.Name == "Address"));
Assert.NotEqual(type.GetMethod("Address"), type.GetMethods().First(m => m.Name == "Get"));
}

[Fact]
public static void TestArrayAddressMethod()
{
Expand Down

0 comments on commit 0c8baa2

Please sign in to comment.