diff options
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/language.h | 35 |
2 files changed, 39 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a04f498..413c612 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 2018-11-20 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * language.h (scoped_switch_to_sym_language_if_auto): New class. + +2018-11-20 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * symtab.c (search_symbols): Properly check absence of type regexp before entering the loop scanning the minimal symbols. diff --git a/gdb/language.h b/gdb/language.h index 02a84ff..9577065 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) */ |