aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2024-08-14 11:22:58 -0600
committerTom Tromey <tromey@adacore.com>2024-08-15 10:14:37 -0600
commitd47600c85d26176cc7030da78f8cfc6e98bcfbbf (patch)
tree13954325667b4bd371453bed04c99decb1185d93
parent5c8f918639f1df77599c50fddfdfe23a2e3cbf35 (diff)
downloadbinutils-d47600c85d26176cc7030da78f8cfc6e98bcfbbf.zip
binutils-d47600c85d26176cc7030da78f8cfc6e98bcfbbf.tar.gz
binutils-d47600c85d26176cc7030da78f8cfc6e98bcfbbf.tar.bz2
Add another constructor to scoped_restore_current_language
While working on something else, I noticed that this is relatively common: scoped_restore_current_language save; set_language (something); This patch adds a second constructor to scoped_restore_current_language to simplify this idiom. Reviewed-By: Tom de Vries <tdevries@suse.de>
-rw-r--r--gdb/breakpoint.c3
-rw-r--r--gdb/language.c7
-rw-r--r--gdb/language.h4
-rw-r--r--gdb/mi/mi-main.c5
-rw-r--r--gdb/parse.c8
-rw-r--r--gdb/symmisc.c3
6 files changed, 16 insertions, 14 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 9a78029..17bd627 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -3734,8 +3734,7 @@ create_std_terminate_master_breakpoint (void)
const char *const func_name = "std::terminate()";
scoped_restore_current_program_space restore_pspace;
- scoped_restore_current_language save_language;
- set_language (language_cplus);
+ scoped_restore_current_language save_language (language_cplus);
for (struct program_space *pspace : program_spaces)
{
diff --git a/gdb/language.c b/gdb/language.c
index be6a1e8..d697331 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -110,6 +110,13 @@ scoped_restore_current_language::scoped_restore_current_language ()
{
}
+scoped_restore_current_language::scoped_restore_current_language
+ (enum language lang)
+ : scoped_restore_current_language ()
+{
+ set_language (lang);
+}
+
scoped_restore_current_language::~scoped_restore_current_language ()
{
/* If both are NULL, then that means dont_restore was called. */
diff --git a/gdb/language.h b/gdb/language.h
index a2ce169..985e622 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -860,6 +860,10 @@ class scoped_restore_current_language
public:
scoped_restore_current_language ();
+
+ /* Set the current language as well. */
+ explicit scoped_restore_current_language (enum language lang);
+
~scoped_restore_current_language ();
scoped_restore_current_language (scoped_restore_current_language &&other)
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 5bcb5f7..b72cd1b9 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -2130,10 +2130,7 @@ mi_cmd_execute (struct mi_parse *parse)
std::optional<scoped_restore_current_language> lang_saver;
if (parse->language != language_unknown)
- {
- lang_saver.emplace ();
- set_language (parse->language);
- }
+ lang_saver.emplace (parse->language);
current_context = parse;
diff --git a/gdb/parse.c b/gdb/parse.c
index 03763de..e0837de 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -423,8 +423,7 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
expression_context_pc, flags, *stringptr,
completer != nullptr, tracker);
- scoped_restore_current_language lang_saver;
- set_language (lang->la_language);
+ scoped_restore_current_language lang_saver (lang->la_language);
try
{
@@ -490,10 +489,7 @@ parse_expression_with_language (const char *string, enum language lang)
{
std::optional<scoped_restore_current_language> lang_saver;
if (current_language->la_language != lang)
- {
- lang_saver.emplace ();
- set_language (lang);
- }
+ lang_saver.emplace (lang);
return parse_expression (string);
}
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index b4e0360..7f81415 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -366,8 +366,7 @@ dump_symtab (struct symtab *symtab, struct ui_file *outfile)
But use only real languages, not placeholders. */
if (symtab->language () != language_unknown)
{
- scoped_restore_current_language save_lang;
- set_language (symtab->language ());
+ scoped_restore_current_language save_lang (symtab->language ());
dump_symtab_1 (symtab, outfile);
}
else