[drow-cplus-branch] Print qualifiers on methods

Daniel Jacobowitz drow@mvista.com
Mon Oct 28 19:14:00 GMT 2002


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");
 		}
 	    }



More information about the Gdb-patches mailing list