C++-fy struct interp/cli_interp/tui_interp/mi_interp
[deliverable/binutils-gdb.git] / gdb / cli / cli-interp.c
index e0327f6a99e9afc749ee40a2bf46c63fcfeb7a7d..8712c75f3962b3d480e1230c841b353a4c56c11d 100644 (file)
 #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.  */
This page took 0.027537 seconds and 4 git commands to generate.