2009-08-13 Pedro Alves <pedro@codesourcery.com>
PR gdb/8869: * language.c (language, type, range, case_sensitive): Make const. (show_language_command): Don't call deprecated_show_value_hack. Special case "auto". (set_language_command): An unrecognized language is now an internal error instead of a user error. Don't call set_lang_str. (show_type_command): Don't call deprecated_show_value_hack. Special case "auto". Use warning. (set_type_command): An unrecognized type is now an internal error instead of a user error. Output type check mismatch with language here. Don't call set_type_str. (show_range_command): Don't call deprecated_show_value_hack. Special case "auto". Use warning. (set_range_command): An unrecognized range check is now an internal error instead of a warning. Output range check mismatch with language here. Don't call set_range_str. (show_case_command): Don't call deprecated_show_value_hack. Special case "auto". Use warning. (set_case_command): Don't call set_case_str. An unrecognized case check is now an internal error instead of a warning. Output range check mismatch with language here. Don't call set_case_str. (set_type_range_case): Don't call set_type_str, set_range_str or set_case_str here. (set_lang_str, set_type_str, set_range_str, set_case_str): Delete. (add_language): Install or reinstall the "set language" command here, and make it an enum command. Build the enumeration and the help string from the current list of known languages. (_initialize_language): Don't install "set language" here. Make "set check type", "set check range" and "set case-sensitive" enum commands. Register the "auto" "local" and "unknown" languages in that order. 2009-08-13 Pedro Alves <pedro@codesourcery.com> * gdb.base/default.exp: Adjust "set language test": it's now an enum command. Larger help string moved to "help set language". * gdb.base/help.exp: Adjust "help set language" expected output, now lists all known languages.
This commit is contained in:
parent
5efd5804f7
commit
b84aa90aa5
@ -1,3 +1,38 @@
|
|||||||
|
2009-08-13 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
PR gdb/8869:
|
||||||
|
|
||||||
|
* language.c (language, type, range, case_sensitive): Make const.
|
||||||
|
(show_language_command): Don't call deprecated_show_value_hack.
|
||||||
|
Special case "auto".
|
||||||
|
(set_language_command): An unrecognized language is now an
|
||||||
|
internal error instead of a user error. Don't call set_lang_str.
|
||||||
|
(show_type_command): Don't call deprecated_show_value_hack.
|
||||||
|
Special case "auto". Use warning.
|
||||||
|
(set_type_command): An unrecognized type is now an internal error
|
||||||
|
instead of a user error. Output type check mismatch with language
|
||||||
|
here. Don't call set_type_str.
|
||||||
|
(show_range_command): Don't call deprecated_show_value_hack.
|
||||||
|
Special case "auto". Use warning.
|
||||||
|
(set_range_command): An unrecognized range check is now an
|
||||||
|
internal error instead of a warning. Output range check mismatch
|
||||||
|
with language here. Don't call set_range_str.
|
||||||
|
(show_case_command): Don't call deprecated_show_value_hack.
|
||||||
|
Special case "auto". Use warning.
|
||||||
|
(set_case_command): Don't call set_case_str. An unrecognized case
|
||||||
|
check is now an internal error instead of a warning. Output range
|
||||||
|
check mismatch with language here. Don't call set_case_str.
|
||||||
|
(set_type_range_case): Don't call set_type_str, set_range_str or
|
||||||
|
set_case_str here.
|
||||||
|
(set_lang_str, set_type_str, set_range_str, set_case_str): Delete.
|
||||||
|
(add_language): Install or reinstall the "set language" command
|
||||||
|
here, and make it an enum command. Build the enumeration and the
|
||||||
|
help string from the current list of known languages.
|
||||||
|
(_initialize_language): Don't install "set language" here. Make
|
||||||
|
"set check type", "set check range" and "set case-sensitive" enum
|
||||||
|
commands. Register the "auto" "local" and "unknown" languages in
|
||||||
|
that order.
|
||||||
|
|
||||||
2009-08-13 Pedro Alves <pedro@codesourcery.com>
|
2009-08-13 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
Revert 2009-08-07 changes for PR gdb/8869:
|
Revert 2009-08-07 changes for PR gdb/8869:
|
||||||
|
414
gdb/language.c
414
gdb/language.c
@ -47,14 +47,6 @@
|
|||||||
|
|
||||||
extern void _initialize_language (void);
|
extern void _initialize_language (void);
|
||||||
|
|
||||||
static void set_case_str (void);
|
|
||||||
|
|
||||||
static void set_range_str (void);
|
|
||||||
|
|
||||||
static void set_type_str (void);
|
|
||||||
|
|
||||||
static void set_lang_str (void);
|
|
||||||
|
|
||||||
static void unk_lang_error (char *);
|
static void unk_lang_error (char *);
|
||||||
|
|
||||||
static int unk_lang_parser (void);
|
static int unk_lang_parser (void);
|
||||||
@ -111,16 +103,12 @@ static unsigned languages_size;
|
|||||||
static unsigned languages_allocsize;
|
static unsigned languages_allocsize;
|
||||||
#define DEFAULT_ALLOCSIZE 4
|
#define DEFAULT_ALLOCSIZE 4
|
||||||
|
|
||||||
/* The "set language/type/range" commands all put stuff in these
|
/* The current values of the "set language/type/range" enum
|
||||||
buffers. This is to make them work as set/show commands. The
|
commands. */
|
||||||
user's string is copied here, then the set_* commands look at
|
static const char *language;
|
||||||
them and update them to something that looks nice when it is
|
static const char *type;
|
||||||
printed out. */
|
static const char *range;
|
||||||
|
static const char *case_sensitive;
|
||||||
static char *language;
|
|
||||||
static char *type;
|
|
||||||
static char *range;
|
|
||||||
static char *case_sensitive;
|
|
||||||
|
|
||||||
/* Warning issued when current_language and the language of the current
|
/* Warning issued when current_language and the language of the current
|
||||||
frame do not match. */
|
frame do not match. */
|
||||||
@ -138,7 +126,15 @@ show_language_command (struct ui_file *file, int from_tty,
|
|||||||
{
|
{
|
||||||
enum language flang; /* The language of the current frame */
|
enum language flang; /* The language of the current frame */
|
||||||
|
|
||||||
deprecated_show_value_hack (file, from_tty, c, value);
|
if (language_mode == language_mode_auto)
|
||||||
|
fprintf_filtered (gdb_stdout,
|
||||||
|
_("The current source language is "
|
||||||
|
"\"auto; currently %s\".\n"),
|
||||||
|
current_language->la_name);
|
||||||
|
else
|
||||||
|
fprintf_filtered (gdb_stdout, _("The current source language is \"%s\".\n"),
|
||||||
|
current_language->la_name);
|
||||||
|
|
||||||
flang = get_frame_language ();
|
flang = get_frame_language ();
|
||||||
if (flang != language_unknown &&
|
if (flang != language_unknown &&
|
||||||
language_mode == language_mode_manual &&
|
language_mode == language_mode_manual &&
|
||||||
@ -152,34 +148,6 @@ set_language_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
enum language flang;
|
enum language flang;
|
||||||
char *err_lang;
|
|
||||||
|
|
||||||
if (!language || !language[0])
|
|
||||||
{
|
|
||||||
printf_unfiltered (_("\
|
|
||||||
The currently understood settings are:\n\n\
|
|
||||||
local or auto Automatic setting based on source file\n"));
|
|
||||||
|
|
||||||
for (i = 0; i < languages_size; ++i)
|
|
||||||
{
|
|
||||||
/* Already dealt with these above. */
|
|
||||||
if (languages[i]->la_language == language_unknown
|
|
||||||
|| languages[i]->la_language == language_auto)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* FIXME: i18n: for now assume that the human-readable name
|
|
||||||
is just a capitalization of the internal name. */
|
|
||||||
printf_unfiltered ("%-16s Use the %c%s language\n",
|
|
||||||
languages[i]->la_name,
|
|
||||||
/* Capitalize first letter of language
|
|
||||||
name. */
|
|
||||||
toupper (languages[i]->la_name[0]),
|
|
||||||
languages[i]->la_name + 1);
|
|
||||||
}
|
|
||||||
/* Restore the silly string. */
|
|
||||||
set_language (current_language->la_language);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Search the list of languages for a match. */
|
/* Search the list of languages for a match. */
|
||||||
for (i = 0; i < languages_size; i++)
|
for (i = 0; i < languages_size; i++)
|
||||||
@ -206,19 +174,15 @@ local or auto Automatic setting based on source file\n"));
|
|||||||
language_mode = language_mode_manual;
|
language_mode = language_mode_manual;
|
||||||
current_language = languages[i];
|
current_language = languages[i];
|
||||||
set_type_range_case ();
|
set_type_range_case ();
|
||||||
set_lang_str ();
|
|
||||||
expected_language = current_language;
|
expected_language = current_language;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset the language (esp. the global string "language") to the
|
internal_error (__FILE__, __LINE__,
|
||||||
correct values. */
|
"Couldn't find language `%s' in known languages list.",
|
||||||
err_lang = xstrdup (language);
|
language);
|
||||||
make_cleanup (xfree, err_lang); /* Free it after error */
|
|
||||||
set_language (current_language->la_language);
|
|
||||||
error (_("Unknown language `%s'."), err_lang);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Show command. Display a warning if the type setting does
|
/* Show command. Display a warning if the type setting does
|
||||||
@ -227,10 +191,37 @@ static void
|
|||||||
show_type_command (struct ui_file *file, int from_tty,
|
show_type_command (struct ui_file *file, int from_tty,
|
||||||
struct cmd_list_element *c, const char *value)
|
struct cmd_list_element *c, const char *value)
|
||||||
{
|
{
|
||||||
deprecated_show_value_hack (file, from_tty, c, value);
|
if (type_mode == type_mode_auto)
|
||||||
if (type_check != current_language->la_type_check)
|
{
|
||||||
printf_unfiltered (
|
char *tmp = NULL;
|
||||||
"Warning: the current type check setting does not match the language.\n");
|
|
||||||
|
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. */
|
/* Set command. Change the setting for type checking. */
|
||||||
@ -256,16 +247,15 @@ set_type_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
|||||||
{
|
{
|
||||||
type_mode = type_mode_auto;
|
type_mode = type_mode_auto;
|
||||||
set_type_range_case ();
|
set_type_range_case ();
|
||||||
/* Avoid hitting the set_type_str call below. We
|
|
||||||
did it in set_type_range_case. */
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
internal_error (__FILE__, __LINE__,
|
||||||
warning (_("Unrecognized type check setting: \"%s\""), type);
|
_("Unrecognized type check setting: \"%s\""), type);
|
||||||
}
|
|
||||||
set_type_str ();
|
if (type_check != current_language->la_type_check)
|
||||||
show_type_command (NULL, from_tty, NULL, NULL);
|
warning (_("the current type check setting"
|
||||||
|
" does not match the language.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Show command. Display a warning if the range setting does
|
/* Show command. Display a warning if the range setting does
|
||||||
@ -274,10 +264,37 @@ static void
|
|||||||
show_range_command (struct ui_file *file, int from_tty,
|
show_range_command (struct ui_file *file, int from_tty,
|
||||||
struct cmd_list_element *c, const char *value)
|
struct cmd_list_element *c, const char *value)
|
||||||
{
|
{
|
||||||
deprecated_show_value_hack (file, from_tty, c, value);
|
if (range_mode == range_mode_auto)
|
||||||
|
{
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
|
switch (range_check)
|
||||||
|
{
|
||||||
|
case range_check_on:
|
||||||
|
tmp = "on";
|
||||||
|
break;
|
||||||
|
case range_check_off:
|
||||||
|
tmp = "off";
|
||||||
|
break;
|
||||||
|
case range_check_warn:
|
||||||
|
tmp = "warn";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
internal_error (__FILE__, __LINE__,
|
||||||
|
"Unrecognized range check setting.");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf_filtered (gdb_stdout,
|
||||||
|
_("Range checking is \"auto; currently %s\".\n"),
|
||||||
|
tmp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
|
||||||
|
value);
|
||||||
|
|
||||||
if (range_check != current_language->la_range_check)
|
if (range_check != current_language->la_range_check)
|
||||||
printf_unfiltered (
|
warning (_("the current range check setting "
|
||||||
"Warning: the current range check setting does not match the language.\n");
|
"does not match the language.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set command. Change the setting for range checking. */
|
/* Set command. Change the setting for range checking. */
|
||||||
@ -303,16 +320,16 @@ set_range_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
|||||||
{
|
{
|
||||||
range_mode = range_mode_auto;
|
range_mode = range_mode_auto;
|
||||||
set_type_range_case ();
|
set_type_range_case ();
|
||||||
/* Avoid hitting the set_range_str call below. We
|
|
||||||
did it in set_type_range_case. */
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
warning (_("Unrecognized range check setting: \"%s\""), range);
|
internal_error (__FILE__, __LINE__,
|
||||||
|
_("Unrecognized range check setting: \"%s\""), range);
|
||||||
}
|
}
|
||||||
set_range_str ();
|
if (range_check != current_language->la_range_check)
|
||||||
show_range_command (NULL, from_tty, NULL, NULL);
|
warning (_("the current range check setting "
|
||||||
|
"does not match the language.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Show command. Display a warning if the case sensitivity setting does
|
/* Show command. Display a warning if the case sensitivity setting does
|
||||||
@ -321,10 +338,35 @@ static void
|
|||||||
show_case_command (struct ui_file *file, int from_tty,
|
show_case_command (struct ui_file *file, int from_tty,
|
||||||
struct cmd_list_element *c, const char *value)
|
struct cmd_list_element *c, const char *value)
|
||||||
{
|
{
|
||||||
deprecated_show_value_hack (file, from_tty, c, value);
|
if (case_mode == case_mode_auto)
|
||||||
|
{
|
||||||
|
char *tmp = NULL;
|
||||||
|
|
||||||
|
switch (case_sensitivity)
|
||||||
|
{
|
||||||
|
case case_sensitive_on:
|
||||||
|
tmp = "on";
|
||||||
|
break;
|
||||||
|
case case_sensitive_off:
|
||||||
|
tmp = "off";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
internal_error (__FILE__, __LINE__,
|
||||||
|
"Unrecognized case-sensitive setting.");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf_filtered (gdb_stdout,
|
||||||
|
_("Case sensitivity in "
|
||||||
|
"name search is \"auto; currently %s\".\n"),
|
||||||
|
tmp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf_filtered (gdb_stdout, _("Case sensitivity in name search is \"%s\".\n"),
|
||||||
|
value);
|
||||||
|
|
||||||
if (case_sensitivity != current_language->la_case_sensitivity)
|
if (case_sensitivity != current_language->la_case_sensitivity)
|
||||||
printf_unfiltered(
|
warning (_("the current case sensitivity setting does not match "
|
||||||
"Warning: the current case sensitivity setting does not match the language.\n");
|
"the language.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set command. Change the setting for case sensitivity. */
|
/* Set command. Change the setting for case sensitivity. */
|
||||||
@ -346,17 +388,18 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
|||||||
{
|
{
|
||||||
case_mode = case_mode_auto;
|
case_mode = case_mode_auto;
|
||||||
set_type_range_case ();
|
set_type_range_case ();
|
||||||
/* Avoid hitting the set_case_str call below. We did it in
|
|
||||||
set_type_range_case. */
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
warning (_("Unrecognized case-sensitive setting: \"%s\""),
|
internal_error (__FILE__, __LINE__,
|
||||||
case_sensitive);
|
"Unrecognized case-sensitive setting: \"%s\"",
|
||||||
|
case_sensitive);
|
||||||
}
|
}
|
||||||
set_case_str();
|
|
||||||
show_case_command (NULL, from_tty, NULL, NULL);
|
if (case_sensitivity != current_language->la_case_sensitivity)
|
||||||
|
warning (_("the current case sensitivity setting does not match "
|
||||||
|
"the language.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the status of range and type checking and case sensitivity based on
|
/* Set the status of range and type checking and case sensitivity based on
|
||||||
@ -366,7 +409,6 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
|
|||||||
static void
|
static void
|
||||||
set_type_range_case (void)
|
set_type_range_case (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (range_mode == range_mode_auto)
|
if (range_mode == range_mode_auto)
|
||||||
range_check = current_language->la_range_check;
|
range_check = current_language->la_range_check;
|
||||||
|
|
||||||
@ -375,10 +417,6 @@ set_type_range_case (void)
|
|||||||
|
|
||||||
if (case_mode == case_mode_auto)
|
if (case_mode == case_mode_auto)
|
||||||
case_sensitivity = current_language->la_case_sensitivity;
|
case_sensitivity = current_language->la_case_sensitivity;
|
||||||
|
|
||||||
set_type_str ();
|
|
||||||
set_range_str ();
|
|
||||||
set_case_str ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set current language to (enum language) LANG. Returns previous language. */
|
/* Set current language to (enum language) LANG. Returns previous language. */
|
||||||
@ -397,7 +435,6 @@ set_language (enum language lang)
|
|||||||
{
|
{
|
||||||
current_language = languages[i];
|
current_language = languages[i];
|
||||||
set_type_range_case ();
|
set_type_range_case ();
|
||||||
set_lang_str ();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -405,100 +442,6 @@ set_language (enum language lang)
|
|||||||
return prev_language;
|
return prev_language;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This page contains functions that update the global vars
|
|
||||||
language, type and range. */
|
|
||||||
static void
|
|
||||||
set_lang_str (void)
|
|
||||||
{
|
|
||||||
char *prefix = "";
|
|
||||||
|
|
||||||
if (language)
|
|
||||||
xfree (language);
|
|
||||||
if (language_mode == language_mode_auto)
|
|
||||||
prefix = "auto; currently ";
|
|
||||||
|
|
||||||
language = concat (prefix, current_language->la_name, (char *)NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_type_str (void)
|
|
||||||
{
|
|
||||||
char *tmp = NULL, *prefix = "";
|
|
||||||
|
|
||||||
if (type)
|
|
||||||
xfree (type);
|
|
||||||
if (type_mode == type_mode_auto)
|
|
||||||
prefix = "auto; currently ";
|
|
||||||
|
|
||||||
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:
|
|
||||||
error (_("Unrecognized type check setting."));
|
|
||||||
}
|
|
||||||
|
|
||||||
type = concat (prefix, tmp, (char *)NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_range_str (void)
|
|
||||||
{
|
|
||||||
char *tmp, *pref = "";
|
|
||||||
|
|
||||||
if (range_mode == range_mode_auto)
|
|
||||||
pref = "auto; currently ";
|
|
||||||
|
|
||||||
switch (range_check)
|
|
||||||
{
|
|
||||||
case range_check_on:
|
|
||||||
tmp = "on";
|
|
||||||
break;
|
|
||||||
case range_check_off:
|
|
||||||
tmp = "off";
|
|
||||||
break;
|
|
||||||
case range_check_warn:
|
|
||||||
tmp = "warn";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error (_("Unrecognized range check setting."));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (range)
|
|
||||||
xfree (range);
|
|
||||||
range = concat (pref, tmp, (char *)NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_case_str (void)
|
|
||||||
{
|
|
||||||
char *tmp = NULL, *prefix = "";
|
|
||||||
|
|
||||||
if (case_mode==case_mode_auto)
|
|
||||||
prefix = "auto; currently ";
|
|
||||||
|
|
||||||
switch (case_sensitivity)
|
|
||||||
{
|
|
||||||
case case_sensitive_on:
|
|
||||||
tmp = "on";
|
|
||||||
break;
|
|
||||||
case case_sensitive_off:
|
|
||||||
tmp = "off";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error (_("Unrecognized case-sensitive setting."));
|
|
||||||
}
|
|
||||||
|
|
||||||
xfree (case_sensitive);
|
|
||||||
case_sensitive = concat (prefix, tmp, (char *)NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print out the current language settings: language, range and
|
/* Print out the current language settings: language, range and
|
||||||
type checking. If QUIETLY, print only what has changed. */
|
type checking. If QUIETLY, print only what has changed. */
|
||||||
@ -938,6 +881,15 @@ show_check (char *ignore, int from_tty)
|
|||||||
void
|
void
|
||||||
add_language (const struct language_defn *lang)
|
add_language (const struct language_defn *lang)
|
||||||
{
|
{
|
||||||
|
/* For the "set language" command. */
|
||||||
|
static char **language_names = NULL;
|
||||||
|
/* For the "help set language" command. */
|
||||||
|
static char *language_set_doc = NULL;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
struct ui_file *tmp_stream;
|
||||||
|
long len;
|
||||||
|
|
||||||
if (lang->la_magic != LANG_MAGIC)
|
if (lang->la_magic != LANG_MAGIC)
|
||||||
{
|
{
|
||||||
fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
|
fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
|
||||||
@ -958,6 +910,52 @@ add_language (const struct language_defn *lang)
|
|||||||
languages_allocsize * sizeof (*languages));
|
languages_allocsize * sizeof (*languages));
|
||||||
}
|
}
|
||||||
languages[languages_size++] = lang;
|
languages[languages_size++] = lang;
|
||||||
|
|
||||||
|
/* Build the language names array, to be used as enumeration in the
|
||||||
|
set language" enum command. */
|
||||||
|
language_names = xrealloc (language_names,
|
||||||
|
(languages_size + 1) * sizeof (const char *));
|
||||||
|
for (i = 0; i < languages_size; ++i)
|
||||||
|
language_names[i] = languages[i]->la_name;
|
||||||
|
language_names[i] = NULL;
|
||||||
|
|
||||||
|
/* Build the "help set language" docs. */
|
||||||
|
tmp_stream = mem_fileopen ();
|
||||||
|
|
||||||
|
fprintf_unfiltered (tmp_stream, _("\
|
||||||
|
Set the current source language.\n\
|
||||||
|
The currently understood settings are:\n\n\
|
||||||
|
local or auto Automatic setting based on source file\n"));
|
||||||
|
|
||||||
|
for (i = 0; i < languages_size; ++i)
|
||||||
|
{
|
||||||
|
/* Already dealt with these above. */
|
||||||
|
if (languages[i]->la_language == language_unknown
|
||||||
|
|| languages[i]->la_language == language_auto)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* FIXME: i18n: for now assume that the human-readable name
|
||||||
|
is just a capitalization of the internal name. */
|
||||||
|
fprintf_unfiltered (tmp_stream, "%-16s Use the %c%s language\n",
|
||||||
|
languages[i]->la_name,
|
||||||
|
/* Capitalize first letter of language
|
||||||
|
name. */
|
||||||
|
toupper (languages[i]->la_name[0]),
|
||||||
|
languages[i]->la_name + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
xfree (language_set_doc);
|
||||||
|
language_set_doc = ui_file_xstrdup (tmp_stream, &len);
|
||||||
|
ui_file_delete (tmp_stream);
|
||||||
|
|
||||||
|
add_setshow_enum_cmd ("language", class_support,
|
||||||
|
(const char **) language_names,
|
||||||
|
&language,
|
||||||
|
language_set_doc, _("\
|
||||||
|
Show the current source language."), NULL,
|
||||||
|
set_language_command,
|
||||||
|
show_language_command,
|
||||||
|
&setlist, &showlist);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Iterate through all registered languages looking for and calling
|
/* Iterate through all registered languages looking for and calling
|
||||||
@ -1340,22 +1338,17 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
|
|||||||
void
|
void
|
||||||
_initialize_language (void)
|
_initialize_language (void)
|
||||||
{
|
{
|
||||||
struct cmd_list_element *set, *show;
|
static const char *type_or_range_names[]
|
||||||
|
= { "on", "off", "warn", "auto", NULL };
|
||||||
|
|
||||||
|
static const char *case_sensitive_names[]
|
||||||
|
= { "on", "off", "auto", NULL };
|
||||||
|
|
||||||
language_gdbarch_data
|
language_gdbarch_data
|
||||||
= gdbarch_data_register_post_init (language_gdbarch_post_init);
|
= gdbarch_data_register_post_init (language_gdbarch_post_init);
|
||||||
|
|
||||||
/* GDB commands for language specific stuff */
|
/* GDB commands for language specific stuff */
|
||||||
|
|
||||||
/* FIXME: cagney/2005-02-20: This should be implemented using an
|
|
||||||
enum. */
|
|
||||||
add_setshow_string_noescape_cmd ("language", class_support, &language, _("\
|
|
||||||
Set the current source language."), _("\
|
|
||||||
Show the current source language."), NULL,
|
|
||||||
set_language_command,
|
|
||||||
show_language_command,
|
|
||||||
&setlist, &showlist);
|
|
||||||
|
|
||||||
add_prefix_cmd ("check", no_class, set_check,
|
add_prefix_cmd ("check", no_class, set_check,
|
||||||
_("Set the status of the type/range checker."),
|
_("Set the status of the type/range checker."),
|
||||||
&setchecklist, "set check ", 0, &setlist);
|
&setchecklist, "set check ", 0, &setlist);
|
||||||
@ -1368,38 +1361,33 @@ Show the current source language."), NULL,
|
|||||||
add_alias_cmd ("c", "check", no_class, 1, &showlist);
|
add_alias_cmd ("c", "check", no_class, 1, &showlist);
|
||||||
add_alias_cmd ("ch", "check", no_class, 1, &showlist);
|
add_alias_cmd ("ch", "check", no_class, 1, &showlist);
|
||||||
|
|
||||||
/* FIXME: cagney/2005-02-20: This should be implemented using an
|
add_setshow_enum_cmd ("type", class_support, type_or_range_names, &type, _("\
|
||||||
enum. */
|
|
||||||
add_setshow_string_noescape_cmd ("type", class_support, &type, _("\
|
|
||||||
Set type checking. (on/warn/off/auto)"), _("\
|
Set type checking. (on/warn/off/auto)"), _("\
|
||||||
Show type checking. (on/warn/off/auto)"), NULL,
|
Show type checking. (on/warn/off/auto)"), NULL,
|
||||||
set_type_command,
|
set_type_command,
|
||||||
show_type_command,
|
show_type_command,
|
||||||
&setchecklist, &showchecklist);
|
&setchecklist, &showchecklist);
|
||||||
|
|
||||||
/* FIXME: cagney/2005-02-20: This should be implemented using an
|
add_setshow_enum_cmd ("range", class_support, type_or_range_names,
|
||||||
enum. */
|
&range, _("\
|
||||||
add_setshow_string_noescape_cmd ("range", class_support, &range, _("\
|
|
||||||
Set range checking. (on/warn/off/auto)"), _("\
|
Set range checking. (on/warn/off/auto)"), _("\
|
||||||
Show range checking. (on/warn/off/auto)"), NULL,
|
Show range checking. (on/warn/off/auto)"), NULL,
|
||||||
set_range_command,
|
set_range_command,
|
||||||
show_range_command,
|
show_range_command,
|
||||||
&setchecklist, &showchecklist);
|
&setchecklist, &showchecklist);
|
||||||
|
|
||||||
/* FIXME: cagney/2005-02-20: This should be implemented using an
|
add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
|
||||||
enum. */
|
&case_sensitive, _("\
|
||||||
add_setshow_string_noescape_cmd ("case-sensitive", class_support,
|
|
||||||
&case_sensitive, _("\
|
|
||||||
Set 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)"), _("\
|
Show case sensitivity in name search. (on/off/auto)"), _("\
|
||||||
For Fortran the default is off; for other languages the default is on."),
|
For Fortran the default is off; for other languages the default is on."),
|
||||||
set_case_command,
|
set_case_command,
|
||||||
show_case_command,
|
show_case_command,
|
||||||
&setlist, &showlist);
|
&setlist, &showlist);
|
||||||
|
|
||||||
add_language (&unknown_language_defn);
|
|
||||||
add_language (&local_language_defn);
|
|
||||||
add_language (&auto_language_defn);
|
add_language (&auto_language_defn);
|
||||||
|
add_language (&local_language_defn);
|
||||||
|
add_language (&unknown_language_defn);
|
||||||
|
|
||||||
language = xstrdup ("auto");
|
language = xstrdup ("auto");
|
||||||
type = xstrdup ("auto");
|
type = xstrdup ("auto");
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2009-08-13 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* gdb.base/default.exp: Adjust "set language test": it's now an
|
||||||
|
enum command. Larger help string moved to "help set language".
|
||||||
|
* gdb.base/help.exp: Adjust "help set language" expected output,
|
||||||
|
now lists all known languages.
|
||||||
|
|
||||||
2009-08-11 Nathan Froyd <froydnj@codesourcery.com>
|
2009-08-11 Nathan Froyd <froydnj@codesourcery.com>
|
||||||
|
|
||||||
* gdb.arch/altivec-abi.exp (altivec_abi_tests): Turn on printing of
|
* gdb.arch/altivec-abi.exp (altivec_abi_tests): Turn on printing of
|
||||||
|
@ -530,7 +530,7 @@ gdb_test "set history size" "Argument required .integer to set it to.*" "set his
|
|||||||
#test set history
|
#test set history
|
||||||
gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set history"
|
gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set history"
|
||||||
#test set language
|
#test set language
|
||||||
gdb_test "set language" "The currently understood settings are:(\[^\r\n\]*\[\r\n\])+local or auto *Automatic setting based on source file(\[^\r\n\]*\[\r\n\])+c *Use the C language(\[^\r\n\]*\[\r\n\])+c\[+\]+ *Use the C\[+\]+ language(\[^\r\n\]*\[\r\n\])+modula-2 *Use the Modula-2 language.*" "set language"
|
gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, c, c.., asm, minimal, fortran, objective-c, java, modula-2, pascal, scheme." "set language"
|
||||||
#test set listsize
|
#test set listsize
|
||||||
gdb_test "set listsize" "Argument required .integer to set it to.*" "set listsize"
|
gdb_test "set listsize" "Argument required .integer to set it to.*" "set listsize"
|
||||||
#test set print "p" abbreviation
|
#test set print "p" abbreviation
|
||||||
|
@ -418,7 +418,8 @@ test_prefix_command_help {"set history"} {
|
|||||||
"Generic command for setting command history parameters\.\[\r\n\]+"
|
"Generic command for setting command history parameters\.\[\r\n\]+"
|
||||||
}
|
}
|
||||||
# test help set language
|
# test help set language
|
||||||
gdb_test "help set language" "Set the current source language\." "help set language"
|
gdb_test "help set language" "Set the current source language\.\[\r\n\]+The currently understood settings are:(\[^\r\n\]*\[\r\n\])+local or auto *Automatic setting based on source file(\[^\r\n\]*\[\r\n\])+c *Use the C language(\[^\r\n\]*\[\r\n\])+c\[+\]+ *Use the C\[+\]+ language(\[^\r\n\]*\[\r\n\])+modula-2 *Use the Modula-2 language.*" "help set language"
|
||||||
|
|
||||||
# test help set listsize
|
# test help set listsize
|
||||||
gdb_test "help set listsize" "Set number of source lines gdb will list by default\." "help set listsize"
|
gdb_test "help set listsize" "Set number of source lines gdb will list by default\." "help set listsize"
|
||||||
# test help set print "p" abbreviation
|
# test help set print "p" abbreviation
|
||||||
|
Loading…
Reference in New Issue
Block a user