From: Tom Tromey Date: Mon, 8 Dec 2025 14:50:48 +0000 (-0700) Subject: Small cleanup to interpreter initialization X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a7734d6c540a810e81bf8bf95bd4d33f3c56df5;p=thirdparty%2Fbinutils-gdb.git 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 --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);