aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/tui')
-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. */