gdb: Convert la_name_of_this to a method

Convert language_data::la_name_of_this member variable to a virtual
method language_defn::name_of_this.

There should be no user visible changes after this commit.

gdb/ChangeLog:

	* ada-lang.c (ada_language_data): Remove la_name_of_this
	initializer.
	* ax-gdb.c (gen_expr): Update call to name_of_this.
	* c-exp.y (classify_name): Likewise.
	* c-lang.c (c_language_data): Remove la_name_of_this initializer.
	(cplus_language_data): Likewise.
	(cplus_language::name_of_this): New member function.
	(asm_language_data): Remove la_name_of_this initializer.
	(minimal_language_data): Likewise.
	* d-lang.c (d_language_data): Likewise.
	(d_language::name_of_this): New member function.
	* expprint.c (print_subexp_standard): Update call to name_of_this.
	* f-lang.c (f_language_data): Remove la_name_of_this initializer.
	* go-lang.c (go_language_data): Likewise.
	* language.c (unknown_language_data): Likewise.
	(unknown_language::name_of_this): New member function.
	(auto_language_data): Remove la_name_of_this initializer.
	(auto_language::name_of_this): New member function.
	* language.h (language_data): Delete la_name_of_this member
	variable.
	(language_defn::name_of_this): New member function.
	* m2-lang.c (m2_language_data): Remove la_name_of_this
	initializer.
	* objc-lang.c (objc_language_data): Likewise.
	(objc_language::name_of_this): New member function.
	* opencl-lang.c (opencl_language_data): Remove la_name_of_this
	initializer.
	* p-lang.c (pascal_language_data): Likewise.
	(pascal_language::name_of_this): New member function.
	* rust-lang.c (rust_language_data): Remove la_name_of_this
	initializer.
	* symtab.c (lookup_language_this): Update call to name_of_this.
	(lookup_symbol_aux): Likewise.
	* valops.c (value_of_this): Likewise.
This commit is contained in:
Andrew Burgess 2020-06-23 14:42:14 +01:00
parent 22e3f3ed5c
commit 5bae7c4e04
18 changed files with 84 additions and 29 deletions

View file

@ -1,3 +1,40 @@
2020-09-16 Andrew Burgess <andrew.burgess@embecosm.com>
* ada-lang.c (ada_language_data): Remove la_name_of_this
initializer.
* ax-gdb.c (gen_expr): Update call to name_of_this.
* c-exp.y (classify_name): Likewise.
* c-lang.c (c_language_data): Remove la_name_of_this initializer.
(cplus_language_data): Likewise.
(cplus_language::name_of_this): New member function.
(asm_language_data): Remove la_name_of_this initializer.
(minimal_language_data): Likewise.
* d-lang.c (d_language_data): Likewise.
(d_language::name_of_this): New member function.
* expprint.c (print_subexp_standard): Update call to name_of_this.
* f-lang.c (f_language_data): Remove la_name_of_this initializer.
* go-lang.c (go_language_data): Likewise.
* language.c (unknown_language_data): Likewise.
(unknown_language::name_of_this): New member function.
(auto_language_data): Remove la_name_of_this initializer.
(auto_language::name_of_this): New member function.
* language.h (language_data): Delete la_name_of_this member
variable.
(language_defn::name_of_this): New member function.
* m2-lang.c (m2_language_data): Remove la_name_of_this
initializer.
* objc-lang.c (objc_language_data): Likewise.
(objc_language::name_of_this): New member function.
* opencl-lang.c (opencl_language_data): Remove la_name_of_this
initializer.
* p-lang.c (pascal_language_data): Likewise.
(pascal_language::name_of_this): New member function.
* rust-lang.c (rust_language_data): Remove la_name_of_this
initializer.
* symtab.c (lookup_language_this): Update call to name_of_this.
(lookup_symbol_aux): Likewise.
* valops.c (value_of_this): Likewise.
2020-09-16 Andrew Burgess <andrew.burgess@embecosm.com> 2020-09-16 Andrew Burgess <andrew.burgess@embecosm.com>
* ada-lang.c (ada_language_data): Remove * ada-lang.c (ada_language_data): Remove

