aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/language.h35
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) */