aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui/tui-interp.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-02-03 16:30:04 +0000
committerPedro Alves <palves@redhat.com>2017-02-03 16:30:04 +0000
commitd6f9b0fbc7998909712cbc1b194f1cbd4ae8b6fa (patch)
tree2c0ddedef2b9335ea7364479480a69799393afbe /gdb/tui/tui-interp.c
parente666304ec603bb3249f80bac97200f2b4520ab0f (diff)
downloadgdb-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.c74
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. */