[11/15] Change current_language to be a macro

Message ID 20231029173839.471514-12-tom@tromey.com
State New
Headers
Series Index DWARF in the background |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 fail Testing failed
linaro-tcwg-bot/tcwg_gdb_build--master-arm fail Testing failed

Commit Message

Tom Tromey Oct. 29, 2023, 5:35 p.m. UTC
  This changes the 'current_language' global to be a macro that wraps a
function call.  This change will let a subsequent patch introduce lazy
language setting.
---
 gdb/language.c | 16 ++++++++++++----
 gdb/language.h |  7 ++++++-
 2 files changed, 18 insertions(+), 5 deletions(-)
  

Patch

diff --git a/gdb/language.c b/gdb/language.c
index c768971be42..d38e2c04afb 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -79,9 +79,17 @@  enum case_sensitivity case_sensitivity = case_sensitive_on;
 
 /* The current language and language_mode (see language.h).  */
 
-const struct language_defn *current_language = nullptr;
+static const struct language_defn *global_current_language;
 enum language_mode language_mode = language_mode_auto;
 
+/* See language.h.  */
+
+const struct language_defn *
+get_current_language ()
+{
+  return global_current_language;
+}
+
 /* The language that the user expects to be typing in (the language
    of main(), or the last language we notified them about, or C).  */
 
@@ -177,9 +185,9 @@  set_language (const char *language)
 
       /* Found it!  Go into manual mode, and use this language.  */
       language_mode = language_mode_manual;
-      current_language = lang;
+      global_current_language = lang;
       set_range_case ();
-      expected_language = current_language;
+      expected_language = lang;
       return;
     }
 
@@ -364,7 +372,7 @@  set_range_case (void)
 void
 set_language (enum language lang)
 {
-  current_language = language_def (lang);
+  global_current_language = language_def (lang);
   set_range_case ();
 }
 
diff --git a/gdb/language.h b/gdb/language.h
index 6ee8f6160e1..6ff6f5eb95f 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -680,6 +680,11 @@  struct language_defn
 	  (const lookup_name_info &lookup_name) const;
 };
 
+/* Return the current language.  Normally code just uses the
+   'current_language' macro.  */
+
+extern const struct language_defn *get_current_language ();
+
 /* Pointer to the language_defn for our current language.  This pointer
    always points to *some* valid struct; it can be used without checking
    it for validity.
@@ -696,7 +701,7 @@  struct language_defn
    the language of symbol files (e.g. detecting when ".c" files are
    C++), it should be a separate setting from the current_language.  */
 
-extern const struct language_defn *current_language;
+#define current_language (get_current_language ())
 
 /* Pointer to the language_defn expected by the user, e.g. the language
    of main(), or the language we last mentioned in a message, or C.  */