/* Multiple source language support for GDB.
- Copyright (C) 1991-2021 Free Software Foundation, Inc.
+ Copyright (C) 1991-2022 Free Software Foundation, Inc.
Contributed by the Department of Computer Science at the State University
of New York at Buffalo.
enum language flang; /* The language of the frame. */
if (language_mode == language_mode_auto)
- fprintf_filtered (gdb_stdout,
+ fprintf_filtered (file,
_("The current source language is "
"\"auto; currently %s\".\n"),
current_language->name ());
else
- fprintf_filtered (gdb_stdout,
+ fprintf_filtered (file,
_("The current source language is \"%s\".\n"),
current_language->name ());
if (flang != language_unknown
&& language_mode == language_mode_manual
&& current_language->la_language != flang)
- printf_filtered ("%s\n", _(lang_frame_mismatch_warn));
+ fprintf_filtered (file, "%s\n", _(lang_frame_mismatch_warn));
}
}
"Unrecognized range check setting.");
}
- fprintf_filtered (gdb_stdout,
+ fprintf_filtered (file,
_("Range checking is \"auto; currently %s\".\n"),
tmp);
}
else
- fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
+ fprintf_filtered (file, _("Range checking is \"%s\".\n"),
value);
if (range_check == range_check_warn
"Unrecognized case-sensitive setting.");
}
- fprintf_filtered (gdb_stdout,
+ fprintf_filtered (file,
_("Case sensitivity in "
"name search is \"auto; currently %s\".\n"),
tmp);
}
else
- fprintf_filtered (gdb_stdout,
+ fprintf_filtered (file,
_("Case sensitivity in name search is \"%s\".\n"),
value);
return;
expected_language = current_language;
- printf_unfiltered (_("Current language: %s\n"), language);
- show_language_command (NULL, 1, NULL, NULL);
-}
-\f
-
-/* Returns non-zero if the value is a pointer type. */
-int
-pointer_type (struct type *type)
-{
- return type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type);
-}
-
-\f
-/* This page contains functions that return info about
- (struct value) values used in GDB. */
-
-/* Returns non-zero if the value VAL represents a true value. */
-int
-value_true (struct value *val)
-{
- /* It is possible that we should have some sort of error if a non-boolean
- value is used in this context. Possibly dependent on some kind of
- "boolean-checking" option like range checking. But it should probably
- not depend on the language except insofar as is necessary to identify
- a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
- should be an error, probably). */
- return !value_logical_not (val);
+ printf_filtered (_("Current language: %s\n"), language);
+ show_language_command (gdb_stdout, 1, NULL, NULL);
}
\f
/* This page contains functions for the printing out of
/* 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 = language_def (language_auto)->name ();
+ *language_names_p++ = language;
*language_names_p++ = "local";
*language_names_p++ = language_def (language_unknown)->name ();
const char **sort_begin = language_names_p;
more flexible demangler for the languages that need it.
FIXME: Sometimes the demangler is invoked when we don't know the
language, so we can't use this everywhere. */
-char *
+gdb::unique_xmalloc_ptr<char>
language_demangle (const struct language_defn *current_language,
const char *mangled, int options)
{
/* Generates an expression that assumes a C like syntax is valid. */
type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
std::string name = type_to_string (type);
- return gdb::unique_xmalloc_ptr<char>
- (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)));
+ return xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr));
}
/* See language.h. */
/* See language.h. */
- char *demangle_symbol (const char *mangled, int options) const override
+ gdb::unique_xmalloc_ptr<char> demangle_symbol (const char *mangled,
+ int options) const override
{
/* The auto language just uses the C++ demangler. */
return gdb_demangle (mangled, options);
int parser (struct parser_state *ps) const override
{
- /* No parsing is done, just claim success. */
- return 1;
+ error (_("expression parsing not implemented for language \"%s\""),
+ natural_name ());
}
/* See language.h. */
sym = lookup_symbol (m_bool_type_name, NULL, VAR_DOMAIN, NULL).symbol;
if (sym != nullptr)
{
- struct type *type = SYMBOL_TYPE (sym);
+ struct type *type = sym->type ();
if (type != nullptr && type->code () == TYPE_CODE_BOOL)
return type;
}
symbol->m_name = type->name ();
symbol->set_language (lang, nullptr);
symbol->owner.arch = gdbarch;
- SYMBOL_OBJFILE_OWNED (symbol) = 0;
+ symbol->set_is_objfile_owned (0);
symbol->set_section_index (0);
- SYMBOL_TYPE (symbol) = type;
- SYMBOL_DOMAIN (symbol) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF;
+ symbol->set_type (type);
+ symbol->set_domain (VAR_DOMAIN);
+ symbol->set_aclass_index (LOC_TYPEDEF);
return symbol;
}
/* GDB commands for language specific stuff. */
- add_basic_prefix_cmd ("check", no_class,
- _("Set the status of the type/range checker."),
- &setchecklist, 0, &setlist);
- add_alias_cmd ("c", "check", no_class, 1, &setlist);
- add_alias_cmd ("ch", "check", no_class, 1, &setlist);
-
- add_show_prefix_cmd ("check", no_class,
- _("Show the status of the type/range checker."),
- &showchecklist, 0, &showlist);
- add_alias_cmd ("c", "check", no_class, 1, &showlist);
- add_alias_cmd ("ch", "check", no_class, 1, &showlist);
-
+ set_show_commands setshow_check_cmds
+ = add_setshow_prefix_cmd ("check", no_class,
+ _("Set the status of the type/range checker."),
+ _("Show the status of the type/range checker."),
+ &setchecklist, &showchecklist,
+ &setlist, &showlist);
+ add_alias_cmd ("c", setshow_check_cmds.set, no_class, 1, &setlist);
+ add_alias_cmd ("ch", setshow_check_cmds.set, no_class, 1, &setlist);
+ add_alias_cmd ("c", setshow_check_cmds.show, no_class, 1, &showlist);
+ add_alias_cmd ("ch", setshow_check_cmds.show, no_class, 1, &showlist);
+
+ range = type_or_range_names[3];
+ gdb_assert (strcmp (range, "auto") == 0);
add_setshow_enum_cmd ("range", class_support, type_or_range_names,
&range,
_("Set range checking (on/warn/off/auto)."),
show_range_command,
&setchecklist, &showchecklist);
+ case_sensitive = case_sensitive_names[2];
+ gdb_assert (strcmp (case_sensitive, "auto") == 0);
add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
&case_sensitive, _("\
Set case sensitivity in name search (on/off/auto)."), _("\
add_set_language_command ();
- language = "auto";
- range = "auto";
- case_sensitive = "auto";
-
/* Have the above take effect. */
set_language (language_auto);
}