Skip to content

Commit 147d386

Browse files
committed
Add test case
1 parent 5231a08 commit 147d386

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

src/embed_tests/TestMethodBinder.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,6 +1404,7 @@ def call_method_with_enum():
14041404

14051405
[TestCase("call_non_generic_method", "GenericOverloadTestMethod")]
14061406
[TestCase("call_generic_method", "GenericOverloadTestMethod<T>")]
1407+
[TestCase("call_generic_class_method", "GenericOverloadTestClass<T>.GenericOverloadTestMethod")]
14071408
public void ResolvesToGenericOnlyWhenExplicitlyCalled(string pythonFuncToCall, string expectedMethodCalled)
14081409
{
14091410
using var _ = Py.GIL();
@@ -1418,6 +1419,9 @@ def call_non_generic_method():
14181419
14191420
def call_generic_method():
14201421
return TestMethodBinder.CSharpModel.GenericOverloadTestMethod[TestMethodBinder.CSharpModel](TestMethodBinder.CSharpModel(), 'Test')
1422+
1423+
def call_generic_class_method():
1424+
return GenericOverloadTestClass[TestMethodBinder.CSharpModel].GenericOverloadTestMethod(TestMethodBinder.CSharpModel(), 'Test')
14211425
");
14221426

14231427
Assert.DoesNotThrow(() =>
@@ -1821,4 +1825,14 @@ public enum SomeEnu
18211825
B = 2,
18221826
}
18231827
}
1828+
1829+
public class GenericOverloadTestClass<T>
1830+
{
1831+
public static T GenericOverloadTestMethod(T testArg1, string testArg2, decimal testArgs3 = 0m)
1832+
{
1833+
TestMethodBinder.CSharpModel.LastFuncCalled = "GenericOverloadTestClass<T>.GenericOverloadTestMethod";
1834+
return default;
1835+
1836+
}
1837+
}
18241838
}

src/runtime/MethodBinder.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -780,15 +780,11 @@ internal Binding Bind(BorrowedReference inst, BorrowedReference args, BorrowedRe
780780
else
781781
{
782782
bestMatch = matchesTouse
783-
.GroupBy(x => x.Method.IsGenericMethod)
784-
.MinBy(x => x.Key)
785-
.GroupBy(x => x.KwargsMatched)
786-
.OrderByDescending(x => x.Key)
787-
.First()
788-
.GroupBy(x => x.ImplicitOperations)
789-
.OrderBy(x => x.Key)
790-
.First()
791-
.MinBy(x => GetMatchedArgumentsPrecedence(x.MethodInformation, pyArgCount, kwArgDict?.Keys));
783+
.OrderBy(x => x.Method.IsGenericMethod)
784+
.ThenByDescending(x => x.KwargsMatched)
785+
.ThenBy(x => x.ImplicitOperations)
786+
.ThenBy(x => GetMatchedArgumentsPrecedence(x.MethodInformation, pyArgCount, kwArgDict?.Keys))
787+
.First();
792788
}
793789

794790
var margs = bestMatch.ManagedArgs;

0 commit comments

Comments
 (0)