[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