SF bug #1048870: call arg of lambda not updating

This commit is contained in:
Raymond Hettinger 2004-10-24 00:10:06 +00:00
parent 7cb13a971d
commit 9047c8f73d
3 changed files with 15 additions and 1 deletions

View File

@ -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)

View File

@ -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
-------

View File

@ -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);