View file

@ -13723,7 +13723,6 @@ extern const struct language_data ada_language_data =
macro_expansion_no, macro_expansion_no,
ada_extensions, ada_extensions,
&ada_exp_descriptor, &ada_exp_descriptor,
NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */ true, /* la_store_sym_names_in_linkage_form_p */
ada_op_print_tab, /* expression operators for printing */ ada_op_print_tab, /* expression operators for printing */
0, /* c-style arrays */ 0, /* c-style arrays */

View file

@ -2233,7 +2233,7 @@ gen_expr (struct expression *exp, union exp_element **pc,
sym = lookup_language_this (lang, b).symbol; sym = lookup_language_this (lang, b).symbol;
if (!sym) if (!sym)
error (_("no `%s' found"), lang->la_name_of_this); error (_("no `%s' found"), lang->name_of_this ());
gen_var_ref (ax, value, sym); gen_var_ref (ax, value, sym);

View file

@ -3036,7 +3036,7 @@ classify_name (struct parser_state *par_state, const struct block *block,
memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this)); memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this));
bsym = lookup_symbol (copy.c_str (), block, VAR_DOMAIN, bsym = lookup_symbol (copy.c_str (), block, VAR_DOMAIN,
par_state->language ()->la_name_of_this par_state->language ()->name_of_this ()
? &is_a_field_of_this : NULL); ? &is_a_field_of_this : NULL);
if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK) if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)

View file

@ -889,7 +889,6 @@ extern const struct language_data c_language_data =
macro_expansion_c, macro_expansion_c,
c_extensions, c_extensions,
&exp_descriptor_c, &exp_descriptor_c,
NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */ true, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */ c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */
@ -989,7 +988,6 @@ extern const struct language_data cplus_language_data =
macro_expansion_c, macro_expansion_c,
cplus_extensions, cplus_extensions,
&exp_descriptor_c, &exp_descriptor_c,
"this", /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */ c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */
@ -1153,6 +1151,11 @@ public:
return cp_lookup_symbol_nonlocal (this, name, block, domain); return cp_lookup_symbol_nonlocal (this, name, block, domain);
} }
/* See language.h. */
const char *name_of_this () const override
{ return "this"; }
protected: protected:
/* See language.h. */ /* See language.h. */
@ -1186,7 +1189,6 @@ extern const struct language_data asm_language_data =
macro_expansion_c, macro_expansion_c,
asm_extensions, asm_extensions,
&exp_descriptor_c, &exp_descriptor_c,
NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */ true, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */ c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */
@ -1241,7 +1243,6 @@ extern const struct language_data minimal_language_data =
macro_expansion_c, macro_expansion_c,
NULL, NULL,
&exp_descriptor_c, &exp_descriptor_c,
NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */ true, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */ c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */

View file

@ -142,7 +142,6 @@ extern const struct language_data d_language_data =
macro_expansion_no, macro_expansion_no,
d_extensions, d_extensions,
&exp_descriptor_c, &exp_descriptor_c,
"this",
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
d_op_print_tab, /* Expression operators for printing. */ d_op_print_tab, /* Expression operators for printing. */
1, /* C-style arrays. */ 1, /* C-style arrays. */
@ -271,6 +270,11 @@ public:
{ {
return d_parse (ps); return d_parse (ps);
} }
/* See language.h. */
const char *name_of_this () const override
{ return "this"; }
}; };
/* Single instance of the D language class. */ /* Single instance of the D language class. */

View file

