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]

FYI: fix two pretty-printing buglets


I'm checking this in.

This patch fixes a couple of pretty-printing buglets.

First, we weren't clearing the "addressprint" option when printing
strings.  This caused gdb to emit an extra space before a string.

Second, we weren't handling Val_pretty_default properly when printing a
struct.  This meant we always emitted newlines, even if the user had
specified "set print pretty off".

New test cases included.
Built and regtested on x86-64 (compile farm).

Tom

2011-01-25  Tom Tromey  <tromey@redhat.com>

	* python/py-prettyprint.c (print_string_repr): Clear
	'addressprint' option when calling val_print_string.
	(print_children): Handle Val_pretty_default.  Clear 'addressprint'
	option when calling val_print_string.

2011-01-26  Tom Tromey  <tromey@redhat.com>

	* gdb.python/py-prettyprint.exp (run_lang_tests): Ensure no blank
	space before string output.  Add test for "set print pretty off"
	case.

diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c
index 7532aa5..916492e 100644
--- a/gdb/python/py-prettyprint.c
+++ b/gdb/python/py-prettyprint.c
@@ -325,13 +325,15 @@ print_string_repr (PyObject *printer, const char *hint,
 	  long length;
 	  struct type *type;
 	  char *encoding = NULL;
+	  struct value_print_options local_opts = *options;
 
 	  make_cleanup (free_current_contents, &encoding);
 	  gdbpy_extract_lazy_string (py_str, &addr, &type,
 				     &length, &encoding);
 
+	  local_opts.addressprint = 0;
 	  val_print_string (type, encoding, addr, (int) length,
-			    stream, options);
+			    stream, &local_opts);
 	}
       else
 	{
@@ -499,7 +501,15 @@ print_children (PyObject *printer, const char *hint,
 
   /* Use the prettyprint_arrays option if we are printing an array,
      and the pretty option otherwise.  */
-  pretty = is_array ? options->prettyprint_arrays : options->pretty;
+  if (is_array)
+    pretty = options->prettyprint_arrays;
+  else
+    {
+      if (options->pretty == Val_prettyprint)
+	pretty = 1;
+      else
+	pretty = options->prettyprint_structs;
+    }
 
   /* Manufacture a dummy Python frame to work around Python 2.4 bug,
      where it insists on having a non-NULL tstate->frame when
@@ -598,12 +608,14 @@ print_children (PyObject *printer, const char *hint,
 	  struct type *type;
 	  long length;
 	  char *encoding = NULL;
+	  struct value_print_options local_opts = *options;
 
 	  make_cleanup (free_current_contents, &encoding);
 	  gdbpy_extract_lazy_string (py_v, &addr, &type, &length, &encoding);
 
+	  local_opts.addressprint = 0;
 	  val_print_string (type, encoding, addr, (int) length, stream,
-			    options);
+			    &local_opts);
 
 	  do_cleanups (inner_cleanup);
 	}
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.exp b/gdb/testsuite/gdb.python/py-prettyprint.exp
index e4a6c38..81de5a2 100644
--- a/gdb/testsuite/gdb.python/py-prettyprint.exp
+++ b/gdb/testsuite/gdb.python/py-prettyprint.exp
@@ -92,7 +92,7 @@ proc run_lang_tests {lang} {
     gdb_test "print x" " = \"this is x\""
     gdb_test "print cstring" " = \"const string\""
 
-    gdb_test "print estring" "\"embedded x\\\\201\\\\202\\\\203\\\\204\""
+    gdb_test "print estring" " = \"embedded x\\\\201\\\\202\\\\203\\\\204\""
 
     gdb_test_no_output "python pp_ls_encoding = 'UTF-8'"
     gdb_test "print estring2" "\"embedded \", <incomplete sequence \\\\302>"
@@ -100,6 +100,11 @@ proc run_lang_tests {lang} {
     gdb_test "print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}"
 
     gdb_test "print nstype" " = {$nl *.0. = 7,$nl *.1. = 42$nl}"
+
+    gdb_test_no_output "set print pretty off"
+    gdb_test "print nstype" " = {.0. = 7, .1. = 42}" \
+	"print nstype on one line"
+
     gdb_test "continue" "Program exited normally\."
 
     remote_file host delete ${remote_python_file}


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