From 4d09c5b4239111b21fd6ee20054c71b260c3b8ae Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Fri, 6 Sep 2013 08:53:09 +0000 Subject: [PATCH] Give every interpreter a command_loop_proc. https://sourceware.org/ml/gdb-patches/2013-09/msg00179.html gdb/ChangeLog * cli/cli-interp.c (_initialize_cli_interp): Add a command_loop_proc to interp_procs. * event-top.c (cli_command_loop): Change signature to match interp_command_loop_ftype. * event-top.h (cli_command_loop): Same. * interps.c (interp_new): Require every interpreter to have a command_loop_proc. (current_interp_command_loop): Just call the command_loop_proc on the current interpreter. * tui/tui-interp.c (_initialize_tui_interp): Add a command_loop_proc to interp_procs. --- gdb/ChangeLog | 14 ++++++++++++++ gdb/cli/cli-interp.c | 4 +++- gdb/event-top.c | 6 ++++-- gdb/event-top.h | 2 +- gdb/interps.c | 13 ++++++------- gdb/tui/tui-interp.c | 2 ++ 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8a30eb2990d..e4ebab86178 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2013-09-06 Andrew Burgess + + * cli/cli-interp.c (_initialize_cli_interp): Add a + command_loop_proc to interp_procs. + * event-top.c (cli_command_loop): Change signature to match + interp_command_loop_ftype. + * event-top.h (cli_command_loop): Same. + * interps.c (interp_new): Require every interpreter to have a + command_loop_proc. + (current_interp_command_loop): Just call the command_loop_proc on + the current interpreter. + * tui/tui-interp.c (_initialize_tui_interp): Add a + command_loop_proc to interp_procs. + 2013-09-06 Ricard Wanderlof * cris-tdep.c (cris_gdbarch_init): Add call to diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index 1003cc73bb1..ac3d9a88b2e 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -151,7 +151,9 @@ _initialize_cli_interp (void) cli_interpreter_suspend, /* suspend_proc */ cli_interpreter_exec, /* exec_proc */ cli_interpreter_display_prompt_p, /* prompt_proc_p */ - cli_ui_out /* ui_out_proc */ + cli_ui_out, /* ui_out_proc */ + NULL, /* set_logging_proc */ + cli_command_loop /* command_loop_proc */ }; struct interp *cli_interp; diff --git a/gdb/event-top.c b/gdb/event-top.c index f1d55b3c2da..1f2e6fb9e7c 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -167,9 +167,11 @@ rl_callback_read_char_wrapper (gdb_client_data client_data) } /* Initialize all the necessary variables, start the event loop, - register readline, and stdin, start the loop. */ + register readline, and stdin, start the loop. The DATA is the + interpreter data cookie, ignored for now. */ + void -cli_command_loop (void) +cli_command_loop (void *data) { display_gdb_prompt (0); diff --git a/gdb/event-top.h b/gdb/event-top.h index e6166f6a723..97142d4686a 100644 --- a/gdb/event-top.h +++ b/gdb/event-top.h @@ -62,6 +62,6 @@ extern void (*input_handler) (char *); extern int input_fd; extern void (*after_char_processing_hook) (void); -extern void cli_command_loop (void); +extern void cli_command_loop (void *); #endif diff --git a/gdb/interps.c b/gdb/interps.c index 33e0f721ac4..7f1938511cd 100644 --- a/gdb/interps.c +++ b/gdb/interps.c @@ -101,6 +101,9 @@ interp_new (const char *name, const struct interp_procs *procs) new_interp->procs = procs; new_interp->inited = 0; + /* Check for required procs. */ + gdb_assert (procs->command_loop_proc != NULL); + return new_interp; } @@ -319,13 +322,9 @@ current_interp_display_prompt_p (void) void current_interp_command_loop (void) { - /* Somewhat messy. For the moment prop up all the old ways of - selecting the command loop. */ - if (current_interpreter != NULL - && current_interpreter->procs->command_loop_proc != NULL) - current_interpreter->procs->command_loop_proc (current_interpreter->data); - else - cli_command_loop (); + gdb_assert (current_interpreter != NULL); + + current_interpreter->procs->command_loop_proc (current_interpreter->data); } int diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c index 42526e6452f..1095220fd37 100644 --- a/gdb/tui/tui-interp.c +++ b/gdb/tui/tui-interp.c @@ -153,6 +153,8 @@ _initialize_tui_interp (void) tui_exec, tui_display_prompt_p, tui_ui_out, + NULL, + cli_command_loop }; struct interp *tui_interp; -- 2.30.2