This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[drow-cplus-branch] Print qualifiers on methods
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Mon, 28 Oct 2002 22:14:52 -0500
- Subject: [drow-cplus-branch] Print qualifiers on methods
David Carlton pointed out that when I switched to printing methods by their
type I lost the const/volatile qualifiers for methods. They're stored as
the type of the THIS pointer in the argument list. This patch recovers
them; committed just to the branch since the surrounding code is quite
different from the trunk. I'll move it over when I've finished with my work
on the type printer.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
2002-10-28 Daniel Jacobowitz <drow@mvista.com>
* c-typeprint.c (c_type_print_base): Print method qualifiers.
Index: c-typeprint.c
===================================================================
RCS file: /cvs/src/src/gdb/c-typeprint.c,v
retrieving revision 1.22.10.2
diff -u -p -r1.22.10.2 c-typeprint.c
--- c-typeprint.c 26 Oct 2002 17:12:04 -0000 1.22.10.2
+++ c-typeprint.c 29 Oct 2002 03:06:01 -0000
@@ -1000,6 +1000,26 @@ c_type_print_base (struct type *type, st
method_name,
TYPE_FN_FIELD_STATIC_P (f, j),
stream);
+
+ /* If the method is const or volatile, this will show up as
+ a qualifier on the first argument. Handle a missing or
+ corrupt THIS pointer gracefully, since we shouldn't crash
+ on corrupt debug information (if we're going to complain
+ about this it should be in the debug readers, not this
+ late). */
+ if (!TYPE_FN_FIELD_STATIC_P (f, j)
+ && TYPE_NFIELDS (TYPE_FN_FIELD_TYPE (f, j)) > 0)
+ {
+ struct type *method_type, *this_ptr_type, *this_type;
+ method_type = TYPE_FN_FIELD_TYPE (f, j);
+ this_ptr_type = TYPE_FIELDS (method_type)[0].type;
+ if (TYPE_CODE (this_ptr_type) == TYPE_CODE_PTR)
+ {
+ this_type = TYPE_TARGET_TYPE (this_ptr_type);
+ c_type_print_modifier (this_type, stream, 1, 0);
+ }
+ }
+
fprintf_filtered (stream, ";\n");
}
}