This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] c++/12266 (again) [cp_demangled_name_parse_free-4.patch]


On 08/02/2011 01:28 PM, Jan Kratochvil wrote:
$ make test-cp-name-parser
cp-name-parser.y:2018: undefined reference to `make_cleanup'

Fixed.


+  result = ((struct demangle_parse_info *)
+	    malloc (sizeof (struct demangle_parse_info)));

This cast seems redundant to me.

Removed. GDB is a mish-mash of usage discrepancies like this. [Mind you, a C++ compiler will complain about this.]


+	  info = ((struct demangle_parse_info *)
+		  xmalloc (sizeof (struct demangle_parse_info)));

Redundant cast.

Removed.


I guess you have been considering it but anyway:

Its ->tree items can reference for s_name the original string being demangled,
as you even state in some comments.  Due to it it also requires later explicit
handling of `free_list'.  Could this struct already have the original string
duplicated and this struct would track its freeing?
cp_merge_demangle_parse_infos would then track all the source strings in the
merged destination demangle_parse_info.

That is actually something that didn't occur to me for some reason, but I've made the necessary changes to use an obstack. [This change can be seen in the next patch, since it is not strictly necessary for this cleanup/refactoring.]


New patch attached.

Keith

ChangeLog
2011-08-09  Keith Seitz  <keiths@redhat.com>

	* cp-name-parser.y (struct demangle_info): Remove unused
	member PREV.
	(d_grab): Likewise.
	(allocate_info): Change return type to struct demangle_info *.
	Always allocate a new demangle_info.
	Remove unused PREV pointer.
	(cp_new_demangle_parse_info): New function.
	(cp_demangled_name_parse_free): New function.
 	(do_demangled_name_parse_free_cleanup): New function.
	(make_cleanup_cp_demangled_name_parse_free): New function.
	(cp_demangled_name_to_comp): Change return type to
	struct demangle_parse_info *.
	Allocate a new storage for each call.
	(main): Update usage for cp_demangled_name_to_comp
	API change.
	* cp-support.h (struct demangle_parse_info): New structure.
	(cp_demangled_name_to_comp): Update API change for
	return type.
	(cp_new_demangle_parse_info): Declare.
	(make_cleanup_cp_demangled_name_parse_free): New declaration.
	(cp_demangled_name_parse_free): Declare.
	* cp-support.c (cp_canonicalize_string): Update API
	change for cp_demangled_name_to_comp.
	(mangled_name_to_comp): Likewise.
	Return struct demangle_parse_info, too.
	(cp_class_name_from_physname): Update mangled_name_to_comp
	API change.
	(method_name_from_physname): Likewise.
	(cp_func_name): Update API change for cp_demangled_name_to_comp.
	(cp_remove_params): Likewise.
	* python/py-type.c (typy_legacy_template_argument): Likewise.

Attachment: cp_demangled_name_parse_free-5.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]