diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-06-23 20:07:09 +0100 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-09-16 10:16:45 +0100 |
commit | 6f7664a9c33b110248d0fb68bcc41fdb48396c51 (patch) | |
tree | fe43babfa27c4ee8bfe20dbb3bbf9f5725a5d4b2 /gdb/language.c | |
parent | 5bae7c4e048c69fe6eae96596c800a92b643f563 (diff) | |
download | binutils-6f7664a9c33b110248d0fb68bcc41fdb48396c51.zip binutils-6f7664a9c33b110248d0fb68bcc41fdb48396c51.tar.gz binutils-6f7664a9c33b110248d0fb68bcc41fdb48396c51.tar.bz2 |
gdb: Convert la_name and la_natural_name to methods
Convert the two language_data member variables la_name and
la_natural_name to virtual methods in language_defn struct called name
and natural_name respectively.
The virtual methods in the language_defn base class are pure virtual,
as every language must implement these, and as every language has a
unique name there's no sensible default here.
Given that every language must implement these methods I did wonder
about making this data passed into the base class constructor, but in
the end I went with the virtual method approach. I'm open to changing
this approach if people prefer the constructor approach.
During updating the calls to language_defn::name I found in
add_set_language_command a place where we took la_name and then
capitalised the first letter to create a language name that could be
used in the documentation string. I replaced this with a use of
natural_name instead as this seemed a better choice, in most cases
this will make no difference, as for most languages the natural_name
is just the name with the first character in upper case, but for some
languages, for example 'Open-CL' and 'Objective-C' this is not the
case.
In the case of asm_language the name is 'asm', while the natural_name
was previously 'assembly'. I changed the natural name to 'Assembly',
this makes the documentation string case above cleaner, however, this
will change the MI output for -var-info-expression, where the 'lang'
field will change from 'assembly' to 'Assembly'. It is possible this
could be a breaking change if a front-end is relying on the existing
name.
gdb/ChangeLog:
* ada-lang.c (ada_language_data): Remove la_name and
la_natural_name initializers.
(ada_language::name): New member function.
(ada_language::natural_name): New member function.
* c-lang.c (c_language_data): Remove la_name and
la_natural_name initializers.
(c_language::name): New member function.
(c_language::natural_name): New member function.
(cplus_language_data): Remove la_name and
la_natural_name initializers.
(cplus_language::name): New member function.
(cplus_language::natural_name): New member function.
(asm_language_data): Remove la_name and
la_natural_name initializers.
(asm_language::name): New member function.
(asm_language::natural_name): New member function.
(minimal_language_data): Remove la_name and
la_natural_name initializers.
(minimal_language::name): New member function.
(minimal_language::natural_name): New member function.
* compile/compile.c (compile_to_object): Update call to
lanugage_defn::name.
* d-lang.c (d_language_data): Remove la_name and
la_natural_name initializers.
(d_language::name): New member function.
(d_language::natural_name): New member function.
* expprint.c (print_subexp_standard): Update call to
language_defn::name.
(dump_raw_expression): Likewise
(dump_prefix_expression): Likewise.
* f-lang.c (f_language_data): Remove la_name and
la_natural_name initializers.
(f_language::name): New member function.
(f_language::natural_name): New member function.
* go-lang.c (go_language_data): Remove la_name and
la_natural_name initializers.
(go_language::name): New member function.
(go_language::natural_name): New member function.
* language.c (show_language_command): Update call to
language_defn::name.
(set_language_command): Likewise.
(language_enum): Likewise.
(language_str): Likewise.
(add_set_language_command): Likewise, use
language_defn::natural_name in the doc string.
(unknown_language_data): Remove la_name and
la_natural_name initializers.
(unknown_language::name): New member function.
(unknown_language::natural_name): New member function.
(auto_language_data): Remove la_name and
la_natural_name initializers.
(auto_language::name): New member function.
(auto_language::natural_name): New member function.
(language_lookup_primitive_type_as_symbol): Update call to
language_defn::name.
* language.h (language_data): Remove la_name and la_natural_name
member variables.
(language_defn::name): New member function.
(language_defn::natural_name): New member function.
* m2-lang.c (m2_language_data): Remove la_name and
la_natural_name initializers.
(m2_language::name): New member function.
(m2_language::natural_name): New member function.
* mi/mi-cmd-var.c (mi_cmd_var_info_expression): Update call to
language_defn::natural_name.
* objc-lang.c (objc_language_data): Remove la_name and
la_natural_name initializers.
(objc_language::name): New member function.
(objc_language::natural_name): New member function.
* opencl-lang.c (opencl_language_data): Remove la_name and
la_natural_name initializers.
(opencl_language::name): New member function.
(opencl_language::natural_name): New member function.
* p-lang.c (pascal_language_data): Remove la_name and
la_natural_name initializers.
(pascal_language::name): New member function.
(pascal_language::natural_name): New member function.
* rust-lang.c (rust_language_data): Remove la_name and
la_natural_name initializers.
(rust_language::name): New member function.
(rust_language::natural_name): New member function.
* symtab.c (lookup_language_this): Update call to
language_defn::name.
Diffstat (limited to 'gdb/language.c')
-rw-r--r-- | gdb/language.c | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/gdb/language.c b/gdb/language.c index 7ccd0ac..0b1b488 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -98,11 +98,11 @@ show_language_command (struct ui_file *file, int from_tty, fprintf_filtered (gdb_stdout, _("The current source language is " "\"auto; currently %s\".\n"), - current_language->la_name); + current_language->name ()); else fprintf_filtered (gdb_stdout, _("The current source language is \"%s\".\n"), - current_language->la_name); + current_language->name ()); if (has_stack_frames ()) { @@ -131,7 +131,7 @@ set_language_command (const char *ignore, /* Search the list of languages for a match. */ for (const auto &lang : language_defn::languages) { - if (strcmp (lang->la_name, language) == 0) + if (strcmp (lang->name (), language) == 0) { /* Found it! Go into manual mode, and use this language. */ if (lang->la_language == language_auto) @@ -442,7 +442,7 @@ enum language language_enum (const char *str) { for (const auto &lang : language_defn::languages) - if (strcmp (lang->la_name, str) == 0) + if (strcmp (lang->name (), str) == 0) return lang->la_language; if (strcmp (str, "local") == 0) @@ -466,7 +466,7 @@ language_def (enum language lang) const char * language_str (enum language lang) { - return language_def (lang)->la_name; + return language_def (lang)->name (); } @@ -486,9 +486,9 @@ add_set_language_command () /* Display "auto", "local" and "unknown" first, and then the rest, alpha sorted. */ const char **language_names_p = language_names; - *language_names_p++ = language_def (language_auto)->la_name; + *language_names_p++ = language_def (language_auto)->name (); *language_names_p++ = "local"; - *language_names_p++ = language_def (language_unknown)->la_name; + *language_names_p++ = language_def (language_unknown)->name (); const char **sort_begin = language_names_p; for (const auto &lang : language_defn::languages) { @@ -496,7 +496,7 @@ add_set_language_command () if (lang->la_language == language_auto || lang->la_language == language_unknown) continue; - *language_names_p++ = lang->la_name; + *language_names_p++ = lang->name (); } *language_names_p = NULL; std::sort (sort_begin, language_names_p, compare_cstrings); @@ -524,15 +524,11 @@ add_set_language_command () || lang->la_language == language_auto) continue; - /* FIXME: i18n: for now assume that the human-readable name is - just a capitalization of the internal name. */ /* Note that we add the newline at the front, so we don't wind up with a trailing newline. */ - doc.printf ("\n%-16s Use the %c%s language", - lang->la_name, - /* Capitalize first letter of language name. */ - toupper (lang->la_name[0]), - lang->la_name + 1); + doc.printf ("\n%-16s Use the %s language", + lang->name (), + lang->natural_name ()); } add_setshow_enum_cmd ("language", class_support, @@ -783,8 +779,6 @@ unknown_language_arch_info (struct gdbarch *gdbarch, extern const struct language_data unknown_language_data = { - "unknown", - "Unknown", language_unknown, range_check_off, case_sensitive_on, @@ -809,6 +803,16 @@ public: { /* Nothing. */ } /* See language.h. */ + + const char *name () const override + { return "unknown"; } + + /* See language.h. */ + + const char *natural_name () const override + { return "Unknown"; } + + /* See language.h. */ void language_arch_info (struct gdbarch *gdbarch, struct language_arch_info *lai) const override { @@ -912,8 +916,6 @@ static unknown_language unknown_language_defn; extern const struct language_data auto_language_data = { - "auto", - "Auto", language_auto, range_check_off, case_sensitive_on, @@ -938,6 +940,16 @@ public: { /* Nothing. */ } /* See language.h. */ + + const char *name () const override + { return "auto"; } + + /* See language.h. */ + + const char *natural_name () const override + { return "Auto"; } + + /* See language.h. */ void language_arch_info (struct gdbarch *gdbarch, struct language_arch_info *lai) const override { @@ -1209,7 +1221,7 @@ language_lookup_primitive_type_as_symbol (const struct language_defn *la, fprintf_unfiltered (gdb_stdlog, "language_lookup_primitive_type_as_symbol" " (%s, %s, %s)", - la->la_name, host_address_to_string (gdbarch), name); + la->name (), host_address_to_string (gdbarch), name); } typep = language_lookup_primitive_type_1 (lai, name); |