gdb: remove ui_interp_info
I don't think that having struct ui_interp_info separated from struct ui is very useful. As of today, it looks like an unnecessary indirection layer. Move the contents of ui_interp_info directly into struct ui, and update all users. Change-Id: I817ba6e047dbcc4ba15b666af184b40bfed7e521
This commit is contained in:
parent
4a91f820ef
commit
970c6b7e15
2 changed files with 30 additions and 72 deletions
|
@ -41,41 +41,6 @@
|
|||
#include "gdbsupport/buildargv.h"
|
||||
#include "gdbsupport/scope-exit.h"
|
||||
|
||||
/* Each UI has its own independent set of interpreters. */
|
||||
|
||||
struct ui_interp_info
|
||||
{
|
||||
ui_interp_info () = default;
|
||||
DISABLE_COPY_AND_ASSIGN (ui_interp_info);
|
||||
|
||||
/* Each top level has its own independent set of interpreters. */
|
||||
intrusive_list<interp> interp_list;
|
||||
interp *current_interpreter = nullptr;
|
||||
interp *top_level_interpreter = nullptr;
|
||||
|
||||
/* The interpreter that is active while `interp_exec' is active, NULL
|
||||
at all other times. */
|
||||
interp *command_interpreter = nullptr;
|
||||
};
|
||||
|
||||
/* Get UI's ui_interp_info object. */
|
||||
|
||||
static ui_interp_info &
|
||||
get_interp_info (struct ui *ui)
|
||||
{
|
||||
if (ui->interp_info == NULL)
|
||||
ui->interp_info = new ui_interp_info;
|
||||
return *ui->interp_info;
|
||||
}
|
||||
|
||||
/* Get the current UI's ui_interp_info object. */
|
||||
|
||||
static ui_interp_info &
|
||||
get_current_interp_info (void)
|
||||
{
|
||||
return get_interp_info (current_ui);
|
||||
}
|
||||
|
||||
/* The magic initialization routine for this module. */
|
||||
|
||||
static struct interp *interp_lookup_existing (struct ui *ui,
|
||||
|
@ -128,11 +93,9 @@ interp_factory_register (const char *name, interp_factory_func func)
|
|||
static void
|
||||
interp_add (struct ui *ui, struct interp *interp)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_interp_info (ui);
|
||||
|
||||
gdb_assert (interp_lookup_existing (ui, interp->name ()) == NULL);
|
||||
|
||||
ui_interp.interp_list.push_back (*interp);
|
||||
ui->interp_list.push_back (*interp);
|
||||
}
|
||||
|
||||
/* This sets the current interpreter to be INTERP. If INTERP has not
|
||||
|
@ -149,13 +112,12 @@ interp_add (struct ui *ui, struct interp *interp)
|
|||
static void
|
||||
interp_set (struct interp *interp, bool top_level)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
struct interp *old_interp = ui_interp.current_interpreter;
|
||||
struct interp *old_interp = current_ui->current_interpreter;
|
||||
|
||||
/* If we already have an interpreter, then trying to
|
||||
set top level interpreter is kinda pointless. */
|
||||
gdb_assert (!top_level || !ui_interp.current_interpreter);
|
||||
gdb_assert (!top_level || !ui_interp.top_level_interpreter);
|
||||
gdb_assert (!top_level || !current_ui->current_interpreter);
|
||||
gdb_assert (!top_level || !current_ui->top_level_interpreter);
|
||||
|
||||
if (old_interp != NULL)
|
||||
{
|
||||
|
@ -163,9 +125,9 @@ interp_set (struct interp *interp, bool top_level)
|
|||
old_interp->suspend ();
|
||||
}
|
||||
|
||||
ui_interp.current_interpreter = interp;
|
||||
current_ui->current_interpreter = interp;
|
||||
if (top_level)
|
||||
ui_interp.top_level_interpreter = interp;
|
||||
current_ui->top_level_interpreter = interp;
|
||||
|
||||
if (interpreter_p != interp->name ())
|
||||
interpreter_p = interp->name ();
|
||||
|
@ -202,9 +164,7 @@ interp_set (struct interp *interp, bool top_level)
|
|||
static struct interp *
|
||||
interp_lookup_existing (struct ui *ui, const char *name)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_interp_info (ui);
|
||||
|
||||
for (interp &interp : ui_interp.interp_list)
|
||||
for (interp &interp : ui->interp_list)
|
||||
if (strcmp (interp.name (), name) == 0)
|
||||
return &interp;
|
||||
|
||||
|
@ -253,8 +213,7 @@ void
|
|||
current_interp_set_logging (ui_file_up logfile, bool logging_redirect,
|
||||
bool debug_redirect)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
struct interp *interp = ui_interp.current_interpreter;
|
||||
struct interp *interp = current_ui->current_interpreter;
|
||||
|
||||
interp->set_logging (std::move (logfile), logging_redirect, debug_redirect);
|
||||
}
|
||||
|
@ -263,12 +222,12 @@ current_interp_set_logging (ui_file_up logfile, bool logging_redirect,
|
|||
struct interp *
|
||||
scoped_restore_interp::set_interp (const char *name)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
struct interp *interp = interp_lookup (current_ui, name);
|
||||
struct interp *old_interp = ui_interp.current_interpreter;
|
||||
struct interp *old_interp = current_ui->current_interpreter;
|
||||
|
||||
if (interp)
|
||||
ui_interp.current_interpreter = interp;
|
||||
current_ui->current_interpreter = interp;
|
||||
|
||||
return old_interp;
|
||||
}
|
||||
|
||||
|
@ -276,8 +235,7 @@ scoped_restore_interp::set_interp (const char *name)
|
|||
int
|
||||
current_interp_named_p (const char *interp_name)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
struct interp *interp = ui_interp.current_interpreter;
|
||||
interp *interp = current_ui->current_interpreter;
|
||||
|
||||
if (interp != NULL)
|
||||
return (strcmp (interp->name (), interp_name) == 0);
|
||||
|
@ -298,12 +256,10 @@ current_interp_named_p (const char *interp_name)
|
|||
struct interp *
|
||||
command_interp (void)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
|
||||
if (ui_interp.command_interpreter != NULL)
|
||||
return ui_interp.command_interpreter;
|
||||
if (current_ui->command_interpreter != nullptr)
|
||||
return current_ui->command_interpreter;
|
||||
else
|
||||
return ui_interp.current_interpreter;
|
||||
return current_ui->current_interpreter;
|
||||
}
|
||||
|
||||
/* See interps.h. */
|
||||
|
@ -330,11 +286,9 @@ interp_supports_command_editing (struct interp *interp)
|
|||
void
|
||||
interp_exec (struct interp *interp, const char *command_str)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
|
||||
/* See `command_interp' for why we do this. */
|
||||
scoped_restore save_command_interp
|
||||
= make_scoped_restore (&ui_interp.command_interpreter, interp);
|
||||
= make_scoped_restore (¤t_ui->command_interpreter, interp);
|
||||
|
||||
interp->exec (command_str);
|
||||
}
|
||||
|
@ -359,8 +313,7 @@ clear_interpreter_hooks (void)
|
|||
static void
|
||||
interpreter_exec_cmd (const char *args, int from_tty)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
struct interp *old_interp, *interp_to_use;
|
||||
struct interp *interp_to_use;
|
||||
unsigned int nrules;
|
||||
unsigned int i;
|
||||
|
||||
|
@ -381,7 +334,7 @@ interpreter_exec_cmd (const char *args, int from_tty)
|
|||
if (nrules < 2)
|
||||
error (_("Usage: interpreter-exec INTERPRETER COMMAND..."));
|
||||
|
||||
old_interp = ui_interp.current_interpreter;
|
||||
interp *old_interp = current_ui->current_interpreter;
|
||||
|
||||
interp_to_use = interp_lookup (current_ui, prules[0]);
|
||||
if (interp_to_use == NULL)
|
||||
|
@ -419,9 +372,7 @@ interpreter_completer (struct cmd_list_element *ignore,
|
|||
struct interp *
|
||||
top_level_interpreter (void)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_current_interp_info ();
|
||||
|
||||
return ui_interp.top_level_interpreter;
|
||||
return current_ui->top_level_interpreter;
|
||||
}
|
||||
|
||||
/* See interps.h. */
|
||||
|
@ -429,9 +380,7 @@ top_level_interpreter (void)
|
|||
struct interp *
|
||||
current_interpreter (void)
|
||||
{
|
||||
ui_interp_info &ui_interp = get_interp_info (current_ui);
|
||||
|
||||
return ui_interp.current_interpreter;
|
||||
return current_ui->current_interpreter;
|
||||
}
|
||||
|
||||
/* This just adds the "interpreter-exec" command. */
|
||||
|
|
11
gdb/ui.h
11
gdb/ui.h
|
@ -19,8 +19,11 @@
|
|||
#define UI_H
|
||||
|
||||
#include "gdbsupport/event-loop.h"
|
||||
#include "gdbsupport/intrusive_list.h"
|
||||
#include "gdbsupport/next-iterator.h"
|
||||
|
||||
struct interp;
|
||||
|
||||
/* Prompt state. */
|
||||
|
||||
enum prompt_state
|
||||
|
@ -84,7 +87,13 @@ struct ui
|
|||
int command_editing = 0;
|
||||
|
||||
/* Each UI has its own independent set of interpreters. */
|
||||
struct ui_interp_info *interp_info = nullptr;
|
||||
intrusive_list<interp> interp_list;
|
||||
interp *current_interpreter = nullptr;
|
||||
interp *top_level_interpreter = nullptr;
|
||||
|
||||
/* The interpreter that is active while `interp_exec' is active, NULL
|
||||
at all other times. */
|
||||
interp *command_interpreter = nullptr;
|
||||
|
||||
/* True if the UI is in async mode, false if in sync mode. If in
|
||||
sync mode, a synchronous execution command (e.g, "next") does not
|
||||
|
|
Loading…
Add table
Reference in a new issue