diff --git a/src/runtime/methodbinder.cs b/src/runtime/methodbinder.cs index 22aaf33e4..e4226e6b2 100644 --- a/src/runtime/methodbinder.cs +++ b/src/runtime/methodbinder.cs @@ -364,9 +364,11 @@ internal Binding Bind(IntPtr inst, IntPtr args, IntPtr kw, if (!typematch) { // this takes care of enum values + // special case: string is assignable to object TypeCode argtypecode = Type.GetTypeCode(pi[n].ParameterType); TypeCode paramtypecode = Type.GetTypeCode(clrtype); - if (argtypecode == paramtypecode) + if (argtypecode == paramtypecode + || (argtypecode == TypeCode.Object && paramtypecode == TypeCode.String)) { typematch = true; clrtype = pi[n].ParameterType; diff --git a/src/testing/methodtest.cs b/src/testing/methodtest.cs index 675b1577c..c458406ce 100644 --- a/src/testing/methodtest.cs +++ b/src/testing/methodtest.cs @@ -616,6 +616,10 @@ public static int Overloaded(int i, string s) { return i; } + + public static object ObjectParam(object o) { + return o; + } } diff --git a/src/tests/test_method.py b/src/tests/test_method.py index 4728d13e4..b47514407 100644 --- a/src/tests/test_method.py +++ b/src/tests/test_method.py @@ -782,6 +782,11 @@ def testWeCanBindToEncodingGetString(self): data = ''.join(data) self.assertEqual(data, 'Some testing string') + def testStringAsObjectArg(self): + s = "hello world" + self.assertEqual(s, MethodTest.ObjectParam(s)) + + def test_suite(): return unittest.makeSuite(MethodTests)