gdb: Convert language_data::la_range_check to a method
authorAndrew Burgess <andrew.burgess@embecosm.com>
Sun, 12 Jul 2020 09:15:32 +0000 (10:15 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 16 Sep 2020 10:01:24 +0000 (11:01 +0100)
Convert language_data::la_range_check member variable to a virtual
method language_defn::range_checking_on_by_default.

Where the previous member variable was of type 'enum range_check', the
new member function returns a boolean that selects between range
checking being on or off.  This removes the possibility of a language
having its default be the third enum state, range_check_warn, which
no language currently used.

This all makes sense I think, the language's true/false provides the
default when the global 'set check range' is set to 'auto'.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* ada-lang.c (ada_language_data): Remove la_range_check
initializer.
* c-lang.c (c_language_data): Likewise.
(cplus_language_data): Likewise.
(asm_language_data): Likewise.
(minimal_language_data): Likewise.
* d-lang.c (d_language_data): Likewise.
* f-lang.c (f_language_data): Likewise.
(f_language::range_checking_on_by_default): New member function.
* go-lang.c (go_language_data): Remove la_range_check initializer.
* language.c (enum range_mode): Moved here from language.h.
(range_mode): Made static.
(show_range_command): Update to use
range_checking_on_by_default.
(set_range_command): Likewise.
(set_range_case): Likewise.
(unknown_language_data): Remove la_range_check initializer.
(auto_language_data): Likewise.
* language.h (range_mode): Delete.  Enum definition moved to
language.c.
(language_data): Remove la_range_check field.
(language_defn::range_checking_on_by_default): New member
function.
* m2-lang.c (m2_language_data): Remove la_range_check initializer.
(m2_language::range_checking_on_by_default): New member function.
* objc-lang.c (objc_language_data): Remove la_range_check
initializer.
* opencl-lang.c (opencl_language_data): Likewise.
* p-lang.c (pascal_language_data): Likewise.
(pascal_language::range_checking_on_by_default): New member
function.
* rust-lang.c (rust_language_data): Remove la_range_check
initializer.
(rust_language::range_checking_on_by_default): New member
function.

13 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/c-lang.c
gdb/d-lang.c
gdb/f-lang.c
gdb/go-lang.c
gdb/language.c
gdb/language.h
gdb/m2-lang.c
gdb/objc-lang.c
gdb/opencl-lang.c
gdb/p-lang.c
gdb/rust-lang.c

index ce9d3ae778bc70671a35d7df68d11e7bb9dc5109..b46e89c412804c1f8da7905ef45003c2c68c53a1 100644 (file)
@@ -1,3 +1,41 @@
+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * ada-lang.c (ada_language_data): Remove la_range_check
+       initializer.
+       * c-lang.c (c_language_data): Likewise.
+       (cplus_language_data): Likewise.
+       (asm_language_data): Likewise.
+       (minimal_language_data): Likewise.
+       * d-lang.c (d_language_data): Likewise.
+       * f-lang.c (f_language_data): Likewise.
+       (f_language::range_checking_on_by_default): New member function.
+       * go-lang.c (go_language_data): Remove la_range_check initializer.
+       * language.c (enum range_mode): Moved here from language.h.
+       (range_mode): Made static.
+       (show_range_command): Update to use
+       range_checking_on_by_default.
+       (set_range_command): Likewise.
+       (set_range_case): Likewise.
+       (unknown_language_data): Remove la_range_check initializer.
+       (auto_language_data): Likewise.
+       * language.h (range_mode): Delete.  Enum definition moved to
+       language.c.
+       (language_data): Remove la_range_check field.
+       (language_defn::range_checking_on_by_default): New member
+       function.
+       * m2-lang.c (m2_language_data): Remove la_range_check initializer.
+       (m2_language::range_checking_on_by_default): New member function.
+       * objc-lang.c (objc_language_data): Remove la_range_check
+       initializer.
+       * opencl-lang.c (opencl_language_data): Likewise.
+       * p-lang.c (pascal_language_data): Likewise.
+       (pascal_language::range_checking_on_by_default): New member
+       function.
+       * rust-lang.c (rust_language_data): Remove la_range_check
+       initializer.
+       (rust_language::range_checking_on_by_default): New member
+       function.
+
 2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * dwarf2/read.c (dwarf2_physname): Remove special case for
index 723e08e0db03b305644c23ea81e8dfeaa404880f..0a0dc21d59903e2e5e75cef2057166dcaa3c4272 100644 (file)
@@ -13708,7 +13708,6 @@ ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
 
 extern const struct language_data ada_language_data =
 {
-  range_check_off,
   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
                                    that's not quite what this means.  */
   array_row_major,
index c8fe630c247a9c674a47ce6653ccc6d9a4dbf941..88af4585b21c6635a2a0eaf48a7b34b24e8e0cca 100644 (file)
@@ -875,7 +875,6 @@ const struct exp_descriptor exp_descriptor_c =
 
 extern const struct language_data c_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_c,
@@ -985,7 +984,6 @@ enum cplus_primitive_types {
 
 extern const struct language_data cplus_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_c,
@@ -1193,7 +1191,6 @@ static cplus_language cplus_language_defn;
 
 extern const struct language_data asm_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_c,
@@ -1264,7 +1261,6 @@ static asm_language asm_language_defn;
 
 extern const struct language_data minimal_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_c,
index 2c6da4723c5c3a2ec91772ef698e69adc79259a4..4cbe9d8fa6a778b3f01c31dc406348621cafe41c 100644 (file)
@@ -128,7 +128,6 @@ enum d_primitive_types {
 
 extern const struct language_data d_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_no,
index f4202c349644d0ae068d43d963b3a57a8561945d..dc5c0859a14943ef982014c225a0158c930267f2 100644 (file)
@@ -486,7 +486,6 @@ static const struct exp_descriptor exp_descriptor_f =
 
 extern const struct language_data f_language_data =
 {
-  range_check_on,
   case_sensitive_off,
   array_column_major,
   macro_expansion_no,
@@ -722,6 +721,11 @@ public:
   bool c_style_arrays_p () const override
   { return false; }
 
+  /* See language.h.  */
+
+  bool range_checking_on_by_default () const override
+  { return true; }
+
 protected:
 
   /* See language.h.  */
index dfc0dddc61659178bf83e42a560faf88838a0cff..f5abd518e2249c42efae4238910ec098390a584c 100644 (file)
@@ -508,7 +508,6 @@ enum go_primitive_types {
 
 extern const struct language_data go_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_no,
index 3503408ad21e73986ce9d753bff74230523dc053..56b3b2eb306047dad908d52778a63a88f0db1986 100644 (file)
 
 static void set_range_case (void);
 
+/* range_mode ==
+   range_mode_auto:   range_check set automatically to default of language.
+   range_mode_manual: range_check set manually by user.  */
+
+enum range_mode
+  {
+    range_mode_auto, range_mode_manual
+  };
+
 /* The current (default at startup) state of type and range checking.
    (If the modes are set to "auto", though, these are changed based
    on the default language at startup, and then again based on the
    language of the first source file.  */
 
-enum range_mode range_mode = range_mode_auto;
+static enum range_mode range_mode = range_mode_auto;
 enum range_check range_check = range_check_off;
 enum case_mode case_mode = case_mode_auto;
 enum case_sensitivity case_sensitivity = case_sensitive_on;
@@ -209,7 +218,9 @@ show_range_command (struct ui_file *file, int from_tty,
     fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
                      value);
 
-  if (range_check != current_language->la_range_check)
+  if (range_check == range_check_warn
+      || ((range_check == range_check_on)
+         != current_language->range_checking_on_by_default ()))
     warning (_("the current range check setting "
               "does not match the language.\n"));
 }
@@ -245,7 +256,9 @@ set_range_command (const char *ignore,
       internal_error (__FILE__, __LINE__,
                      _("Unrecognized range check setting: \"%s\""), range);
     }
-  if (range_check != current_language->la_range_check)
+  if (range_check == range_check_warn
+      || ((range_check == range_check_on)
+         != current_language->range_checking_on_by_default ()))
     warning (_("the current range check setting "
               "does not match the language.\n"));
 }
@@ -329,7 +342,8 @@ static void
 set_range_case (void)
 {
   if (range_mode == range_mode_auto)
-    range_check = current_language->la_range_check;
+    range_check = (current_language->range_checking_on_by_default ()
+                  ? range_check_on : range_check_off);
 
   if (case_mode == case_mode_auto)
     case_sensitivity = current_language->la_case_sensitivity;
@@ -775,7 +789,6 @@ unknown_language_arch_info (struct gdbarch *gdbarch,
 
 extern const struct language_data unknown_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_no,
@@ -912,7 +925,6 @@ static unknown_language unknown_language_defn;
 
 extern const struct language_data auto_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_no,
index 10a9e707320292629a9d29d7f9caad857a062525..ffdcdbc21f8adb55c626e412665f209326c189d0 100644 (file)
@@ -42,16 +42,6 @@ class innermost_block_tracker;
 
 #define MAX_FORTRAN_DIMS  7    /* Maximum number of F77 array dims.  */
 
-/* range_mode ==
-   range_mode_auto:   range_check set automatically to default of language.
-   range_mode_manual: range_check set manually by user.  */
-
-extern enum range_mode
-  {
-    range_mode_auto, range_mode_manual
-  }
-range_mode;
-
 /* range_check ==
    range_check_on:    Ranges are checked in GDB expressions, producing errors.
    range_check_warn:  Ranges are checked, producing warnings.
@@ -188,10 +178,6 @@ extern const char *default_word_break_characters (void);
 
 struct language_data
   {
-    /* Default range checking.  */
-
-    enum range_check la_range_check;
-
     /* Default case sensitivity.  */
     enum case_sensitivity la_case_sensitivity;
 
@@ -572,6 +558,13 @@ struct language_defn : language_data
   virtual bool store_sym_names_in_linkage_form_p () const
   { return false; }
 
+  /* Default range checking preference.  The return value from this
+     function provides the automatic setting for 'set check range'.  As a
+     consequence a user is free to override this setting if they want.  */
+
+  virtual bool range_checking_on_by_default () const
+  { return false; }
+
 protected:
 
   /* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
index 577d819211478253de52627a45426c2666bcfada..785436c4f22bafa4d210fcf6f02e8d3633e2c37f 100644 (file)
@@ -199,7 +199,6 @@ const struct exp_descriptor exp_descriptor_modula2 =
 
 extern const struct language_data m2_language_data =
 {
-  range_check_on,
   case_sensitive_on,
   array_row_major,
   macro_expansion_no,
@@ -444,6 +443,11 @@ public:
 
   char string_lower_bound () const override
   { return 0; }
+
+  /* See language.h.  */
+
+  bool range_checking_on_by_default () const override
+  { return true; }
 };
 
 /* Single instance of the M2 language.  */
index 7b2dbd8bfa28c0184de8906b7ca029778f03fa70..1788910c8d5d02cba9714756a0d47b23ab6cf411 100644 (file)
@@ -323,7 +323,6 @@ static const struct op_print objc_op_print_tab[] =
 
 extern const struct language_data objc_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_c,
index f8105f21cae40f23ffd8012167763776d138899c..2ad93213a27d95391e03436b5d779c49c8b236b0 100644 (file)
@@ -1006,7 +1006,6 @@ const struct exp_descriptor exp_descriptor_opencl =
 /* Constant data representing the OpenCL language.  */
 extern const struct language_data opencl_language_data =
 {
-  range_check_off,
   case_sensitive_on,
   array_row_major,
   macro_expansion_c,
index 9ca1427098e1a51d19975e123971b0f2fad9578a..2325aca96b53362866ac6a5515e3fd528da9c34c 100644 (file)
@@ -252,7 +252,6 @@ enum pascal_primitive_types {
 
 extern const struct language_data pascal_language_data =
 {
-  range_check_on,
   case_sensitive_on,
   array_row_major,
   macro_expansion_no,
@@ -508,6 +507,11 @@ public:
 
   const char *name_of_this () const override
   { return "this"; }
+
+  /* See language.h.  */
+
+  bool range_checking_on_by_default () const override
+  { return true; }
 };
 
 /* Single instance of the Pascal language class.  */
index 25bd965667eec3810877fd38d103bafde0b86b3a..4489cabc6490b6fb72700aaacfb64f4b99181208 100644 (file)
@@ -1901,7 +1901,6 @@ static const struct exp_descriptor exp_descriptor_rust =
 
 extern const struct language_data rust_language_data =
 {
-  range_check_on,
   case_sensitive_on,
   array_row_major,
   macro_expansion_no,
@@ -2149,6 +2148,11 @@ public:
                && rust_slice_type_p (type)
                && strcmp (type->name (), "&str") == 0));
   }
+
+  /* See language.h.  */
+
+  bool range_checking_on_by_default () const override
+  { return true; }
 };
 
 /* Single instance of the Rust language class.  */