@ -504,8 +504,8 @@ print_subexp_standard (struct expression *exp, int *pos,
case OP_THIS: case OP_THIS:
++(*pos); ++(*pos);
if (exp->language_defn->la_name_of_this) if (exp->language_defn->name_of_this () != NULL)
fputs_filtered (exp->language_defn->la_name_of_this, stream); fputs_filtered (exp->language_defn->name_of_this (), stream);
else else
fprintf_styled (stream, metadata_style.style (), fprintf_styled (stream, metadata_style.style (),
_("<language %s has no 'this'>"), _("<language %s has no 'this'>"),

View file

@ -502,7 +502,6 @@ extern const struct language_data f_language_data =
macro_expansion_no, macro_expansion_no,
f_extensions, f_extensions,
&exp_descriptor_f, &exp_descriptor_f,
NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
f_op_print_tab, /* expression operators for printing */ f_op_print_tab, /* expression operators for printing */
0, /* arrays are first-class (not c-style) */ 0, /* arrays are first-class (not c-style) */

View file

@ -517,7 +517,6 @@ extern const struct language_data go_language_data =
macro_expansion_no, macro_expansion_no,
NULL, NULL,
&exp_descriptor_c, &exp_descriptor_c,
NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
go_op_print_tab, /* Expression operators for printing. */ go_op_print_tab, /* Expression operators for printing. */
1, /* C-style arrays. */ 1, /* C-style arrays. */

View file

@ -792,7 +792,6 @@ extern const struct language_data unknown_language_data =
macro_expansion_no, macro_expansion_no,
NULL, NULL,
&exp_descriptor_standard, &exp_descriptor_standard,
"this", /* name_of_this */
true, /* store_sym_names_in_linkage_form_p */ true, /* store_sym_names_in_linkage_form_p */
unk_op_print_tab, /* expression operators for printing */ unk_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */
@ -898,6 +897,11 @@ public:
{ {
return default_is_string_type_p (type); return default_is_string_type_p (type);
} }
/* See language.h. */
const char *name_of_this () const override
{ return "this"; }
}; };
/* Single instance of the unknown language class. */ /* Single instance of the unknown language class. */
@ -917,7 +921,6 @@ extern const struct language_data auto_language_data =
macro_expansion_no, macro_expansion_no,
NULL, NULL,
&exp_descriptor_standard, &exp_descriptor_standard,
"this", /* name_of_this */
false, /* store_sym_names_in_linkage_form_p */ false, /* store_sym_names_in_linkage_form_p */
unk_op_print_tab, /* expression operators for printing */ unk_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */
@ -1023,6 +1026,11 @@ public:
{ {
return default_is_string_type_p (type); return default_is_string_type_p (type);
} }
/* See language.h. */
const char *name_of_this () const override
{ return "this"; }
}; };
/* Single instance of the fake "auto" language. */ /* Single instance of the fake "auto" language. */

View file

@ -227,11 +227,6 @@ struct language_data
/* Now come some hooks for lookup_symbol. */ /* Now come some hooks for lookup_symbol. */
/* If this is non-NULL, specifies the name that of the implicit
local variable that refers to the current object instance. */
const char *la_name_of_this;
/* True if the symbols names should be stored in GDB's data structures /* True if the symbols names should be stored in GDB's data structures
for minimal/partial/full symbols using their linkage (aka mangled) for minimal/partial/full symbols using their linkage (aka mangled)
form; false if the symbol names should be demangled first. form; false if the symbol names should be demangled first.
@ -557,6 +552,14 @@ struct language_defn : language_data
virtual const char *struct_too_deep_ellipsis () const virtual const char *struct_too_deep_ellipsis () const
{ return "{...}"; } { return "{...}"; }
/* If this returns non-NULL then the string returned specifies the name
of the implicit local variable that refers to the current object
instance. Return NULL (the default) for languages that have no name
for the current object instance. */
virtual const char *name_of_this () const
{ return nullptr; }
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.

View file

@ -208,7 +208,6 @@ extern const struct language_data m2_language_data =
macro_expansion_no, macro_expansion_no,
NULL, NULL,
&exp_descriptor_modula2, &exp_descriptor_modula2,
NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
m2_op_print_tab, /* expression operators for printing */ m2_op_print_tab, /* expression operators for printing */
0, /* arrays are first-class (not c-style) */ 0, /* arrays are first-class (not c-style) */

View file

