summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2020-06-23 14:42:14 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-09-16 10:16:45 +0100
commit5bae7c4e048c69fe6eae96596c800a92b643f563 (patch)
treed5193512a0a6b828ddb6ea23f5e5fef42cae94cc
parent22e3f3ed5c417fca6a39173a671dba707d2d6eaf (diff)
downloadbinutils-gdb-5bae7c4e048c69fe6eae96596c800a92b643f563.tar.gz
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.
-rw-r--r--gdb/ChangeLog37
-rw-r--r--gdb/ada-lang.c1
-rw-r--r--gdb/ax-gdb.c2
-rw-r--r--gdb/c-exp.y2
-rw-r--r--gdb/c-lang.c9
-rw-r--r--gdb/d-lang.c6
-rw-r--r--gdb/expprint.c4
-rw-r--r--gdb/f-lang.c1
-rw-r--r--gdb/go-lang.c1
-rw-r--r--gdb/language.c12
-rw-r--r--gdb/language.h13
-rw-r--r--gdb/m2-lang.c1
-rw-r--r--gdb/objc-lang.c6
-rw-r--r--gdb/opencl-lang.c1
-rw-r--r--gdb/p-lang.c6
-rw-r--r--gdb/rust-lang.c1
-rw-r--r--gdb/symtab.c6
-rw-r--r--gdb/valops.c4
18 files changed, 84 insertions, 29 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ef97ac180de..a5d9d3be7e1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,42 @@
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>
+
* ada-lang.c (ada_language_data): Remove
la_struct_too_deep_ellipsis initializer.
(ada_language::struct_too_deep_ellipsis): New member function.
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 3ad693fe25e..b028ccb79f8 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -13723,7 +13723,6 @@ extern const struct language_data ada_language_data =
macro_expansion_no,
ada_extensions,
&ada_exp_descriptor,
- NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */
ada_op_print_tab, /* expression operators for printing */
0, /* c-style arrays */
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index 78272f7a8b8..397b92b05ee 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -2233,7 +2233,7 @@ gen_expr (struct expression *exp, union exp_element **pc,
sym = lookup_language_this (lang, b).symbol;
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);
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index 7fc23c4c8d2..b03855ba7af 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -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));
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);
if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 8a704701c91..2e4cf0742d4 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -889,7 +889,6 @@ extern const struct language_data c_language_data =
macro_expansion_c,
c_extensions,
&exp_descriptor_c,
- NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
@@ -989,7 +988,6 @@ extern const struct language_data cplus_language_data =
macro_expansion_c,
cplus_extensions,
&exp_descriptor_c,
- "this", /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
@@ -1153,6 +1151,11 @@ public:
return cp_lookup_symbol_nonlocal (this, name, block, domain);
}
+ /* See language.h. */
+
+ const char *name_of_this () const override
+ { return "this"; }
+
protected:
/* See language.h. */
@@ -1186,7 +1189,6 @@ extern const struct language_data asm_language_data =
macro_expansion_c,
asm_extensions,
&exp_descriptor_c,
- NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
@@ -1241,7 +1243,6 @@ extern const struct language_data minimal_language_data =
macro_expansion_c,
NULL,
&exp_descriptor_c,
- NULL, /* name_of_this */
true, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 79cb1e478c4..82d5615b4d8 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -142,7 +142,6 @@ extern const struct language_data d_language_data =
macro_expansion_no,
d_extensions,
&exp_descriptor_c,
- "this",
false, /* la_store_sym_names_in_linkage_form_p */
d_op_print_tab, /* Expression operators for printing. */
1, /* C-style arrays. */
@@ -271,6 +270,11 @@ public:
{
return d_parse (ps);
}
+
+ /* See language.h. */
+
+ const char *name_of_this () const override
+ { return "this"; }
};
/* Single instance of the D language class. */
diff --git a/gdb/expprint.c b/gdb/expprint.c
index 5427a56f6ae..24d647e006c 100644
--- a/gdb/expprint.c
+++ b/gdb/expprint.c
@@ -504,8 +504,8 @@ print_subexp_standard (struct expression *exp, int *pos,
case OP_THIS:
++(*pos);
- if (exp->language_defn->la_name_of_this)
- fputs_filtered (exp->language_defn->la_name_of_this, stream);
+ if (exp->language_defn->name_of_this () != NULL)
+ fputs_filtered (exp->language_defn->name_of_this (), stream);
else
fprintf_styled (stream, metadata_style.style (),
_("<language %s has no 'this'>"),
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 5beaf3d772c..76f5fb5d077 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -502,7 +502,6 @@ extern const struct language_data f_language_data =
macro_expansion_no,
f_extensions,
&exp_descriptor_f,
- NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
f_op_print_tab, /* expression operators for printing */
0, /* arrays are first-class (not c-style) */
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index deff33a8abf..df7cbc79b19 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -517,7 +517,6 @@ extern const struct language_data go_language_data =
macro_expansion_no,
NULL,
&exp_descriptor_c,
- NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
go_op_print_tab, /* Expression operators for printing. */
1, /* C-style arrays. */
diff --git a/gdb/language.c b/gdb/language.c
index 914c75b08e7..7ccd0ac2b8e 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -792,7 +792,6 @@ extern const struct language_data unknown_language_data =
macro_expansion_no,
NULL,
&exp_descriptor_standard,
- "this", /* name_of_this */
true, /* store_sym_names_in_linkage_form_p */
unk_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
@@ -898,6 +897,11 @@ public:
{
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. */
@@ -917,7 +921,6 @@ extern const struct language_data auto_language_data =
macro_expansion_no,
NULL,
&exp_descriptor_standard,
- "this", /* name_of_this */
false, /* store_sym_names_in_linkage_form_p */
unk_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
@@ -1023,6 +1026,11 @@ public:
{
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. */
diff --git a/gdb/language.h b/gdb/language.h
index f2195ed4e8d..4c9453f33cb 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -227,11 +227,6 @@ struct language_data
/* 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
for minimal/partial/full symbols using their linkage (aka mangled)
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
{ 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:
/* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 9e2d0d75f17..3ba5026b2bc 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -208,7 +208,6 @@ extern const struct language_data m2_language_data =
macro_expansion_no,
NULL,
&exp_descriptor_modula2,
- NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
m2_op_print_tab, /* expression operators for printing */
0, /* arrays are first-class (not c-style) */
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 2c49f8d5840..e8d846ea7ac 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -337,7 +337,6 @@ extern const struct language_data objc_language_data =
macro_expansion_c,
objc_extensions,
&exp_descriptor_standard,
- "self", /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
objc_op_print_tab, /* Expression operators for printing */
1, /* C-style arrays */
@@ -418,6 +417,11 @@ public:
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. */
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 0df58ee5e18..2806bee2f2a 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -1015,7 +1015,6 @@ extern const struct language_data opencl_language_data =
macro_expansion_c,
NULL,
&exp_descriptor_opencl,
- NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index cbde8e1aecc..2c551399860 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -266,7 +266,6 @@ extern const struct language_data pascal_language_data =
macro_expansion_no,
p_extensions,
&exp_descriptor_standard,
- "this", /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
pascal_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
@@ -497,6 +496,11 @@ public:
return is_pascal_string_type (type, nullptr, nullptr, nullptr,
nullptr, nullptr) > 0;
}
+
+ /* See language.h. */
+
+ const char *name_of_this () const override
+ { return "this"; }
};
/* Single instance of the Pascal language class. */
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index ff0ac7bd42c..aec430e84ac 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -1915,7 +1915,6 @@ extern const struct language_data rust_language_data =
macro_expansion_no,
rust_extensions,
&exp_descriptor_rust,
- NULL, /* name_of_this */
false, /* la_store_sym_names_in_linkage_form_p */
c_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
diff --git a/gdb/symtab.c b/gdb/symtab.c
index f96ad9554d9..ff88adfe020 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -1912,7 +1912,7 @@ struct block_symbol
lookup_language_this (const struct language_defn *lang,
const struct block *block)
{
- if (lang->la_name_of_this == NULL || block == NULL)
+ if (lang->name_of_this () == NULL || block == NULL)
return {};
if (symbol_lookup_debug > 1)
@@ -1929,7 +1929,7 @@ lookup_language_this (const struct language_defn *lang,
{
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,
VAR_DOMAIN);
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
&& t->code () != TYPE_CODE_UNION)
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))
{
diff --git a/gdb/valops.c b/gdb/valops.c
index da2881a3469..6dc2f54b14d 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -3716,7 +3716,7 @@ value_of_this (const struct language_defn *lang)
const struct block *b;
struct frame_info *frame;
- if (!lang->la_name_of_this)
+ if (lang->name_of_this () == NULL)
error (_("no `this' in current language"));
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);
if (sym.symbol == NULL)
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);
}