This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA 1/5] Add class scoped_switch_auto_to_sym_language.
- From: Philippe Waroquiers <philippe dot waroquiers at skynet dot be>
- To: gdb-patches at sourceware dot org
- Cc: Philippe Waroquiers <philippe dot waroquiers at skynet dot be>
- Date: Sun, 28 Oct 2018 15:46:10 +0100
- Subject: [RFA 1/5] Add class scoped_switch_auto_to_sym_language.
- References: <20181028144614.14149-1-philippe.waroquiers@skynet.be>
The class scoped_switch_auto_to_sym_language allows to switch in a scope
the current language to the language of a symbol when language mode is
set to auto.
2018-10-27 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* language.h (scoped_switch_auto_to_sym_language): new class.
---
gdb/language.h | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/gdb/language.h b/gdb/language.h
index 02a84ff9a2..47a88de756 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -707,4 +707,43 @@ private:
enum language m_lang;
};
+/* If language_mode is language_mode_auto,
+ then switches current language to the language of SYM
+ and restore current language upon destruction.
+
+ Else does nothing. */
+
+class scoped_switch_auto_to_sym_language
+{
+public:
+
+ explicit scoped_switch_auto_to_sym_language (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_auto_to_sym_language ()
+ {
+ if (m_switched)
+ set_language (m_lang);
+ }
+
+ scoped_switch_auto_to_sym_language
+ (const scoped_switch_auto_to_sym_language &)
+ = delete;
+ scoped_switch_auto_to_sym_language &operator=
+ (const scoped_switch_auto_to_sym_language &) = delete;
+
+private:
+ bool m_switched;
+ enum language m_lang;
+};
+
#endif /* defined (LANGUAGE_H) */
--
2.19.1