]> granicus.if.org Git - python/commitdiff
Merged revisions 73114 via svnmerge from
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Mon, 1 Jun 2009 22:04:41 +0000 (22:04 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Mon, 1 Jun 2009 22:04:41 +0000 (22:04 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73114 | amaury.forgeotdarc | 2009-06-01 22:53:18 +0200 (lun., 01 juin 2009) | 3 lines

  #4547: When debugging a very large function, it was not always
  possible to update the lineno attribute of the current frame.
........

Lib/test/test_trace.py
Misc/NEWS
Objects/frameobject.c

index b5db9a7a01f5a19dab5744d37910f40c78bc35b7..ea75a9e99edb7578dec0cb8b270a446cc234f96e 100644 (file)
@@ -740,6 +740,23 @@ class JumpTestCase(unittest.TestCase):
     def test_19_no_jump_without_trace_function(self):
         no_jump_without_trace_function()
 
+    def test_20_large_function(self):
+        d = {}
+        exec("""def f(output):        # line 0
+            x = 0                     # line 1
+            y = 1                     # line 2
+            '''                       # line 3
+            %s                        # lines 4-1004
+            '''                       # line 1005
+            x += 1                    # line 1006
+            output.append(x)          # line 1007
+            return""" % ('\n' * 1000,), d)
+        f = d['f']
+
+        f.jump = (2, 1007)
+        f.output = [0]
+        self.run_test(f)
+
 def test_main():
     test_support.run_unittest(
         TraceTestCase,
index 6dcf1d8caa6834ab40150553a336af54c53562db..15611a08d0cd7fc3fe943881e81c55ccc56b385d 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.6.3
 Core and Builtins
 -----------------
 
+- Issue #4547: When debugging a very large function, it was not always
+  possible to update the lineno attribute of the current frame.
+
 - Issue #5330: C functions called with keyword arguments were not reported by
   the various profiling modules (profile, cProfile). Patch by Hagen F�rstenau.
 
index 5b2f3083f971c874e48b0f3c665168a4393aeec5..049133406c632bdc5a934a907864eba5809f6b4c 100644 (file)
@@ -70,7 +70,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
        int new_iblock = 0;             /* The new value of f_iblock */
        unsigned char *code = NULL;     /* The bytecode for the frame... */
        Py_ssize_t code_len = 0;        /* ...and its length */
-       char *lnotab = NULL;            /* Iterating over co_lnotab */
+       unsigned char *lnotab = NULL;   /* Iterating over co_lnotab */
        Py_ssize_t lnotab_len = 0;      /* (ditto) */
        int offset = 0;                 /* (ditto) */
        int line = 0;                   /* (ditto) */
@@ -114,7 +114,8 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
 
        /* Find the bytecode offset for the start of the given line, or the
         * first code-owning line after it. */
-       PyString_AsStringAndSize(f->f_code->co_lnotab, &lnotab, &lnotab_len);
+       PyString_AsStringAndSize((char*)f->f_code->co_lnotab,
+                                &lnotab, &lnotab_len);
        addr = 0;
        line = f->f_code->co_firstlineno;
        new_lasti = -1;