Commit 9047c8f7 authored by Raymond Hettinger's avatar Raymond Hettinger

SF bug #1048870: call arg of lambda not updating

parent 7cb13a97
......@@ -252,6 +252,15 @@ if 1:
for stmt in fail:
self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'exec')
def test_for_distinct_code_objects(self):
# SF bug 1048870
def f():
f1 = lambda x=1: x
f2 = lambda x=2: x
return f1, f2
f1, f2 = f()
self.assertNotEqual(id(f1.func_code), id(f2.func_code))
def test_main():
test_support.run_unittest(TestSpecifics)
......
......@@ -37,7 +37,10 @@ Core and builtins
Extension Modules
-----------------
...
- Bug #1048870: the compiler now generates distinct code objects for
functions with identical bodies. This was producing confusing
traceback messages which pointed to the function where the code
object was first defined rather than the function being executed.
Library
-------
......
......@@ -261,6 +261,8 @@ code_compare(PyCodeObject *co, PyCodeObject *cp)
if (cmp) return (cmp<0)?-1:1;
cmp = co->co_flags - cp->co_flags;
if (cmp) return (cmp<0)?-1:1;
cmp = co->co_firstlineno - cp->co_firstlineno;
if (cmp) return (cmp<0)?-1:1;
cmp = PyObject_Compare(co->co_code, cp->co_code);
if (cmp) return cmp;
cmp = PyObject_Compare(co->co_consts, cp->co_consts);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment