diff options
author | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2018-10-28 13:51:32 +0100 |
---|---|---|
committer | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2018-11-20 22:39:08 +0100 |
commit | 9e6a1ab6652e8461f786d5c308f632a7c0acc53f (patch) | |
tree | e35ab39d22879abe826b4253a9f7c3b28b8e30cb | |
parent | beddd67132d5f8240613fd89b21ae0d2a1c7bd0f (diff) | |
download | gdb-9e6a1ab6652e8461f786d5c308f632a7c0acc53f.zip gdb-9e6a1ab6652e8461f786d5c308f632a7c0acc53f.tar.gz gdb-9e6a1ab6652e8461f786d5c308f632a7c0acc53f.tar.bz2 |
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 <philippe.waroquiers@skynet.be>
* language.h (scoped_switch_to_sym_language_if_auto): New class.
-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) */ |