PR python/12216:
authorTom Tromey <tromey@redhat.com>
Mon, 31 Jan 2011 16:52:35 +0000 (16:52 +0000)
committerTom Tromey <tromey@redhat.com>
Mon, 31 Jan 2011 16:52:35 +0000 (16:52 +0000)
* python/python.c (execute_gdb_command): Call
prevent_dont_repeat.
* top.c (suppress_dont_repeat): New global.
(dont_repeat): Use it.
(prevent_dont_repeat): New function.
* command.h (prevent_dont_repeat): Declare.

gdb/ChangeLog
gdb/command.h
gdb/python/python.c
gdb/top.c

index 5e749fa..7b4aae2 100644 (file)
@@ -1,5 +1,15 @@
 2011-01-31  Tom Tromey  <tromey@redhat.com>
 
+       PR python/12216:
+       * python/python.c (execute_gdb_command): Call
+       prevent_dont_repeat.
+       * top.c (suppress_dont_repeat): New global.
+       (dont_repeat): Use it.
+       (prevent_dont_repeat): New function.
+       * command.h (prevent_dont_repeat): Declare.
+
+2011-01-31  Tom Tromey  <tromey@redhat.com>
+
        * infcmd.c (finish_backward): Use breakpoint_set_silent.
        * python/py-breakpoint.c (bppy_set_silent): Use
        breakpoint_set_silent.
index f53cc80..d2f5ca5 100644 (file)
@@ -355,6 +355,8 @@ extern void error_no_arg (char *) ATTRIBUTE_NORETURN;
 
 extern void dont_repeat (void);
 
+extern struct cleanup *prevent_dont_repeat (void);
+
 /* Used to mark commands that don't do anything.  If we just leave the
    function field NULL, the command is interpreted as a help topic, or
    as a class of commands.  */
index 134e730..b2ee8f9 100644 (file)
@@ -375,6 +375,7 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
       char *copy = xstrdup (arg);
       struct cleanup *cleanup = make_cleanup (xfree, copy);
 
+      prevent_dont_repeat ();
       if (to_string)
        result = execute_command_to_string (copy, from_tty);
       else
index d14f308..df2b163 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -546,12 +546,17 @@ command_loop (void)
     }
 }
 \f
+/* When nonzero, cause dont_repeat to do nothing.  This should only be
+   set via prevent_dont_repeat.  */
+
+static int suppress_dont_repeat = 0;
+
 /* Commands call this if they do not want to be repeated by null lines.  */
 
 void
 dont_repeat (void)
 {
-  if (server_command)
+  if (suppress_dont_repeat || server_command)
     return;
 
   /* If we aren't reading from standard input, we are saving the last
@@ -560,6 +565,19 @@ dont_repeat (void)
   if (instream == stdin)
     *line = 0;
 }
+
+/* Prevent dont_repeat from working, and return a cleanup that
+   restores the previous state.  */
+
+struct cleanup *
+prevent_dont_repeat (void)
+{
+  struct cleanup *result = make_cleanup_restore_integer (&suppress_dont_repeat);
+
+  suppress_dont_repeat = 1;
+  return result;
+}
+
 \f
 /* Read a line from the stream "instream" without command line editing.