From 47a80e909327f6be0451b7792162266e6695f23d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 31 Jan 2011 16:52:35 +0000 Subject: [PATCH] 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. --- gdb/ChangeLog | 10 ++++++++++ gdb/command.h | 2 ++ gdb/python/python.c | 1 + gdb/top.c | 20 +++++++++++++++++++- 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5e749fa..7b4aae2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,15 @@ 2011-01-31 Tom Tromey + 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 + * infcmd.c (finish_backward): Use breakpoint_set_silent. * python/py-breakpoint.c (bppy_set_silent): Use breakpoint_set_silent. diff --git a/gdb/command.h b/gdb/command.h index f53cc80..d2f5ca5 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -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. */ diff --git a/gdb/python/python.c b/gdb/python/python.c index 134e730..b2ee8f9 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -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 diff --git a/gdb/top.c b/gdb/top.c index d14f308..df2b163 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -546,12 +546,17 @@ command_loop (void) } } +/* 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; +} + /* Read a line from the stream "instream" without command line editing. -- 2.7.4