Skip to content

Commit

Permalink
fix object[] parameters taking precedence when should not in overlo…
Browse files Browse the repository at this point in the history
…ad resolution
  • Loading branch information
lostmsu committed Sep 15, 2020
1 parent 61d1b7c commit eaed5c2
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 14 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ details about the cause of the failure

- Fix incorrect dereference of wrapper object in `tp_repr`, which may result in a program crash
- Fix incorrect dereference in params array handling
- Fix `object[]` parameters taking precedence when should not in overload resolution

## [2.5.0][] - 2020-06-14

Expand Down
20 changes: 10 additions & 10 deletions src/runtime/methodbinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,16 @@ internal static int ArgPrecedence(Type t)
return 3000;
}

if (t.IsArray)
{
Type e = t.GetElementType();
if (e == objectType)
{
return 2500;
}
return 100 + ArgPrecedence(e);
}

TypeCode tc = Type.GetTypeCode(t);
// TODO: Clean up
switch (tc)
Expand Down Expand Up @@ -250,16 +260,6 @@ internal static int ArgPrecedence(Type t)
return 40;
}

if (t.IsArray)
{
Type e = t.GetElementType();
if (e == objectType)
{
return 2500;
}
return 100 + ArgPrecedence(e);
}

return 2000;
}

Expand Down
3 changes: 2 additions & 1 deletion src/testing/methodtest.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;

namespace Python.Test
Expand Down Expand Up @@ -84,7 +85,7 @@ public Type[] TestNullArrayConversion(Type[] v)

public static string[] TestStringParamsArg(params string[] args)
{
return args;
return args.Concat(new []{"tail"}).ToArray();
}

public static object[] TestObjectParamsArg(params object[] args)
Expand Down
9 changes: 6 additions & 3 deletions src/tests/test_method.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,17 +206,20 @@ def test_null_array_conversion():
def test_string_params_args():
"""Test use of string params."""
result = MethodTest.TestStringParamsArg('one', 'two', 'three')
assert result.Length == 3
assert len(result) == 3, result
assert result.Length == 4
assert len(result) == 4, result
assert result[0] == 'one'
assert result[1] == 'two'
assert result[2] == 'three'
# ensures params string[] overload takes precedence over params object[]
assert result[3] == 'tail'

result = MethodTest.TestStringParamsArg(['one', 'two', 'three'])
assert len(result) == 3
assert len(result) == 4
assert result[0] == 'one'
assert result[1] == 'two'
assert result[2] == 'three'
assert result[3] == 'tail'


def test_object_params_args():
Expand Down

0 comments on commit eaed5c2

Please sign in to comment.