aboutsummaryrefslogtreecommitdiff
path: root/gdb/language.c
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2020-07-12 10:15:32 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-09-16 11:01:24 +0100
commitefdf6a733d2a59a1a07ec61e848fa9e128259fe3 (patch)
tree896cf4b18a264b7128c28eaf84d4a694fc5eea01 /gdb/language.c
parentbf92aec5884b64a73a334aea875c68e8d1f959fc (diff)
downloadfsf-binutils-gdb-efdf6a733d2a59a1a07ec61e848fa9e128259fe3.zip
fsf-binutils-gdb-efdf6a733d2a59a1a07ec61e848fa9e128259fe3.tar.gz
fsf-binutils-gdb-efdf6a733d2a59a1a07ec61e848fa9e128259fe3.tar.bz2
gdb: Convert language_data::la_range_check to a method
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.
Diffstat (limited to 'gdb/language.c')
-rw-r--r--gdb/language.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/gdb/language.c b/gdb/language.c
index 3503408..56b3b2e 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -49,12 +49,21 @@
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,