2011-08-04 Pedro Alves <pedro@codesourcery.com>
* event-loop.c (gdb_do_one_event): Remove `data' parameter. (start_event_loop): Use TRY_CATCH instead of catch_errors. * event-loop.h (gdb_do_one_event): Remove `data' parameter. * top.c (gdb_readline_wrapper): Adjust. * tui/tui-interp.c (tui_command_loop): (_initialize_tui_interp): Don't install it.
This commit is contained in:
parent
79a45e254f
commit
e0dd0826e2
5 changed files with 31 additions and 101 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2011-08-04 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* event-loop.c (gdb_do_one_event): Remove `data' parameter.
|
||||||
|
(start_event_loop): Use TRY_CATCH instead of catch_errors.
|
||||||
|
* event-loop.h (gdb_do_one_event): Remove `data' parameter.
|
||||||
|
* top.c (gdb_readline_wrapper): Adjust.
|
||||||
|
* tui/tui-interp.c (tui_command_loop):
|
||||||
|
(_initialize_tui_interp): Don't install it.
|
||||||
|
|
||||||
2011-08-04 Pedro Alves <pedro@codesourcery.com>
|
2011-08-04 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* ui-out.h (uiout): Rename to ...
|
* ui-out.h (uiout): Rename to ...
|
||||||
|
|
|
@ -410,11 +410,10 @@ process_event (void)
|
||||||
/* Process one high level event. If nothing is ready at this time,
|
/* Process one high level event. If nothing is ready at this time,
|
||||||
wait for something to happen (via gdb_wait_for_event), then process
|
wait for something to happen (via gdb_wait_for_event), then process
|
||||||
it. Returns >0 if something was done otherwise returns <0 (this
|
it. Returns >0 if something was done otherwise returns <0 (this
|
||||||
can happen if there are no event sources to wait for). If an error
|
can happen if there are no event sources to wait for). */
|
||||||
occurs catch_errors() which calls this function returns zero. */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
gdb_do_one_event (void *data)
|
gdb_do_one_event (void)
|
||||||
{
|
{
|
||||||
static int event_source_head = 0;
|
static int event_source_head = 0;
|
||||||
const int number_of_sources = 3;
|
const int number_of_sources = 3;
|
||||||
|
@ -478,30 +477,30 @@ gdb_do_one_event (void *data)
|
||||||
void
|
void
|
||||||
start_event_loop (void)
|
start_event_loop (void)
|
||||||
{
|
{
|
||||||
/* Loop until there is nothing to do. This is the entry point to the
|
/* Loop until there is nothing to do. This is the entry point to
|
||||||
event loop engine. gdb_do_one_event, called via catch_errors()
|
the event loop engine. gdb_do_one_event will process one event
|
||||||
will process one event for each invocation. It blocks waits for
|
for each invocation. It blocks waiting for an event and then
|
||||||
an event and then processes it. >0 when an event is processed, 0
|
processes it. */
|
||||||
when catch_errors() caught an error and <0 when there are no
|
|
||||||
longer any event sources registered. */
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int gdb_result;
|
volatile struct gdb_exception ex;
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
gdb_result = catch_errors (gdb_do_one_event, 0, "", RETURN_MASK_ALL);
|
TRY_CATCH (ex, RETURN_MASK_ALL)
|
||||||
if (gdb_result < 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* If we long-jumped out of do_one_event, we probably
|
|
||||||
didn't get around to resetting the prompt, which leaves
|
|
||||||
readline in a messed-up state. Reset it here. */
|
|
||||||
|
|
||||||
if (gdb_result == 0)
|
|
||||||
{
|
{
|
||||||
|
result = gdb_do_one_event ();
|
||||||
|
}
|
||||||
|
if (ex.reason < 0)
|
||||||
|
{
|
||||||
|
exception_print (gdb_stderr, ex);
|
||||||
|
|
||||||
/* If any exception escaped to here, we better enable
|
/* If any exception escaped to here, we better enable
|
||||||
stdin. Otherwise, any command that calls async_disable_stdin,
|
stdin. Otherwise, any command that calls async_disable_stdin,
|
||||||
and then throws, will leave stdin inoperable. */
|
and then throws, will leave stdin inoperable. */
|
||||||
async_enable_stdin ();
|
async_enable_stdin ();
|
||||||
|
/* If we long-jumped out of do_one_event, we probably didn't
|
||||||
|
get around to resetting the prompt, which leaves readline
|
||||||
|
in a messed-up state. Reset it here. */
|
||||||
/* FIXME: this should really be a call to a hook that is
|
/* FIXME: this should really be a call to a hook that is
|
||||||
interface specific, because interfaces can display the
|
interface specific, because interfaces can display the
|
||||||
prompt in their own way. */
|
prompt in their own way. */
|
||||||
|
@ -517,6 +516,8 @@ start_event_loop (void)
|
||||||
/* Maybe better to set a flag to be checked somewhere as to
|
/* Maybe better to set a flag to be checked somewhere as to
|
||||||
whether display the prompt or not. */
|
whether display the prompt or not. */
|
||||||
}
|
}
|
||||||
|
if (result < 0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We are done with the event loop. There are no more event sources
|
/* We are done with the event loop. There are no more event sources
|
||||||
|
|
|
@ -91,7 +91,7 @@ queue_position;
|
||||||
/* Exported functions from event-loop.c */
|
/* Exported functions from event-loop.c */
|
||||||
|
|
||||||
extern void start_event_loop (void);
|
extern void start_event_loop (void);
|
||||||
extern int gdb_do_one_event (void *data);
|
extern int gdb_do_one_event (void);
|
||||||
extern void delete_file_handler (int fd);
|
extern void delete_file_handler (int fd);
|
||||||
extern void add_file_handler (int fd, handler_func *proc,
|
extern void add_file_handler (int fd, handler_func *proc,
|
||||||
gdb_client_data client_data);
|
gdb_client_data client_data);
|
||||||
|
|
|
@ -797,8 +797,7 @@ gdb_readline_wrapper (char *prompt)
|
||||||
(*after_char_processing_hook) ();
|
(*after_char_processing_hook) ();
|
||||||
gdb_assert (after_char_processing_hook == NULL);
|
gdb_assert (after_char_processing_hook == NULL);
|
||||||
|
|
||||||
/* gdb_do_one_event argument is unused. */
|
while (gdb_do_one_event () >= 0)
|
||||||
while (gdb_do_one_event (NULL) >= 0)
|
|
||||||
if (gdb_readline_wrapper_done)
|
if (gdb_readline_wrapper_done)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -132,84 +132,6 @@ tui_exec (void *data, const char *command_str)
|
||||||
internal_error (__FILE__, __LINE__, _("tui_exec called"));
|
internal_error (__FILE__, __LINE__, _("tui_exec called"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Initialize all the necessary variables, start the event loop,
|
|
||||||
register readline, and stdin, start the loop. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
tui_command_loop (void *data)
|
|
||||||
{
|
|
||||||
/* If we are using readline, set things up and display the first
|
|
||||||
prompt, otherwise just print the prompt. */
|
|
||||||
if (async_command_editing_p)
|
|
||||||
{
|
|
||||||
int length;
|
|
||||||
char *a_prompt;
|
|
||||||
char *gdb_prompt = get_prompt (0);
|
|
||||||
|
|
||||||
/* Tell readline what the prompt to display is and what function
|
|
||||||
it will need to call after a whole line is read. This also
|
|
||||||
displays the first prompt. */
|
|
||||||
length = strlen (get_prefix (0))
|
|
||||||
+ strlen (gdb_prompt) + strlen (get_suffix (0)) + 1;
|
|
||||||
a_prompt = (char *) alloca (length);
|
|
||||||
strcpy (a_prompt, get_prefix (0));
|
|
||||||
strcat (a_prompt, gdb_prompt);
|
|
||||||
strcat (a_prompt, get_suffix (0));
|
|
||||||
rl_callback_handler_install (a_prompt, input_handler);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
display_gdb_prompt (0);
|
|
||||||
|
|
||||||
/* Loop until there is nothing to do. This is the entry point to the
|
|
||||||
event loop engine. gdb_do_one_event, called via catch_errors()
|
|
||||||
will process one event for each invocation. It blocks waits for
|
|
||||||
an event and then processes it. >0 when an event is processed, 0
|
|
||||||
when catch_errors() caught an error and <0 when there are no
|
|
||||||
longer any event sources registered. */
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
int result = catch_errors (gdb_do_one_event, 0, "", RETURN_MASK_ALL);
|
|
||||||
|
|
||||||
if (result < 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Update gdb output according to TUI mode. Since catch_errors
|
|
||||||
preserves the uiout from changing, this must be done at top
|
|
||||||
level of event loop. */
|
|
||||||
if (tui_active)
|
|
||||||
current_uiout = tui_out;
|
|
||||||
else
|
|
||||||
current_uiout = tui_old_uiout;
|
|
||||||
|
|
||||||
if (result == 0)
|
|
||||||
{
|
|
||||||
/* If any exception escaped to here, we better enable
|
|
||||||
stdin. Otherwise, any command that calls async_disable_stdin,
|
|
||||||
and then throws, will leave stdin inoperable. */
|
|
||||||
async_enable_stdin ();
|
|
||||||
/* FIXME: this should really be a call to a hook that is
|
|
||||||
interface specific, because interfaces can display the
|
|
||||||
prompt in their own way. */
|
|
||||||
display_gdb_prompt (0);
|
|
||||||
/* This call looks bizarre, but it is required. If the user
|
|
||||||
entered a command that caused an error,
|
|
||||||
after_char_processing_hook won't be called from
|
|
||||||
rl_callback_read_char_wrapper. Using a cleanup there
|
|
||||||
won't work, since we want this function to be called
|
|
||||||
after a new prompt is printed. */
|
|
||||||
if (after_char_processing_hook)
|
|
||||||
(*after_char_processing_hook) ();
|
|
||||||
/* Maybe better to set a flag to be checked somewhere as to
|
|
||||||
whether display the prompt or not. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We are done with the event loop. There are no more event sources
|
|
||||||
to listen to. So we exit GDB. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||||
extern initialize_file_ftype _initialize_tui_interp;
|
extern initialize_file_ftype _initialize_tui_interp;
|
||||||
|
|
||||||
|
@ -222,7 +144,6 @@ _initialize_tui_interp (void)
|
||||||
tui_suspend,
|
tui_suspend,
|
||||||
tui_exec,
|
tui_exec,
|
||||||
tui_display_prompt_p,
|
tui_display_prompt_p,
|
||||||
tui_command_loop,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Create a default uiout builder for the TUI. */
|
/* Create a default uiout builder for the TUI. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue