Issue #27792: force int return type for modulo operations involving bools.

This commit is contained in:
Mark Dickinson 2016-08-22 12:24:46 +01:00
parent 2eedc119c2
commit b820d7f631
3 changed files with 16 additions and 2 deletions

View File

@ -96,6 +96,13 @@ class BoolTest(unittest.TestCase):
self.assertEqual(False/1, 0)
self.assertIsNot(False/1, False)
self.assertEqual(True%1, 0)
self.assertIsNot(True%1, False)
self.assertEqual(True%2, 1)
self.assertIsNot(True%2, True)
self.assertEqual(False%1, 0)
self.assertIsNot(False%1, False)
for b in False, True:
for i in 0, 1, 2:
self.assertEqual(b**i, int(b)**i)

View File

@ -10,6 +10,10 @@ What's New in Python 3.6.0 beta 1
Core and Builtins
-----------------
- Issue #27792: The modulo operation applied to ``bool`` and other
``int`` subclasses now always returns an ``int``. Previously
the return type depended on the input values. Patch by Xiang Zhang.
- Issue #26984: int() now always returns an instance of exact int.
- Issue #25604: Fix a minor bug in integer true division; this bug could

View File

@ -2458,8 +2458,11 @@ long_divrem(PyLongObject *a, PyLongObject *b,
*pdiv = (PyLongObject*)PyLong_FromLong(0);
if (*pdiv == NULL)
return -1;
Py_INCREF(a);
*prem = (PyLongObject *) a;
*prem = (PyLongObject *)long_long((PyObject *)a);
if (*prem == NULL) {
Py_CLEAR(*pdiv);
return -1;
}
return 0;
}
if (size_b == 1) {