Fix PR python/17981
authorTom Tromey <tom@tromey.com>
Thu, 19 May 2016 03:41:28 +0000 (21:41 -0600)
committerTom Tromey <tom@tromey.com>
Tue, 24 May 2016 15:55:01 +0000 (09:55 -0600)
PR python/17981 notes that gdb.breakpoints() returns None when there
are no breakpoints; whereas an empty list or tuple would be more in
keeping with Python and the documentation.

This patch fixes the bug by changing the no-breakpoint return to make
an empty tuple.

Built and regtested on x86-64 Fedora 23.

2016-05-23  Tom Tromey  <tom@tromey.com>

PR python/17981:
* python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple
when there are no breakpoints.

2016-05-23  Tom Tromey  <tom@tromey.com>

* python.texi (Basic Python): Document gdb.breakpoints return.

2016-05-23  Tom Tromey  <tom@tromey.com>

PR python/17981:
* gdb.python/py-breakpoint.exp (test_bkpt_basic): Add test for
no-breakpoint case.

gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/python.texi
gdb/python/py-breakpoint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/py-breakpoint.exp

index 45cfe75..9359532 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-23  Tom Tromey  <tom@tromey.com>
+
+       PR python/17981:
+       * python/py-breakpoint.c (gdbpy_breakpoints): Return a new tuple
+       when there are no breakpoints.
+
 2016-05-24  Pedro Alves  <palves@redhat.com>
 
        PR gdb/19828
index 594f926..34b9527 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-23  Tom Tromey  <tom@tromey.com>
+
+       * python.texi (Basic Python): Document gdb.breakpoints return.
+
 2016-05-24  Tom Tromey  <tom@tromey.com>
 
        PR gdb/19194:
index ffbf89a..6623d8e 100644 (file)
@@ -236,7 +236,10 @@ and height, and its pagination will be disabled; @pxref{Screen Size}.
 @findex gdb.breakpoints
 @defun gdb.breakpoints ()
 Return a sequence holding all of @value{GDBN}'s breakpoints.
-@xref{Breakpoints In Python}, for more information.
+@xref{Breakpoints In Python}, for more information.  In @value{GDBN}
+version 7.11 and earlier, this function returned @code{None} if there
+were no breakpoints.  This peculiarity was subsequently fixed, and now
+@code{gdb.breakpoints} returns an empty sequence in this case.
 @end defun
 
 @findex gdb.parameter
index 611a41e..ed9cae6 100644 (file)
@@ -746,13 +746,13 @@ gdbpy_breakpoints (PyObject *self, PyObject *args)
   PyObject *list, *tuple;
 
   if (bppy_live == 0)
-    Py_RETURN_NONE;
+    return PyTuple_New (0);
 
   list = PyList_New (0);
   if (!list)
     return NULL;
 
-  /* If iteratre_over_breakpoints returns non NULL it signals an error
+  /* If iterate_over_breakpoints returns non NULL it signals an error
      condition.  In that case abandon building the list and return
      NULL.  */
   if (iterate_over_breakpoints (build_bp_list, list) != NULL)
index 16b756c..319c0f5 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-23  Tom Tromey  <tom@tromey.com>
+
+       PR python/17981:
+       * gdb.python/py-breakpoint.exp (test_bkpt_basic): Add test for
+       no-breakpoint case.
+
 2016-05-24  Pedro Alves  <palves@redhat.com>
 
        PR gdb/19828
index d1d1b22..f501aa9 100644 (file)
@@ -34,12 +34,15 @@ proc test_bkpt_basic { } {
        # Start with a fresh gdb.
        clean_restart ${testfile}
 
+       # We should start with no breakpoints.
+       gdb_test "python print (gdb.breakpoints())" "\\(\\)"
+
        if ![runto_main] then {
            fail "Cannot run to main."
            return 0
        }
 
-       # Initially there should be one breakpoint: main.
+       # Now there should be one breakpoint: main.
        gdb_py_test_silent_cmd "python blist = gdb.breakpoints()" \
            "Get Breakpoint List" 0
        gdb_test "python print (blist\[0\])" \