]> granicus.if.org Git - python/commitdiff
Merged revisions 84984 via svnmerge from
authorMark Dickinson <dickinsm@gmail.com>
Thu, 23 Sep 2010 20:16:03 +0000 (20:16 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Thu, 23 Sep 2010 20:16:03 +0000 (20:16 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84984 | mark.dickinson | 2010-09-23 21:11:19 +0100 (Thu, 23 Sep 2010) | 5 lines

  Issue #9930: Remove an unnecessary type check in wrap_binaryfunc_r;
  this was causing reversed method calls like float.__radd__(3.0, 1) to
  return NotImplemented instead of the expected numeric value.
........

Lib/test/test_descr.py
Misc/NEWS
Objects/typeobject.c

index 82dcc2c3d0a26e5b2ae6b50b59e60b2142ac975d..320a7a70f6bbe42a23df7ff5cdefba8e186e47e8 100644 (file)
@@ -289,6 +289,11 @@ class OperatorsTest(unittest.TestCase):
         self.assertEqual(repr(a), "234.5")
         self.assertEqual(a.prec, 12)
 
+    def test_explicit_reverse_methods(self):
+        # see issue 9930
+        self.assertEqual(complex.__radd__(3j, 4.0), complex(4.0, 3.0))
+        self.assertEqual(float.__rsub__(3.0, 1), -2.0)
+
     @support.impl_detail("the module 'xxsubtype' is internal")
     def test_spam_lists(self):
         # Testing spamlist operations...
index d46f6b18992624d336f90b9b39ecec97d9e24d3b..723c47bfedb0017c12347d3e8aa2aa788a46ff68 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@ What's New in Python 3.1.3?
 Core and Builtins
 -----------------
 
+- Issue #9930: Remove bogus subtype check that was causing (e.g.)
+  float.__rdiv__(2.0, 3) to return NotImplemented instead of the
+  expected 1.5.
+
 - Issue #9804: ascii() now always represents unicode surrogate pairs as
   a single ``\UXXXXXXXX``, regardless of whether the character is printable
   or not.  Also, the "backslashreplace" error handler now joins surrogate
index d2124f17c36d811987fa0b98f44a8158f40ef960..ab942c0b97bb9129fcd51da878d1cd4690a80802 100644 (file)
@@ -4049,10 +4049,6 @@ wrap_binaryfunc_r(PyObject *self, PyObject *args, void *wrapped)
     if (!check_num_args(args, 1))
         return NULL;
     other = PyTuple_GET_ITEM(args, 0);
-    if (!PyType_IsSubtype(Py_TYPE(other), Py_TYPE(self))) {
-        Py_INCREF(Py_NotImplemented);
-        return Py_NotImplemented;
-    }
     return (*func)(other, self);
 }