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>
This commit is contained in:
Tom Tromey
2024-08-14 11:22:58 -06:00
parent 5c8f918639
commit d47600c85d
6 changed files with 16 additions and 14 deletions

View File

@@ -3734,8 +3734,7 @@ create_std_terminate_master_breakpoint (void)
const char *const func_name = "std::terminate()"; const char *const func_name = "std::terminate()";
scoped_restore_current_program_space restore_pspace; scoped_restore_current_program_space restore_pspace;
scoped_restore_current_language save_language; scoped_restore_current_language save_language (language_cplus);
set_language (language_cplus);
for (struct program_space *pspace : program_spaces) for (struct program_space *pspace : program_spaces)
{ {

View 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 () scoped_restore_current_language::~scoped_restore_current_language ()
{ {
/* If both are NULL, then that means dont_restore was called. */ /* If both are NULL, then that means dont_restore was called. */

View File

@@ -860,6 +860,10 @@ class scoped_restore_current_language
public: public:
scoped_restore_current_language (); 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 (scoped_restore_current_language &&other) scoped_restore_current_language (scoped_restore_current_language &&other)

View File

@@ -2130,10 +2130,7 @@ mi_cmd_execute (struct mi_parse *parse)
std::optional<scoped_restore_current_language> lang_saver; std::optional<scoped_restore_current_language> lang_saver;
if (parse->language != language_unknown) if (parse->language != language_unknown)
{ lang_saver.emplace (parse->language);
lang_saver.emplace ();
set_language (parse->language);
}
current_context = parse; current_context = parse;

View File

@@ -423,8 +423,7 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
expression_context_pc, flags, *stringptr, expression_context_pc, flags, *stringptr,
completer != nullptr, tracker); completer != nullptr, tracker);
scoped_restore_current_language lang_saver; scoped_restore_current_language lang_saver (lang->la_language);
set_language (lang->la_language);
try try
{ {
@@ -490,10 +489,7 @@ parse_expression_with_language (const char *string, enum language lang)
{ {
std::optional<scoped_restore_current_language> lang_saver; std::optional<scoped_restore_current_language> lang_saver;
if (current_language->la_language != lang) if (current_language->la_language != lang)
{ lang_saver.emplace (lang);
lang_saver.emplace ();
set_language (lang);
}
return parse_expression (string); return parse_expression (string);
} }

View File

@@ -366,8 +366,7 @@ dump_symtab (struct symtab *symtab, struct ui_file *outfile)
But use only real languages, not placeholders. */ But use only real languages, not placeholders. */
if (symtab->language () != language_unknown) if (symtab->language () != language_unknown)
{ {
scoped_restore_current_language save_lang; scoped_restore_current_language save_lang (symtab->language ());
set_language (symtab->language ());
dump_symtab_1 (symtab, outfile); dump_symtab_1 (symtab, outfile);
} }
else else