| Index: gdb/language.c
|
| diff --git a/gdb/language.c b/gdb/language.c
|
| index f0a8697998fcec71d8cc75df62a274e6b45ca2aa..f1ea7799a1e5f99a355b2e7392e17f8b11518694 100644
|
| --- a/gdb/language.c
|
| +++ b/gdb/language.c
|
| @@ -1,7 +1,6 @@
|
| /* Multiple source language support for GDB.
|
|
|
| - Copyright (C) 1991-1996, 1998-2005, 2007-2012 Free Software
|
| - Foundation, Inc.
|
| + Copyright (C) 1991-2013 Free Software Foundation, Inc.
|
|
|
| Contributed by the Department of Computer Science at the State University
|
| of New York at Buffalo.
|
| @@ -31,7 +30,7 @@
|
|
|
| #include "defs.h"
|
| #include <ctype.h>
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
|
|
| #include "symtab.h"
|
| #include "gdbtypes.h"
|
| @@ -39,11 +38,13 @@
|
| #include "gdbcmd.h"
|
| #include "expression.h"
|
| #include "language.h"
|
| +#include "varobj.h"
|
| #include "target.h"
|
| #include "parser-defs.h"
|
| #include "jv-lang.h"
|
| #include "demangle.h"
|
| #include "symfile.h"
|
| +#include "cp-support.h"
|
|
|
| extern void _initialize_language (void);
|
|
|
| @@ -55,7 +56,7 @@ static void show_check (char *, int);
|
|
|
| static void set_check (char *, int);
|
|
|
| -static void set_type_range_case (void);
|
| +static void set_range_case (void);
|
|
|
| static void unk_lang_emit_char (int c, struct type *type,
|
| struct ui_file *stream, int quoter);
|
| @@ -63,9 +64,6 @@ static void unk_lang_emit_char (int c, struct type *type,
|
| static void unk_lang_printchar (int c, struct type *type,
|
| struct ui_file *stream);
|
|
|
| -static void unk_lang_print_type (struct type *, const char *, struct ui_file *,
|
| - int, int);
|
| -
|
| static void unk_lang_value_print (struct value *, struct ui_file *,
|
| const struct value_print_options *);
|
|
|
| @@ -81,8 +79,6 @@ extern const struct language_defn unknown_language_defn;
|
|
|
| enum range_mode range_mode = range_mode_auto;
|
| enum range_check range_check = range_check_off;
|
| -enum type_mode type_mode = type_mode_auto;
|
| -enum type_check type_check = type_check_off;
|
| enum case_mode case_mode = case_mode_auto;
|
| enum case_sensitivity case_sensitivity = case_sensitive_on;
|
|
|
| @@ -174,7 +170,7 @@ set_language_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
| /* Enter manual mode. Set the specified language. */
|
| language_mode = language_mode_manual;
|
| current_language = languages[i];
|
| - set_type_range_case ();
|
| + set_range_case ();
|
| expected_language = current_language;
|
| return;
|
| }
|
| @@ -186,79 +182,6 @@ set_language_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
| language);
|
| }
|
|
|
| -/* Show command. Display a warning if the type setting does
|
| - not match the current language. */
|
| -static void
|
| -show_type_command (struct ui_file *file, int from_tty,
|
| - struct cmd_list_element *c, const char *value)
|
| -{
|
| - if (type_mode == type_mode_auto)
|
| - {
|
| - char *tmp = NULL;
|
| -
|
| - switch (type_check)
|
| - {
|
| - case type_check_on:
|
| - tmp = "on";
|
| - break;
|
| - case type_check_off:
|
| - tmp = "off";
|
| - break;
|
| - case type_check_warn:
|
| - tmp = "warn";
|
| - break;
|
| - default:
|
| - internal_error (__FILE__, __LINE__,
|
| - "Unrecognized type check setting.");
|
| - }
|
| -
|
| - fprintf_filtered (gdb_stdout,
|
| - _("Type checking is \"auto; currently %s\".\n"),
|
| - tmp);
|
| - }
|
| - else
|
| - fprintf_filtered (gdb_stdout, _("Type checking is \"%s\".\n"),
|
| - value);
|
| -
|
| - if (type_check != current_language->la_type_check)
|
| - warning (_("the current type check setting"
|
| - " does not match the language.\n"));
|
| -}
|
| -
|
| -/* Set command. Change the setting for type checking. */
|
| -static void
|
| -set_type_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
| -{
|
| - if (strcmp (type, "on") == 0)
|
| - {
|
| - type_check = type_check_on;
|
| - type_mode = type_mode_manual;
|
| - }
|
| - else if (strcmp (type, "warn") == 0)
|
| - {
|
| - type_check = type_check_warn;
|
| - type_mode = type_mode_manual;
|
| - }
|
| - else if (strcmp (type, "off") == 0)
|
| - {
|
| - type_check = type_check_off;
|
| - type_mode = type_mode_manual;
|
| - }
|
| - else if (strcmp (type, "auto") == 0)
|
| - {
|
| - type_mode = type_mode_auto;
|
| - set_type_range_case ();
|
| - return;
|
| - }
|
| - else
|
| - internal_error (__FILE__, __LINE__,
|
| - _("Unrecognized type check setting: \"%s\""), type);
|
| -
|
| - if (type_check != current_language->la_type_check)
|
| - warning (_("the current type check setting"
|
| - " does not match the language.\n"));
|
| -}
|
| -
|
| /* Show command. Display a warning if the range setting does
|
| not match the current language. */
|
| static void
|
| @@ -320,7 +243,7 @@ set_range_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
| else if (strcmp (range, "auto") == 0)
|
| {
|
| range_mode = range_mode_auto;
|
| - set_type_range_case ();
|
| + set_range_case ();
|
| return;
|
| }
|
| else
|
| @@ -389,7 +312,7 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
| else if (strcmp (case_sensitive, "auto") == 0)
|
| {
|
| case_mode = case_mode_auto;
|
| - set_type_range_case ();
|
| + set_range_case ();
|
| return;
|
| }
|
| else
|
| @@ -409,14 +332,11 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
| If SHOW is non-zero, then print out the current language,
|
| type and range checking status. */
|
| static void
|
| -set_type_range_case (void)
|
| +set_range_case (void)
|
| {
|
| if (range_mode == range_mode_auto)
|
| range_check = current_language->la_range_check;
|
|
|
| - if (type_mode == type_mode_auto)
|
| - type_check = current_language->la_type_check;
|
| -
|
| if (case_mode == case_mode_auto)
|
| case_sensitivity = current_language->la_case_sensitivity;
|
| }
|
| @@ -437,7 +357,7 @@ set_language (enum language lang)
|
| if (languages[i]->la_language == lang)
|
| {
|
| current_language = languages[i];
|
| - set_type_range_case ();
|
| + set_range_case ();
|
| break;
|
| }
|
| }
|
| @@ -461,8 +381,6 @@ language_info (int quietly)
|
|
|
| if (!quietly)
|
| {
|
| - printf_unfiltered (_("Type checking: %s\n"), type);
|
| - show_type_command (NULL, 1, NULL, NULL);
|
| printf_unfiltered (_("Range checking: %s\n"), range);
|
| show_range_command (NULL, 1, NULL, NULL);
|
| printf_unfiltered (_("Case sensitivity: %s\n"), case_sensitive);
|
| @@ -500,38 +418,11 @@ value_true (struct value *val)
|
| error messages that occur during type- and range-
|
| checking. */
|
|
|
| -/* These are called when a language fails a type- or range-check. The
|
| +/* This is called when a language fails a range-check. The
|
| first argument should be a printf()-style format string, and the
|
| - rest of the arguments should be its arguments. If
|
| - [type|range]_check is [type|range]_check_on, an error is printed;
|
| - if [type|range]_check_warn, a warning; otherwise just the
|
| - message. */
|
| -
|
| -void
|
| -type_error (const char *string,...)
|
| -{
|
| - va_list args;
|
| -
|
| - va_start (args, string);
|
| - switch (type_check)
|
| - {
|
| - case type_check_warn:
|
| - vwarning (string, args);
|
| - break;
|
| - case type_check_on:
|
| - verror (string, args);
|
| - break;
|
| - case type_check_off:
|
| - /* FIXME: cagney/2002-01-30: Should this function print anything
|
| - when type error is off? */
|
| - vfprintf_filtered (gdb_stderr, string, args);
|
| - fprintf_filtered (gdb_stderr, "\n");
|
| - break;
|
| - default:
|
| - internal_error (__FILE__, __LINE__, _("bad switch"));
|
| - }
|
| - va_end (args);
|
| -}
|
| + rest of the arguments should be its arguments. If range_check is
|
| + range_check_on, an error is printed; if range_check_warn, a warning;
|
| + otherwise just the message. */
|
|
|
| void
|
| range_error (const char *string,...)
|
| @@ -594,7 +485,7 @@ language_def (enum language lang)
|
| }
|
|
|
| /* Return the language as a string. */
|
| -char *
|
| +const char *
|
| language_str (enum language lang)
|
| {
|
| int i;
|
| @@ -629,7 +520,7 @@ void
|
| add_language (const struct language_defn *lang)
|
| {
|
| /* For the "set language" command. */
|
| - static char **language_names = NULL;
|
| + static const char **language_names = NULL;
|
| /* For the "help set language" command. */
|
| char *language_set_doc = NULL;
|
|
|
| @@ -841,7 +732,8 @@ unk_lang_printstr (struct ui_file *stream, struct type *type,
|
|
|
| static void
|
| unk_lang_print_type (struct type *type, const char *varstring,
|
| - struct ui_file *stream, int show, int level)
|
| + struct ui_file *stream, int show, int level,
|
| + const struct type_print_options *flags)
|
| {
|
| error (_("internal error - unimplemented "
|
| "function unk_lang_print_type called."));
|
| @@ -874,7 +766,7 @@ static CORE_ADDR unk_lang_trampoline (struct frame_info *frame, CORE_ADDR pc)
|
| /* Unknown languages just use the cplus demangler. */
|
| static char *unk_lang_demangle (const char *mangled, int options)
|
| {
|
| - return cplus_demangle (mangled, options);
|
| + return gdb_demangle (mangled, options);
|
| }
|
|
|
| static char *unk_lang_class_name (const char *mangled)
|
| @@ -900,9 +792,9 @@ unknown_language_arch_info (struct gdbarch *gdbarch,
|
| const struct language_defn unknown_language_defn =
|
| {
|
| "unknown",
|
| + "Unknown",
|
| language_unknown,
|
| range_check_off,
|
| - type_check_off,
|
| case_sensitive_on,
|
| array_row_major,
|
| macro_expansion_no,
|
| @@ -936,6 +828,7 @@ const struct language_defn unknown_language_defn =
|
| default_get_string,
|
| NULL, /* la_get_symbol_name_cmp */
|
| iterate_over_symbols,
|
| + &default_varobj_ops,
|
| LANG_MAGIC
|
| };
|
|
|
| @@ -944,9 +837,9 @@ const struct language_defn unknown_language_defn =
|
| const struct language_defn auto_language_defn =
|
| {
|
| "auto",
|
| + "Auto",
|
| language_auto,
|
| range_check_off,
|
| - type_check_off,
|
| case_sensitive_on,
|
| array_row_major,
|
| macro_expansion_no,
|
| @@ -980,15 +873,16 @@ const struct language_defn auto_language_defn =
|
| default_get_string,
|
| NULL, /* la_get_symbol_name_cmp */
|
| iterate_over_symbols,
|
| + &default_varobj_ops,
|
| LANG_MAGIC
|
| };
|
|
|
| const struct language_defn local_language_defn =
|
| {
|
| "local",
|
| + "Local",
|
| language_auto,
|
| range_check_off,
|
| - type_check_off,
|
| case_sensitive_on,
|
| array_row_major,
|
| macro_expansion_no,
|
| @@ -1022,6 +916,7 @@ const struct language_defn local_language_defn =
|
| default_get_string,
|
| NULL, /* la_get_symbol_name_cmp */
|
| iterate_over_symbols,
|
| + &default_varobj_ops,
|
| LANG_MAGIC
|
| };
|
|
|
| @@ -1135,13 +1030,6 @@ _initialize_language (void)
|
| add_alias_cmd ("c", "check", no_class, 1, &showlist);
|
| add_alias_cmd ("ch", "check", no_class, 1, &showlist);
|
|
|
| - add_setshow_enum_cmd ("type", class_support, type_or_range_names, &type,
|
| - _("Set type checking. (on/warn/off/auto)"),
|
| - _("Show type checking. (on/warn/off/auto)"),
|
| - NULL, set_type_command,
|
| - show_type_command,
|
| - &setchecklist, &showchecklist);
|
| -
|
| add_setshow_enum_cmd ("range", class_support, type_or_range_names,
|
| &range,
|
| _("Set range checking. (on/warn/off/auto)"),
|
|
|