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