From 5b12a61c763421f05d233ebcce94d96536b5c5d4 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 13 Jan 2013 18:57:01 +0000 Subject: gdb/ * parse.c (parse_exp_in_context): New variable inner_chain. Call make_cleanup_restore_current_language. Call set_language. Move OLD_CHAIN and INNER_CHAIN cleanups. * utils.c (do_restore_current_language) (make_cleanup_restore_current_language): New functions. * utils.h (make_cleanup_restore_current_language): New declaration. gdb/testsuite/ * gdb.cp/parse-lang.cc: New file. * gdb.cp/parse-lang.exp: New file. --- gdb/utils.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'gdb/utils.c') diff --git a/gdb/utils.c b/gdb/utils.c index e12888f..8bae4eb 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -503,6 +503,28 @@ make_cleanup_free_so (struct so_list *so) return make_cleanup (do_free_so, so); } +/* Helper for make_cleanup_restore_current_language. */ + +static void +do_restore_current_language (void *p) +{ + enum language saved_lang = (uintptr_t) p; + + set_language (saved_lang); +} + +/* Remember the current value of CURRENT_LANGUAGE and make it restored when + the cleanup is run. */ + +struct cleanup * +make_cleanup_restore_current_language (void) +{ + enum language saved_lang = current_language->la_language; + + return make_cleanup (do_restore_current_language, + (void *) (uintptr_t) saved_lang); +} + /* This function is useful for cleanups. Do -- cgit v1.1