diff options
Diffstat (limited to 'gdb/cli')
-rw-r--r-- | gdb/cli/cli-interp.c | 89 | ||||
-rw-r--r-- | gdb/cli/cli-interp.h | 15 |
2 files changed, 59 insertions, 45 deletions
diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index e0327f6..8712c75 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -30,13 +30,37 @@ #include "gdbthread.h" #include "thread-fsm.h" +cli_interp_base::cli_interp_base (const char *name) + : interp (name) +{} + +cli_interp_base::~cli_interp_base () +{} + /* The console interpreter. */ -struct cli_interp + +class cli_interp final : public cli_interp_base { + public: + explicit cli_interp (const char *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; + /* The ui_out for the console interpreter. */ cli_ui_out *cli_uiout; }; +cli_interp::cli_interp (const char *name) + : cli_interp_base (name) +{ + /* Create a default uiout builder for the CLI. */ + this->cli_uiout = cli_out_new (gdb_stdout); +} + /* Suppress notification struct. */ struct cli_suppress_notification cli_suppress_notification = { @@ -50,7 +74,7 @@ static struct cli_interp * as_cli_interp (struct interp *interp) { if (strcmp (interp_name (interp), INTERP_CONSOLE) == 0) - return (struct cli_interp *) interp_data (interp); + return (struct cli_interp *) interp; return NULL; } @@ -255,24 +279,23 @@ cli_on_user_selected_context_changed (user_selected_what selection) /* pre_command_loop implementation. */ void -cli_interpreter_pre_command_loop (struct interp *self) +cli_interp_base::pre_command_loop () { display_gdb_prompt (0); } /* These implement the cli out interpreter: */ -static void * -cli_interpreter_init (struct interp *self, int top_level) +void +cli_interp::init (bool top_level) { - return interp_data (self); } -static int -cli_interpreter_resume (void *data) +void +cli_interp::resume () { struct ui *ui = current_ui; - struct cli_interp *cli = (struct cli_interp *) data; + struct cli_interp *cli = this; struct ui_file *stream; /*sync_execution = 1; */ @@ -294,21 +317,18 @@ cli_interpreter_resume (void *data) if (stream != NULL) cli->cli_uiout->set_stream (gdb_stdout); - - return 1; } -static int -cli_interpreter_suspend (void *data) +void +cli_interp::suspend () { gdb_disable_readline (); - return 1; } -static struct gdb_exception -cli_interpreter_exec (void *data, const char *command_str) +gdb_exception +cli_interp::exec (const char *command_str) { - struct cli_interp *cli = (struct cli_interp *) data; + struct cli_interp *cli = this; struct ui_file *old_stream; struct gdb_exception result; @@ -330,10 +350,10 @@ cli_interpreter_exec (void *data, const char *command_str) return result; } -int -cli_interpreter_supports_command_editing (struct interp *interp) +bool +cli_interp_base::supports_command_editing () { - return 1; + return true; } static struct gdb_exception @@ -365,10 +385,10 @@ safe_execute_command (struct ui_out *command_uiout, char *command, int from_tty) return e; } -static struct ui_out * -cli_ui_out (struct interp *self) +ui_out * +cli_interp::interp_ui_out () { - struct cli_interp *cli = (struct cli_interp *) interp_data (self); + struct cli_interp *cli = (struct cli_interp *) this; return cli->cli_uiout; } @@ -388,8 +408,7 @@ static saved_output_files saved_output; /* See cli-interp.h. */ void -cli_set_logging (struct interp *interp, - ui_file_up logfile, bool logging_redirect) +cli_interp_base::set_logging (ui_file_up logfile, bool logging_redirect) { if (logfile != NULL) { @@ -430,30 +449,12 @@ cli_set_logging (struct interp *interp, } } -/* The CLI interpreter's vtable. */ - -static const struct interp_procs cli_interp_procs = { - cli_interpreter_init, /* init_proc */ - cli_interpreter_resume, /* resume_proc */ - cli_interpreter_suspend, /* suspend_proc */ - cli_interpreter_exec, /* exec_proc */ - cli_ui_out, /* ui_out_proc */ - cli_set_logging, /* set_logging_proc */ - cli_interpreter_pre_command_loop, /* pre_command_loop_proc */ - cli_interpreter_supports_command_editing, /* supports_command_editing_proc */ -}; - /* Factory for CLI interpreters. */ static struct interp * cli_interp_factory (const char *name) { - struct cli_interp *cli = XNEW (struct cli_interp); - - /* Create a default uiout builder for the CLI. */ - cli->cli_uiout = cli_out_new (gdb_stdout); - - return interp_new (name, &cli_interp_procs, cli); + return new cli_interp (name); } /* Standard gdb initialization hook. */ diff --git a/gdb/cli/cli-interp.h b/gdb/cli/cli-interp.h index f93548c..de9da83 100644 --- a/gdb/cli/cli-interp.h +++ b/gdb/cli/cli-interp.h @@ -18,7 +18,20 @@ #ifndef CLI_INTERP_H #define CLI_INTERP_H 1 -struct interp; +#include "interps.h" + +/* A console-like interpreter. Implements functionality common to the + CLI and the TUI. */ +class cli_interp_base : public interp +{ +public: + explicit cli_interp_base (const char *name); + virtual ~cli_interp_base () = 0; + + void set_logging (ui_file_up logfile, bool logging_redirect) override; + void pre_command_loop () override; + bool supports_command_editing () override; +}; /* Make the output ui_file to use when logging is enabled. CURR_OUTPUT is the stream where output is currently being sent to |