diff options
author | Pedro Alves <palves@redhat.com> | 2017-02-03 16:30:04 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-02-03 16:30:04 +0000 |
commit | d6f9b0fbc7998909712cbc1b194f1cbd4ae8b6fa (patch) | |
tree | 2c0ddedef2b9335ea7364479480a69799393afbe /gdb/tui/tui-interp.c | |
parent | e666304ec603bb3249f80bac97200f2b4520ab0f (diff) | |
download | gdb-d6f9b0fbc7998909712cbc1b194f1cbd4ae8b6fa.zip gdb-d6f9b0fbc7998909712cbc1b194f1cbd4ae8b6fa.tar.gz gdb-d6f9b0fbc7998909712cbc1b194f1cbd4ae8b6fa.tar.bz2 |
C++-fy struct interp/cli_interp/tui_interp/mi_interp
- The interp->data field disappears, since we can put data in the
interpreter directly now. The "init" method remains in place, but
it now returns void.
- A few places check if the interpreter method is NULL before calling
it, and also check whether the method returns true/false. For some
of those methods, all current implementations always return true.
In those cases, this commit makes the C++-fied method return void
instead and cleans up the callers.
Tested on x86_64 Fedora 23.
gdb/ChangeLog:
2017-02-03 Pedro Alves <palves@redhat.com>
* cli/cli-interp.c (cli_interp_base::cli_interp_base)
(cli_interp_base::~cli_interp_base): New.
(cli_interp): New struct.
(as_cli_interp): Cast the interp itself to cli_interp.
(cli_interpreter_pre_command_loop): Rename to ...
(cli_interp_base::pre_command_loop): ... this. Remove 'self'
parameter.
(cli_interpreter_init): Rename to ...
(cli_interp::init): ... this. Remove 'self' parameter. Use
boolean. Make extern.
(cli_interpreter_resume): Rename to ...
(cli_interp::resume): ... this. Remove 'data' parameter. Make
extern.
(cli_interpreter_suspend): Rename to ...
(cli_interp::suspend): ... this. Remove 'data' parameter. Make
extern.
(cli_interpreter_exec): Rename to ...
(cli_interp::exec): ... this. Remove 'data' parameter. Make
extern.
(cli_interpreter_supports_command_editing): Rename to ...
(cli_interp_base::supports_command_editing): ... this. Remove
'interp' parameter. Make extern.
(cli_ui_out): Rename to ...
(cli_interp::interp_ui_out): ... this. Remove 'interp' parameter.
Make extern.
(cli_set_logging): Rename to ...
(cli_interp_base::set_logging): ... this. Remove 'interp'
parameter. Make extern.
(cli_interp_procs): Delete.
(cli_interp_factory): Adjust to use "new".
* cli/cli-interp.h: Include "interps.h".
(struct cli_interp_base): New struct.
* interps.c (struct interp): Delete. Fields moved to interps.h.
(interp_new): Delete.
(interp::interp, interp::~interp): New.
(interp_set): Use bool, and return void. Assume the interpreter
has suspend, init and resume methods, and that the all return
void.
(set_top_level_interpreter): interp_set returns void.
(interp_ui_out): Adapt.
(current_interp_set_logging): Adapt.
(interp_data): Delete.
(interp_pre_command_loop, interp_supports_command_editing): Adapt.
(interp_exec): Adapt.
(top_level_interpreter_data): Delete.
* interps.h (interp_init_ftype, interp_resume_ftype)
(interp_suspend_ftype, interp_exec_ftype)
(interp_pre_command_loop_ftype, interp_ui_out_ftype): Delete.
(class interp): New.
(interp_new): Delete.
(interp_set): Now returns void. Use bool.
(interp_data, top_level_interpreter_data): Delete.
* mi/mi-common.h: Include interps.h.
(class mi_interp): Inherit from interp. Define a ctor. Declare
init, resume, suspect, exec, interp_ui_out, set_logging and
pre_command_loop methods.
* mi/mi-interp.c (as_mi_interp): Cast the interp itself.
(mi_interpreter_init): Rename to ...
(mi_interp::init): ... this. Remove the 'interp' parameter, use
bool, return void and make extern. Adjust.
(mi_interpreter_resume): ... Rename to ...
(mi_interp::resume): ... this. Remove the 'data' parameter,
return void and make extern. Adjust.
(mi_interpreter_suspend): ... Rename to ...
(mi_interp::suspend): ... this. Remove the 'data' parameter,
return void and make extern. Adjust.
(mi_interpreter_exec): ... Rename to ...
(mi_interp::exec): ... this. Remove the 'data' parameter and make
extern. Adjust.
(mi_interpreter_pre_command_loop): ... Rename to ...
(mi_interp::pre_command_loop): ... this. Remove the 'self'
parameter and make extern.
(mi_on_normal_stop_1): Adjust.
(mi_ui_out): Rename to ...
(mi_interp::interp_ui_out): ... this. Remove the 'interp'
parameter and make extern. Adjust.
(mi_set_logging): Rename to ...
(mi_interp::set_logging): ... this. Remove the 'interp'
parameter and make extern. Adjust.
(mi_interp_procs): Delete.
(mi_interp_factory): Adjust to use 'new'.
* mi/mi-main.c (mi_cmd_gdb_exit, captured_mi_execute_command)
(mi_print_exception, mi_execute_command, mi_load_progress):
Adjust.
* tui/tui-interp.c (tui_interp): New class.
(as_tui_interp): Return a tui_interp pointer.
(tui_on_normal_stop, tui_on_signal_received)
(tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited)
(tui_on_no_history, tui_on_user_selected_context_changed): Adjust
to use interp::interp_ui_out.
(tui_init): Rename to ...
(tui_interp::init): ... this. Remove the 'self' parameter, use
bool, return void and make extern. Adjust.
(tui_resume): Rename to ...
(tui_interp::resume): ... this. Remove the 'data' parameter,
return void and make extern. Adjust.
(tui_suspend): Rename to ...
(tui_interp::suspend): ... this. Remove the 'data' parameter,
return void and make extern. Adjust.
(tui_ui_out): Rename to ...
(tui_interp::interp_ui_out): ... this. Remove the 'self'
parameter, and make extern. Adjust.
(tui_exec): Rename to ...
(tui_interp::exec): ... this. Remove the 'data' parameter and
make extern.
(tui_interp_procs): Delete.
(tui_interp_factory): Use "new".
Diffstat (limited to 'gdb/tui/tui-interp.c')
-rw-r--r-- | gdb/tui/tui-interp.c | 74 |
1 files changed, 35 insertions, 39 deletions
diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c index e2c0605..702c342 100644 --- a/gdb/tui/tui-interp.c +++ b/gdb/tui/tui-interp.c @@ -34,20 +34,32 @@ #include "observer.h" #include "gdbthread.h" -static struct ui_out *tui_ui_out (struct interp *self); - /* Set to 1 when the TUI mode must be activated when we first start gdb. */ static int tui_start_enabled = 0; +class tui_interp final : public cli_interp_base +{ +public: + explicit tui_interp (const char *name) + : cli_interp_base (name) + {} + + void init (bool top_level) override; + void resume () override; + void suspend () override; + gdb_exception exec (const char *command_str) override; + ui_out *interp_ui_out () override; +}; + /* Returns the INTERP if the INTERP is a TUI, and returns NULL otherwise. */ -static struct interp * +static tui_interp * as_tui_interp (struct interp *interp) { if (strcmp (interp_name (interp), INTERP_TUI) == 0) - return interp; + return (tui_interp *) interp; return NULL; } @@ -84,7 +96,7 @@ tui_on_normal_stop (struct bpstats *bs, int print_frame) thread = inferior_thread (); if (should_print_stop_to_console (interp, thread)) - print_stop_event (tui_ui_out (tui)); + print_stop_event (tui->interp_ui_out ()); } } @@ -100,7 +112,7 @@ tui_on_signal_received (enum gdb_signal siggnal) if (tui == NULL) continue; - print_signal_received_reason (tui_ui_out (tui), siggnal); + print_signal_received_reason (tui->interp_ui_out (), siggnal); } } @@ -116,7 +128,7 @@ tui_on_end_stepping_range (void) if (tui == NULL) continue; - print_end_stepping_range_reason (tui_ui_out (tui)); + print_end_stepping_range_reason (tui->interp_ui_out ()); } } @@ -132,7 +144,7 @@ tui_on_signal_exited (enum gdb_signal siggnal) if (tui == NULL) continue; - print_signal_exited_reason (tui_ui_out (tui), siggnal); + print_signal_exited_reason (tui->interp_ui_out (), siggnal); } } @@ -148,7 +160,7 @@ tui_on_exited (int exitstatus) if (tui == NULL) continue; - print_exited_reason (tui_ui_out (tui), exitstatus); + print_exited_reason (tui->interp_ui_out (), exitstatus); } } @@ -164,7 +176,7 @@ tui_on_no_history (void) if (tui == NULL) continue; - print_no_history_reason (tui_ui_out (tui)); + print_no_history_reason (tui->interp_ui_out ()); } } @@ -215,19 +227,19 @@ tui_on_user_selected_context_changed (user_selected_what selection) continue; if (selection & USER_SELECTED_INFERIOR) - print_selected_inferior (tui_ui_out (tui)); + print_selected_inferior (tui->interp_ui_out ()); if (tp != NULL && ((selection & (USER_SELECTED_THREAD | USER_SELECTED_FRAME)))) - print_selected_thread_frame (tui_ui_out (tui), selection); + print_selected_thread_frame (tui->interp_ui_out (), selection); } } /* These implement the TUI interpreter. */ -static void * -tui_init (struct interp *self, int top_level) +void +tui_interp::init (bool top_level) { /* Install exit handler to leave the screen in a good shape. */ atexit (tui_exit); @@ -238,12 +250,10 @@ tui_init (struct interp *self, int top_level) tui_initialize_win (); if (ui_file_isatty (gdb_stdout)) tui_initialize_readline (); - - return NULL; } -static int -tui_resume (void *data) +void +tui_interp::resume () { struct ui *ui = current_ui; struct ui_file *stream; @@ -268,19 +278,17 @@ tui_resume (void *data) if (tui_start_enabled) tui_enable (); - return 1; } -static int -tui_suspend (void *data) +void +tui_interp::suspend () { tui_start_enabled = tui_active; tui_disable (); - return 1; } -static struct ui_out * -tui_ui_out (struct interp *self) +ui_out * +tui_interp::interp_ui_out () { if (tui_active) return tui_out; @@ -288,31 +296,19 @@ tui_ui_out (struct interp *self) return tui_old_uiout; } -static struct gdb_exception -tui_exec (void *data, const char *command_str) +gdb_exception +tui_interp::exec (const char *command_str) { internal_error (__FILE__, __LINE__, _("tui_exec called")); } -/* The TUI interpreter's vtable. */ - -static const struct interp_procs tui_interp_procs = { - tui_init, - tui_resume, - tui_suspend, - tui_exec, - tui_ui_out, - cli_set_logging, - cli_interpreter_pre_command_loop, - cli_interpreter_supports_command_editing, -}; /* Factory for TUI interpreters. */ static struct interp * tui_interp_factory (const char *name) { - return interp_new (name, &tui_interp_procs, NULL); + return new tui_interp (name); } /* Provide a prototype to silence -Wmissing-prototypes. */ |