Issue #29337: Fixed possible BytesWarning when compare the code objects.

Warnings could be emitted at compile time.
This commit is contained in:
Serhiy Storchaka 2017-01-24 20:54:07 +02:00
commit 067cbd02bf
3 changed files with 9 additions and 3 deletions

View File

@ -630,6 +630,7 @@ if 1:
f1 = ns['f1'] f1 = ns['f1']
f2 = ns['f2'] f2 = ns['f2']
self.assertIsNot(f1.__code__, f2.__code__) self.assertIsNot(f1.__code__, f2.__code__)
self.assertNotEqual(f1.__code__, f2.__code__)
self.check_constant(f1, const1) self.check_constant(f1, const1)
self.check_constant(f2, const2) self.check_constant(f2, const2)
self.assertEqual(repr(f1()), repr(const1)) self.assertEqual(repr(f1()), repr(const1))
@ -638,6 +639,8 @@ if 1:
check_different_constants(0, 0.0) check_different_constants(0, 0.0)
check_different_constants(+0.0, -0.0) check_different_constants(+0.0, -0.0)
check_different_constants((0,), (0.0,)) check_different_constants((0,), (0.0,))
check_different_constants('a', b'a')
check_different_constants(('a',), (b'a',))
# check_different_constants() cannot be used because repr(-0j) is # check_different_constants() cannot be used because repr(-0j) is
# '(-0-0j)', but when '(-0-0j)' is evaluated to 0j: we loose the sign. # '(-0-0j)', but when '(-0-0j)' is evaluated to 0j: we loose the sign.

View File

@ -10,6 +10,9 @@ What's New in Python 3.7.0 alpha 1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #29337: Fixed possible BytesWarning when compare the code objects.
Warnings could be emitted at compile time.
- Issue #29327: Fixed a crash when pass the iterable keyword argument to - Issue #29327: Fixed a crash when pass the iterable keyword argument to
sorted(). sorted().

View File

@ -550,7 +550,7 @@ _PyCode_ConstantKey(PyObject *op)
PyTuple_SET_ITEM(tuple, i, item_key); PyTuple_SET_ITEM(tuple, i, item_key);
} }
key = PyTuple_Pack(3, Py_TYPE(op), op, tuple); key = PyTuple_Pack(2, tuple, op);
Py_DECREF(tuple); Py_DECREF(tuple);
} }
else if (PyFrozenSet_CheckExact(op)) { else if (PyFrozenSet_CheckExact(op)) {
@ -584,7 +584,7 @@ _PyCode_ConstantKey(PyObject *op)
if (set == NULL) if (set == NULL)
return NULL; return NULL;
key = PyTuple_Pack(3, Py_TYPE(op), op, set); key = PyTuple_Pack(2, set, op);
Py_DECREF(set); Py_DECREF(set);
return key; return key;
} }
@ -595,7 +595,7 @@ _PyCode_ConstantKey(PyObject *op)
if (obj_id == NULL) if (obj_id == NULL)
return NULL; return NULL;
key = PyTuple_Pack(3, Py_TYPE(op), op, obj_id); key = PyTuple_Pack(2, obj_id, op);
Py_DECREF(obj_id); Py_DECREF(obj_id);
} }
return key; return key;