enum language flang = language_unknown;
/* "local" is a synonym of "auto". */
- if (strcmp (language, "local") == 0)
- language = "auto";
+ if (strcmp (language, "auto") == 0
+ || strcmp (language, "local") == 0)
+ {
+ /* Enter auto mode. Set to the current frame's language, if
+ known, or fallback to the initial language. */
+ language_mode = language_mode_auto;
+ try
+ {
+ frame_info_ptr frame;
+
+ frame = get_selected_frame (NULL);
+ flang = get_frame_language (frame);
+ }
+ catch (const gdb_exception_error &ex)
+ {
+ flang = language_unknown;
+ }
+
+ if (flang != language_unknown)
+ set_language (flang);
+ else
+ set_initial_language ();
+
+ expected_language = current_language;
+ return;
+ }
/* Search the list of languages for a match. */
for (const auto &lang : language_defn::languages)
{
- if (strcmp (lang->name (), language) == 0)
- {
- /* Found it! Go into manual mode, and use this language. */
- if (lang->la_language == language_auto)
- {
- /* Enter auto mode. Set to the current frame's language, if
- known, or fallback to the initial language. */
- language_mode = language_mode_auto;
- try
- {
- frame_info_ptr frame;
-
- frame = get_selected_frame (NULL);
- flang = get_frame_language (frame);
- }
- catch (const gdb_exception_error &ex)
- {
- flang = language_unknown;
- }
-
- if (flang != language_unknown)
- set_language (flang);
- else
- set_initial_language ();
- expected_language = current_language;
- return;
- }
- else
- {
- /* Enter manual mode. Set the specified language. */
- language_mode = language_mode_manual;
- current_language = lang;
- set_range_case ();
- expected_language = current_language;
- return;
- }
- }
+ if (strcmp (lang->name (), language) != 0)
+ continue;
+
+ /* Found it! Go into manual mode, and use this language. */
+ language_mode = language_mode_manual;
+ current_language = lang;
+ set_range_case ();
+ expected_language = current_language;
+ return;
}
internal_error ("Couldn't find language `%s' in known languages list.",
if (strcmp (lang->name (), str) == 0)
return lang->la_language;
- if (strcmp (str, "local") == 0)
- return language_auto;
-
return language_unknown;
}
static const char **language_names;
/* Build the language names array, to be used as enumeration in the
- "set language" enum command. +1 for "local" and +1 for NULL
+ "set language" enum command. +3 for "auto", "local" and NULL
termination. */
- language_names = new const char *[ARRAY_SIZE (language_defn::languages) + 2];
+ language_names = new const char *[ARRAY_SIZE (language_defn::languages) + 3];
/* Display "auto", "local" and "unknown" first, and then the rest,
alpha sorted. */
const char **language_names_p = language_names;
- *language_names_p++ = language_def (language_auto)->name ();;
+ *language_names_p++ = "auto";
*language_names_p++ = "local";
*language_names_p++ = language_def (language_unknown)->name ();
const char **sort_begin = language_names_p;
for (const auto &lang : language_defn::languages)
{
/* Already handled above. */
- if (lang->la_language == language_auto
- || lang->la_language == language_unknown)
+ if (lang->la_language == language_unknown)
continue;
*language_names_p++ = lang->name ();
}
for (const auto &lang : language_defn::languages)
{
/* Already dealt with these above. */
- if (lang->la_language == language_unknown
- || lang->la_language == language_auto)
+ if (lang->la_language == language_unknown)
continue;
/* Note that we add the newline at the front, so we don't wind
return &c_varobj_ops;
}
-/* Parent class for both the "auto" and "unknown" languages. These two
- pseudo-languages are very similar so merging their implementations like
- this makes sense. */
+/* Class representing the "unknown" language. */
-class auto_or_unknown_language : public language_defn
+class unknown_language : public language_defn
{
public:
- auto_or_unknown_language (enum language lang)
- : language_defn (lang)
+ unknown_language () : language_defn (language_unknown)
{ /* Nothing. */ }
/* See language.h. */
const char *name_of_this () const override
{ return "this"; }
-};
-
-/* Class representing the fake "auto" language. */
-
-class auto_language : public auto_or_unknown_language
-{
-public:
- auto_language ()
- : auto_or_unknown_language (language_auto)
- { /* Nothing. */ }
-
- /* See language.h. */
-
- const char *name () const override
- { return "auto"; }
-
- /* See language.h. */
-
- const char *natural_name () const override
- { return "Auto"; }
-};
-
-/* Single instance of the fake "auto" language. */
-
-static auto_language auto_language_defn;
-
-/* Class representing the unknown language. */
-
-class unknown_language : public auto_or_unknown_language
-{
-public:
- unknown_language ()
- : auto_or_unknown_language (language_unknown)
- { /* Nothing. */ }
/* See language.h. */
&setlist, &showlist);
add_set_language_command ();
-
- /* Have the above take effect. */
- set_language (language_auto);
}