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.
This commit is contained in:
parent
bf92aec588
commit
efdf6a733d
13 changed files with 83 additions and 33 deletions
|
@ -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>
|
2020-09-16 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* dwarf2/read.c (dwarf2_physname): Remove special case for
|
* dwarf2/read.c (dwarf2_physname): Remove special case for
|
||||||
|
|
|
@ -13708,7 +13708,6 @@ ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
|
||||||
|
|
||||||
extern const struct language_data ada_language_data =
|
extern const struct language_data ada_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on, /* Yes, Ada is case-insensitive, but
|
case_sensitive_on, /* Yes, Ada is case-insensitive, but
|
||||||
that's not quite what this means. */
|
that's not quite what this means. */
|
||||||
array_row_major,
|
array_row_major,
|
||||||
|
|
|
@ -875,7 +875,6 @@ const struct exp_descriptor exp_descriptor_c =
|
||||||
|
|
||||||
extern const struct language_data c_language_data =
|
extern const struct language_data c_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_c,
|
macro_expansion_c,
|
||||||
|
@ -985,7 +984,6 @@ enum cplus_primitive_types {
|
||||||
|
|
||||||
extern const struct language_data cplus_language_data =
|
extern const struct language_data cplus_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_c,
|
macro_expansion_c,
|
||||||
|
@ -1193,7 +1191,6 @@ static cplus_language cplus_language_defn;
|
||||||
|
|
||||||
extern const struct language_data asm_language_data =
|
extern const struct language_data asm_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_c,
|
macro_expansion_c,
|
||||||
|
@ -1264,7 +1261,6 @@ static asm_language asm_language_defn;
|
||||||
|
|
||||||
extern const struct language_data minimal_language_data =
|
extern const struct language_data minimal_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_c,
|
macro_expansion_c,
|
||||||
|
|
|
@ -128,7 +128,6 @@ enum d_primitive_types {
|
||||||
|
|
||||||
extern const struct language_data d_language_data =
|
extern const struct language_data d_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
|
|
@ -486,7 +486,6 @@ static const struct exp_descriptor exp_descriptor_f =
|
||||||
|
|
||||||
extern const struct language_data f_language_data =
|
extern const struct language_data f_language_data =
|
||||||
{
|
{
|
||||||
range_check_on,
|
|
||||||
case_sensitive_off,
|
case_sensitive_off,
|
||||||
array_column_major,
|
array_column_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
@ -722,6 +721,11 @@ public:
|
||||||
bool c_style_arrays_p () const override
|
bool c_style_arrays_p () const override
|
||||||
{ return false; }
|
{ return false; }
|
||||||
|
|
||||||
|
/* See language.h. */
|
||||||
|
|
||||||
|
bool range_checking_on_by_default () const override
|
||||||
|
{ return true; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/* See language.h. */
|
/* See language.h. */
|
||||||
|
|
|
@ -508,7 +508,6 @@ enum go_primitive_types {
|
||||||
|
|
||||||
extern const struct language_data go_language_data =
|
extern const struct language_data go_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
|
|
@ -49,12 +49,21 @@
|
||||||
|
|
||||||
static void set_range_case (void);
|
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.
|
/* The current (default at startup) state of type and range checking.
|
||||||
(If the modes are set to "auto", though, these are changed based
|
(If the modes are set to "auto", though, these are changed based
|
||||||
on the default language at startup, and then again based on the
|
on the default language at startup, and then again based on the
|
||||||
language of the first source file. */
|
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 range_check range_check = range_check_off;
|
||||||
enum case_mode case_mode = case_mode_auto;
|
enum case_mode case_mode = case_mode_auto;
|
||||||
enum case_sensitivity case_sensitivity = case_sensitive_on;
|
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"),
|
fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
|
||||||
value);
|
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 "
|
warning (_("the current range check setting "
|
||||||
"does not match the language.\n"));
|
"does not match the language.\n"));
|
||||||
}
|
}
|
||||||
|
@ -245,7 +256,9 @@ set_range_command (const char *ignore,
|
||||||
internal_error (__FILE__, __LINE__,
|
internal_error (__FILE__, __LINE__,
|
||||||
_("Unrecognized range check setting: \"%s\""), range);
|
_("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 "
|
warning (_("the current range check setting "
|
||||||
"does not match the language.\n"));
|
"does not match the language.\n"));
|
||||||
}
|
}
|
||||||
|
@ -329,7 +342,8 @@ static void
|
||||||
set_range_case (void)
|
set_range_case (void)
|
||||||
{
|
{
|
||||||
if (range_mode == range_mode_auto)
|
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)
|
if (case_mode == case_mode_auto)
|
||||||
case_sensitivity = current_language->la_case_sensitivity;
|
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 =
|
extern const struct language_data unknown_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
@ -912,7 +925,6 @@ static unknown_language unknown_language_defn;
|
||||||
|
|
||||||
extern const struct language_data auto_language_data =
|
extern const struct language_data auto_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
|
|
@ -42,16 +42,6 @@ class innermost_block_tracker;
|
||||||
|
|
||||||
#define MAX_FORTRAN_DIMS 7 /* Maximum number of F77 array dims. */
|
#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 ==
|
||||||
range_check_on: Ranges are checked in GDB expressions, producing errors.
|
range_check_on: Ranges are checked in GDB expressions, producing errors.
|
||||||
range_check_warn: Ranges are checked, producing warnings.
|
range_check_warn: Ranges are checked, producing warnings.
|
||||||
|
@ -188,10 +178,6 @@ extern const char *default_word_break_characters (void);
|
||||||
|
|
||||||
struct language_data
|
struct language_data
|
||||||
{
|
{
|
||||||
/* Default range checking. */
|
|
||||||
|
|
||||||
enum range_check la_range_check;
|
|
||||||
|
|
||||||
/* Default case sensitivity. */
|
/* Default case sensitivity. */
|
||||||
enum case_sensitivity la_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
|
virtual bool store_sym_names_in_linkage_form_p () const
|
||||||
{ return false; }
|
{ 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:
|
protected:
|
||||||
|
|
||||||
/* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
|
/* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
|
||||||
|
|
|
@ -199,7 +199,6 @@ const struct exp_descriptor exp_descriptor_modula2 =
|
||||||
|
|
||||||
extern const struct language_data m2_language_data =
|
extern const struct language_data m2_language_data =
|
||||||
{
|
{
|
||||||
range_check_on,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
@ -444,6 +443,11 @@ public:
|
||||||
|
|
||||||
char string_lower_bound () const override
|
char string_lower_bound () const override
|
||||||
{ return 0; }
|
{ return 0; }
|
||||||
|
|
||||||
|
/* See language.h. */
|
||||||
|
|
||||||
|
bool range_checking_on_by_default () const override
|
||||||
|
{ return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Single instance of the M2 language. */
|
/* Single instance of the M2 language. */
|
||||||
|
|
|
@ -323,7 +323,6 @@ static const struct op_print objc_op_print_tab[] =
|
||||||
|
|
||||||
extern const struct language_data objc_language_data =
|
extern const struct language_data objc_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_c,
|
macro_expansion_c,
|
||||||
|
|
|
@ -1006,7 +1006,6 @@ const struct exp_descriptor exp_descriptor_opencl =
|
||||||
/* Constant data representing the OpenCL language. */
|
/* Constant data representing the OpenCL language. */
|
||||||
extern const struct language_data opencl_language_data =
|
extern const struct language_data opencl_language_data =
|
||||||
{
|
{
|
||||||
range_check_off,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_c,
|
macro_expansion_c,
|
||||||
|
|
|
@ -252,7 +252,6 @@ enum pascal_primitive_types {
|
||||||
|
|
||||||
extern const struct language_data pascal_language_data =
|
extern const struct language_data pascal_language_data =
|
||||||
{
|
{
|
||||||
range_check_on,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
@ -508,6 +507,11 @@ public:
|
||||||
|
|
||||||
const char *name_of_this () const override
|
const char *name_of_this () const override
|
||||||
{ return "this"; }
|
{ return "this"; }
|
||||||
|
|
||||||
|
/* See language.h. */
|
||||||
|
|
||||||
|
bool range_checking_on_by_default () const override
|
||||||
|
{ return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Single instance of the Pascal language class. */
|
/* Single instance of the Pascal language class. */
|
||||||
|
|
|
@ -1901,7 +1901,6 @@ static const struct exp_descriptor exp_descriptor_rust =
|
||||||
|
|
||||||
extern const struct language_data rust_language_data =
|
extern const struct language_data rust_language_data =
|
||||||
{
|
{
|
||||||
range_check_on,
|
|
||||||
case_sensitive_on,
|
case_sensitive_on,
|
||||||
array_row_major,
|
array_row_major,
|
||||||
macro_expansion_no,
|
macro_expansion_no,
|
||||||
|
@ -2149,6 +2148,11 @@ public:
|
||||||
&& rust_slice_type_p (type)
|
&& rust_slice_type_p (type)
|
||||||
&& strcmp (type->name (), "&str") == 0));
|
&& 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. */
|
/* Single instance of the Rust language class. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue