X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Flanguage.c;h=76efc497379bf479aba7abdeeed1137ba3c95189;hb=d3ecddab5fc036fb57588a9bfff73575dc419052;hp=ea294e670b66df77157291adffd400184b39d7c9;hpb=42a4f53d2bf8938c2aeda9f52be7a20534b214a9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/language.c b/gdb/language.c index ea294e670b..76efc49737 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -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)); } } @@ -172,18 +172,17 @@ set_language_command (const char *ignore, /* Enter auto mode. Set to the current frame's language, if known, or fallback to the initial language. */ language_mode = language_mode_auto; - TRY + try { struct frame_info *frame; frame = get_selected_frame (NULL); flang = get_frame_language (frame); } - CATCH (ex, RETURN_MASK_ERROR) + catch (const gdb_exception_error &ex) { flang = language_unknown; } - END_CATCH if (flang != language_unknown) set_language (flang); @@ -560,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) { @@ -571,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]), @@ -624,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, @@ -689,14 +690,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 @@ -724,6 +717,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) @@ -870,7 +877,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, @@ -878,7 +884,8 @@ const struct language_defn unknown_language_defn = &default_varobj_ops, NULL, NULL, - LANG_MAGIC + default_is_string_type_p, + "{...}" /* la_struct_too_deep_ellipsis */ }; /* These two structs define fake entries for the "local" and "auto" @@ -921,7 +928,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, @@ -929,7 +935,8 @@ const struct language_defn auto_language_defn = &default_varobj_ops, NULL, NULL, - LANG_MAGIC + default_is_string_type_p, + "{...}" /* la_struct_too_deep_ellipsis */ }; @@ -1041,10 +1048,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->name = TYPE_NAME (type); + symbol->set_language (lang, nullptr); symbol->owner.arch = gdbarch; SYMBOL_OBJFILE_OWNED (symbol) = 0; SYMBOL_TYPE (symbol) = type; @@ -1155,16 +1162,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,