X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Flanguage.c;h=8f50af8b22dddeed56d8da3a63d59ba5bd8d2179;hb=c17e02e1b55b5e9cbdc6581f05bfec96dc8436f4;hp=da8dd1bf7ae4b2fc31c9a078a4a2ac6d39a90812;hpb=721b08c68679ad4058bfa7ae73811e6f9e845cfd;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/language.c b/gdb/language.c index da8dd1bf7a..8f50af8b22 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -1,6 +1,6 @@ /* Multiple source language support for GDB. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -45,6 +45,7 @@ #include "frame.h" #include "c-lang.h" #include +#include "gdbarch.h" static int unk_lang_parser (struct parser_state *); @@ -111,10 +112,9 @@ static const char *language; static const char *range; static const char *case_sensitive; -/* Warning issued when current_language and the language of the current - frame do not match. */ -char lang_frame_mismatch_warn[] = -"Warning: the current language does not match this frame."; +/* See language.h. */ +const char lang_frame_mismatch_warn[] = +N_("Warning: the current language does not match this frame."); /* This page contains the functions corresponding to GDB commands and their helpers. */ @@ -146,7 +146,7 @@ show_language_command (struct ui_file *file, int from_tty, if (flang != language_unknown && language_mode == language_mode_manual && current_language->la_language != flang) - printf_filtered ("%s\n", lang_frame_mismatch_warn); + printf_filtered ("%s\n", _(lang_frame_mismatch_warn)); } } @@ -559,7 +559,7 @@ add_set_language_command () doc.printf (_("Set the current source language.\n" "The currently understood settings are:\n\nlocal or " - "auto Automatic setting based on source file\n")); + "auto Automatic setting based on source file")); for (const auto &lang : languages) { @@ -570,7 +570,9 @@ add_set_language_command () /* FIXME: i18n: for now assume that the human-readable name is just a capitalization of the internal name. */ - doc.printf ("%-16s Use the %c%s language\n", + /* 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]), @@ -623,7 +625,7 @@ language_demangle (const struct language_defn *current_language, return NULL; } -/* See langauge.h. */ +/* See language.h. */ int language_sniff_from_mangled_name (const struct language_defn *lang, @@ -650,21 +652,23 @@ language_class_name_from_physname (const struct language_defn *lang, return NULL; } -/* Return non-zero if TYPE should be passed (and returned) by - reference at the language level. */ -int +/* Return information about whether TYPE should be passed + (and returned) by reference at the language level. */ + +struct language_pass_by_ref_info language_pass_by_reference (struct type *type) { return current_language->la_pass_by_reference (type); } -/* Return zero; by default, types are passed by value at the language - level. The target ABI may pass or return some structs by reference - independent of this. */ -int +/* Return a default struct that provides pass-by-reference information + about the given TYPE. Languages should update the default values + as appropriate. */ + +struct language_pass_by_ref_info default_pass_by_reference (struct type *type) { - return 0; + return {}; } /* Return the default string containing the list of characters @@ -688,14 +692,6 @@ default_print_array_index (struct value *index_value, struct ui_file *stream, fprintf_filtered (stream, "] = "); } -void -default_get_string (struct value *value, - gdb::unique_xmalloc_ptr *buffer, - int *length, struct type **char_type, const char **charset) -{ - error (_("Getting a string is unsupported in this language.")); -} - /* See language.h. */ bool @@ -723,6 +719,20 @@ default_symbol_name_matcher (const char *symbol_search_name, /* See language.h. */ +bool +default_is_string_type_p (struct type *type) +{ + type = check_typedef (type); + while (TYPE_CODE (type) == TYPE_CODE_REF) + { + type = TYPE_TARGET_TYPE (type); + type = check_typedef (type); + } + return (TYPE_CODE (type) == TYPE_CODE_STRING); +} + +/* See language.h. */ + symbol_name_matcher_ftype * get_symbol_name_matcher (const language_defn *lang, const lookup_name_info &lookup_name) @@ -869,7 +879,6 @@ const struct language_defn unknown_language_defn = unknown_language_arch_info, /* la_language_arch_info. */ default_print_array_index, default_pass_by_reference, - default_get_string, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, @@ -877,6 +886,7 @@ const struct language_defn unknown_language_defn = &default_varobj_ops, NULL, NULL, + default_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; @@ -920,7 +930,6 @@ const struct language_defn auto_language_defn = unknown_language_arch_info, /* la_language_arch_info. */ default_print_array_index, default_pass_by_reference, - default_get_string, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, @@ -928,6 +937,7 @@ const struct language_defn auto_language_defn = &default_varobj_ops, NULL, NULL, + default_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; @@ -1040,10 +1050,10 @@ language_alloc_type_symbol (enum language lang, struct type *type) gdb_assert (!TYPE_OBJFILE_OWNED (type)); gdbarch = TYPE_OWNER (type).gdbarch; - symbol = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct symbol); + symbol = new (gdbarch_obstack (gdbarch)) struct symbol (); - symbol->ginfo.name = TYPE_NAME (type); - symbol->ginfo.language = lang; + symbol->m_name = TYPE_NAME (type); + symbol->set_language (lang, nullptr); symbol->owner.arch = gdbarch; SYMBOL_OBJFILE_OWNED (symbol) = 0; SYMBOL_TYPE (symbol) = type; @@ -1154,16 +1164,16 @@ _initialize_language (void) add_setshow_enum_cmd ("range", class_support, type_or_range_names, &range, - _("Set range checking. (on/warn/off/auto)"), - _("Show range checking. (on/warn/off/auto)"), + _("Set range checking (on/warn/off/auto)."), + _("Show range checking (on/warn/off/auto)."), NULL, set_range_command, show_range_command, &setchecklist, &showchecklist); add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names, &case_sensitive, _("\ -Set case sensitivity in name search. (on/off/auto)"), _("\ -Show case sensitivity in name search. (on/off/auto)"), _("\ +Set case sensitivity in name search (on/off/auto)."), _("\ +Show case sensitivity in name search (on/off/auto)."), _("\ For Fortran the default is off; for other languages the default is on."), set_case_command, show_case_command,