static std::unique_ptr<demangle_parse_info>
mangled_name_to_comp (const char *mangled_name, int options,
- void **memory, char **demangled_p)
+ void **memory,
+ gdb::unique_xmalloc_ptr<char> *demangled_p)
{
- char *demangled_name;
-
/* If it looks like a v3 mangled name, then try to go directly
to trees. */
if (mangled_name[0] == '_' && mangled_name[1] == 'Z')
/* If it doesn't, or if that failed, then try to demangle the
name. */
- demangled_name = gdb_demangle (mangled_name, options);
+ gdb::unique_xmalloc_ptr<char> demangled_name = gdb_demangle (mangled_name,
+ options);
if (demangled_name == NULL)
return NULL;
/* If we could demangle the name, parse it to build the component
tree. */
std::unique_ptr<demangle_parse_info> info
- = cp_demangled_name_to_comp (demangled_name, NULL);
+ = cp_demangled_name_to_comp (demangled_name.get (), NULL);
if (info == NULL)
- {
- xfree (demangled_name);
- return NULL;
- }
+ return NULL;
- *demangled_p = demangled_name;
+ *demangled_p = std::move (demangled_name);
return info;
}
cp_class_name_from_physname (const char *physname)
{
void *storage = NULL;
- char *demangled_name = NULL;
+ gdb::unique_xmalloc_ptr<char> demangled_name;
gdb::unique_xmalloc_ptr<char> ret;
struct demangle_component *ret_comp, *prev_comp, *cur_comp;
std::unique_ptr<demangle_parse_info> info;
}
xfree (storage);
- xfree (demangled_name);
return ret.release ();
}
method_name_from_physname (const char *physname)
{
void *storage = NULL;
- char *demangled_name = NULL;
+ gdb::unique_xmalloc_ptr<char> demangled_name;
gdb::unique_xmalloc_ptr<char> ret;
struct demangle_component *ret_comp;
std::unique_ptr<demangle_parse_info> info;
ret = cp_comp_to_string (ret_comp, 10);
xfree (storage);
- xfree (demangled_name);
return ret.release ();
}
const char *type_name;
int i, prefix_len;
- while (type->code () == TYPE_CODE_PTR
- || TYPE_IS_REFERENCE (type)
+ while (type->is_pointer_or_reference ()
|| type->code () == TYPE_CODE_ARRAY
|| type->code () == TYPE_CODE_TYPEDEF)
{
matching FUNC_NAME. Make sure we read that symbol table in. */
for (objfile *objf : current_program_space->objfiles ())
- {
- if (objf->sf)
- objf->sf->qf->expand_symtabs_for_function (objf, func_name);
- }
+ objf->expand_symtabs_for_function (func_name);
/* Search upwards from currently selected frame (so that we can
complete on local vars. */
/* A wrapper for bfd_demangle. */
-char *
+gdb::unique_xmalloc_ptr<char>
gdb_demangle (const char *name, int options)
{
- char *result = NULL;
+ gdb::unique_xmalloc_ptr<char> result;
int crash_signal = 0;
#ifdef HAVE_WORKING_FORK
#endif
if (crash_signal == 0)
- result = bfd_demangle (NULL, name, options);
+ result.reset (bfd_demangle (NULL, name, options));
#ifdef HAVE_WORKING_FORK
if (catch_demangler_crashes)
void
_initialize_cp_support ()
{
- add_basic_prefix_cmd ("cplus", class_maintenance,
- _("C++ maintenance commands."),
- &maint_cplus_cmd_list,
- "maintenance cplus ",
- 0, &maintenancelist);
- add_alias_cmd ("cp", "cplus",
- class_maintenance, 1,
+ cmd_list_element *maintenance_cplus
+ = add_basic_prefix_cmd ("cplus", class_maintenance,
+ _("C++ maintenance commands."),
+ &maint_cplus_cmd_list,
+ 0, &maintenancelist);
+ add_alias_cmd ("cp", maintenance_cplus, class_maintenance, 1,
&maintenancelist);
add_cmd ("first_component",