[PATCH] Add gdb.current_language function

Tom Tromey tromey@adacore.com
Fri May 27 17:36:42 GMT 2022


This adds the gdb.current_language function, which can be used to find
the current language without (1) ever having the value "auto" or (2)
having to parse the output of "show language".
---
 gdb/NEWS                                  |  4 ++++
 gdb/doc/python.texi                       |  6 ++++++
 gdb/python/python.c                       | 12 ++++++++++++
 gdb/testsuite/gdb.python/py-parameter.exp | 13 +++++++++++++
 4 files changed, 35 insertions(+)

diff --git a/gdb/NEWS b/gdb/NEWS
index 52ffdc4c83a..2e87f8d56f3 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -51,6 +51,10 @@ maintenance info line-table
      This is the same format that GDB uses when printing address, symbol,
      and offset information from the disassembler.
 
+  ** New function gdb.current_language() that returns the name of the
+     current language.  Unlike gdb.parameter('language'), this will
+     never return 'auto'.
+
 *** Changes in GDB 12
 
 * DBX mode is deprecated, and will be removed in GDB 13
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index cb5283e03c0..0767e157e4a 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -667,6 +667,12 @@ Here are some examples of the possible string formats:
 @end smallexample
 @end defun
 
+@defun gdb.current_language ()
+Return the name of the current language as a string.  Note that,
+unlike @code{gdb.parameter(language')}, this function will never
+return @samp{auto}.
+@end defun
+
 @node Exception Handling
 @subsubsection Exception Handling
 @cindex python exceptions
diff --git a/gdb/python/python.c b/gdb/python/python.c
index 11aaa7ae778..9bef2252e88 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -1571,6 +1571,14 @@ gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
   return list.release ();
 }
 
+/* Return the name of the current language.  */
+
+static PyObject *
+gdbpy_current_language (PyObject *unused1, PyObject *unused2)
+{
+  return host_string_to_python_string (current_language->name ()).release ();
+}
+
 
 
 /* The "current" objfile.  This is set when gdb detects that a new
@@ -2534,6 +2542,10 @@ Format ADDRESS, an address within PROG_SPACE, a gdb.Progspace, using\n\
 ARCH, a gdb.Architecture to determine the address size.  The format of\n\
 the returned string is 'ADDRESS <SYMBOL+OFFSET>' without the quotes." },
 
+  { "current_language", gdbpy_current_language, METH_NOARGS,
+    "current_language () -> string\n\
+Return the name of the currently selected language." },
+
   {NULL, NULL, 0, NULL}
 };
 
diff --git a/gdb/testsuite/gdb.python/py-parameter.exp b/gdb/testsuite/gdb.python/py-parameter.exp
index 199d3bc16ec..fcafa7ee717 100644
--- a/gdb/testsuite/gdb.python/py-parameter.exp
+++ b/gdb/testsuite/gdb.python/py-parameter.exp
@@ -370,6 +370,19 @@ proc_with_prefix test_throwing_parameter { } {
 	"gdb.GdbError does not show Python stack"
 }
 
+proc_with_prefix test_language {} {
+    gdb_test "python print(gdb.parameter('language'))" "auto" \
+	"print language parameter"
+    gdb_test "python print(gdb.current_language())" "c" \
+	"print current language"
+    gdb_test_no_output "set lang rust"
+    gdb_test "python print(gdb.parameter('language'))" "rust" \
+	"print language parameter for rust"
+    gdb_test "python print(gdb.current_language())" "rust" \
+	"print current language for rust"
+    gdb_test_no_output "set lang auto"
+}
+
 test_directories
 test_data_directory
 test_boolean_parameter
-- 
2.34.1



More information about the Gdb-patches mailing list