Add array start and end strings to generic_val_print_decorations
authorTom Tromey <tom@tromey.com>
Tue, 26 Apr 2016 22:45:21 +0000 (16:45 -0600)
committerTom Tromey <tom@tromey.com>
Tue, 17 May 2016 18:02:00 +0000 (12:02 -0600)
For Rust value-printing, I wanted to use generic_val_print_array, but
I also wanted to control the starting and ending strings.

This patch adds new strings to generic_val_print_decorations, updates
generic_val_print_array to use them, and updates all the existing
instances of generic_val_print_decorations.

2016-05-17  Tom Tromey  <tom@tromey.com>

* valprint.h (struct generic_val_print_array) <array_start,
array_end>: New fields.
* valprint.c (generic_val_print_array): Add "decorations"
parameter.  Use "array_start", "array_end".
(generic_val_print) <TYPE_CODE_ARRAY>: Update.
* p-valprint.c (p_decorations): Update.
* m2-valprint.c (m2_decorations): Update.
* f-valprint.c (f_decorations): Update.
* c-valprint.c (c_decorations): Update.

gdb/ChangeLog
gdb/c-valprint.c
gdb/f-valprint.c
gdb/m2-valprint.c
gdb/p-valprint.c
gdb/valprint.c
gdb/valprint.h

index cad948f..0b7af7a 100644 (file)
@@ -1,5 +1,17 @@
 2016-05-17  Tom Tromey  <tom@tromey.com>
 
+       * valprint.h (struct generic_val_print_array) <array_start,
+       array_end>: New fields.
+       * valprint.c (generic_val_print_array): Add "decorations"
+       parameter.  Use "array_start", "array_end".
+       (generic_val_print) <TYPE_CODE_ARRAY>: Update.
+       * p-valprint.c (p_decorations): Update.
+       * m2-valprint.c (m2_decorations): Update.
+       * f-valprint.c (f_decorations): Update.
+       * c-valprint.c (c_decorations): Update.
+
+2016-05-17  Tom Tromey  <tom@tromey.com>
+
        * NEWS: Add "maint selftest" entry.
        * selftest.h: New file.
        * selftest.c: New file.
index e1da3d5..61302a3 100644 (file)
@@ -124,7 +124,9 @@ static const struct generic_val_print_decorations c_decorations =
   " * I",
   "true",
   "false",
-  "void"
+  "void",
+  "{",
+  "}"
 };
 
 /* Print a pointer based on the type of its target.
index 71bd2c3..1264737 100644 (file)
@@ -203,6 +203,8 @@ static const struct generic_val_print_decorations f_decorations =
   ".TRUE.",
   ".FALSE.",
   "VOID",
+  "{",
+  "}"
 };
 
 /* See val_print for a description of the various parameters of this
index 73fbdfe..2d3a32f 100644 (file)
@@ -301,7 +301,9 @@ static const struct generic_val_print_decorations m2_decorations =
   " * I",
   "TRUE",
   "FALSE",
-  "void"
+  "void",
+  "{",
+  "}"
 };
 
 /* See val_print for a description of the various parameters of this
index 72dc6fd..3e840d8 100644 (file)
@@ -49,7 +49,9 @@ static const struct generic_val_print_decorations p_decorations =
   " * I",
   "true",
   "false",
-  "void"
+  "void",
+  "{",
+  "}"
 };
 
 /* See val_print for a description of the various parameters of this
index 720942b..cea69f3 100644 (file)
@@ -407,10 +407,12 @@ print_unpacked_pointer (struct type *type, struct type *elttype,
 
 static void
 generic_val_print_array (struct type *type, const gdb_byte *valaddr,
-                  int embedded_offset, CORE_ADDR address,
-                  struct ui_file *stream, int recurse,
-                  const struct value *original_value,
-                  const struct value_print_options *options)
+                        int embedded_offset, CORE_ADDR address,
+                        struct ui_file *stream, int recurse,
+                        const struct value *original_value,
+                        const struct value_print_options *options,
+                        const struct
+                            generic_val_print_decorations *decorations)
 {
   struct type *unresolved_elttype = TYPE_TARGET_TYPE (type);
   struct type *elttype = check_typedef (unresolved_elttype);
@@ -427,11 +429,11 @@ generic_val_print_array (struct type *type, const gdb_byte *valaddr,
          print_spaces_filtered (2 + 2 * recurse, stream);
        }
 
-      fprintf_filtered (stream, "{");
+      fputs_filtered (decorations->array_start, stream);
       val_print_array_elements (type, valaddr, embedded_offset,
                                address, stream,
                                recurse, original_value, options, 0);
-      fprintf_filtered (stream, "}");
+      fputs_filtered (decorations->array_end, stream);
     }
   else
     {
@@ -851,7 +853,7 @@ generic_val_print (struct type *type, const gdb_byte *valaddr,
     {
     case TYPE_CODE_ARRAY:
       generic_val_print_array (type, valaddr, embedded_offset, address, stream,
-                              recurse, original_value, options);
+                              recurse, original_value, options, decorations);
       break;
 
     case TYPE_CODE_MEMBERPTR:
index 1a83cb5..451b5fe 100644 (file)
@@ -186,6 +186,10 @@ struct generic_val_print_decorations
   /* What to print when we see TYPE_CODE_VOID.  */
 
   const char *void_name;
+
+  /* Array start and end strings.  */
+  const char *array_start;
+  const char *array_end;
 };