@ -337,7 +337,6 @@ extern const struct language_data objc_language_data =
macro_expansion_c, macro_expansion_c,
objc_extensions, objc_extensions,
&exp_descriptor_standard, &exp_descriptor_standard,
"self", /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
objc_op_print_tab, /* Expression operators for printing */ objc_op_print_tab, /* Expression operators for printing */
1, /* C-style arrays */ 1, /* C-style arrays */
@ -418,6 +417,11 @@ public:
return real_stop_pc; return real_stop_pc;
} }
/* See language.h. */
const char *name_of_this () const override
{ return "self"; }
}; };
/* Single instance of the class representing the Objective-C language. */ /* Single instance of the class representing the Objective-C language. */

View file

@ -1015,7 +1015,6 @@ extern const struct language_data opencl_language_data =
macro_expansion_c, macro_expansion_c,
NULL, NULL,
&exp_descriptor_opencl, &exp_descriptor_opencl,
NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */ c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */

View file

@ -266,7 +266,6 @@ extern const struct language_data pascal_language_data =
macro_expansion_no, macro_expansion_no,
p_extensions, p_extensions,
&exp_descriptor_standard, &exp_descriptor_standard,
"this", /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
pascal_op_print_tab, /* expression operators for printing */ pascal_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */
@ -497,6 +496,11 @@ public:
return is_pascal_string_type (type, nullptr, nullptr, nullptr, return is_pascal_string_type (type, nullptr, nullptr, nullptr,
nullptr, nullptr) > 0; nullptr, nullptr) > 0;
} }
/* See language.h. */
const char *name_of_this () const override
{ return "this"; }
}; };
/* Single instance of the Pascal language class. */ /* Single instance of the Pascal language class. */

View file

@ -1915,7 +1915,6 @@ extern const struct language_data rust_language_data =
macro_expansion_no, macro_expansion_no,
rust_extensions, rust_extensions,
&exp_descriptor_rust, &exp_descriptor_rust,
NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */ false, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */ c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */ 1, /* c-style arrays */

View file

@ -1912,7 +1912,7 @@ struct block_symbol
lookup_language_this (const struct language_defn *lang, lookup_language_this (const struct language_defn *lang,
const struct block *block) const struct block *block)
{ {
if (lang->la_name_of_this == NULL || block == NULL) if (lang->name_of_this () == NULL || block == NULL)
return {}; return {};
if (symbol_lookup_debug > 1) if (symbol_lookup_debug > 1)
@ -1929,7 +1929,7 @@ lookup_language_this (const struct language_defn *lang,
{ {
struct symbol *sym; struct symbol *sym;
sym = block_lookup_symbol (block, lang->la_name_of_this, sym = block_lookup_symbol (block, lang->name_of_this (),
symbol_name_match_type::SEARCH_NAME, symbol_name_match_type::SEARCH_NAME,
VAR_DOMAIN); VAR_DOMAIN);
if (sym != NULL) if (sym != NULL)
@ -2069,7 +2069,7 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type,
if (t->code () != TYPE_CODE_STRUCT if (t->code () != TYPE_CODE_STRUCT
&& t->code () != TYPE_CODE_UNION) && t->code () != TYPE_CODE_UNION)
error (_("Internal error: `%s' is not an aggregate"), error (_("Internal error: `%s' is not an aggregate"),
langdef->la_name_of_this); langdef->name_of_this ());
if (check_field (t, name, is_a_field_of_this)) if (check_field (t, name, is_a_field_of_this))
{ {

View file

@ -3716,7 +3716,7 @@ value_of_this (const struct language_defn *lang)
const struct block *b; const struct block *b;
struct frame_info *frame; struct frame_info *frame;
if (!lang->la_name_of_this) if (lang->name_of_this () == NULL)
error (_("no `this' in current language")); error (_("no `this' in current language"));
frame = get_selected_frame (_("no frame selected")); frame = get_selected_frame (_("no frame selected"));
@ -3726,7 +3726,7 @@ value_of_this (const struct language_defn *lang)
sym = lookup_language_this (lang, b); sym = lookup_language_this (lang, b);
if (sym.symbol == NULL) if (sym.symbol == NULL)
error (_("current stack frame does not contain a variable named `%s'"), error (_("current stack frame does not contain a variable named `%s'"),
lang->la_name_of_this); lang->name_of_this ());
return read_var_value (sym.symbol, sym.block, frame); return read_var_value (sym.symbol, sym.block, frame);
} }