diff options
author | Tom Tromey <tom@tromey.com> | 2016-11-28 21:39:47 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-01-10 19:14:15 -0700 |
commit | c8b23b3f89fbb0ed28d6b78f775b0038d8604798 (patch) | |
tree | 79c2e34a7eee05122c813fd6e3c04e5e2fd7044e /gdb/python | |
parent | 1ac32117f7224620f44ac966b5ca53df6e4fc5bd (diff) | |
download | gdb-c8b23b3f89fbb0ed28d6b78f775b0038d8604798.zip gdb-c8b23b3f89fbb0ed28d6b78f775b0038d8604798.tar.gz gdb-c8b23b3f89fbb0ed28d6b78f775b0038d8604798.tar.bz2 |
Add constructor and destructor to demangle_parse_info
This adds a constructor and destructor to demangle_parse_info, and
then changes all the users to use them. This removes
make_cleanup_cp_demangled_name_parse_free and its single use.
2017-01-10 Tom Tromey <tom@tromey.com>
* python/py-type.c (typy_legacy_template_argument): Update.
* cp-support.h (struct demangle_parse_info) (demangle_parse_info,
~demangle_parse_info): Declare new members.
(cp_demangled_name_to_comp): Return unique_ptr.
(cp_demangled_name_parse_free)
(make_cleanup_cp_demangled_name_parse_free)
(cp_new_demangle_parse_info): Remove.
* cp-support.c (do_demangled_name_parse_free_cleanup)
(make_cleanup_cp_demangled_name_parse_free): Remove.
(inspect_type, cp_canonicalize_string_full)
(cp_canonicalize_string): Update.
(mangled_name_to_comp): Change return type.
(cp_class_name_from_physname, method_name_from_physname)
(cp_func_name, cp_remove_params): Update.
* cp-name-parser.y (demangle_parse_info): New constructor, from
cp_new_demangle_parse_info.
(~demangle_parse_info): New destructor, from
cp_demangled_name_parse_free.
(cp_merge_demangle_parse_infos): Update.
(cp_demangled_name_to_comp): Change return type.
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/py-type.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index f19d8d9..7862829 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -832,7 +832,7 @@ typy_legacy_template_argument (struct type *type, const struct block *block, { int i; struct demangle_component *demangled; - struct demangle_parse_info *info = NULL; + std::unique_ptr<demangle_parse_info> info; const char *err; struct type *argtype; struct cleanup *cleanup; @@ -860,7 +860,6 @@ typy_legacy_template_argument (struct type *type, const struct block *block, return NULL; } demangled = info->tree; - cleanup = make_cleanup_cp_demangled_name_parse_free (info); /* Strip off component names. */ while (demangled->type == DEMANGLE_COMPONENT_QUAL_NAME @@ -869,7 +868,6 @@ typy_legacy_template_argument (struct type *type, const struct block *block, if (demangled->type != DEMANGLE_COMPONENT_TEMPLATE) { - do_cleanups (cleanup); PyErr_SetString (PyExc_RuntimeError, _("Type is not a template.")); return NULL; } @@ -882,14 +880,12 @@ typy_legacy_template_argument (struct type *type, const struct block *block, if (! demangled) { - do_cleanups (cleanup); PyErr_Format (PyExc_RuntimeError, _("No argument %d in template."), argno); return NULL; } argtype = typy_lookup_type (demangled->u.s_binary.left, block); - do_cleanups (cleanup); if (! argtype) return NULL; |