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)"), |