[binutils-gdb] Small cleanup to interpreter initialization
Tom Tromey
tromey@sourceware.org
Tue Jan 6 17:35:55 GMT 2026
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1a7734d6c540a810e81bf8bf95bd4d33f3c56df5
commit 1a7734d6c540a810e81bf8bf95bd4d33f3c56df5
Author: Tom Tromey <tom@tromey.com>
Date: Mon Dec 8 07:50:48 2025 -0700
Small cleanup to interpreter initialization
interp::inited is currently public, because interp_set does the task
of making sure the interpreter is only initialized a single time.
However, the interpreter can do this job itself, and this member can
be private.
Diff:
---
gdb/cli/cli-interp.c | 8 --------
gdb/interps.c | 6 +-----
gdb/interps.h | 18 ++++++++++++++----
gdb/mi/mi-interp.c | 2 +-
gdb/mi/mi-interp.h | 2 +-
gdb/python/py-dap.c | 4 ++--
gdb/tui/tui-interp.c | 4 ++--
7 files changed, 21 insertions(+), 23 deletions(-)
diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c
index f1ba5ccb7c9..91e9b164830 100644
--- a/gdb/cli/cli-interp.c
+++ b/gdb/cli/cli-interp.c
@@ -46,7 +46,6 @@ class cli_interp final : public cli_interp_base
explicit cli_interp (const char *name);
~cli_interp () = default;
- void init (bool top_level) override;
void resume () override;
void suspend () override;
void exec (const char *command_str) override;
@@ -180,13 +179,6 @@ cli_interp_base::pre_command_loop ()
display_gdb_prompt (0);
}
-/* These implement the cli out interpreter: */
-
-void
-cli_interp::init (bool top_level)
-{
-}
-
void
cli_interp::resume ()
{
diff --git a/gdb/interps.c b/gdb/interps.c
index d6541a37704..903c52e7cf7 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -132,11 +132,7 @@ interp_set (struct interp *interp, bool top_level)
interpreter_p = interp->name ();
/* Run the init proc. */
- if (!interp->inited)
- {
- interp->init (top_level);
- interp->inited = true;
- }
+ interp->init (top_level);
/* Do this only after the interpreter is initialized. */
current_uiout = interp->interp_ui_out ();
diff --git a/gdb/interps.h b/gdb/interps.h
index 18159281f7a..2178e6a454e 100644
--- a/gdb/interps.h
+++ b/gdb/interps.h
@@ -54,8 +54,14 @@ public:
explicit interp (const char *name);
virtual ~interp () = 0;
- virtual void init (bool top_level)
- {}
+ void init (bool top_level)
+ {
+ if (!m_inited)
+ {
+ do_init (top_level);
+ m_inited = true;
+ }
+ }
virtual void resume () = 0;
virtual void suspend () = 0;
@@ -200,12 +206,16 @@ public:
const bfd_byte *data) {}
private:
+ /* Called to perform any needed initialization. */
+ virtual void do_init (bool top_level)
+ {
+ }
+
/* The memory for this is static, it comes from literal strings (e.g. "cli"). */
const char *m_name;
-public:
/* Has the init method been run? */
- bool inited = false;
+ bool m_inited = false;
};
/* Look up the interpreter for NAME, creating one if none exists yet.
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index 3193c68f17f..a7cfb66f4af 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -78,7 +78,7 @@ mi_interp::on_command_error ()
}
void
-mi_interp::init (bool top_level)
+mi_interp::do_init (bool top_level)
{
mi_interp *mi = this;
diff --git a/gdb/mi/mi-interp.h b/gdb/mi/mi-interp.h
index 169a8e12729..39b39779de7 100644
--- a/gdb/mi/mi-interp.h
+++ b/gdb/mi/mi-interp.h
@@ -33,7 +33,7 @@ public:
: interp (name)
{}
- void init (bool top_level) override;
+ void do_init (bool top_level) override;
void resume () override;
void suspend () override;
void exec (const char *command_str) override;
diff --git a/gdb/python/py-dap.c b/gdb/python/py-dap.c
index 37c1dd536c4..47d90e51938 100644
--- a/gdb/python/py-dap.c
+++ b/gdb/python/py-dap.c
@@ -34,7 +34,7 @@ public:
~dap_interp () override = default;
- void init (bool top_level) override;
+ void do_init (bool top_level) override;
void suspend () override
{
@@ -92,7 +92,7 @@ call_dap_fn (const char *fn_name)
}
void
-dap_interp::init (bool top_level)
+dap_interp::do_init (bool top_level)
{
#if CXX_STD_THREAD
call_dap_fn ("run");
diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c
index ee72f12211f..1316c8bedd6 100644
--- a/gdb/tui/tui-interp.c
+++ b/gdb/tui/tui-interp.c
@@ -40,7 +40,7 @@ public:
: cli_interp_base (name)
{}
- void init (bool top_level) override;
+ void do_init (bool top_level) override;
void resume () override;
void suspend () override;
void exec (const char *command_str) override;
@@ -63,7 +63,7 @@ tui_exit (void)
/* These implement the TUI interpreter. */
void
-tui_interp::init (bool top_level)
+tui_interp::do_init (bool top_level)
{
/* Install exit handler to leave the screen in a good shape. */
atexit (tui_exit);
More information about the Gdb-cvs
mailing list