diff options
author | Tom Tromey <tom@tromey.com> | 2017-04-26 22:41:30 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-08-03 07:58:58 -0600 |
commit | e3ad2841b1c75837a901618651fed23013643e3f (patch) | |
tree | 8bd5273ccd8abe8528e2b280ab67992bfa61ad28 /gdb/parse.c | |
parent | b80cf838447322778f04059a1f58b78ffbbeb597 (diff) | |
download | gdb-e3ad2841b1c75837a901618651fed23013643e3f.zip gdb-e3ad2841b1c75837a901618651fed23013643e3f.tar.gz gdb-e3ad2841b1c75837a901618651fed23013643e3f.tar.bz2 |
Remove make_cleanup_restore_current_language
This patch replaces make_cleanup_restore_current_language with an RAII
class that saves the current language, and restores it when the object
is destroyed.
ChangeLog
2017-08-03 Tom Tromey <tom@tromey.com>
* utils.h (make_cleanup_restore_current_language): Remove.
* utils.c (do_restore_current_language)
(make_cleanup_restore_current_language): Remove.
* parse.c (parse_exp_in_context_1)
(parse_expression_with_language): Use
scoped_restore_current_language.
* mi/mi-main.c (mi_cmd_execute): Use
scoped_restore_current_language.
* language.h (scoped_restore_current_language): New class.
Diffstat (limited to 'gdb/parse.c')
-rw-r--r-- | gdb/parse.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/gdb/parse.c b/gdb/parse.c index 3dd7075..abf59d7 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -50,6 +50,7 @@ #include "objfiles.h" #include "user-regs.h" #include <algorithm> +#include "common/gdb_optional.h" /* Standard set of definitions for printing, dumping, prefixifying, * and evaluating expressions. */ @@ -1136,7 +1137,7 @@ parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc, const struct block *block, int comma, int void_context_p, int *out_subexp) { - struct cleanup *old_chain, *inner_chain; + struct cleanup *old_chain; const struct language_defn *lang = NULL; struct parser_state ps; int subexp; @@ -1214,7 +1215,8 @@ parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc, to the value matching SELECTED_FRAME as set by get_current_arch. */ initialize_expout (&ps, 10, lang, get_current_arch ()); - inner_chain = make_cleanup_restore_current_language (); + + scoped_restore_current_language lang_saver; set_language (lang->la_language); TRY @@ -1250,7 +1252,6 @@ parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc, if (expressiondebug) dump_prefix_expression (ps.expout, gdb_stdlog); - do_cleanups (inner_chain); discard_cleanups (old_chain); *stringptr = lexptr; @@ -1275,19 +1276,14 @@ parse_expression (const char *string) expression_up parse_expression_with_language (const char *string, enum language lang) { - struct cleanup *old_chain = NULL; - + gdb::optional<scoped_restore_current_language> lang_saver; if (current_language->la_language != lang) { - old_chain = make_cleanup_restore_current_language (); + lang_saver.emplace (); set_language (lang); } - expression_up expr = parse_expression (string); - - if (old_chain != NULL) - do_cleanups (old_chain); - return expr; + return parse_expression (string); } /* Parse STRING as an expression. If parsing ends in the middle of a |