From 5bae7c4e048c69fe6eae96596c800a92b643f563 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Tue, 23 Jun 2020 14:42:14 +0100 Subject: [PATCH] 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. --- gdb/ChangeLog | 37 +++++++++++++++++++++++++++++++++++++ gdb/ada-lang.c | 1 - gdb/ax-gdb.c | 2 +- gdb/c-exp.y | 2 +- gdb/c-lang.c | 9 +++++---- gdb/d-lang.c | 6 +++++- gdb/expprint.c | 4 ++-- gdb/f-lang.c | 1 - gdb/go-lang.c | 1 - gdb/language.c | 12 ++++++++++-- gdb/language.h | 13 ++++++++----- gdb/m2-lang.c | 1 - gdb/objc-lang.c | 6 +++++- gdb/opencl-lang.c | 1 - gdb/p-lang.c | 6 +++++- gdb/rust-lang.c | 1 - gdb/symtab.c | 6 +++--- gdb/valops.c | 4 ++-- 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,3 +1,40 @@ +2020-09-16 Andrew Burgess + + * 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 * ada-lang.c (ada_language_data): Remove 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 (), _(""), 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); } -- 2.30.2