]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add another constructor to scoped_restore_current_language
authorTom Tromey <tromey@adacore.com>
Wed, 14 Aug 2024 17:22:58 +0000 (11:22 -0600)
committerTom Tromey <tromey@adacore.com>
Thu, 15 Aug 2024 16:14:37 +0000 (10:14 -0600)
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>
gdb/breakpoint.c
gdb/language.c
gdb/language.h
gdb/mi/mi-main.c
gdb/parse.c
gdb/symmisc.c

index 9a78029546cbc0d822104d2208491752d30c6221..17bd627f867cf3d4dc81322ed1919ba40cbb237d 100644 (file)
@@ -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)
     {
index be6a1e89fd35671ff205fa3f1ba33f7fd9952031..d697331040d9fe53578e423ea4495cbdce6c77e0 100644 (file)
@@ -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.  */
index a2ce1697edb72c4a6e87e26feefae56b61c63615..985e6227c670c2a670986e9524f094797115c1a6 100644 (file)
@@ -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)
index 5bcb5f7ee8ceba27618fed1b5d4eaac9230c23ef..b72cd1b9b82c8af28c003b955bbfd1fe4822d6a1 100644 (file)
@@ -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;
 
index 03763de74e7c5da53ea91415f1b2e62182af7967..e0837de7b015fd356bcc1170aeababee33f96b0a 100644 (file)
@@ -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);
 }
index b4e0360041e7b3ab85fce869479df595eaeebd4c..7f8141588b7abd1276f5dd9ce6e45a1b497700ef 100644 (file)
@@ -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