From 9e6a1ab6652e8461f786d5c308f632a7c0acc53f Mon Sep 17 00:00:00 2001 From: Philippe Waroquiers Date: Sun, 28 Oct 2018 13:51:32 +0100 Subject: [PATCH] Add class scoped_switch_to_sym_language_if_auto. The class scoped_switch_to_sym_language_if_auto allows to switch in a scope the current language to the language of a symbol when language mode is set to auto. 2018-11-20 Philippe Waroquiers * language.h (scoped_switch_to_sym_language_if_auto): New class. --- gdb/ChangeLog | 4 ++++ gdb/language.h | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a04f498c927..413c61243c4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2018-11-20 Philippe Waroquiers + + * language.h (scoped_switch_to_sym_language_if_auto): New class. + 2018-11-20 Philippe Waroquiers * symtab.c (search_symbols): Properly check absence of type regexp diff --git a/gdb/language.h b/gdb/language.h index 02a84ff9a2b..95770656699 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -707,4 +707,39 @@ private: enum language m_lang; }; +/* If language_mode is language_mode_auto, + then switch current language to the language of SYM + and restore current language upon destruction. + + Else do nothing. */ + +class scoped_switch_to_sym_language_if_auto +{ +public: + + explicit scoped_switch_to_sym_language_if_auto (const struct symbol *sym) + { + if (language_mode == language_mode_auto) + { + m_lang = current_language->la_language; + m_switched = true; + set_language (SYMBOL_LANGUAGE (sym)); + } + else + m_switched = false; + } + + ~scoped_switch_to_sym_language_if_auto () + { + if (m_switched) + set_language (m_lang); + } + + DISABLE_COPY_AND_ASSIGN (scoped_switch_to_sym_language_if_auto); + +private: + bool m_switched; + enum language m_lang; +}; + #endif /* defined (LANGUAGE_H) */ -- 2.30.2