From: Philippe Waroquiers Date: Sun, 28 Oct 2018 12:51:32 +0000 (+0100) Subject: Add class scoped_switch_to_sym_language_if_auto. X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=9e6a1ab6652e8461f786d5c308f632a7c0acc53f;p=deliverable%2Fbinutils-gdb.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a04f498c92..413c61243c 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 02a84ff9a2..9577065669 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) */